PANIC Receivers, Logging and Actions¶
Contents
Alarm Receivers¶
Allowed receivers are email, sms, action and shell commands.
SMS / Mail Config¶
These CLASS properties will control how SMS and Mail is configured:
SMSConfig
SMSMaxLength
SMSMaxPerDay
FromAddress
MailMethod
Global Receivers¶
The PyAlarm class property “GlobalReceivers” allows to set receivers that will be applied to all Alarms; independently of the device that is managing them.
The syntax is:
GlobalReceivers
{regexp}:{receivers}
.*:oncall@facility.dom
Logging¶
Alarm logging can be managed in three ways: local logs, remote logs via FolderDS or Snapshoting.
All the logging methods support defined variables ($ALARM, $DATE, $DEVICE, $MESSAGE, $VALUES, $…)
Local LogFile¶
Simply set the LogFile property to your preferred local file path:
LogFile = /tmp/pyalarm/$NAME_$DATE_$MESSAGE.log
Remote LogFile¶
You can use the fandango.FolderDS device to specify a remote logfile destination on the LogFile property:
# LogFile = tango://[folderds/device/name]/[logfile_name]
LogFile = tango://sys/folder/panic-logs/$NAME_$DATE_$MESSAGE.log
You can have both local and remote logging by setting LogFile to a local file and adding an ACTION receiver:
LogFile = /tmp/pyalarm/$NAME_$DATE_$MESSAGE.log
AlarmReceivers = ACTION(alarm:command,controls02:10000/test/folder/tmp-folderds/SaveText,
'$NAME_$DATE_$MESSAGE.txt','$REPORT')
FolderDS documentation: https://github.com/tango-controls/fandango/blob/documentation/doc/devices/FolderDS.rst
Using SNAP database¶
This database logging will save the alarm state and all associated attributes every time that the alarm is activated/reset.
You should have configured previously an Snapshoting Database (java/mysql service by Soleil).
Then you have to:
- Set the CreateNewContexts property of PyAlarm to True (it will automatically create a new context on alarm triggering)
- Or create manually a new context in the database using Bensikin.
- Set UseSnap=True to trigger snapshots for all alarms
- Or simply add the SNAP receiver.
Creating a context manually instead of doing it with PyAlarm may allow you to store Tango attributes that do not appear in the formula, thus enabling a sort of alarm-triggered archiving mode.
Triggering Actions from PyAlarm¶
See basic details on the user guide:
Here you have some more examples:
# Send an email (equivalent to just %MAIL:address@mail.com)
%SENDMAIL:ACTION(alarm:command,lab/ct/alarms/SendMail,$DESCRIPTION,$ALARM,address@mail.com)
# Reset another alarm, DONT USE [] TO CONTAIN ARGUMENTS!
%RESET:ACTION(alarm:command,test/pyalarm/logfile/resetalarm,'TEST','$NAME_$DATE_$DESCRIPTION')
# Reload another device
%INITLOG:ACTION(alarm:command,test/pyalarm/logfile/init)
# Write a tango attribute
%WRITE:ACTION(alarm:attribute,sys/tg_test/1/string_scalar,'$NAME_$DATE_$VALUES')
# Execute a command in another tango host
# in this example a FolderDS saves the alarm log
%LOG:ACTION(alarm:command,controls02:10000/test/folder/tmp-folderds/SaveText,'$NAME_$DATE_$MESSAGE.txt','$REPORT')
Then declare the AlarmReceivers like:
ACTION(alarm:command,mach/dummy/motor/move,int(1),int(10))
ACTION(reset:attribute,mach/dummy/motor/position,int(0))
The first field is one of each PyAlarm.MESSAGE_TYPES:
ALARM
ACKNOWLEDGED
RECOVERED
REMINDER
AUTORESET
RESET
DISABLED
Available keywords (managed by PyAlarm.parse_devices()) in ACTION are:
$TAG / $NAME / $ALARM
$DEVICE
$DATE / $DATETIME
$MESSAGE
$VALUES
$REPORT
$DESCRIPTION