Esempio n. 1
0
 def __init__(self,connector,connectParams):
     
     assert isinstance(connector,ApiConnector.ApiConnector)
     assert isinstance(connectParams,(str,tuple))
     
     # store params
     self.connector                 = connector
     self.connectParams             = connectParams
     
     # local variables
     self.netname                   = FormatUtils.formatConnectionParams(self.connectParams)
     self.goOn                      = True
     self.delayCounter              = self.SNAPSHOT_PERIOD_FIRST
     self.dataLock                  = threading.Lock()
     self.busySnapshotting          = threading.Lock()
     
     # initialize parent
     threading.Thread.__init__(self)
     self.name                      = '{0}_SnapShot'.format(self.netname)
     
     # connect to EventBus
     dispatcher.connect(
         self._timeToNextSnapShot,
         signal = "timeToNextSnapShot_{0}".format(self.netname),
         weak   = False,
     )
     dispatcher.connect(
         self._snapShotNow,
         signal = "snapShotNow_{0}".format(self.netname),
         weak   = False,
     )
     
     # start itself
     self.start()
Esempio n. 2
0
    def __init__(self, connectParams):

        # log
        log.info("creating instance")

        # store params
        self.connectParams = connectParams

        # local variables
        self.netname = FormatUtils.formatConnectionParams(self.connectParams)
        self.hrParser = HrParser.HrParser()
        self.dataLock = threading.Lock()
        self.snapPaths = []
        self.snapshotOngoing = False

        # initialize parent class
        EventBusClient.EventBusClient.__init__(
            self,
            signal='notifEvent_{0}'.format(self.netname),
            cb=self._ebHandler_notifEvent,
            teardown_cb=self._cleanup,
            queuesize=self.QUEUESIZE,
        )
        self.name = '{0}_NetworkState'.format(self.netname)

        # connect extra applications
        dispatcher.connect(
            self._ebHandler_snapShotStart,
            signal='snapShotStart_{0}'.format(self.netname),
            weak=False,
        )
        dispatcher.connect(
            self._ebHandler_managerCmd,
            signal='managerCmd_{0}'.format(self.netname),
            weak=False,
        )
        dispatcher.connect(
            self._ebHandler_snapShotEnd,
            signal='snapShotEnd_{0}'.format(self.netname),
            weak=False,
        )
        dispatcher.connect(
            self._ebHandler_notifHealthReport,
            signal='notifHealthReport_{0}'.format(self.netname),
            weak=False,
        )
Esempio n. 3
0
 def __init__(self,connectParams):
     
     # log
     log.info("creating instance")
     
     # store params
     self.connectParams         = connectParams
     
     # local variables
     self.netname               = FormatUtils.formatConnectionParams(self.connectParams)
     self.hrParser              = HrParser.HrParser()
     self.dataLock              = threading.Lock()
     self.snapPaths             = []
     self.snapshotOngoing       = False
     
     # initialize parent class
     EventBusClient.EventBusClient.__init__(self,
         signal      = 'notifEvent_{0}'.format(self.netname),
         cb          = self._ebHandler_notifEvent,
         teardown_cb = self._cleanup,
         queuesize   = self.QUEUESIZE,
     )
     self.name                  = '{0}_NetworkState'.format(self.netname)
     
     # connect extra applications
     dispatcher.connect(
         self._ebHandler_snapShotStart,
         signal = 'snapShotStart_{0}'.format(self.netname),
         weak   = False,
     )
     dispatcher.connect(
         self._ebHandler_managerCmd,
         signal = 'managerCmd_{0}'.format(self.netname),
         weak   = False,
     )
     dispatcher.connect(
         self._ebHandler_snapShotEnd,
         signal = 'snapShotEnd_{0}'.format(self.netname),
         weak   = False,
     )
     dispatcher.connect(
         self._ebHandler_notifHealthReport,
         signal = 'notifHealthReport_{0}'.format(self.netname),
         weak   = False,
     )
 def __init__(self,connectParams):
     
     # log
     log.info("creating instance")
     
     # store params
     self.connectParams        = connectParams
     
     # local variables
     self.netname              = FormatUtils.formatConnectionParams(self.connectParams)
     
     # initialize parent class
     EventBusClient.EventBusClient.__init__(self,
         signal                = 'testResult_{0}'.format(self.netname),
         cb                    = self._ebHandler_testResult,
         teardown_cb           = self._cleanup,
         queuesize             = self.QUEUESIZE,
     )
     self.name                 = '{0}_NetworkStatePublisher'.format(self.netname)
Esempio n. 5
0
    def __init__(self, connectParams):

        # log
        log.info("creating instance")

        # store params
        self.connectParams = connectParams

        # local variables
        self.netname = FormatUtils.formatConnectionParams(self.connectParams)

        # initialize parent class
        EventBusClient.EventBusClient.__init__(
            self,
            signal='testResult_{0}'.format(self.netname),
            cb=self._ebHandler_testResult,
            teardown_cb=self._cleanup,
            queuesize=self.QUEUESIZE,
        )
        self.name = '{0}_NetworkStatePublisher'.format(self.netname)
