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