Beispiel #1
0
def report(timestamp, vin, data):
        """
        Log the location record
        """
        conf = get_settings()
        
        kafka = None
        logger.info('Kafka MQ Server: Report Request: Time: %s, VIN: %s, Data: %s.', timestamp, vin, data)
        payload = {}
        payload['timestamp'] = timestamp
        payload['vin'] = vin
        payload['data'] = data
        # Connect to Kafka Message Queue Server
       
        try:
            kafka = KafkaClient(conf['TRACKING_MQ_URL'])
        except:
            logger.error("%s: Kafka Message Queue Server unavailable:", conf['TRACKING_MQ_URL'])
            kafka = None
            return False
                
        producer = SimpleProducer(kafka)
        producer.send_messages(conf['TRACKING_MQ_TOPIC'], json.dumps(payload))
        logger.info("%s: Report data published to message queue.", conf['TRACKING_MQ_URL'])
        return True
Beispiel #2
0
    def run(self):
        # Execution starts here
        rvi_logger.info('RVI Server: Starting...')

        conf = get_settings()

        rvi_logger.info('RVI Server: General Configuration: ' +
                        'RVI_SERVICE_EDGE_URL: ' + conf['SERVICE_EDGE_URL'] +
                        ', ' + 'MEDIA_ROOT: ' + conf['MEDIA_ROOT'])

        # setup RVI Service Edge
        rvi_logger.info(
            'RVI Server: Setting up outbound connection to RVI Service Edge at %s',
            conf['SERVICE_EDGE_URL'])
        self.rvi_service_edge = jsonrpclib.Server(conf['SERVICE_EDGE_URL'])

        # SOTA Startup
        if conf['SOTA_ENABLE'] == True:
            # log SOTA configuration
            rvi_logger.info('RVI Server: SOTA Configuration: ' +
                            'RVI_SOTA_CALLBACK_URL: ' +
                            conf['SOTA_CALLBACK_URL'] + ', ' +
                            'RVI_SOTA_SERVICE_ID: ' + conf['SOTA_SERVICE_ID'] +
                            ', ' + 'RVI_SOTA_CHUNK_SIZE: ' +
                            str(conf['SOTA_CHUNK_SIZE']))
            # start the SOTA callback server
            try:
                rvi_logger.info(
                    'RVI Server: Starting SOTA Callback Server on %s with service id %s.',
                    conf['SOTA_CALLBACK_URL'], conf['SOTA_SERVICE_ID'])
                self.sota_cb_server = SOTACallbackServer(
                    self.rvi_service_edge, conf['SOTA_CALLBACK_URL'],
                    conf['SOTA_SERVICE_ID'])
                self.sota_cb_server.start()
                rvi_logger.info('RVI Server: SOTA Callback Server started.')
            except Exception as e:
                rvi_logger.error(
                    'RVI Server: Cannot start SOTA Callback Server: %s', e)
                sys.exit(1)

            # wait for SOTA callback server to come up
            time.sleep(0.5)

            # start SOTA Transmission Server
            try:
                rvi_logger.info(
                    'RVI Server: Starting SOTA Transmission Server.')
                self.sota_tx_server = SOTATransmissionServer(
                    self.rvi_service_edge, conf['SOTA_SERVICE_ID'],
                    conf['SOTA_CHUNK_SIZE'])
                self.sota_tx_server.start()
                rvi_logger.info(
                    'RVI Server: SOTA Transmission Server started.')
            except Exception as e:
                rvi_logger.error(
                    'RVI Server: Cannot start SOTA Transmission Server: %s', e)
                sys.exit(1)

            # wait for SOTA transmission server to come up
            time.sleep(0.5)

        # Tracking Startup
        if conf['TRACKING_ENABLE'] == True:
            # log Tracking configuration
            rvi_logger.info('RVI Server: Tracking Configuration: ' +
                            'RVI_TRACKING_CALLBACK_URL: ' +
                            conf['TRACKING_CALLBACK_URL'] + ', ' +
                            'RVI_TRACKING_SERVICE_ID: ' +
                            conf['TRACKING_SERVICE_ID'])
            # start the Tracking callback server
            try:
                rvi_logger.info(
                    'RVI Server: Starting Tracking Callback Server on %s with service id %s.',
                    conf['TRACKING_CALLBACK_URL'], conf['TRACKING_SERVICE_ID'])
                self.tracking_cb_server = TrackingCallbackServer(
                    self.rvi_service_edge, conf['TRACKING_CALLBACK_URL'],
                    conf['TRACKING_SERVICE_ID'])
                self.tracking_cb_server.start()
                rvi_logger.info(
                    'RVI Server: Tracking Callback Server started.')
            except Exception as e:
                rvi_logger.error(
                    'RVI Server: Cannot start Tracking Callback Server: %s', e)
                sys.exit(1)

            # wait for SOTA callback server to come up
            time.sleep(0.5)

        else:
            rvi_logger.info('RVI Server: Tracking not enabled')

        # Publish to Kafka Message Queue
        if conf['TRACKING_MQ_PUBLISH'] == True:
            #log kafka configuration
            rvi_logger.info('RVI Server: Publishing to Kafka Message Queue: ' +
                            conf['TRACKING_MQ_URL'] + ' , with topic: ' +
                            conf['TRACKING_MQ_TOPIC'])

            #Start the Kafka message queue forwarding server
            try:
                rvi_logger.info('%s: Publishing to message queue enabled.',
                                self.__class__.__name__)
                self.mq_sink_server = MQSinkServer(
                    self.rvi_service_edge, conf['TRACKING_CALLBACK_URL'],
                    conf['TRACKING_SERVICE_ID'])
                self.mq_sink_server.start()
                rvi_logger.info('RVI Server: Message Queue Server started.')
            except Exception as e:
                rvi_logger.error(
                    'RVI Server: Cannot start Message Queue Server: %s', e)
                sys.exit(1)

        else:
            rvi_logger.info('RVI Server: MQ Publish not enabled')

        # Save message Queue contents into HBase
        if conf['TRACKING_MQ_HBASE'] == True:
            rvi_logger.info('RVI Server: Saving to HBase: ' +
                            conf['TRACKING_MQ_HBASE_URL'])

            #Start HBase Server thread
            try:
                rvi_logger.info('%s: Saving messages to HBase enabled.',
                                self.__class__.__name__)
                self.hbase_server = HBaseServer(
                    conf['TRACKING_MQ_URL'], conf['TRACKING_MQ_TOPIC'],
                    conf['TRACKING_MQ_HBASE_URL'],
                    conf['TRACKING_MQ_HBASE_PORT'],
                    conf['TRACKING_MQ_HBASE_TABLE'])
                self.hbase_server.start()
                rvi_logger.info('RVI Server: Kafka -> HBase consumer started.')
            except Exception as e:
                rvi_logger.error('RVI Server: Cannot start HBase Server: %s',
                                 e)
                sys.exit(1)
        else:
            rvi_logger.info('RVI Server: HBase server storage not enabled')

        # catch signals for proper shutdown
        for sig in (SIGABRT, SIGTERM, SIGINT):
            signal(sig, self.cleanup)

        # main execution loop
        timeout = conf['DB_CLOSE_TIMEOUT']
        while True:
            try:
                time.sleep(conf['DB_PING_INTERVAL'])
                # If we are idle too long the database server may
                # close the connection on us, ping the server to check if
                # the connection is still up.
                if (connection.connection is not None):
                    if (connection.is_usable() == True):
                        rvi_logger.debug(
                            'RVI Server: Database connection is up.')
                        # Close connection if open longer than the timeout
                        timeout -= conf['DB_PING_INTERVAL']
                        if (timeout <= 0):
                            connection.close()
                            timeout = conf['DB_CLOSE_TIMEOUT']
                            rvi_logger.info(
                                'RVI Server: Idle Timeout: closed database connection.'
                            )
                    else:
                        rvi_logger.error(
                            'RVI Server: Database connection is down.')
                        connection.close()
                elif (conf['TRACKING_MQ_PUBLISH'] == True
                      and conf['TRACKING_ENABLE'] == False):
                    pass
                else:
                    rvi_logger.error(
                        'RVI Server: Database connection is closed.')
                    # As long as the connection is closed reset the timeout
                    timeout = conf['DB_CLOSE_TIMEOUT']

            except KeyboardInterrupt:
                print('\n')
                break
