00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 __facility__ = "Online"
00011 __abstract__ = "Telemetry 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.19 $"
00016 __release__ = "$Name: HEAD $"
00017 __credits__ = "SLAC"
00018
00019 import LICOS.copyright_SLAC
00020
00021 import os
00022 import sys
00023 import time
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
00054 class TelemetryProxy(VSC.VscProxy.Proxy):
00055 """!\brief Stand alone telemetry proxy
00056
00057 Standalone telemetry proxy provides several features:
00058 1: Pass through VSC.VscCcsds packets to a script engine connection.
00059 2: Pass through VSC.VscCcsds packets to the CVT
00060 3: Archiving of raw CCSDS stream to an ISOC archiver
00061 """
00062 def __init__(self, ip_vsc, config, noarchiver):
00063 ports = VscProxyPorts(config.getint('vsc', 'proxyPortBase'))
00064 VSC.VscProxy.Proxy.__init__(self, ip_vsc, ports.vsc())
00065
00066
00067 self.__vscScriptSender = VSC.VscNetwork.TelemetrySender()
00068 self.__latScriptSender = VSC.VscNetwork.TelemetrySender()
00069
00070 print "Creating ScriptEngine passthrough on port %d" % ports.telemetry()
00071 self.__connector = VSC.VscProxy.RequestRouter(ports.telemetry())
00072 self.__connector.handle(self.__vscScriptSender, VSC.VscProxy.VscTelemetry)
00073 self.__connector.handle(self.__latScriptSender, VSC.VscProxy.LatTelemetry)
00074 self.__connector.start()
00075
00076
00077 self.__vscCvtSender = VSC.VscNetwork.TelemetrySender()
00078 self.__latCvtSender = VSC.VscNetwork.TelemetrySender()
00079
00080 print "Creating CVT connector on port %d" % ports.cvt()
00081 self.__cvtConnector = VSC.VscProxy.RequestRouter(ports.cvt())
00082 self.__cvtConnector.handle(self.__vscCvtSender, VSC.VscProxy.VscTelemetry)
00083 self.__cvtConnector.handle(self.__latCvtSender, VSC.VscProxy.LatTelemetry)
00084 self.__cvtConnector.start()
00085
00086
00087 self.__vscMonSender = VSC.VscNetwork.TelemetrySender()
00088 self.__latMonSender = VSC.VscNetwork.TelemetrySender()
00089 print "Creating monitor passthrough on port %d" % ports.telemMon()
00090 self.__monConnector = VSC.VscProxy.RequestRouter(ports.telemMon())
00091 self.__monConnector.handle(self.__vscMonSender, VSC.VscProxy.VscTelemetry)
00092 self.__monConnector.handle(self.__latMonSender, VSC.VscProxy.LatTelemetry)
00093 self.__monConnector.start()
00094
00095 vscStreams = [self.__vscScriptSender, self.__vscCvtSender, self.__vscMonSender]
00096 latStreams = [self.__latScriptSender, self.__latCvtSender, self.__latMonSender]
00097
00098 if noarchiver is False:
00099
00100 from LICOS.tools.proxy.VscArchivers import VscArchiver
00101 archive_path = config.get('paths','archive_path')
00102 granularity = config.getint('ccsds_archivers', 'granularity')
00103 self.__archiver = VscArchiver(apIdGrp = "HSK",
00104 path = archive_path,
00105 granularity = granularity)
00106 vscStreams.append(self.__archiver)
00107 latStreams.append(self.__archiver)
00108
00109 self.vscRouter = VscTelemetryRouter(vscStreams)
00110 self.latRouter = VscTelemetryRouter(latStreams)
00111 self.vscTelemetry(self.vscRouter)
00112 self.latTelemetry(self.latRouter)
00113
00114
00115 if __name__ == '__main__':
00116 options = Options(['vscip', 'config'], [], ['logtime', 'noarchiver'])
00117 try:
00118 options.parse()
00119 except Exception, msg:
00120 options.usage(str(msg))
00121 sys.exit()
00122
00123 if options.logtime is not None:
00124 sys.stdout = VscProxyLogger('telemetry proxy: ')
00125 sys.stderr = sys.stdout
00126
00127 vscip = getip(options.vscip)
00128 config = ConfigParser()
00129 config.read(options.config)
00130 dumpInterval = config.getint('vsc', 'dumpInterval')
00131 noarchiver = (options.noarchiver is not None)
00132 proxy = TelemetryProxy(vscip, config, noarchiver)
00133
00134 while True:
00135 time.sleep(dumpInterval)
00136 print 'received %d VSC packets' %proxy.vscRouter.packets()
00137 print 'received %d LAT packets' %proxy.latRouter.packets()
00138 sys.stdout.flush()