From e2df92e6b411f00183a8e689ce3f56bd93a7a538 Mon Sep 17 00:00:00 2001 From: "Kasper D. Fischer" Date: Wed, 2 Apr 2025 17:28:25 +0200 Subject: [PATCH] [update] adds mass activation checks to StationQC class Implements checks for mass channel activity to ensure proper functionality. Introduces methods to verify if mass channels are active and to set errors when they are not connected. Enhances reliability of data logging by avoiding unnecessary processing when mass channels are inactive. --- .gitignore | 4 ++++ parameters.yaml | 13 ++++++++----- survBot.py | 16 ++++++++++++++-- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 3c5d5a8..27b2107 100644 --- a/.gitignore +++ b/.gitignore @@ -213,3 +213,7 @@ flycheck_*.el /__simulate_fail.json /mailing_list.yaml + +.vscode/ + +*.code-workspace diff --git a/parameters.yaml b/parameters.yaml index d351b72..93c978d 100644 --- a/parameters.yaml +++ b/parameters.yaml @@ -118,7 +118,10 @@ data_channels: ["HHZ", "HHN", "HHE"] # ---------------------------------------- OPTIONAL PARAMETERS --------------------------------------------------------- # deactivate powbox surveillance for stations (e.g. for solar powered), key: station, value: status message (abbr.) -no_pbox_stations: {'GR33': 'SOL'} +no_pbox_stations: {'GR33': 'SOL', 'GR27B': 'DCN', 'RP01': 'noPBox', 'RP02': 'noPBox', 'RP03': 'noPBox', 'RP04': 'noPBox', 'RP05B': 'noPBox', 'RP06': 'noPBox', 'RP07': 'noPBox', 'RP08': 'noPBox'} + +# deactivate mass position surveillance for stations without connected mass channels (e.g. STS-2 instruments), key: station, value: status message (abbr.) +no_mass_stations: {'BIA': 'DCN', 'KNEZ': 'DCN', 'KRUS': 'DCN', 'OHR': 'DCN', 'OTOV': 'DCN', 'SKO': 'DCN', 'STIP': 'DCN', 'VAY': 'DCN', 'ZUPA': 'DCN'} # add links to html table with specified key as column and value as relative link, interpretable string parameters: # nw (e.g. 1Y), st (e.g. GR01A), nwst_id (e.g. 1Y.GR01A) @@ -132,7 +135,7 @@ add_links: add_global_links: # for example: - {"text": "our homepage", "URL": "https://www.rub.de"} - {"text": "show recent events on map", - "URL": "https://fdsnws.geophysik.ruhr-uni-bochum.de/map/?lat=39.5&lon=21&zoom=7&baselayer=mapnik"} + "URL": "https://fdsnws.geophysik.ruhr-uni-bochum.de/map/?lat=39.5&lon=21&zoom=7&baselayer=osm"} # html logo at page bottom (path relative to html directory) html_logo: "logo.png" @@ -142,14 +145,14 @@ EMAIL: # specify mail server and credentials # port, auth_type, user and password are only required if mailserver is not set to "localhost" # user and password can be set to "ENV" or "DOCKER" to read from environment variables or docker secrets - mailserver: "smtp.rub.de" # mail server + mailserver: "smtp.example.org" # mail server auth_type: "SSL" # mail authentication type, can be "SSL", "TLS" or "None" port: 465 # mail port, default 465 for SSL, 587 for TLS user: "DOCKER" # mail user, read from environment variable if set to "ENV" or from docker secret if set to "DOCKER" password: "DOCKER" # mail password, read from environment variable if set to "ENV" or from docker secret if set to "DOCKER" # specify mail recipients, sender and blacklists - addresses: ["marcel.paffrath@rub.de", "kasper.fischer@rub.de"] # list of mail addresses for info mails - sender: "RUB SeisObs " # mail sender + addresses: ["test@example.org"] # list of mail addresses for info mails + sender: "" # mail sender stations_blacklist: [] # do not send emails for specific stations networks_blacklist: [] # do not send emails for specific network # specify recipients for single stations in a yaml: key = email-address, val = station list (e.g. [1Y.GR01, 1Y.GR02]) diff --git a/survBot.py b/survBot.py index bd4fe70..391f86e 100755 --- a/survBot.py +++ b/survBot.py @@ -1,8 +1,8 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -__version__ = '0.2-docker' -__author__ = 'Marcel Paffrath ' +__version__ = '0.3' +__author__ = ['Marcel Paffrath ', 'Kasper D. Fischer '] import os import io @@ -595,6 +595,7 @@ class StationQC(object): self.status_track = status_track self.powbox_active = self.is_pbox_activated_check() + self.mass_active = self.is_mass_activated_check() self.start() @@ -1080,6 +1081,11 @@ class StationQC(object): """ Analyse datalogger mass channels. """ key = 'mass' + # skip processing if mass is not active + if not self.mass_active: + self.set_mass_inactive_error(key) + return + # build stream with all channels st = Stream() for channel in channels: @@ -1341,6 +1347,12 @@ class StationQC(object): msg = self.parameters.get('no_pbox_stations')[self.station] self.error(key, detailed_message=f'PowBox not connected', disc=msg) + def is_mass_activated_check(self): + return self.station not in self.parameters.get('no_mass_stations', []) + + def set_mass_inactive_error(self, key): + msg = self.parameters.get('no_mass_stations')[self.station] + self.error(key, detailed_message=f'Mass channels not connected', disc=msg) class Status(object): """ Basic Status class. All status classes are derived from this class."""