static void Main(string[] args)
        {
            // we do not need a tunable logger, but this is a nice way to test it...
            TunableLogger logger = TunableLogger.FromLogger(
                SafeLogger.FromLogger(TestLogger.Instance)
                );

            TunableLogger.LoggingLevel loggingLevel = TunableLogger.LevelFromString(ConfigurationManager.AppSettings.Get("LoggingLevel"));

            logger.Level = (loggingLevel != TunableLogger.LoggingLevel.Undefined) ? loggingLevel : TunableLogger.LoggingLevel.Errors;


            /////////////////////////////////////////////////////////////////////////////////////////////
            // Test core service
            //
            CoreTest t2 = new CoreTest(logger);

            t2.Run( );
            Console.WriteLine(String.Format("Core Test completed"));

            //////////////////////////////////////////////////////////////////////////////////////////////
            // Test Web service and core service
            //
            SensorDataContract sensorData     = RandomSensorDataGenerator.Generate( );
            string             serializedData = JsonConvert.SerializeObject(sensorData);

            WebServiceTest t1 = new WebServiceTest("http://localhost:8000/GatewayService/API/Enqueue?jsonData=" + serializedData, logger);

            t1.Run( );
            Console.WriteLine(String.Format("WebService Test completed, {0} messages sent", t1.TotalMessagesSent));

            /////////////////////////////////////////////////////////////////////////////////////////////
            // Test Socket
            //
            SocketTest t3 = new SocketTest(logger);

            t3.Run( );
            Console.WriteLine(String.Format("Socket Test completed"));

            // wait for logging tasks to complete
            Console.WriteLine("Press enter to exit");
            Console.ReadLine( );
        }
        static void Main(string[] args)
        {
            ILogger logger = null;

            try
            {
                logger = TunableLogger.FromLogger(
                    SafeLogger.FromLogger(EventLogger.Instance)
                    );

                Run(new WindowsService(logger));
            }
            catch (Exception ex)
            {
                if (logger != null)
                {
                    logger.LogError(ex.ToString( ));
                }

                // just return...
            }
        }
Exemple #3
0
        static void Main(string[] args)
        {
            ILogger logger = null;

            try
            {
                logger = TunableLogger.FromLogger(
                    SafeLogger.FromLogger(NLogEventLogger.Instance)
                    );

                InitGateway(logger);
                Start();
            }
            catch (Exception ex)
            {
                if (logger != null)
                {
                    logger.LogError(ex.ToString( ));
                }

                // just return...
            }
        }
        //--//

        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>( );
                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 WindowsService: " + ex.Message);
            }
        }
Exemple #5
0
        //--//

        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>( );
                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 Gateway: " + ex.Message);
            }
        }