Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | Related Pages

HskCollector.py

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__     = "10/06/04"
00014 __version__  = "$Revision: 1.4 $"
00015 __release__  = "$Name: P04-06-05 $"
00016 __credits__  = "SLAC"
00017 
00018 import LATTE.copyright_SLAC
00019 
00020 # base classes
00021 from LATTE.monitoring.Collector    import Collector
00022 from ConfigParser                  import *
00023 
00024 from LATTE.client.gCmdCli          import CmdCli
00025 from LATTE.database.gLAT           import GLAT
00026 from LATTE.database.gHSK           import GHSK
00027 from LATTE.monitoring.HskCli       import *
00028 
00029 
00030 class HskConfiguration(ConfigParser):
00031   """
00032   """
00033   def __init__(self):
00034     ConfigParser.__init__(self)
00035     self.__fileName = None
00036   
00037   def read(self, fileName):
00038     self.__fileName = fileName
00039     ConfigParser.read(self, fileName)
00040     
00041   def verify(self):
00042     # test the config for required parameters
00043     cSect    = self.sections()
00044     REQUIRED = ('core', 'database', 'inputs')
00045     for sect in REQUIRED:
00046       if sect not in cSect:
00047         msg = 'Config file %s is missing required section: %s' % ( self.__fileName, sect )
00048         raise KeyError, msg
00049     
00050     # core check
00051     coItems  = self.options('core')
00052     REQUIRED = ()
00053     for item in REQUIRED:
00054       if item not in dbItems:
00055         msg = 'Config file %s is missing required key %s in core section' % ( self.__fileName, item )
00056         raise KeyError, msg
00057     
00058     # database check
00059     dbItems  = self.options('database')
00060     REQUIRED = ('type',)
00061     for item in REQUIRED:
00062       if item not in dbItems:
00063         msg = 'Config file %s is missing required key %s in database section' % ( self.__fileName,item )
00064         raise KeyError, msg
00065     
00066     # inputs check
00067     inItems  = self.options('inputs')
00068     REQUIRED = ('latschema', 'hskschema', 'server', 'packet')
00069     for item in REQUIRED:
00070       if item not in inItems:
00071         msg = 'Config file %s is missing required key %s in inputs section' % ( self.__fileName, item )
00072         raise KeyError, msg
00073     
00074 
00075 class HskCollector(Collector):
00076   """\brief Configurable housekeeping collector
00077   
00078   Takes a HskConfiguration object as input.
00079   """
00080   def __init__(self, config):
00081     Collector.__init__(self)
00082     
00083     # Required inputs.  Checked in setup of configuration
00084     latSchema = config.get('inputs', 'latSchema')
00085     hskSchema = config.get('inputs', 'hskSchema')
00086     cmdServer = config.get('inputs', 'server')
00087     
00088     
00089     # set up command client
00090     self.__cmdCli     = CmdCli()
00091     self.__cmdHandler = HskHandler(self.__cmdCli, cmdServer)
00092     
00093     # set up LAT database (Needed for commanding)
00094     self.__latDB = GLAT(self.__cmdCli)
00095     self.__latDB.readSchema(latSchema)
00096     
00097     # set up HSK database
00098     self.__hskDB      = GHSK(self.__cmdCli)
00099     self.__hskDB.readSchema(hskSchema)
00100     self.__hskDB.applyConfig(None)
00101     
00102     # Delay setting is optional, default = 10 seconds
00103     try:
00104       self.setDelay(config.getint('core', 'delay'))
00105     except:
00106       pass
00107     
00108     # set up retrievers
00109     if config.getboolean('inputs', 'packet'):
00110       # HskPacket reads
00111       from LATTE.monitoring.HskCli             import HskCli
00112       from LATTE.monitoring.HskPacketRetriever import HskPacketRetriever
00113       self.__hskCli     = HskCli()
00114       self.__hskHandler = HskHandler(self.__hskCli, cmdServer)
00115       self.addRetriever( "HSK", HskPacketRetriever(self.__hskCli) ) 
00116     else:
00117       # LAT single register reads
00118       from LATTE.monitoring.HskRetriever       import HskLatRetriever
00119       self.addRetriever( "HSK", HskLatRetriever(self.__latDB) )
00120 
00121     # set up recorders:
00122     # Alarming system
00123     from LATTE.monitoring.HskRecorder          import HskAlarmRecorder
00124     self.addRecorder( HskAlarmRecorder(self.__hskDB) )
00125     
00126     # Systems to write data out
00127     if config.get('database', 'type') == 'sql':
00128       # set up SQL recorder
00129       import MySQLdb
00130       from LATTE.monitoring.HskSqlInterface   import HskSqlRecorder
00131       host = config.get('database', 'host')
00132       user = config.get('database', 'user')
00133       src  = config.getint('database', 'machineid')
00134       
00135       sqlDB = MySQLdb.connect(host=host, db='itosdb', user=user)
00136       self.addRecorder(HskSqlRecorder(self.__hskDB, sqlDB.cursor(), src))
00137     else:
00138       # text/flatfile database
00139       dataFile = config.get('database', 'datafile')
00140       from LATTE.monitoring.HskRecorder       import HskFileRecorder
00141       self.addRecorder(HskFileRecorder(self.__hskDB, dataFile))
00142     
00143     # optional UDP broadcast
00144     if config.has_section('udp') & config.getboolean('udp', 'broadcast'):
00145       from LATTE.monitoring.Recorder          import UDPRecorder
00146       serverName = config.get('udp', 'serverName')
00147       serverAddr = config.get('udp', 'serverAddr')
00148 
00149       udpR = UDPRecorder()
00150       udpR.startUDPServer(serverName,serverAddr)
00151       self.addRecorder(udpR)
00152 
00153   def latDB(self): return self.__latDB
00154   def hskDB(self): return self.__hskDB
00155 
00156 
00157 
00158 
00159 
00160 

Generated on Fri Jan 21 18:00:50 2005 for LATTE P04-06-05 by doxygen 1.4.1