public async Task <EvaluationResult> VerifyData()
        {
            var result = new EvaluationResult {
                Code = 0, Passed = true, Message = "Verified Stream Analytics results"
            };

            try
            {
                var iotreg  = new IotUtilities.IotRegistry(parms.IotConnection);
                var devices = await iotreg.GetDeviceNames();

                result = await storage.RetrieveProcessedData(5, devices);
            }
            catch (Exception ex)
            {
                result.Code    = ex.HResult;
                result.Passed  = false;
                result.Message = $"Error testing Stream Analytics: {ex.Message}";
            }
            return(result);
        }
示例#2
0
        public async Task <EvaluationResult> ReceiveEvents(string consumerGroup = null)
        {
            var result = new EvaluationResult {
                Code = 0, Message = "Received messages", Passed = true
            };

            try
            {
                consumerGroup = consumerGroup ?? PartitionReceiver.DefaultConsumerGroupName;
                var regUtil     = new IotUtilities.IotRegistry(parms.IotConnection);
                var deviceNames = await regUtil.GetDeviceNames();

                var priorRowKeys = await storage.RetrieveLastKeys(deviceNames);

                var priorRowKey        = priorRowKeys[0];
                var currentRowKey      = priorRowKey;
                var eventProcessorHost = new EventProcessorHost(
                    parms.HubName,
                    consumerGroup,
                    parms.EhubConnection,
                    parms.EhubStorage,
                    this.containerName);
                try
                {
                    //await eventProcessorHost.RegisterEventProcessorAsync<EventHubProcessor>();
                    await eventProcessorHost.RegisterEventProcessorFactoryAsync(new MyEventProcessorFactory(parms.EhubStorage, tableName, containerName));

                    var start       = DateTime.Now;
                    var currentTime = DateTime.Now;
                    var seconds     = (currentTime - start).TotalSeconds;
                    //Wait for the first table entry for 30 seconds.
                    while ((priorRowKey == currentRowKey) && (seconds < 30))
                    {
                        Thread.Sleep(100);
                        currentTime   = DateTime.Now;
                        currentRowKey = (await storage.RetrieveLastKeys(deviceNames))[0];
                        seconds       = (currentTime - start).TotalSeconds;
                        System.Diagnostics.Trace.WriteLine($"Seconds: {seconds}\tPrior: {priorRowKey}\tCurrent: {currentRowKey}");
                    }
                    if (currentRowKey == priorRowKey)
                    {
                        //No rows found
                        result.Code    = -1;
                        result.Passed  = false;
                        result.Message = "No errors occurred, but no events were processed.";
                    }
                    else
                    {
                        //Wait for events to come in.  If synchronous, this will be 0 seconds.  This can be no more than 10 seconds.
                        if (parms.EventReceiveDelay > 10)
                        {
                            parms.EventReceiveDelay = 10;
                        }
                        if (parms.EventReceiveDelay > 0)
                        {
                            Thread.Sleep(parms.EventReceiveDelay * 1000);
                        }
                        List <DeviceReadingEntity> data = new List <DeviceReadingEntity>();

                        data.AddRange((await storage.RetrieveProcessedData(5, deviceNames)).Data);
                        result.Data    = data;
                        result.Message = $"IoT device messages were received and processed into the {tableName} storage table";
                    }
                }
                finally
                {
                    await eventProcessorHost.UnregisterEventProcessorAsync();
                }
            }
            catch (Exception outer)
            {
                result.Passed  = false;
                result.Code    = outer.HResult;
                result.Message = $"Error: {outer.Message}";
            }
            return(result);
        }