start agentx daemon
This commit is contained in:
parent
e5bde92bca
commit
28aec867cd
@ -1,16 +1,21 @@
|
|||||||
import ntp.packet
|
import ntp.packet
|
||||||
|
import json
|
||||||
|
|
||||||
session = ntp.packet.ControlSession()
|
session = ntp.packet.ControlSession()
|
||||||
session.openhost('localhost')
|
session.openhost('localhost')
|
||||||
|
|
||||||
peers = session.readstat()
|
peers = session.readstat()
|
||||||
|
|
||||||
|
k = []
|
||||||
|
|
||||||
l = session.readvar(0)
|
l = session.readvar(0)
|
||||||
print(f"{l=}")
|
print(f"{l=}")
|
||||||
|
k.append(list(dict(l).keys()))
|
||||||
|
|
||||||
for p in peers:
|
for p in peers:
|
||||||
l = session.readvar(p.associd)
|
l = session.readvar(p.associd)
|
||||||
print(f"{p.associd}: {dict(l)}")
|
print(f"{p.associd}: {dict(l)}")
|
||||||
|
k.append(list(dict(l).keys()))
|
||||||
|
|
||||||
|
print(json.dumps(k, indent=4))
|
||||||
|
|
||||||
|
117
src/agentx-ntpsec.py
Normal file
117
src/agentx-ntpsec.py
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
import ntp.packet
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import logging
|
||||||
|
import logging.handlers
|
||||||
|
|
||||||
|
|
||||||
|
class NtpDataCollector(threading.Thread):
|
||||||
|
def __init__(self, ntpserver='localhost', period=60):
|
||||||
|
self.ntpserver = ntpserver
|
||||||
|
self.period = period
|
||||||
|
self.stop_event = threading.Event()
|
||||||
|
|
||||||
|
self.session = ntp.packet.ControlSession()
|
||||||
|
self.session.openhost(self.ntpserver)
|
||||||
|
|
||||||
|
threading.Thread.__init__(self)
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
while not self.stop_event.is_set():
|
||||||
|
logger.debug('Query ntp server')
|
||||||
|
|
||||||
|
ntpserver_vars = self.session.readvar(0)
|
||||||
|
logger.debug(f"{ntpserver_vars=}")
|
||||||
|
|
||||||
|
peers = self.session.readstat()
|
||||||
|
for peer in peers:
|
||||||
|
peer_vars = self.session.readvar(peer.associd)
|
||||||
|
logger.debug(f"{peer.associd=}, {peer_vars=}")
|
||||||
|
|
||||||
|
|
||||||
|
time.sleep(self.period)
|
||||||
|
logger.info('NtpDataCollector terminating')
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
self.stop_event.set()
|
||||||
|
self.join()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def daemonize(pid_filename):
|
||||||
|
if os.fork() > 0:
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
os.setsid()
|
||||||
|
pid = os.fork()
|
||||||
|
if pid > 0:
|
||||||
|
with open(pid_filename, 'w') as pid_file:
|
||||||
|
pid_file.write(str(pid))
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
sys.stdout.flush()
|
||||||
|
sys.stderr.flush()
|
||||||
|
|
||||||
|
with open("/dev/null", "r") as devnull:
|
||||||
|
os.dup2(devnull.fileno(), sys.stdin.fileno())
|
||||||
|
with open("/tmp/agentx-ntpsec.log", "a+") as log:
|
||||||
|
os.dup2(log.fileno(), sys.stdout.fileno())
|
||||||
|
os.dup2(log.fileno(), sys.stderr.fileno())
|
||||||
|
|
||||||
|
logger.removeHandler(stdout_handler)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.DEBUG,
|
||||||
|
format="%(name)s - %(levelname)s - %(message)s",
|
||||||
|
handlers=[logging.handlers.SysLogHandler(address='/dev/log')]
|
||||||
|
)
|
||||||
|
logger = logging.getLogger('agentx-ntpsec')
|
||||||
|
stdout_handler = logging.StreamHandler(sys.stdout)
|
||||||
|
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||||
|
stdout_handler.setFormatter(formatter)
|
||||||
|
logger.addHandler(stdout_handler)
|
||||||
|
|
||||||
|
pid_filename = '/tmp/agentx-ntpsec.pid'
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='snmpd agentx extension for ntpsec')
|
||||||
|
parser.add_argument('--period', '-p',
|
||||||
|
help='Period to query the NTP server, in seconds, default 60s',
|
||||||
|
required=False,
|
||||||
|
default=60)
|
||||||
|
parser.add_argument('--ntpserver', '-n',
|
||||||
|
help='NTP server to query, default is localhost',
|
||||||
|
required=False,
|
||||||
|
default='localhost')
|
||||||
|
parser.add_argument('--daemonize', '-d',
|
||||||
|
help='Run process in background',
|
||||||
|
required=False,
|
||||||
|
action='store_true',
|
||||||
|
default=False)
|
||||||
|
parser.add_argument('--pid',
|
||||||
|
help=f"pid-file when running as daemon, default is {pid_filename}",
|
||||||
|
required=False,
|
||||||
|
default=pid_filename)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if args.daemonize:
|
||||||
|
daemonize(pid_filename)
|
||||||
|
|
||||||
|
ntpserver = args.ntpserver
|
||||||
|
period = args.period
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
ndc = NtpDataCollector(ntpserver=ntpserver, period=period)
|
||||||
|
ndc.start()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Unhandled exception: {e}")
|
||||||
|
ndc.stop()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
ndc.stop()
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user