Esempio n. 6
0
 def __init__(self,connectParams):
     
     # log
     log.info("creating instance")
     
     # store params
     self.connectParams        = connectParams
     
     # local variables
     self.netname              = FormatUtils.formatConnectionParams(self.connectParams)
     self.busyTesting          = threading.Lock()
     
     # initialize parent class
     EventBusClient.EventBusClient.__init__(self,
         signal                = 'snapShotEnd_{0}'.format(self.netname),
         cb                    = self._ebHandler_snapShotEnd,
         teardown_cb           = self._cleanup,
         queuesize             = self.QUEUESIZE,
     )
     self.name                 = '{0}_NetworkStateAnalyzer'.format(self.netname)
Esempio n. 7
0
    def __init__(self, connectParams):

        # log
        log.info("creating instance")

        # store params
        self.connectParams = connectParams

        # local variables
        self.netname = FormatUtils.formatConnectionParams(self.connectParams)
        self.busyTesting = threading.Lock()

        # initialize parent class
        EventBusClient.EventBusClient.__init__(
            self,
            signal='snapShotEnd_{0}'.format(self.netname),
            cb=self._ebHandler_snapShotEnd,
            teardown_cb=self._cleanup,
            queuesize=self.QUEUESIZE,
        )
        self.name = '{0}_NetworkStateAnalyzer'.format(self.netname)
Esempio n. 8
0
 def _deleteManagerConnection(self, connectParam):
     
     dld = DustLinkData.DustLinkData()
     with dld.dataLock:
         
         #===== NetworkStateAnalyzer
         if connectParam in self.publishers:
             self.publishers[connectParam].tearDown()
             del self.publishers[connectParam]
             log.info('deleted publisher {0}'.format(connectParam))
         
         #===== NetworkStateAnalyzer
         if connectParam in self.analyzers:
             self.analyzers[connectParam].tearDown()
             del self.analyzers[connectParam]
             log.info('deleted analyzer {0}'.format(connectParam))
         
         #===== NetworkState
         if connectParam in self.netstate:
             self.netstate[connectParam].tearDown()
             del self.netstate[connectParam]
             log.info('deleted netstate {0}'.format(connectParam))
         
         #===== GatewayListener
         if connectParam in self.listeners:
             self.listeners[connectParam].tearDown()
             del self.listeners[connectParam]
             log.info('deleted listener {0}'.format(connectParam))
         
         #===== apiconnectors
         if connectParam in self.apiconnectors:
             self.apiconnectors[connectParam].disconnect()
             del self.apiconnectors[connectParam]
             log.info('deleted apiconnector {0}'.format(connectParam))
         
         #===== delete network
         try:
             dld.deleteNetwork(FormatUtils.formatConnectionParams(connectParam))
         except ValueError:
             pass # happens if network was already deleted, e.g. by an earlier call to this function
Esempio n. 9
0
    def __init__(self,connector,connectParams):
        assert isinstance(connector,ApiConnector.ApiConnector)
        assert isinstance(connectParams,(str,tuple))
        
        # record parameters
        self.connector            = connector
        self.connectParams        = connectParams
        
        # log
        log.info("creating instance")
        
        # variables
        self.netname              = FormatUtils.formatConnectionParams(self.connectParams)
        self.statsLock            = threading.Lock()
        self._clearStats()
        
        # start snapshot thread this manager
        self.snapShotThread       = SnapShot.SnapShot(connector,connectParams)
        
        # subscribe to flows
        try:
            self.subscriber       = IpMgrSubscribe.IpMgrSubscribe(self.connector)
            self.subscriber.start()
            
            self.subscriber.subscribe(
                notifTypes =    [
                                    IpMgrSubscribe.IpMgrSubscribe.NOTIFDATA,
                                ],
                fun =           self._subs_notifData,
                isRlbl =        False,
            )
            self.subscriber.subscribe(
                notifTypes =    [
                                    IpMgrSubscribe.IpMgrSubscribe.NOTIFEVENT,
                                ],
                fun =           self._subs_notifEvent,
                isRlbl =        True,
            )
            self.subscriber.subscribe(
                notifTypes =    [
                                    IpMgrSubscribe.IpMgrSubscribe.NOTIFHEALTHREPORT,
                                ],
                fun =           self._subs_notifHealthReport,
                isRlbl =        True,
            )
            self.subscriber.subscribe(
                notifTypes =    [
                                    IpMgrSubscribe.IpMgrSubscribe.ERROR,
                                    IpMgrSubscribe.IpMgrSubscribe.FINISH,
                                ],
                fun =           self._subs_errorORfinish,
                isRlbl =        True,
            )
        except TypeError as err:
            log.error(str(err))
            raise ApiException.ConnectionError(str(err))

        self.subscriber._thread.name   = '{0}_IpMgrSubscribe'.format(self.netname)
        
        # initialize parent class
        EventBusClient.EventBusClient.__init__(self,
            'dataToMesh_{0}'.format(self.netname),
            self._ebHandler_dataToMesh,
        )
        
        # give this thread a name
        self.name                 = '{0}_GatewayListener'.format(self.netname)
