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
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
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
def test_get_settings(self): ''' get_settings returns config class from file ''' c = get_settings('config.json') self.assertTrue(c.version, '0.1')