コード例 #1
0
        public Task <CalcData[]> Calculate(BatchTelemetry batchTelemetry)
        {
            var batchStatsBySensors = batchTelemetry.DataPoints.GroupBy(x => x.SensorId)
                                      .Select(x =>
            {
                decimal avg = 0, stdDev = 0;

                try
                {
                    avg    = x.Average(y => y.Value);
                    stdDev = (decimal)Math.Sqrt((double)x.Select(y => y.Value - avg).Select(y => y * y).Average());
                }
                catch (OverflowException)
                {
                    //todo: logs
                }

                return(new CalcData
                {
                    BatchId = batchTelemetry.BatchId,
                    BatchStartTime = batchTelemetry.BatchStartTime,
                    SensorId = x.Key,
                    Average = avg,
                    StandardDeviation = stdDev
                });
            })
                                      .ToArray();

            return(Task.FromResult(batchStatsBySensors));
        }
コード例 #2
0
        public Task HandleAsync(IMessage message)
        {
            var dataPoint = message as DataPoint;

            if (dataPoint == null)
            {
                return(Task.CompletedTask);
            }

            var currentBatchTelemetry = batchCachingService.GetCurrentBatchTelemetry();

            if (currentBatchTelemetry?.BatchId == dataPoint.BatchId)
            {
                // add telemetry to current batch
                currentBatchTelemetry.DataPoints.Add(dataPoint);
                batchCachingService.AddCurrentBatchTelemetry(currentBatchTelemetry);

                return(Task.CompletedTask);
            }
            else if (currentBatchTelemetry != null)
            {
                // send previous batch telemetry to calc service
                eventBus.Publish(EventTopic.BatchData, currentBatchTelemetry);
            }

            // new batch started
            currentBatchTelemetry = new BatchTelemetry
            {
                BatchId        = dataPoint.BatchId,
                BatchStartTime = dataPoint.BatchTimestamp,
                DataPoints     = new List <DataPoint> {
                    dataPoint
                }
            };

            batchCachingService.AddCurrentBatchTelemetry(currentBatchTelemetry);

            return(Task.CompletedTask);
        }
コード例 #3
0
 public void AddCurrentBatchTelemetry(BatchTelemetry batchTelemetry)
 {
     cache.Store(BatchCacheKey, batchTelemetry, TimeSpan.FromSeconds(batchSettings.BatchCachingTime));
 }