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); }
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); }