00001 #!/usr/local/bin/python 00002 # 00003 # Copyright 2004 00004 # by 00005 # The Board of Trustees of the 00006 # Leland Stanford Junior University. 00007 # All rights reserved. 00008 # 00009 00010 __facility__ = "Online" 00011 __abstract__ = "GLAST LAT Housekeeping server infrastructure" 00012 __author__ = "Jim Panetta <panetta@slac.stanford.edu> SLAC - GLAST I&T" 00013 __date__ = "07/28/04" 00014 __version__ = "$Revision: 1.9 $" 00015 __release__ = "$Name: R04-12-00 $" 00016 __credits__ = "SLAC" 00017 00018 import LATTE.copyright_SLAC 00019 import time 00020 import sys 00021 import os 00022 00023 from LATTE.tools.gAlert import * 00024 00025 def sendAlert(value, signal, sender, node, level): 00026 rule = sender.getRule() 00027 system = rule.subsystem().name() 00028 cat = rule.category().name() 00029 dispatch = "%s %s" % (system, cat) 00030 00031 if 'MACHINEID' in os.environ: 00032 machine = int(os.environ['MACHINEID']) 00033 else: 00034 machine = 0 00035 00036 measurand = NodeString(node) + sender.getName() 00037 strVal = str(value) 00038 if sender.getEGU() is not None: 00039 strVal += sender.getEGU().units() 00040 00041 msg = "%s has violated rule %s, causing a %s Alarm. Value = %s" % \ 00042 (measurand, rule.name(), alertDict[level], strVal) 00043 alert( msg, dispatch, level, machine) 00044 00045 def yellowAlert(value, signal, sender, node): 00046 sendAlert(value, signal, sender, node, YELLOWALERT) 00047 00048 def redAlert(value, signal, sender, node): 00049 sendAlert(value, signal, sender, node, REDALERT) 00050 00051 def yellowPrintMessage(value, signal, sender, node): 00052 msg = 'Yellow Alarm: ' + NodeString(node) + sender.getName() 00053 msg += ' is almost out of range: ' + str(value) 00054 if sender.getEGU() is not None: 00055 msg += sender.getEGU().units() 00056 log.warning( msg) 00057 00058 def redPrintMessage(value, signal, sender, node): 00059 msg = 'Red Alarm: ' + NodeString(node) + sender.getName() 00060 msg += ' is out of range: ' + str(value) 00061 if sender.getEGU() is not None: 00062 msg += ' ' + sender.getEGU().units() 00063 log.error(msg) 00064 00065 ### Useful 00066 rs = sender.getRule() 00067 # print "AAAjim: ruleset name=%s, subsys=%s, cat=%s" % ( rs.name(), rs.subsystem().name(), rs.category().name() ) 00068 00069 00070 def NodeString(node): 00071 """Useful little recursive function to generate a string representation 00072 of a gDb-like object. 00073 00074 \param node Any gDb-like object. (i.e. GLAT, GHSK) 00075 Object must support getName(), up() and id() methods. 00076 """ 00077 string = '' 00078 if node is not None: 00079 string += NodeString(node.up()) 00080 string += node.getName() 00081 if node.id() is not None: 00082 string += '[' + str(node.id()) + ']' 00083 string += '.' 00084 return string