Update opnsense_checkmk_agent.py

Bugfixes
This commit is contained in:
Chriz
2026-04-12 13:15:27 +02:00
committed by GitHub
parent 667fa8976c
commit 73f7fcf352
+37 -37
View File
@@ -32,7 +32,7 @@
## ##
__VERSION__ = "1.2.15" __VERSION__ = "1.2.16"
import sys import sys
import os import os
@@ -76,7 +76,7 @@ from binascii import b2a_hex
from datetime import datetime from datetime import datetime
SCRIPTPATH = os.path.abspath(__file__) SCRIPTPATH = os.path.abspath(__file__)
SYSHOOK_METHOD = re.findall("rc\.syshook\.d\/(start|stop)/",SCRIPTPATH) SYSHOOK_METHOD = re.findall(r"rc\.syshook\.d\/(start|stop)/",SCRIPTPATH)
BASEDIR = "/usr/local/check_mk_agent" BASEDIR = "/usr/local/check_mk_agent"
VARDIR = "/var/lib/check_mk_agent" VARDIR = "/var/lib/check_mk_agent"
CHECKMK_CONFIG = "/usr/local/etc/checkmk.conf" CHECKMK_CONFIG = "/usr/local/etc/checkmk.conf"
@@ -86,7 +86,7 @@ PLUGINSDIR = os.path.join(BASEDIR,"plugins")
SPOOLDIR = os.path.join(VARDIR,"spool") SPOOLDIR = os.path.join(VARDIR,"spool")
TASKDIR = os.path.join(BASEDIR,"tasks") TASKDIR = os.path.join(BASEDIR,"tasks")
TASKFILE_KEYS = "service|type|interval|interface|disabled|ipaddress|hostname|domain|port|piggyback|sshoptions|options|tenant" TASKFILE_KEYS = "service|type|interval|interface|disabled|ipaddress|hostname|domain|port|piggyback|sshoptions|options|tenant"
TASKFILE_REGEX = re.compile(f"^({TASKFILE_KEYS}):\s*(.*?)(?:\s+#|$)",re.M) TASKFILE_REGEX = re.compile(rf"^({TASKFILE_KEYS}):\s*(.*?)(?:\s+#|$)",re.M)
MAX_SIMULATAN_THREADS = 4 MAX_SIMULATAN_THREADS = 4
for _dir in (BASEDIR, VARDIR, LOCALDIR, PLUGINSDIR, SPOOLDIR, TASKDIR): for _dir in (BASEDIR, VARDIR, LOCALDIR, PLUGINSDIR, SPOOLDIR, TASKDIR):
@@ -130,7 +130,7 @@ def log(message,prio="notice"):
"err" :syslog.LOG_ERR, "err" :syslog.LOG_ERR,
"warning" :syslog.LOG_WARNING, "warning" :syslog.LOG_WARNING,
"notice" :syslog.LOG_NOTICE, "notice" :syslog.LOG_NOTICE,
"info" :syslog.LOG_INFO, "info" :syslog.LOG_NOTICE,
}.get(str(prio).lower(),syslog.LOG_DEBUG) }.get(str(prio).lower(),syslog.LOG_DEBUG)
syslog.openlog(ident="checkmk_agent",logoption=syslog.LOG_PID | syslog.LOG_NDELAY,facility=syslog.LOG_DAEMON) syslog.openlog(ident="checkmk_agent",logoption=syslog.LOG_PID | syslog.LOG_NDELAY,facility=syslog.LOG_DAEMON)
syslog.syslog(priority,message) syslog.syslog(priority,message)
@@ -345,7 +345,7 @@ class checkmk_checker(object):
if os.path.isdir(SPOOLDIR): if os.path.isdir(SPOOLDIR):
_now = time.time() _now = time.time()
for _filename in glob.glob(f"{SPOOLDIR}/*"): for _filename in glob.glob(f"{SPOOLDIR}/*"):
_maxage = re.search("^(\d+)_",_filename) _maxage = re.search(r"^(\d+)_",_filename)
if _maxage: if _maxage:
_maxage = int(_maxage.group(1)) _maxage = int(_maxage.group(1))
@@ -370,7 +370,7 @@ class checkmk_checker(object):
def do_zabbix_output(self): def do_zabbix_output(self):
self._getosinfo() self._getosinfo()
_regex_convert = re.compile("^(?P<status>[0-3P])\s(?P<servicename>\".*?\"|\w+)\s(?P<metrics>[\w=.;|]+| -)\s(?P<details>.*)") _regex_convert = re.compile(r"^(?P<status>[0-3P])\s(?P<servicename>\".*?\"|\w+)\s(?P<metrics>[\w=.;|]+| -)\s(?P<details>.*)")
_json = [] _json = []
for _check in dir(self): for _check in dir(self):
if _check.startswith("checklocal_"): if _check.startswith("checklocal_"):
@@ -448,7 +448,7 @@ class checkmk_checker(object):
return socket.inet_ntoa(struct.pack("!I",intaddr)) return socket.inet_ntoa(struct.pack("!I",intaddr))
def pidof(self,prog,default=None): def pidof(self,prog,default=None):
_allprogs = re.findall("(\w+)\s+(\d+)",self._run_prog("ps ax -c -o command,pid")) _allprogs = re.findall(r"(\w+)\s+(\d+)",self._run_prog("ps ax -c -o command,pid"))
return int(dict(_allprogs).get(prog,default)) return int(dict(_allprogs).get(prog,default))
def _config_reader(self,config=""): def _config_reader(self,config=""):
@@ -502,7 +502,7 @@ class checkmk_checker(object):
def get_opnsense_ipaddr(self): def get_opnsense_ipaddr(self):
try: try:
_ret = {} _ret = {}
for _if,_ip,_mask in re.findall("^([\w_]+):\sflags=(?:8943|8051|8043|8863).*?inet\s([\d.]+)\snetmask\s0x([a-f0-9]+)",self._run_prog("ifconfig"),re.DOTALL | re.M): for _if,_ip,_mask in re.findall(r"^([\w_]+):\sflags=(?:8943|8051|8043|8863).*?inet\s([\d.]+)\snetmask\s0x([a-f0-9]+)",self._run_prog("ifconfig"),re.DOTALL | re.M):
_ret[_if] = "{0}/{1}".format(_ip,str(bin(int(_mask,16))).count("1")) _ret[_if] = "{0}/{1}".format(_ip,str(bin(int(_mask,16))).count("1"))
return _ret return _ret
except: except:
@@ -574,7 +574,7 @@ class checkmk_checker(object):
_ifconfig_out += "END" ## fix regex _ifconfig_out += "END" ## fix regex
self._all_interfaces = object_dict() self._all_interfaces = object_dict()
self._carp_interfaces = object_dict() self._carp_interfaces = object_dict()
for _interface, _data in re.findall("^(?P<iface>[\w.]+):\s(?P<data>.*?(?=^\w))",_ifconfig_out,re.DOTALL | re.MULTILINE): for _interface, _data in re.findall(r"^(?P<iface>[\w.]+):\s(?P<data>.*?(?=^\w))",_ifconfig_out,re.DOTALL | re.MULTILINE):
_interface_dict = object_dict() _interface_dict = object_dict()
_interface_dict.update(_interface_stats.get(_interface,{})) _interface_dict.update(_interface_stats.get(_interface,{}))
_interface_dict["interface_name"] = _opnsense_ifs.get(_interface,_interface) _interface_dict["interface_name"] = _opnsense_ifs.get(_interface,_interface)
@@ -582,9 +582,9 @@ class checkmk_checker(object):
#if _interface.startswith("vmx"): ## vmware fix 10GBe (as OS Support) #if _interface.startswith("vmx"): ## vmware fix 10GBe (as OS Support)
# _interface_dict["speed"] = "10000" # _interface_dict["speed"] = "10000"
_interface_dict["systime"] = _now _interface_dict["systime"] = _now
for _key, _val in re.findall("^\s*(\w+)[:\s=]+(.*?)$",_data,re.MULTILINE): for _key, _val in re.findall(r"^\s*(\w+)[:\s=]+(.*?)$",_data,re.MULTILINE):
if _key == "description": if _key == "description":
_interface_dict["interface_name"] = re.sub("_\((lan|wan|opt\d+)\)$","",_val.strip().replace(" ","_")) _interface_dict["interface_name"] = re.sub(r"_\((lan|wan|opt\d+)\)$","",_val.strip().replace(" ","_"))
if _key == "groups": if _key == "groups":
_interface_dict["groups"] = _val.strip().split() _interface_dict["groups"] = _val.strip().split()
if _key == "ether": if _key == "ether":
@@ -594,7 +594,7 @@ class checkmk_checker(object):
if _interface.startswith("wg") and _interface_dict.get("flags",0) & 0x01: if _interface.startswith("wg") and _interface_dict.get("flags",0) & 0x01:
_interface_dict["up"] = "true" _interface_dict["up"] = "true"
if _key == "flags": if _key == "flags":
_interface_dict["flags"] = int(re.findall("^[a-f\d]+",_val)[0],16) _interface_dict["flags"] = int(re.findall(r"^[a-f\d]+",_val)[0],16)
## hack pppoe no status active or pppd pid ## hack pppoe no status active or pppd pid
if _interface.lower().startswith("pppoe") and _interface_dict["flags"] & 0x10 and _interface_dict["flags"] & 0x1: if _interface.lower().startswith("pppoe") and _interface_dict["flags"] & 0x10 and _interface_dict["flags"] & 0x1:
_interface_dict["up"] = "true" _interface_dict["up"] = "true"
@@ -608,12 +608,12 @@ class checkmk_checker(object):
## 0x800 SIMPLEX ## 0x800 SIMPLEX
## 0x8000 MULTICAST ## 0x8000 MULTICAST
if _key == "media": if _key == "media":
_match = re.search("\((?P<speed>\d+G?)[Bb]ase(?:.*?<(?P<duplex>.*?)>)?",_val) _match = re.search(r"\((?P<speed>\d+G?)[Bb]ase(?:.*?<(?P<duplex>.*?)>)?",_val)
if _match: if _match:
_interface_dict["speed"] = _match.group("speed").replace("G","000") _interface_dict["speed"] = _match.group("speed").replace("G","000")
_interface_dict["duplex"] = _match.group("duplex") _interface_dict["duplex"] = _match.group("duplex")
if _key == "inet": if _key == "inet":
_match = re.search("^(?P<ipaddr>[\d.]+)\/(?P<cidr>\d+).*?(?:vhid\s(?P<vhid>\d+)|$)",_val,re.M) _match = re.search(r"^(?P<ipaddr>[\d.]+)\/(?P<cidr>\d+).*?(?:vhid\s(?P<vhid>\d+)|$)",_val,re.M)
if _match: if _match:
_cidr = _match.group("cidr") _cidr = _match.group("cidr")
_ipaddr = _match.group("ipaddr") _ipaddr = _match.group("ipaddr")
@@ -622,7 +622,7 @@ class checkmk_checker(object):
_interface_dict["cidr"] = _cidr ## cidr wenn kein vhid _interface_dict["cidr"] = _cidr ## cidr wenn kein vhid
## fixme ipaddr dict / vhid dict ## fixme ipaddr dict / vhid dict
if _key == "inet6": if _key == "inet6":
_match = re.search("^(?P<ipaddr>[0-9a-f:]+)\/(?P<prefix>\d+).*?(?:vhid\s(?P<vhid>\d+)|$)",_val,re.M) _match = re.search(r"^(?P<ipaddr>[0-9a-f:]+)\/(?P<prefix>\d+).*?(?:vhid\s(?P<vhid>\d+)|$)",_val,re.M)
if _match: if _match:
_ipaddr = _match.group("ipaddr") _ipaddr = _match.group("ipaddr")
_prefix = _match.group("prefix") _prefix = _match.group("prefix")
@@ -631,7 +631,7 @@ class checkmk_checker(object):
_interface_dict["prefix"] = _prefix _interface_dict["prefix"] = _prefix
## fixme ipaddr dict / vhid dict ## fixme ipaddr dict / vhid dict
if _key == "carp": if _key == "carp":
_match = re.search("(?P<status>MASTER|BACKUP)\svhid\s(?P<vhid>\d+)\sadvbase\s(?P<base>\d+)\sadvskew\s(?P<skew>\d+)",_val,re.M) _match = re.search(r"(?P<status>MASTER|BACKUP)\svhid\s(?P<vhid>\d+)\sadvbase\s(?P<base>\d+)\sadvskew\s(?P<skew>\d+)",_val,re.M)
if _match: if _match:
_carpstatus = _match.group("status") _carpstatus = _match.group("status")
_vhid = _match.group("vhid") _vhid = _match.group("vhid")
@@ -640,7 +640,7 @@ class checkmk_checker(object):
_advskew = _match.group("skew") _advskew = _match.group("skew")
## fixme vhid dict ## fixme vhid dict
if _key == "id": if _key == "id":
_match = re.search("priority\s(\d+)",_val) _match = re.search(r"priority\s(\d+)",_val)
if _match: if _match:
_interface_dict["bridge_prio"] = _match.group(1) _interface_dict["bridge_prio"] = _match.group(1)
if _key == "member": if _key == "member":
@@ -817,7 +817,7 @@ class checkmk_checker(object):
try: try:
_sock.connect(_path) _sock.connect(_path)
_data = _sock.recv(1024).decode("utf-8").strip() _data = _sock.recv(1024).decode("utf-8").strip()
_name, _rtt, _rttsd, _loss = re.findall("(\S+)\s(\d+)\s(\d+)\s(\d+)$",_data)[0] _name, _rtt, _rttsd, _loss = re.findall(r"(\S+)\s(\d+)\s(\d+)\s(\d+)$",_data)[0]
assert _name.strip() == gateway assert _name.strip() == gateway
return int(_rtt)/1_000_000.0,int(_rttsd)/1_000_000.0, int(_loss) return int(_rtt)/1_000_000.0,int(_rttsd)/1_000_000.0, int(_loss)
except: except:
@@ -922,7 +922,7 @@ class checkmk_checker(object):
_server["bytesin"], _server["bytesout"] = self._get_traffic("openvpn", _server["bytesin"], _server["bytesout"] = self._get_traffic("openvpn",
"SRV_{name}".format(**_server), "SRV_{name}".format(**_server),
*(map(lambda x: int(x),re.findall("bytes\w+=(\d+)",self._read_from_openvpnsocket(_server["socket"],"load-stats")))) *(map(lambda x: int(x),re.findall(r"bytes\w+=(\d+)",self._read_from_openvpnsocket(_server["socket"],"load-stats"))))
) )
_laststate = self._read_from_openvpnsocket(_server["socket"],"state 1").strip().split("\r\n")[-2] _laststate = self._read_from_openvpnsocket(_server["socket"],"state 1").strip().split("\r\n")[-2]
_timestamp, _server["connstate"], _data = _laststate.split(",",2) _timestamp, _server["connstate"], _data = _laststate.split(",",2)
@@ -933,7 +933,7 @@ class checkmk_checker(object):
_server["remote_port"] = _data[3] _server["remote_port"] = _data[3]
_server["source_addr"] = _data[4] _server["source_addr"] = _data[4]
_server["status"] = 0 if _server["status"] == 3 else _server["status"] _server["status"] = 0 if _server["status"] == 3 else _server["status"]
_ret.append('{status} "OpenVPN Connection: {name}" connections_ssl_vpn=1;;|if_in_octets={bytesin}|if_out_octets={bytesout}|expiredays={expiredays} Connected {remote_ipaddr}:{remote_port} {vpn_ipaddr} {expiredate}\Source IP: {source_addr}'.format(**_server)) _ret.append('{status} "OpenVPN Connection: {name}" connections_ssl_vpn=1;;|if_in_octets={bytesin}|if_out_octets={bytesout}|expiredays={expiredays} Connected {remote_ipaddr}:{remote_port} {vpn_ipaddr} {expiredate}/Source IP: {source_addr}'.format(**_server))
else: else:
if _server["type"] == "client": if _server["type"] == "client":
_server["status"] = 2 _server["status"] = 2
@@ -955,7 +955,7 @@ class checkmk_checker(object):
_server["bytesin"], _server["bytesout"] = self._get_traffic("openvpn", _server["bytesin"], _server["bytesout"] = self._get_traffic("openvpn",
"SRV_{name}".format(**_server), "SRV_{name}".format(**_server),
*(map(lambda x: int(x),re.findall("bytes\w+=(\d+)",self._read_from_openvpnsocket(_server["socket"],"load-stats")))) *(map(lambda x: int(x),re.findall(r"bytes\w+=(\d+)",self._read_from_openvpnsocket(_server["socket"],"load-stats"))))
) )
_server["status"] = 0 if _server["status"] == 3 else _server["status"] _server["status"] = 0 if _server["status"] == 3 else _server["status"]
except: except:
@@ -965,7 +965,7 @@ class checkmk_checker(object):
_number_of_clients = 0 _number_of_clients = 0
_now = int(time.time()) _now = int(time.time())
_response = self._read_from_openvpnsocket(_server["socket"],"status 2") _response = self._read_from_openvpnsocket(_server["socket"],"status 2")
for _client_match in re.finditer("^CLIENT_LIST,(.*?)$",_response,re.M): for _client_match in re.finditer(r"^CLIENT_LIST,(.*?)$",_response,re.M):
_number_of_clients += 1 _number_of_clients += 1
_client_raw = list(map(lambda x: x.strip(),_client_match.group(1).split(","))) _client_raw = list(map(lambda x: x.strip(),_client_match.group(1).split(",")))
_client = { _client = {
@@ -1147,7 +1147,7 @@ class checkmk_checker(object):
_unbound_stat = dict( _unbound_stat = dict(
map( map(
lambda x: (x[0].replace(".","_"),float(x[1])), lambda x: (x[0].replace(".","_"),float(x[1])),
re.findall("total\.([\w.]+)=([\d.]+)",_output) re.findall(r"total\.([\w.]+)=([\d.]+)",_output)
) )
) )
_ret.append("0 \"Unbound DNS\" dns_successes={num_queries:.0f}|dns_recursion={num_recursivereplies:.0f}|dns_cachehits={num_cachehits:.0f}|dns_cachemiss={num_cachemiss:.0f}|avg_response_time={recursion_time_avg} Unbound running".format(**_unbound_stat)) _ret.append("0 \"Unbound DNS\" dns_successes={num_queries:.0f}|dns_recursion={num_recursivereplies:.0f}|dns_cachehits={num_cachehits:.0f}|dns_cachemiss={num_cachemiss:.0f}|avg_response_time={recursion_time_avg} Unbound running".format(**_unbound_stat))
@@ -1304,7 +1304,7 @@ class checkmk_checker(object):
def check_smartinfo(self): def check_smartinfo(self):
if not os.path.exists("/usr/local/sbin/smartctl"): if not os.path.exists("/usr/local/sbin/smartctl"):
return [] return []
REGEX_DISCPATH = re.compile("(sd[a-z]+|da[0-9]+|nvme[0-9]+|ada[0-9]+)$") REGEX_DISCPATH = re.compile(r"(sd[a-z]+|da[0-9]+|nvme[0-9]+|ada[0-9]+)$")
_ret = ["<<<disk_smart_info:sep(124)>>>"] _ret = ["<<<disk_smart_info:sep(124)>>>"]
for _dev in filter(lambda x: REGEX_DISCPATH.match(x),os.listdir("/dev/")): for _dev in filter(lambda x: REGEX_DISCPATH.match(x),os.listdir("/dev/")):
try: try:
@@ -1317,7 +1317,7 @@ class checkmk_checker(object):
if not os.path.exists("/usr/local/bin/ipmitool"): if not os.path.exists("/usr/local/bin/ipmitool"):
return [] return []
_out = self._run_prog("ipmitool sensor list") _out = self._run_prog("ipmitool sensor list")
_ipmisensor = re.findall("^(?!.*\sna\s.*$).*",_out,re.M) _ipmisensor = re.findall(r"^(?!.*\sna\s.*$).*",_out,re.M)
if _ipmisensor: if _ipmisensor:
return ["<<<ipmi:sep(124)>>>"] + _ipmisensor return ["<<<ipmi:sep(124)>>>"] + _ipmisensor
return [] return []
@@ -1443,7 +1443,7 @@ class checkmk_checker(object):
def check_netctr(self): def check_netctr(self):
_ret = ["<<<netctr>>>"] _ret = ["<<<netctr>>>"]
_out = self._run_prog("netstat -inb") _out = self._run_prog("netstat -inb")
for _line in re.finditer("^(?!Name|lo|plip)(?P<iface>\w+)\s+(?P<mtu>\d+).*?Link.*?\s+.*?\s+(?P<inpkts>\d+)\s+(?P<inerr>\d+)\s+(?P<indrop>\d+)\s+(?P<inbytes>\d+)\s+(?P<outpkts>\d+)\s+(?P<outerr>\d+)\s+(?P<outbytes>\d+)\s+(?P<coll>\d+)$",_out,re.M): for _line in re.finditer(r"^(?!Name|lo|plip)(?P<iface>\w+)\s+(?P<mtu>\d+).*?Link.*?\s+.*?\s+(?P<inpkts>\d+)\s+(?P<inerr>\d+)\s+(?P<indrop>\d+)\s+(?P<inbytes>\d+)\s+(?P<outpkts>\d+)\s+(?P<outerr>\d+)\s+(?P<outbytes>\d+)\s+(?P<coll>\d+)$",_out,re.M):
_ret.append("{iface} {inbytes} {inpkts} {inerr} {indrop} 0 0 0 0 {outbytes} {outpkts} {outerr} 0 0 0 0 0".format(**_line.groupdict())) _ret.append("{iface} {inbytes} {inpkts} {inerr} {indrop} 0 0 0 0 {outbytes} {outpkts} {outerr} 0 0 0 0 0".format(**_line.groupdict()))
return _ret return _ret
@@ -1457,7 +1457,7 @@ class checkmk_checker(object):
def check_tcp(self): def check_tcp(self):
_ret = ["<<<tcp_conn_stats>>>"] _ret = ["<<<tcp_conn_stats>>>"]
_out = self._run_prog("netstat -na") _out = self._run_prog("netstat -na")
counts = Counter(re.findall("ESTABLISHED|LISTEN",_out)) counts = Counter(re.findall(r"ESTABLISHED|LISTEN",_out))
for _key,_val in counts.items(): for _key,_val in counts.items():
_ret.append(f"{_key} {_val}") _ret.append(f"{_key} {_val}")
return _ret return _ret
@@ -1465,14 +1465,14 @@ class checkmk_checker(object):
def check_ps(self): def check_ps(self):
_ret = ["<<<ps>>>"] _ret = ["<<<ps>>>"]
_out = self._run_prog("ps ax -o state,user,vsz,rss,pcpu,command") _out = self._run_prog("ps ax -o state,user,vsz,rss,pcpu,command")
for _line in re.finditer("^(?P<stat>\w+)\s+(?P<user>\w+)\s+(?P<vsz>\d+)\s+(?P<rss>\d+)\s+(?P<cpu>[\d.]+)\s+(?P<command>.*)$",_out,re.M): for _line in re.finditer(r"^(?P<stat>\w+)\s+(?P<user>\w+)\s+(?P<vsz>\d+)\s+(?P<rss>\d+)\s+(?P<cpu>[\d.]+)\s+(?P<command>.*)$",_out,re.M):
_ret.append("({user},{vsz},{rss},{cpu}) {command}".format(**_line.groupdict())) _ret.append("({user},{vsz},{rss},{cpu}) {command}".format(**_line.groupdict()))
return _ret return _ret
def check_uptime(self): def check_uptime(self):
_ret = ["<<<uptime>>>"] _ret = ["<<<uptime>>>"]
_uptime_sec = time.time() - int(self._run_prog("sysctl -n kern.boottime").split(" ")[3].strip(" ,")) _uptime_sec = time.time() - int(self._run_prog("sysctl -n kern.boottime").split(" ")[3].strip(" ,"))
_idle_sec = re.findall("(\d+):[\d.]+\s+\[idle\]",self._run_prog("ps axw"))[0] _idle_sec = re.findall(r"(\d+):[\d.]+\s+\[idle\]",self._run_prog("ps axw"))[0]
_ret.append(f"{_uptime_sec} {_idle_sec}") _ret.append(f"{_uptime_sec} {_idle_sec}")
return _ret return _ret
@@ -1489,12 +1489,12 @@ class checkmk_checker(object):
else: else:
try: try:
_ret.append("[[[/etc/os-release]]]") _ret.append("[[[/etc/os-release]]]")
_ret += list(map(lambda x: 'Name={0}|VERSION="{1}"|VERSION_ID="{2}"|ID=freebsd|PRETTY_NAME="{0} {1}"'.format(x[0],x[1],x[1].split("-")[0]),re.findall("(\w+)\s([\w.-]+)\s(\d+)",self._run_cache_prog("uname -rsK",1200)))) _ret += list(map(lambda x: 'Name={0}|VERSION="{1}"|VERSION_ID="{2}"|ID=freebsd|PRETTY_NAME="{0} {1}"'.format(x[0],x[1],x[1].split("-")[0]),re.findall(r"(\w+)\s([\w.-]+)\s(\d+)",self._run_cache_prog("uname -rsK",1200))))
except: except:
raise raise
_ret += [f"<<<lnx_packages:sep(124):persist({_persist})>>>"] _ret += [f"<<<lnx_packages:sep(124):persist({_persist})>>>"]
_system = platform.machine() _system = platform.machine()
_ret += list(map(lambda x: f"{{0}}|{{1}}|{_system}|freebsd|{{2}}|install ok installed".format(*x),re.findall("(\S+)-([0-9][0-9a-z._,-]+)\s*(.*)",self._run_cache_prog("pkg info",1200),re.M))) _ret += list(map(lambda x: f"{{0}}|{{1}}|{_system}|freebsd|{{2}}|install ok installed".format(*x),re.findall(r"(\S+)-([0-9][0-9a-z._,-]+)\s*(.*)",self._run_cache_prog("pkg info",1200),re.M)))
return _ret return _ret
def _run_prog(self,cmdline="",*args,shell=False,timeout=60,ignore_error=False): def _run_prog(self,cmdline="",*args,shell=False,timeout=60,ignore_error=False):
@@ -1570,7 +1570,7 @@ class checkmk_cached_process(object):
if self._islocal: if self._islocal:
_data = "".join([f"cached({_mtime},{cachetime}) {_line}" for _line in _data.splitlines(True) if len(_line.strip()) > 0]) _data = "".join([f"cached({_mtime},{cachetime}) {_line}" for _line in _data.splitlines(True) if len(_line.strip()) > 0])
else: else:
_data = re.sub("\B[<]{3}(.*?)[>]{3}\B",f"<<<\\1:cached({_mtime},{cachetime})>>>",_data) _data = re.sub(r"\B[<]{3}(.*?)[>]{3}\B",f"<<<\\1:cached({_mtime},{cachetime})>>>",_data)
return _data return _data
class checkmk_server(TCPServer,checkmk_checker): class checkmk_server(TCPServer,checkmk_checker):
@@ -1886,7 +1886,7 @@ class checkmk_task(object):
_data = "" _data = ""
_now = int(time.time()) _now = int(time.time())
_results = [] _results = []
for _port in re.finditer("<port protocol=\"(?P<proto>tcp|udp)\"\sportid=\"(?P<port>\d+)\".*?state=\"(?P<state>[\w|]+)\"\sreason=\"(?P<reason>[\w-]+)\"(?:.*?name=\"(?P<protoname>[\w-]+)\")*.*</port>",_data): for _port in re.finditer(r"<port protocol=\"(?P<proto>tcp|udp)\"\sportid=\"(?P<port>\d+)\".*?state=\"(?P<state>[\w|]+)\"\sreason=\"(?P<reason>[\w-]+)\"(?:.*?name=\"(?P<protoname>[\w-]+)\")*.*</port>",_data):
_results.append(_port.groupdict()) _results.append(_port.groupdict())
_ret = { _ret = {
@@ -2011,7 +2011,7 @@ class checkmk_task(object):
def cachecontent(self,content): def cachecontent(self,content):
_now = int(time.time()) _now = int(time.time())
_cache=f"cache({_now},{self.interval})" _cache=f"cache({_now},{self.interval})"
for _section in re.findall("^<<<(.*?)>>>\s*$",content,re.M): for _section in re.findall(r"^<<<(.*?)>>>\s*$",content,re.M):
if _section.group(1).startswith("local"): if _section.group(1).startswith("local"):
continue continue
@@ -2403,7 +2403,7 @@ if __name__ == "__main__":
_parser.error = _args_error _parser.error = _args_error
args = _parser.parse_args() args = _parser.parse_args()
if args.configfile and os.path.exists(args.configfile): if args.configfile and os.path.exists(args.configfile):
for _k,_v in re.findall(f"^(\w+):\s*(.*?)(?:\s+#|$)",open(args.configfile,"rt").read(),re.M): for _k,_v in re.findall(rf"^(\w+):\s*(.*?)(?:\s+#|$)",open(args.configfile,"rt").read(),re.M):
if _k == "port": if _k == "port":
args.port = int(_v) args.port = int(_v)
if _k == "encrypt" and args.encrypt == None: if _k == "encrypt" and args.encrypt == None:
@@ -2431,7 +2431,7 @@ if __name__ == "__main__":
except (FileNotFoundError,IOError,ValueError): except (FileNotFoundError,IOError,ValueError):
_out = subprocess.check_output(["sockstat", "-l", "-p", str(args.port),"-P", "tcp"],encoding=sys.stdout.encoding) _out = subprocess.check_output(["sockstat", "-l", "-p", str(args.port),"-P", "tcp"],encoding=sys.stdout.encoding)
try: try:
_pid = int(re.findall("\s(\d+)\s",_out.split("\n")[1])[0]) _pid = int(re.findall(r"\s(\d+)\s",_out.split("\n")[1])[0])
except (IndexError,ValueError): except (IndexError,ValueError):
pass pass
_active_methods = [getattr(args,x,False) for x in ("start","stop","restart","status","zabbix","nodaemon","debug","configdebug","update","checkoutput","help")] _active_methods = [getattr(args,x,False) for x in ("start","stop","restart","status","zabbix","nodaemon","debug","configdebug","update","checkoutput","help")]
@@ -2509,7 +2509,7 @@ if __name__ == "__main__":
_github_version = _github_req.json() _github_version = _github_req.json()
_github_last_modified = datetime.strptime(_github_req.headers.get("last-modified"),"%a, %d %b %Y %X %Z") _github_last_modified = datetime.strptime(_github_req.headers.get("last-modified"),"%a, %d %b %Y %X %Z")
_new_script = base64.b64decode(_github_version.get("content")).decode("utf-8") _new_script = base64.b64decode(_github_version.get("content")).decode("utf-8")
_new_version = re.findall("^__VERSION__.*?\"([0-9.]*)\"",_new_script,re.M) _new_version = re.findall(r"^__VERSION__.*?\"([0-9.]*)\"",_new_script,re.M)
_new_version = _new_version[0] if _new_version else "0.0.0" _new_version = _new_version[0] if _new_version else "0.0.0"
_script_location = os.path.realpath(__file__) _script_location = os.path.realpath(__file__)
_current_last_modified = datetime.fromtimestamp(int(os.path.getmtime(_script_location))) _current_last_modified = datetime.fromtimestamp(int(os.path.getmtime(_script_location)))