Beispiel #3
0
    def run(self):
        # Execution starts here
        rvi_logger.info('RVI Server: Starting...')

        conf = get_settings()

        rvi_logger.info('RVI Server: General Configuration: ' + 
            'RVI_SERVICE_EDGE_URL: '  + conf['SERVICE_EDGE_URL']  + ', ' +
            'MEDIA_ROOT: '            + conf['MEDIA_ROOT']
            )

        # setup RVI Service Edge
        rvi_logger.info('RVI Server: Setting up outbound connection to RVI Service Edge at %s', conf['SERVICE_EDGE_URL'])
        self.rvi_service_edge = jsonrpclib.Server(conf['SERVICE_EDGE_URL'])

        # SOTA Startup
        if conf['SOTA_ENABLE'] == True:
            # log SOTA configuration
            rvi_logger.info('RVI Server: SOTA Configuration: ' + 
                'RVI_SOTA_CALLBACK_URL: ' + conf['SOTA_CALLBACK_URL'] + ', ' +
                'RVI_SOTA_SERVICE_ID: '   + conf['SOTA_SERVICE_ID']   + ', ' +
                'RVI_SOTA_CHUNK_SIZE: '   + str(conf['SOTA_CHUNK_SIZE'])
                )
            # start the SOTA callback server
            try:
                rvi_logger.info('RVI Server: Starting SOTA Callback Server on %s with service id %s.', conf['SOTA_CALLBACK_URL'], conf['SOTA_SERVICE_ID'])
                self.sota_cb_server = SOTACallbackServer(self.rvi_service_edge, conf['SOTA_CALLBACK_URL'], conf['SOTA_SERVICE_ID'])
                self.sota_cb_server.start()
                rvi_logger.info('RVI Server: SOTA Callback Server started.')
            except Exception as e:
                rvi_logger.error('RVI Server: Cannot start SOTA Callback Server: %s', e)
                sys.exit(1)

            # wait for SOTA callback server to come up    
            time.sleep(0.5)

            # start SOTA Transmission Server
            try:
                rvi_logger.info('RVI Server: Starting SOTA Transmission Server.')
                self.sota_tx_server = SOTATransmissionServer(self.rvi_service_edge, conf['SOTA_SERVICE_ID'], conf['SOTA_CHUNK_SIZE'])
                self.sota_tx_server.start()
                rvi_logger.info('RVI Server: SOTA Transmission Server started.')
            except Exception as e:
                rvi_logger.error('RVI Server: Cannot start SOTA Transmission Server: %s', e)
                sys.exit(1)
    
            # wait for SOTA transmission server to come up    
            time.sleep(0.5)
            
        # Tracking Startup
        if conf['TRACKING_ENABLE'] == True:
            # log Tracking configuration
            rvi_logger.info('RVI Server: Tracking Configuration: ' + 
                'RVI_TRACKING_CALLBACK_URL: ' + conf['TRACKING_CALLBACK_URL'] + ', ' +
                'RVI_TRACKING_SERVICE_ID: '   + conf['TRACKING_SERVICE_ID']
                )
            # start the Tracking callback server
            try:
                rvi_logger.info('RVI Server: Starting Tracking Callback Server on %s with service id %s.', conf['TRACKING_CALLBACK_URL'], conf['TRACKING_SERVICE_ID'])
                self.tracking_cb_server = TrackingCallbackServer(self.rvi_service_edge, conf['TRACKING_CALLBACK_URL'], conf['TRACKING_SERVICE_ID'])
                self.tracking_cb_server.start()
                rvi_logger.info('RVI Server: Tracking Callback Server started.')
            except Exception as e:
                rvi_logger.error('RVI Server: Cannot start Tracking Callback Server: %s', e)
                sys.exit(1)

            # wait for SOTA callback server to come up    
            time.sleep(0.5)

        else:
            rvi_logger.info('RVI Server: Tracking not enabled')
        
        # Publish to Kafka Message Queue
        if conf['TRACKING_MQ_PUBLISH'] == True:
            #log kafka configuration
            rvi_logger.info('RVI Server: Publishing to Kafka Message Queue: ' + conf['TRACKING_MQ_URL'] + ' , with topic: ' + conf['TRACKING_MQ_TOPIC'])

            #Start the Kafka message queue forwarding server
            try:
                rvi_logger.info('%s: Publishing to message queue enabled.', self.__class__.__name__)
                self.mq_sink_server = MQSinkServer(self.rvi_service_edge, conf['TRACKING_CALLBACK_URL'], conf['TRACKING_SERVICE_ID'])
                self.mq_sink_server.start()
                rvi_logger.info('RVI Server: Message Queue Server started.')
            except Exception as e:
                rvi_logger.error('RVI Server: Cannot start Message Queue Server: %s', e)
                sys.exit(1)

        else:
            rvi_logger.info('RVI Server: MQ Publish not enabled')

        # Save message Queue contents into HBase
        if conf['TRACKING_MQ_HBASE'] == True:
            rvi_logger.info('RVI Server: Saving to HBase: ' + conf['TRACKING_MQ_HBASE_URL'])
           
            #Start HBase Server thread
            try:
                rvi_logger.info('%s: Saving messages to HBase enabled.', self.__class__.__name__)
                self.hbase_server = HBaseServer(conf['TRACKING_MQ_URL'],conf['TRACKING_MQ_TOPIC'],conf['TRACKING_MQ_HBASE_URL'], conf['TRACKING_MQ_HBASE_PORT'], conf['TRACKING_MQ_HBASE_TABLE']) 
                self.hbase_server.start()
                rvi_logger.info('RVI Server: Kafka -> HBase consumer started.')
            except Exception as e:
                rvi_logger.error('RVI Server: Cannot start HBase Server: %s', e)
                sys.exit(1)
        else:
            rvi_logger.info('RVI Server: HBase server storage not enabled')
        
        # catch signals for proper shutdown
        for sig in (SIGABRT, SIGTERM, SIGINT):
            signal(sig, self.cleanup)

        # main execution loop
        timeout = conf['DB_CLOSE_TIMEOUT']
        while True:
            try:
                time.sleep(conf['DB_PING_INTERVAL'])
                # If we are idle too long the database server may
                # close the connection on us, ping the server to check if
                # the connection is still up.
                if (connection.connection is not None):
                    if (connection.is_usable() == True): 
                        rvi_logger.debug('RVI Server: Database connection is up.')
                        # Close connection if open longer than the timeout
                        timeout -= conf['DB_PING_INTERVAL']
                        if (timeout <= 0):
                            connection.close()
                            timeout = conf['DB_CLOSE_TIMEOUT']
                            rvi_logger.info('RVI Server: Idle Timeout: closed database connection.')
                    else:
                        rvi_logger.error('RVI Server: Database connection is down.')
                        connection.close()
                elif (conf['TRACKING_MQ_PUBLISH'] == True and conf['TRACKING_ENABLE'] == False):
                    pass
                else:    
                    rvi_logger.error('RVI Server: Database connection is closed.')
                    # As long as the connection is closed reset the timeout
                    timeout = conf['DB_CLOSE_TIMEOUT']
                    
            except KeyboardInterrupt:
                print ('\n')
                break
Beispiel #4
0
 def test_get_settings(self):
     '''
     get_settings returns config class from file
     '''
     c = get_settings('config.json')
     self.assertTrue(c.version, '0.1')