Skip to content
Snippets Groups Projects
Commit a333a725 authored by Tamas Gal's avatar Tamas Gal :speech_balloon:
Browse files

Add time sync monitoring script

parent 29ad926e
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python
# coding=utf-8
# Filename: timesync_monitor.py
# Author: Tamas Gal <tgal@km3net.de>
# vim: ts=4 sw=4 et
"""
Monitors the time sync of DOMs using the MSG of the CLB DOM STATUS 1 field
from the supernova timeslice stream (IO_TSSN).
Usage:
timesync_monitor.py [options]
timesync_monitor.py (-h | --help)
Options:
-l LIGIER_IP The IP of the ligier [default: 127.0.0.1].
-p LIGIER_PORT The port of the ligier [default: 5553].
-m LOGGING_LIGIER_IP The IP of the logging ligier [default: 127.0.0.1].
-q LOGGING_LIGIER_PORT The port of the logging ligier [default: 5553].
-h --help Show this screen.
"""
import datetime
import km3pipe as kp
class TimeSyncChecker(kp.Module):
def configure(self):
logging_ligier = self.require("logging_ligier_ip")
logging_ligier_port = self.require("logging_ligier_port")
self.ch_client = kp.controlhost.Client(logging_ligier,
port=logging_ligier_port)
self.alert = kp.time.Cuckoo(interval=10, callback=self._alert)
def _alert(self, msg):
date = datetime.datetime.utcnow().strftime("%c")
msg = f"ALERT (MONITORING) {date}: {msg}"
print(msg)
self.ch_client.put_message("MSG", "Monitoring Test")
def process(self, blob):
dom_ids = []
for dom_id, frameinfo in blob['TimesliceFrameInfos'].items():
valid_time_sync = bool(frameinfo.dom_status[0] & (1 << (32 - 1)))
if not valid_time_sync:
dom_ids.append(dom_id)
if dom_ids:
self.alert("invalid time sync for DOM ID: {}".format(','.join(
map(str, dom_ids))))
return blob
def finish(self):
self.ch_client._disconnect()
def main():
from docopt import docopt
args = docopt(__doc__)
ligier_ip = args['-l']
ligier_port = int(args['-p'])
logging_ligier_ip = args['-m']
logging_ligier_port = int(args['-q'])
pipe = kp.Pipeline()
pipe.attach(kp.io.ch.CHPump,
host=ligier_ip,
port=ligier_port,
tags="IO_TSSN")
pipe.attach(kp.io.daq.TimesliceParser)
pipe.attach(TimeSyncChecker,
logging_ligier_ip=logging_ligier_ip,
logging_ligier_port=logging_ligier_port)
pipe.drain()
if __name__ == '__main__':
main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment