//--// public WindowsService( ILogger logger ) { if( logger == null ) { throw new ArgumentException( "Cannot run service without logging" ); } _logger = logger; if( logger is TunableLogger ) { TunableLogger.LoggingLevel loggingLevel = TunableLogger.LevelFromString( ConfigurationManager.AppSettings.Get( "LoggingLevel" ) ); ( ( TunableLogger )logger ).Level = ( loggingLevel != TunableLogger.LoggingLevel.Undefined ) ? loggingLevel : TunableLogger.LoggingLevel.Errors; } try { _THREADING.TaskScheduler.UnobservedTaskException += OnUnobservedTaskException; // Name the Windows Service ServiceName = Constants.WindowsServiceName; _gatewayQueue = new GatewayQueue<QueuedItem>( ); IotHubConfig iotHubConfig = Loader.GetIotHubConfig( ); if( iotHubConfig == null ) { _logger.LogError( "IoT Hub connection configuration is missing" ); return; } _MessageSender = new MessageSender<SensorDataContract>(iotHubConfig.IotHubConnectionString, _logger); _batchSenderThread = new BatchSenderThread<QueuedItem, SensorDataContract>( _gatewayQueue, _MessageSender, null,//m => DataTransforms.AddTimeCreated(DataTransforms.SensorDataContractFromQueuedItem(m, _Logger)), new Func<QueuedItem, string>( m => m.JsonData ), _logger ); _dataIntakeLoader = new DeviceAdapterLoader( Loader.GetSources( ), Loader.GetEndpoints( ), _logger ); TaskWrapper.Run( ( ) => IPAddressHelper.GetIPAddressString( ref _gatewayIPAddressString ) ); DataTransformsConfig dataTransformsConfig = Loader.GetDataTransformsConfig( ); if( dataTransformsConfig.AttachIP || dataTransformsConfig.AttachTime ) { Func<string, SensorDataContract> transform = ( m => DataTransforms.SensorDataContractFromString( m, _logger ) ); if( dataTransformsConfig.AttachTime ) { var transformPrev = transform; transform = ( m => DataTransforms.AddTimeCreated( transformPrev( m ) ) ); } if( dataTransformsConfig.AttachTime ) { var transformPrev = transform; transform = ( m => DataTransforms.AddIPToLocation( transformPrev( m ), _gatewayIPAddressString ) ); } _gatewayTransform = ( m => DataTransforms.QueuedItemFromSensorDataContract( transform( m ) ) ); } } catch( Exception ex ) { _logger.LogError( "Exception creating WindowsService: " + ex.Message ); } }
public void TestDeviceAdapter( ) { try { GatewayService service = PrepareGatewayService( ); DeviceAdapterLoader dataIntakeLoader = new DeviceAdapterLoader( Loader.GetSources( ), Loader.GetEndpoints( ), _logger ); _totalMessagesToSend += 5; dataIntakeLoader.StartAll( service.Enqueue, DataArrived ); _completed.WaitOne( ); dataIntakeLoader.StopAll( ); _batchSenderThread.Stop( STOP_TIMEOUT_MS ); } catch( Exception ex ) { _logger.LogError( "exception caught: " + ex.StackTrace ); } finally { _batchSenderThread.Stop( STOP_TIMEOUT_MS ); _sender.Close( ); } }
//--// private static void InitGateway( ILogger logger ) { if( logger == null ) { throw new ArgumentException( "Cannot run service without logging" ); } _logger = logger; if( logger is TunableLogger ) { TunableLogger.LoggingLevel loggingLevel = TunableLogger.LevelFromString( ConfigurationManager.AppSettings.Get( "LoggingLevel" ) ); ( ( TunableLogger )logger ).Level = ( loggingLevel != TunableLogger.LoggingLevel.Undefined ) ? loggingLevel : TunableLogger.LoggingLevel.Errors; } try { System.Threading.Tasks.TaskScheduler.UnobservedTaskException += OnUnobservedTaskException; // Name the Windows Service _gatewayQueue = new GatewayQueue<QueuedItem>( ); AMQPConfig amqpConfig = Loader.GetAMQPConfig( ); if( amqpConfig == null ) { _logger.LogError( "AMQP configuration is missing" ); return; } _AMPQSender = new AMQPSender<SensorDataContract>( amqpConfig.AMQPSAddress, amqpConfig.EventHubName, amqpConfig.EventHubMessageSubject, amqpConfig.EventHubDeviceId, amqpConfig.EventHubDeviceDisplayName, _logger ); _batchSenderThread = new BatchSenderThread<QueuedItem, SensorDataContract>( _gatewayQueue, _AMPQSender, null,//m => DataTransforms.AddTimeCreated(DataTransforms.SensorDataContractFromQueuedItem(m, _Logger)), new Func<QueuedItem, string>( m => m.JsonData ), _logger ); _dataIntakeLoader = new DeviceAdapterLoader( Loader.GetSources( ), Loader.GetEndpoints( ), _logger ); TaskWrapper.Run( ( ) => IPAddressHelper.GetIPAddressString( ref _gatewayIPAddressString ) ); DataTransformsConfig dataTransformsConfig = Loader.GetDataTransformsConfig( ); if( dataTransformsConfig.AttachIP || dataTransformsConfig.AttachTime ) { Func<string, SensorDataContract> transform = ( m => DataTransforms.SensorDataContractFromString( m, _logger ) ); if( dataTransformsConfig.AttachTime ) { var transformPrev = transform; transform = ( m => DataTransforms.AddTimeCreated( transformPrev( m ) ) ); } if( dataTransformsConfig.AttachTime ) { var transformPrev = transform; transform = ( m => DataTransforms.AddIPToLocation( transformPrev( m ), _gatewayIPAddressString ) ); } _gatewayTransform = ( m => DataTransforms.QueuedItemFromSensorDataContract( transform( m ) ) ); } } catch( Exception ex ) { _logger.LogError( "Exception creating Gateway: " + ex.Message ); } }
public void TestRecieveMessagesFromSocketDevice( ) { const int MESSAGES_TO_SEND_BY_SOCKET = 5; try { IList<string> sources = Loader.GetSources( ) .Where( m => m.Contains( "Socket" ) ).ToList( ); IList<SensorEndpoint> endpoints = Loader.GetEndpoints( ) .Where( m => m.Name.Contains( "Socket" ) ).ToList( ); if( endpoints.Count == 0 ) { throw new Exception( "Need to specify local ip host for Socket interations " + "and name of endpoint should contain \"Socket\"" ); } GatewayService service = PrepareGatewayService( ); SensorEndpoint endpoint = endpoints.First( ); SocketClientTestDevice device = new SocketClientTestDevice( _logger ); device.Start( endpoint, MESSAGES_TO_SEND_BY_SOCKET ); DeviceAdapterLoader dataIntakeLoader = new DeviceAdapterLoader( sources, endpoints, _logger ); _totalMessagesToSend += MESSAGES_TO_SEND_BY_SOCKET; dataIntakeLoader.StartAll( service.Enqueue, DataArrived ); _completed.WaitOne( ); dataIntakeLoader.StopAll( ); _batchSenderThread.Stop( STOP_TIMEOUT_MS ); } catch( Exception ex ) { _logger.LogError( "exception caught: " + ex.StackTrace ); } finally { _batchSenderThread.Stop( STOP_TIMEOUT_MS ); _sender.Close( ); } }
public void TestRealTimeData( ) { const int INITIAL_MESSAGES_BOUND = 5; const int STOP_TIMEOUT_MS = 5000; // ms try { IList<string> sources = Loader.GetSources( ).Where( m => !m.Contains( "Mock" ) && ( m.Contains( "Socket" ) || m.Contains( "SerialPort" ) ) ).ToList( ); IList<SensorEndpoint> endpoints = Loader.GetEndpoints( ); if( !endpoints.Any( m => m.Name.Contains( "Socket" ) ) ) { Console.Out.WriteLine( "Need to specify local ip host for Socket interations " + "and name of endpoint should contain \"Socket\"" ); } GatewayService service = PrepareGatewayService( ); DeviceAdapterLoader dataIntakeLoader = new DeviceAdapterLoader( sources, endpoints, _logger ); _totalMessagesToSend += INITIAL_MESSAGES_BOUND; dataIntakeLoader.StartAll( service.Enqueue, DataArrived ); _completed.WaitOne( ); dataIntakeLoader.StopAll( ); _batchSenderThread.Stop( STOP_TIMEOUT_MS ); } catch( Exception ex ) { _logger.LogError( "exception caught: " + ex.StackTrace ); } finally { _batchSenderThread.Stop( STOP_TIMEOUT_MS ); _sender.Close( ); } }