Table of Contents

Description of sensorAlarm

Program sensorAlarm polls the database filled by readsensor and checks for alarm conditions. Alarms are given based on criteria and are provided in a file. The table with all criteria and actions is given below.

Location of the code

The code for sensorAlarm can be found in CVS, in the module wsrt_mac/alarms. The following files are used by the sensorAlarm program:

The program can be started by executing sensorAlarm.py; no commandline options are needed for a default run. It should be started by user monitor on the WSRT monitor host (now wop10). The files should be present in directory /wsrt/bin on wop10.

Component description

alarmActions class

The alarmActions class handles the execution of shell-commands. It provides a mechanism to stop a command after it has been running for a certain amount of time (timeout). The default timeout is one second.

In case of problems with executing a command (timeout, or a non-zero exit status) the observer will be notified by email/SMS. This uses the sendMail program.

Logmessages are written to a logfile (see class log.py).

sensorAlarm class

This class is described in the file class_sensorAlarm.py. This class holds all the methods that do the actual checking and alarming.

The class reads the file holding the alarmconditions. At predefined intervals (to be set at startup of the main program) it will go through the list of alarmconditions and evaluate each condition to be true or false. In case a condition is true, an alarm must be raised. That involves:

Before obtaining the values, we first check if the sensor database values are recent enough to trust. This limit is set at 10 minutes, i.e., only if the database contains values less than 10 minutes old, the alarmconditions will be evaluated. All values are taken from the local MySQL database (the one running on wop10, that is).

In the alarmconditions.cfg-file is a column that gives the amount of individual samples/measurements of a sensor value to take into account. This is done in the following way:

DBConnection class

This class is the interface with a MySQL table. A default constructor connects to the local MySQL server and the database Sensor, but by providing other parameters in the constructor other servers and databases can be reached as well. It has methods to connect, to check if a connection is still valid, to run a 'select'-type query and to run a 'update'-type query.

sensorAlarm main program

The main program can be found in file sensorAlarm.py.

It handles the following things:

Command-line options

To handle the commandline options we use the module Optionparser. This module defines simple functions so that commandline options can be defined and taken along. The available options are:

  -h, --help            show this help message and exit
  -iINTERVAL, --interval=INTERVAL
                        Check interval time in seconds (prefer multiples of 60)
  -fFILE, --inputfile=FILE
                        Name of input alarmconditions config file
  -n, --nodaemonize     Don't run as a daemon process

The default interval is 120 seconds. The default alarmconditions config file is /wsrt/config/alarmconditions.cfg.

Logfile

The logfile is written when the process is daemonized, only. Otherwise the log messages are written to to terminal. The logfile ends up in directory /log/alarms. Logfiles are named: sensorAlarm.yyyymmddThhmmss, so with a date/time stamp of creation attached. A softlink to the latest logfile is always created as well and named sensorAlarm.log.

Also, there is a file called sensorAlarm.pid that holds the Process PID of the daemonized process. This can be used to kill the process if needed.

The main loop

Before we start the loop, we read the alarmconditions file, set up the database connection handlers for two databases (two, as the alarm flag needs to be updated both locally and on the WSRT MySQL server), and reset all alarms in these two databases.

In the main loop, we do the following things:

Used Python modules

For sensorAlarm, we have used the following Python modules:

The configuration file

The alarmconditions.cfg-file has lines like this:

...
CONSwarm > 27.0 # 5 # sendMail obs 'Console too warm'
CONSwarm > 30.0 # 5 # sendMail obs 'Console meltdown'
CONSwarm < 15.0 # 5 # sendMail obs 'Console too cold'
...
Sup-He-RT0 + Ret-He-RT0 < 15 # 5 # sendMail stiepel 'He-pressure RT0 too low'
Sup-He-RT1 + Ret-He-RT1 < 15 # 5 # sendMail stiepel 'He-pressure RT1 too low'
Sup-He-RT2 + Ret-He-RT2 < 15 # 5 # sendMail stiepel 'He-pressure RT2 too low'
...


Alarmconditions

This is the Alarm conditions table that is used in the software. It originates from the file /wsrt/config/alarmconditions.cfg on wop10.

Sensor Type/Unit Alarm Condition(s) Nr. of samples Mail/SMS who (Software) Action
CCwarm Temp/C > 25 5 obs send mail/SMS
> 28 5 obs send mail/SMS
< 15 5 obs send mail/SMS
CCcold Temp/C
PUMAwarm Temp/C > 28 5 obs send mail/SMS
> 31 5 obs send mail/SMS
< 15 5 obs send mail/SMS
PUMAcold Temp/C
DZBwarm Temp/C > 27 5 obs send mail/SMS
> 30 5 obs send mail/SMS
< 15 5 obs send mail/SMS
DZBcold Temp/C
CONSwarm Temp/C > 27 5 obs send mail/SMS
> 30 5 obs send mail/SMS
< 15 5 obs send mail/SMS
CONScold Temp/C
WATERcold Temp/C
WATERwarm Temp/C > 15 5 obs send mail/SMS
> 18 5 obs send mail/SMS
< 10 5 obs send mail/SMS
CVwarm Temp/C
Sup-He-RTx + Ret-He-RTx Pres/bar < 15 5 obs, stiepel send mail/SMS
PumpMain rpm/% ??? ??? obs send mail/SMS
PumpCC rpm/% ??? ??? obs send mail/SMS
PumpDZB rpm/% ??? ??? obs send mail/SMS
PumpPuma rpm/% ??? ??? obs send mail/SMS
PumpConsole rpm/% ??? ??? obs send mail/SMS
Compressor Power/Kw ??? ???
Brand1 Status 0 1 obs send mail/SMS
Brand2 Status 0 1 obs send mail/SMS
Inbraak Status 0 1 obs send mail/SMS
Net Status 0 1 obs send mail/SMS
CompressorSwitch Status 0 1 obs send mail/SMS
MainPump Status 0 1 obs send mail/SMS
SectorPumps Status 0 1 obs send mail/SMS
Cv Status 0 1 obs send mail/SMS