DiagnosticProxy.py

Go to the documentation of this file.
00001 #!/usr/local/bin/python
00002 #
00003 #                               Copyright 2005
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__ = "Diagnostic Proxy class"
00012 __author__   = "S. Tuvi <stuvi@slac.stanford.edu> SLAC - GLAST LAT I&T/Online"
00013 __date__     = "2005/09/06"
00014 __updated__  = "$Date: 2006/04/25 17:22:01 $"
00015 __version__  = "$Revision: 1.24 $"
00016 __release__  = "$Name: HEAD $"
00017 __credits__  = "SLAC"
00018 
00019 import LICOS.copyright_SLAC
00020 
00021 import os
00022 import time
00023 import sys
00024 from ConfigParser import ConfigParser
00025 
00026 import VSC
00027 import CCSDS
00028 
00029 from LICOS.util.gOptions             import Options
00030 from LICOS.tools.proxy.VscProxyPorts import VscProxyPorts
00031 from LICOS.tools.proxy.VscProxyTools import getip, VscProxyLogger
00032 
00033 class VscTelemetryRouter(VSC.VscRouting.TelemetryRouter):
00034   def __init__(self, streamList):
00035     VSC.VscRouting.TelemetryRouter.__init__(self)
00036     self.__packet = CCSDS.Ccsds.Telemetry(0, 0, 0)
00037     self.__streamList = streamList
00038     if len(self.__streamList) == 0:
00039       raise "cannot have empty stream list"
00040     self.__counter = 0
00041 
00042   def allocate(self):
00043     return self.__packet
00044 
00045   def catchall(self, ccsds):
00046     self.__counter += 1
00047     for stream in self.__streamList:
00048       stream.send_nothrow(ccsds)
00049 
00050   def packets(self):
00051     return self.__counter
00052 
00053 class DiagnosticProxy(VSC.VscProxy.Proxy):
00054   def __init__(self, ip_vsc, config, noarchiver):
00055     ports = VscProxyPorts(config.getint('vsc', 'proxyPortBase'))
00056     VSC.VscProxy.Proxy.__init__(self, ip_vsc, ports.vsc())
00057 
00058     # create the pass through handlers to ScriptEngine
00059     self.__vscSender = VSC.VscNetwork.TelemetrySender()
00060     self.__latSender = VSC.VscNetwork.TelemetrySender()
00061     # connect plumbing for ScriptEngine pass through
00062     print "Creating ScriptEngine passthrough on port %d" % ports.diagnostic()
00063     self.__connector = VSC.VscProxy.RequestRouter(ports.diagnostic())
00064     self.__connector.handle(self.__vscSender, VSC.VscProxy.VscDiagnostic)
00065     self.__connector.handle(self.__latSender, VSC.VscProxy.LatDiagnostic)
00066     self.__connector.start()
00067 
00068     # create the pass through handlers to ScriptEngine
00069     self.__vscMonSender = VSC.VscNetwork.TelemetrySender()
00070     self.__latMonSender = VSC.VscNetwork.TelemetrySender()
00071     # connect plumbing for diagnostic monitor pass through
00072     print "Creating monitor passthrough on port %d" % ports.diagMon()
00073     self.__monConnector = VSC.VscProxy.RequestRouter(ports.diagMon())
00074     self.__monConnector.handle(self.__vscMonSender, VSC.VscProxy.VscDiagnostic)
00075     self.__monConnector.handle(self.__latMonSender, VSC.VscProxy.LatDiagnostic)
00076     self.__monConnector.start()
00077 
00078     vscStreams = [self.__vscSender, self.__vscMonSender]
00079     latStreams = [self.__latSender, self.__latMonSender]
00080 
00081     if noarchiver is False:
00082       # Import here if archiving is enabled otherwise Windows will complain -ST
00083       from LICOS.tools.proxy.VscArchivers  import VscArchiver
00084       archive_path = config.get('paths', 'archive_path')
00085       granularity  = config.getint('ccsds_archivers', 'granularity')
00086       self.__archiver = VscArchiver(apIdGrp = "DIA",
00087                                     path = archive_path,
00088                                     granularity = granularity)
00089       vscStreams.append(self.__archiver)
00090       latStreams.append(self.__archiver)
00091 
00092     self.vscRouter = VscTelemetryRouter(vscStreams)
00093     self.latRouter = VscTelemetryRouter(latStreams)
00094     self.vscDiagnostic(self.vscRouter)
00095     self.latDiagnostic(self.latRouter)
00096 
00097 
00098 if __name__ == '__main__':
00099   options = Options(['vscip', 'config'], [], ['logtime', 'noarchiver'])
00100   try:
00101     options.parse()
00102   except Exception, msg:
00103     options.usage(str(msg))
00104     sys.exit()
00105 
00106   if options.logtime is not None:
00107     sys.stdout = VscProxyLogger('diagnostic proxy: ')
00108     sys.stderr = sys.stdout
00109 
00110   vscip = getip(options.vscip)
00111   config = ConfigParser()
00112   config.read(options.config)
00113   dumpInterval = config.getint('vsc', 'dumpInterval')
00114   noarchiver = (options.noarchiver is not None)
00115   proxy = DiagnosticProxy(vscip, config, noarchiver)
00116 
00117   while True:
00118     time.sleep(dumpInterval)
00119     print 'received %d VSC packets' %proxy.vscRouter.packets()
00120     print 'received %d LAT packets' %proxy.latRouter.packets()
00121     sys.stdout.flush()

Generated on Thu Apr 27 20:52:41 2006 for LICOS L02-01-00 by doxygen 1.4.6-NO