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: P04-06-05 $"
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