public void SampleAcquired(IExperimentConnection document, DateTime sampleTime) { Logger.Info($"Sample acquired from {document.DocumentName} at {sampleTime.ToShortTimeString()}"); try { var chartConnection = document["Distributions"]; Logger.Info($"Chart type = {chartConnection.ChartType.ToString()}"); var chart = chartConnection as IDistributionChartConnection; if (chart == null) { throw new ArgumentNullException(nameof(chart)); } var sampleId = chart.LoadSample(sampleTime); if (sampleId == Guid.Empty) { Logger.Warn($"Unable to load sample with {sampleTime}"); return; } Logger.Info($"Sample Id = {sampleId}"); Logger.Info("Got raw data:"); var rawXMidpoints = chart.GetRawXMidpoints(sampleId); Logger.Info(rawXMidpoints == null ? "X=NULL" : $"Xmidpoint length = {rawXMidpoints.Length.ToString()}"); var rawYData = chart.GetRawYData(sampleId); Logger.Info(rawYData == null ? "Y=NULL" : $" rawYData length = {rawYData.Length.ToString()}"); if (Convert.ToBoolean(_config["influxdbEnabled"])) { Logger.Info("Writing to InfluxDB"); var tags = new Dictionary <string, object>(); tags["experiment"] = document.DocumentName; string lineProtocol = _config["influxdbMeasurementName"] + ","; lineProtocol += $"experiment={document.DocumentName} "; for (int i = 0; i < rawXMidpoints.Length; i++) { lineProtocol += $"{rawXMidpoints[i].ToString("0.0")}={rawYData[i].ToString("0.0")},"; } lineProtocol = lineProtocol.TrimEnd(','); var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); lineProtocol += $" {(long) (sampleTime.ToUniversalTime() - epoch).TotalMilliseconds}"; var databaseName = _config["influxdbDatabaseName"]; var task = _client.PostAsync($"{_config["influxdbUri"]}/write?db={databaseName}&precision=ms", new StringContent(lineProtocol)); task.Wait(); Logger.Info( $"InfluxDB response: {task.Result.StatusCode}, message={task.Result.Content.ReadAsStringAsync().Result}"); } if (Convert.ToBoolean(_config["mqttEnabled"])) { var counts = new List <double>(); for (int i = 0; i < rawYData.Length; i++) { counts.Add(rawYData[i]); } var countsJsonified = JsonConvert.SerializeObject(counts); string payloadTopic = _config["mqttTopic"] + "/counts"; _mqttClient.Publish(payloadTopic, Encoding.ASCII.GetBytes(countsJsonified)); Logger.Info("Points written to MQTT"); if (!mqttSizeAxisTransmitted) { mqttSizeAxisTransmitted = true; string sizeAxisTopic = _config["mqttTopic"] + "/sizes"; var sizes = new List <double>(); for (int i = 0; i < rawXMidpoints.Length; i++) { sizes.Add(rawXMidpoints[i]); } var sizesJsonified = JsonConvert.SerializeObject(sizes); _mqttClient.Publish(sizeAxisTopic, Encoding.ASCII.GetBytes(sizesJsonified), 0, true); Logger.Info("Sizes written to MQTT"); } } } catch (Exception ex) { Logger.Error(ex); } }
public void WarningMessageChanged(IExperimentConnection document, string warningMessage) { Logger.Warn($"Warning from {document.DocumentName}: {warningMessage}"); }
public void ExperimentStatusChanged(IExperimentConnection document, ExperimentStatus previousStatus, ExperimentStatus newStatus) { Logger.Info( $"Experiment {document.DocumentName} status changed from {previousStatus.ToString()} to {newStatus.ToString()}"); }
public void ErrorMessageChanged(IExperimentConnection document, string errorMessage) { Logger.Warn($"Error from {document.DocumentName}: {errorMessage}"); }