晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /lib/python3.6/site-packages/sos/report/plugins/ |
Upload File : |
# This file is part of the sos project: https://github.com/sosreport/sos
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions of
# version 2 of the GNU General Public License.
#
# See the LICENSE file in the source distribution for further information.
from sos.report.plugins import Plugin, RedHatPlugin
class Sapnw(Plugin, RedHatPlugin):
short_desc = 'SAP NetWeaver'
plugin_name = 'sapnw'
profiles = ('sap',)
files = ('/usr/sap',)
def collect_list_instances(self):
""" Collect data on installed instances """
inst_list = self.collect_cmd_output(
"/usr/sap/hostctrl/exe/saphostctrl -function ListInstances",
suggest_filename="SAPInstances"
)
if inst_list['status'] != 0:
return
sidsunique = set()
# Cycle through all the instances, get 'sid', 'instance_number'
# and 'vhost' to determine the proper profile
for inst_line in inst_list['output'].splitlines():
if ("DAA" not in inst_line and not
inst_line.startswith("No instances found")):
fields = inst_line.strip().split()
if len(fields) < 8:
continue
sid = fields[3]
inst = fields[5]
vhost = fields[7]
sidsunique.add(sid)
path = f"/usr/sap/{sid}/SYS/profile/"
if not self.path_exists(path):
continue
for line in self.listdir(path):
if all(f in line for f in [sid, inst, vhost]):
ldenv = f'LD_LIBRARY_PATH=/usr/sap/{sid}/SYS/exe/run'
# Unicode is assumed here
# nuc should be accounted
path = f'/usr/sap/{sid}/SYS/exe/uc/linuxx86_64'
profile = line.strip()
# collect profiles
self.add_cmd_output(
f"env -i {ldenv} {path}/sappfpar all "
f"pf=/usr/sap/{sid}/SYS/profile/{profile}",
suggest_filename=f"{profile}_parameters"
)
# collect instance status
self.add_cmd_output(
f"env -i {ldenv} {path}/sapcontrol -nr {inst} "
"-function GetProcessList",
suggest_filename=f"{sid}_{inst}_GetProcList"
)
# collect version info for the various components
self.add_cmd_output(
f"env -i {ldenv} {path}/sapcontrol -nr {inst} "
"-function GetVersionInfo",
suggest_filename=f"{sid}_{inst}_GetVersInfo"
)
# collect <SID>adm user environment
lowsid = sid.lower()
fname = f"{sid}_{lowsid}adm_{inst}_userenv"
self.add_cmd_output(
f'su - {lowsid}adm -c "sapcontrol -nr {inst} '
'-function GetEnvironment"',
suggest_filename=fname
)
# traverse the sids list, collecting info about dbclient
for sid in sidsunique:
self.add_copy_spec(f"/usr/sap/{sid}/*DVEB*/work/dev_w0")
def collect_list_dbs(self):
""" Collect data all the installed DBs """
# list installed sap dbs
db_list = self.collect_cmd_output(
"/usr/sap/hostctrl/exe/saphostctrl -function ListDatabases",
suggest_filename="SAPDatabases"
)
if db_list['status'] != 0:
return
for line in db_list['output'].splitlines():
if "Instance name" in line:
fields = line.strip().split()
dbadm = fields[2][:-1]
dbtype = fields[8][:-1]
sid = dbadm[3:].upper()
if dbtype == 'db6':
# IBM DB2
self.add_cmd_output(
f"su - {dbadm} -c \"db2 get dbm cfg\"",
suggest_filename=f"{sid}_{dbadm}_db2_info"
)
elif dbtype == 'sap':
# SAP MAXDB
sid = fields[2][:-1]
self.add_copy_spec(
f"/sapdb/{sid}/data/config/{sid}.pah"
)
elif dbtype == 'ora':
# Oracle
sid = fields[2][:-1]
self.add_copy_spec(f"/oracle/{sid}/*/dbs/init.ora")
elif dbtype == 'syb':
# Sybase
sid = fields[2][:-1]
self.add_copy_spec(f"/sybase/{sid}/ASE*/{sid}.cfg")
def setup(self):
self.collect_list_instances()
self.collect_list_dbs()
# vim: et ts=4 sw=4