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

Initial commit

parent e74aca8d
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python
# coding=utf-8
# Filename: dom_activity.py
# Author: Tamas Gal <tgal@km3net.de>
# vim: ts=4 sw=4 et
"""
Monitors the DOM activity.
Usage:
dom_activity.py [options]
dom_activity.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].
-d DET_ID Detector ID [default: 29].
-o PLOT_DIR The directory to save the plot [default: www/plots].
-h --help Show this screen.
"""
from __future__ import division
from collections import deque, defaultdict
from functools import partial
from io import BytesIO
import os
import time
import km3pipe as kp
import km3pipe.style
from km3modules.plot import plot_dom_parameters
VERSION = "1.0"
km3pipe.style.use('km3pipe')
log = kp.logger.get("DOMActivity")
log.warn("Starting DOM Activity monitor")
class DOMActivityPlotter(kp.Module):
def configure(self):
self.plots_path = self.require('plots_path')
det_id = self.require('det_id')
self.detector = kp.hardware.Detector(det_id=det_id)
self.index = 0
self.last_activity = defaultdict(partial(deque, maxlen=4000))
self.cuckoo = kp.time.Cuckoo(60, self.create_plot)
def process(self, blob):
self.index += 1
if self.index % 30:
return blob
tag = str(blob['CHPrefix'].tag)
if not tag == 'IO_SUM':
return blob
data = blob['CHData']
data_io = BytesIO(data)
preamble = kp.io.daq.DAQPreamble(file_obj=data_io) # noqa
summaryslice = kp.io.daq.DAQSummaryslice(file_obj=data_io)
timestamp = summaryslice.header.time_stamp
for dom_id, _ in summaryslice.summary_frames.items():
du, dom, _ = self.detector.doms[dom_id]
self.last_activity[(du, dom)] = timestamp
self.cuckoo.msg()
return blob
def create_plot(self):
print(self.__class__.__name__ + ": updating plot.")
filename = os.path.join(self.plots_path, 'dom_activity.png')
now = kp.time.tai_timestamp()
now = time.time()
delta_ts = {}
inactive_doms = {}
for key, timestamp in self.last_activity.items():
delta_t = now - timestamp
delta_ts[key] = delta_t
if delta_t > 300:
inactive_doms[key] = delta_t
if inactive_doms:
msg = "WARNING: the following DOM(s) has been inactive:\n"
for key, delta_t in inactive_doms.items():
msg += " DU{}-DOM{} for {:.1f}s\n" \
.format(key[0], key[1], delta_t)
log.warn(msg)
plot_dom_parameters(delta_ts, self.detector, filename,
'last activity [s]',
"DOM Activity - via Summary Slices",
vmin=0.0, vmax=15*60)
def main():
from docopt import docopt
args = docopt(__doc__, version=VERSION)
det_id = int(args['-d'])
plots_path = args['-o']
ligier_ip = args['-l']
ligier_port = int(args['-p'])
pipe = kp.Pipeline()
pipe.attach(kp.io.ch.CHPump, host=ligier_ip,
port=ligier_port,
tags='IO_SUM',
timeout=60*60*24*7,
max_queue=2000)
pipe.attach(kp.io.daq.DAQProcessor)
pipe.attach(DOMActivityPlotter, det_id=det_id, plots_path=plots_path)
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