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.4 $" 00015 __release__ = "$Name: R04-12-00 $" 00016 __credits__ = "SLAC" 00017 00018 import LATTE.copyright_SLAC 00019 import logging as log 00020 import MySQLdb 00021 00022 # Hsk core code 00023 from LATTE.monitoring.HskRetriever import * 00024 from LATTE.monitoring.HskCollector import * 00025 from LATTE.monitoring.HskCli import HskCli, HskHandler 00026 00027 # LATTE infrastructure 00028 from LATTE.client.gCmdCli import CmdCli 00029 from LATTE.database.gLAT import GLAT 00030 from LATTE.database.gHSK import GHSK 00031 from LATTE.client.gOptions import Options 00032 00033 latSchema = None 00034 hskSchema = None 00035 comSchema = None 00036 cmdServer = None 00037 00038 def startup(): 00039 log.basicConfig() 00040 log.root.setLevel(log.DEBUG) 00041 00042 00043 def testCollector(sqlDB): 00044 00045 # set up command/housekeeping clients 00046 cmdCli = CmdCli() 00047 # hskCli = HskCli() 00048 # set up command/hsk connection handlers 00049 cmdHandler = HskHandler(cmdCli, cmdServer) 00050 # hskHandler = HskHandler(hskCli, cmdServer) 00051 00052 # set up LAT schema 00053 latDB = GLAT(cmdCli) 00054 latDB.readSchema(latSchema) 00055 00056 # set up HSK schema 00057 hskDB = GHSK(cmdCli) 00058 hskDB.readSchema(hskSchema) 00059 hskDB.applyConfig(None) 00060 00061 # set up CMD schema 00062 cmdDB = GLAT(cmdCli) 00063 cmdDB.readSchema(cmdSchema) 00064 00065 alarmSetup(hskDB, cmdDB) 00066 00067 collector = HskCollector(cmdCli) 00068 collector.setDelay(501) # 5 second delay 00069 00070 from HskRetriever import HskLatRetriever 00071 firstRetriever = HskLatRetriever(latDB) 00072 collector.addRetriever("HSK", firstRetriever) 00073 00074 from LATTE.monitoring.HskRecorder import HskAlarmRecorder 00075 firstRecorder = HskAlarmRecorder(hskDB) 00076 collector.addRecorder(firstRecorder) 00077 00078 from LATTE.monitoring.HskSqlInterface import HskSqlRecorder 00079 secondRecorder = HskSqlRecorder(hskDB, sqlDB, source=1) 00080 collector.addRecorder(secondRecorder) 00081 00082 00083 log.info( "Collector delay: " + str(collector.getDelay()/10) + " seconds" ) 00084 collector.setAcquiring(True) 00085 00086 from time import sleep 00087 try: 00088 while 1: 00089 sleep(.1) 00090 except Exception, e: 00091 collector.shutdown() 00092 00093 cmdHandler.disconnect() 00094 hskHandler.disconnect() 00095 00096 00097 def alarmSetup(hskDB, cmdDB): 00098 # Retrieve the global rule list for HSK 00099 ruleSet = hskDB.getRules() 00100 # print ruleSet 00101 # Access any of the rule objects and call clearAllActions() to clear actions. 00102 ruleSet.values()[0].clearAllActions() 00103 00104 # add some trivial yellow/red alarms 00105 from HskAlarms import yellowPrintMessage, redPrintMessage 00106 ruleSet['tempMonitor'].registerAction('yellowAction', yellowPrintMessage) 00107 # ruleSet['tempMonitor'].registerAction('redAction', redPrintMessage) 00108 00109 def usage(): 00110 return """ 00111 00112 HskSvr Usage: 00113 00114 Mandatory options: 00115 --server specify the hostname or the IP address of the teststand crate 00116 to connect to. 00117 --latSchema specify the LAT schema file that defines the detector. 00118 --hskSchema specify the Housekeeping schema file to load. 00119 00120 Optional options: 00121 --cmdSchema specify the LAT schema file to be used for commanding. 00122 Default is to use latSchema 00123 00124 Example: 00125 $ HskSvr --server lat-elf1 --latSchema LAT.xml --hskSchema HSK.xml --cmdSchema LAT.xml 00126 00127 """ 00128 00129 if __name__ == '__main__': 00130 00131 startup() 00132 00133 # Options, first list mandatory, second list optional 00134 options = Options(['server', 'latSchema', 'hskSchema', 'sqlHost'], 00135 ['cmdSchema',]) 00136 try: 00137 options.parse() 00138 except Exception, msg: 00139 options.usage(usage()) 00140 raise Exception, msg 00141 00142 cmdServer = options.server 00143 latSchema = options.latSchema 00144 hskSchema = options.hskSchema 00145 if options.cmdSchema is not None: 00146 cmdSchema = options.cmdSchema 00147 else: 00148 cmdSchema = latSchema 00149 00150 sqlDb = MySQLdb.connect(host=options.sqlHost, db='itosdb', user='itosdb') 00151 00152 testCollector(sqlDb.cursor()) 00153 00154 00155 00156 00157 00158 00159 00160 00161