Esempio n. 10
0
 def _addManagerConnection(self,connectParam):
     dld = DustLinkData.DustLinkData()
     with dld.dataLock:
         
         assert(connectParam not in self.apiconnectors)
         assert(connectParam not in self.listeners)
         assert(connectParam not in self.netstate)
         assert(connectParam not in self.analyzers)
         assert(connectParam not in self.publishers)
         
         try:
             
             #===== self.apiconnectors
             
             if isinstance(connectParam,str):
                 # connecting to a serial port
                 
                 newConnector = IpMgrConnectorSerial.IpMgrConnectorSerial()
                 newConnector.connect({
                     'port': connectParam,
                 })
             else:
                 # connecting to the serialMux
                 
                 newConnector = IpMgrConnectorMux.IpMgrConnectorMux()
                 newConnector.connect({
                     'host': connectParam[0],
                     'port': connectParam[1],
                 })
         
             # log
             log.info('added apiconnectors {0}'.format(connectParam))
             
             self.apiconnectors[connectParam] = newConnector
             
             dld.updateManagerConnectionState(
                 connectParam,
                 DustLinkData.DustLinkData.MANAGERCONNECTION_STATE_ACTIVE
             )
             
             #===== delete network
             
             try:
                 dld.deleteNetwork(FormatUtils.formatConnectionParams(connectParam))
             except ValueError:
                 pass # happens if network doesn't exist
             
             #===== add network
             
             try:
                 dld.addNetwork(FormatUtils.formatConnectionParams(connectParam))
             except ValueError:
                 pass # happens if network already exists from previous connection
             
             #===== self.listeners
             
             assert(connectParam not in self.listeners)
             self.listeners[connectParam]   = GatewayListener.GatewayListener(
                 self.apiconnectors[connectParam],
                 connectParam,
             )
             log.info('added listener {0}'.format(connectParam))
             
             #===== self.netstate
             
             assert(connectParam not in self.netstate)
             self.netstate[connectParam]   = NetworkState.NetworkState(connectParam)
             log.info('added netstate {0}'.format(connectParam))
             
             #===== self.analyzers
             
             assert(connectParam not in self.analyzers)
             self.analyzers[connectParam]   = NetworkStateAnalyzer.NetworkStateAnalyzer(connectParam)
             log.info('added analyzer {0}'.format(connectParam))
             
             #===== self.publishers
             
             assert(connectParam not in self.publishers)
             self.publishers[connectParam]   = NetworkStatePublisher.NetworkStatePublisher(connectParam)
             log.info('added publisher {0}'.format(connectParam))
         
         except Exception as err:
             
             # log
             log.warning('could not add apiconnectors {0}: {1}'.format(connectParam, err))
             
             # update state
             dld.updateManagerConnectionState(
                 connectParam,
                 DustLinkData.DustLinkData.MANAGERCONNECTION_STATE_FAIL,
                 reason = str(err),
             )
             
             # detelete the connection to the manager
             self._deleteManagerConnection(connectParam)
Esempio n. 11
0
    def __init__(self, connector, connectParams):
        assert isinstance(connector, ApiConnector.ApiConnector)
        assert isinstance(connectParams, (str, tuple))

        # record parameters
        self.connector = connector
        self.connectParams = connectParams

        # log
        log.info("creating instance")

        # variables
        self.netname = FormatUtils.formatConnectionParams(self.connectParams)
        self.statsLock = threading.Lock()
        self._clearStats()

        # start snapshot thread this manager
        self.snapShotThread = SnapShot.SnapShot(connector, connectParams)

        # subscribe to flows
        try:
            self.subscriber = IpMgrSubscribe.IpMgrSubscribe(self.connector)
            self.subscriber.start()

            self.subscriber.subscribe(
                notifTypes=[
                    IpMgrSubscribe.IpMgrSubscribe.NOTIFDATA,
                ],
                fun=self._subs_notifData,
                isRlbl=False,
            )
            self.subscriber.subscribe(
                notifTypes=[
                    IpMgrSubscribe.IpMgrSubscribe.NOTIFEVENT,
                ],
                fun=self._subs_notifEvent,
                isRlbl=True,
            )
            self.subscriber.subscribe(
                notifTypes=[
                    IpMgrSubscribe.IpMgrSubscribe.NOTIFHEALTHREPORT,
                ],
                fun=self._subs_notifHealthReport,
                isRlbl=True,
            )
            self.subscriber.subscribe(
                notifTypes=[
                    IpMgrSubscribe.IpMgrSubscribe.ERROR,
                    IpMgrSubscribe.IpMgrSubscribe.FINISH,
                ],
                fun=self._subs_errorORfinish,
                isRlbl=True,
            )
        except TypeError as err:
            log.error(str(err))
            raise ApiException.ConnectionError(str(err))

        self.subscriber._thread.name = '{0}_IpMgrSubscribe'.format(
            self.netname)

        # initialize parent class
        EventBusClient.EventBusClient.__init__(
            self,
            'dataToMesh_{0}'.format(self.netname),
            self._ebHandler_dataToMesh,
        )

        # give this thread a name
        self.name = '{0}_GatewayListener'.format(self.netname)