コード例 #1
0
 private static void Preprocess(Temperature signal, OrchestratorTwin twin)
 {
     //if (signal.Scale != twin.Scale)
     if (twin.Scale == TemperatureScale.Celsius)
     {
         signal.Value = signal.Value * (9.0 / 5.0) + 32;
     }
 }
コード例 #2
0
        //this is a temp depedency, until we get the feature extraction module
        public Orchestrator(ITemperatureSensor temperatureProxy, IModelTraining trainerProxy)
        {
            temperatureProxy.Temperature.Subscribe(this, async signal =>
            {
                OrchestratorTwin twin;

                lock (_twinLock)
                {
                    twin = _lastTwin;
                }

                if (twin == null)
                {
                    return(MessageResult.Ok);
                }
                if (twin.Scale == TemperatureScale.Celsius)
                {
                    signal.Value = signal.Value * 9 / 5 + 32;
                }

                await BroadcastMessage(signal, twin);

                return(MessageResult.Ok);
            });

            trainerProxy.Model.Subscribe(this, async model =>
            {
                Logger.LogInformation(
                    $"New Trained Model for {model.Algorithm}. Updating the model in {model.Algorithm}");
                await Model.PublishAsync(model);
                return(MessageResult.Ok);
            });

            Twin.Subscribe(async twin =>
            {
                lock (_twinLock)
                {
                    _lastTwin = twin;
                }

                Logger.LogInformation($"Twin update. Routing  = {twin.RoutingMode.ToString()}");
                await Twin.ReportAsync(twin);
                return(TwinResult.Ok);
            });
        }
コード例 #3
0
        private async Task BroadcastMessage(Temperature signal, OrchestratorTwin twin)
        {
            Console.WriteLine($"Orchestrator.BroadcastMessage : {JsonConvert.SerializeObject(signal)}");

            List <Task> messages = new List <Task>();

            foreach (Routing item in Enum.GetValues(typeof(Routing)))
            {
                if (twin.RoutingMode.HasFlag(item))
                {
                    switch (item)
                    {
                    case Routing.Train:
                        messages.Add(Training.PublishAsync(signal));
                        break;

                    case Routing.Detect:
                        messages.Add(Detection.PublishAsync(signal));
                        break;

                    case Routing.VisualizeSource:
                        messages.Add(Visualization.PublishAsync(new GraphData()
                        {
                            CorrelationID = "Source",
                            Values        = new double[1][] { new double[2] {
                                                                  signal.TimeStamp, signal.Value
                                                              } }
                        }
                                                                ));
                        break;

                    default:
                        continue;
                    }
                }
            }

            if (messages.Count > 0)
            {
                await Task.WhenAll(messages).ConfigureAwait(false);
            }
        }
コード例 #4
0
        private async Task BroadcastAggregate(Reference <DataAggregate> aggregate, OrchestratorTwin twin)
        {
            List <Task> messages = new List <Task>();

            foreach (Routing item in Enum.GetValues(typeof(Routing)))
            {
                if (twin.RoutingMode.HasFlag(item))
                {
                    switch (item)
                    {
                    case Routing.VisualizeFeature:
                        messages.Add(Visualization.PublishAsync(new GraphData()
                        {
                            CorrelationID = "Feature",
                            Values        = aggregate.Message.Values
                        }
                                                                ));
                        break;

                    case Routing.FeatureExtraction:
                        messages.Add(FeatureExtraction.PublishAsync(new DataAggregate()
                        {
                            CorrelationID = "Feature",
                            Values        = aggregate.Message.Values
                        }));
                        break;

                    default:
                        continue;
                    }
                }
            }

            if (messages.Count > 0)
            {
                await Task.WhenAll(messages);
            }
        }