00001
00002
00003
00004
00005
00006
00007
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
00059 self.__vscSender = VSC.VscNetwork.TelemetrySender()
00060 self.__latSender = VSC.VscNetwork.TelemetrySender()
00061
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
00069 self.__vscMonSender = VSC.VscNetwork.TelemetrySender()
00070 self.__latMonSender = VSC.VscNetwork.TelemetrySender()
00071
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
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()