Пример #1
0
        protected override void SendDataTimer(object state)
        {
            DoubleBarSensorValue dataObject  = GetDataObject();
            CommonSensorValue    commonValue = ToCommonSensorValue(dataObject);

            EnqueueData(commonValue);
        }
        public void AddSensorValue(DoubleBarSensorValue value)
        {
            try
            {
                string productName = _productManager.GetProductNameByKey(value.Key);
                bool   isNew       = false;
                if (!_productManager.IsSensorRegistered(productName, value.Path))
                {
                    isNew = true;
                    _productManager.AddSensor(productName, value);
                }
                DateTime   timeCollected = DateTime.Now;
                SensorData updateMessage = _converter.Convert(value, productName, timeCollected, isNew ? TransactionType.Add : TransactionType.Update);
                _queueManager.AddSensorData(updateMessage);
                _valuesCache.AddValue(productName, updateMessage);

                if (value.EndTime == DateTime.MinValue)
                {
                    _barsStorage.Add(value, updateMessage.Product, timeCollected);
                    return;
                }

                _barsStorage.Remove(productName, value.Path);
                SensorDataEntity dataObject = _converter.ConvertToDatabase(value, timeCollected);
                Task.Run(() => SaveSensorValue(dataObject, productName));
            }
            catch (Exception e)
            {
                _logger.LogError(e, $"Failed to add value for sensor '{value?.Path}'");
            }
        }
Пример #3
0
        private CommonSensorValue ToCommonSensorValue(DoubleBarSensorValue data)
        {
            CommonSensorValue result          = new CommonSensorValue();
            string            serializedValue = GetStringData(data);

            result.TypedValue = serializedValue;
            result.SensorType = SensorType.DoubleBarSensor;
            return(result);
        }
Пример #4
0
 private void FillNumericData(DoubleBarSensorValue value, List <double> values)
 {
     value.Max   = GetRoundedNumber(values.Last());
     value.Min   = GetRoundedNumber(values.First());
     value.Count = values.Count;
     value.Mean  = GetRoundedNumber(CountMean(values));
     value.Percentiles.Add(new PercentileValueDouble(GetRoundedNumber(GetPercentile(values, 0.25)), 0.25));
     value.Percentiles.Add(new PercentileValueDouble(GetRoundedNumber(GetPercentile(values, 0.5)), 0.5));
     value.Percentiles.Add(new PercentileValueDouble(GetRoundedNumber(GetPercentile(values, 0.75)), 0.75));
 }
Пример #5
0
 public override CommonSensorValue GetLastValue()
 {
     try
     {
         DoubleBarSensorValue dataObject  = GetPartialDataObject();
         CommonSensorValue    commonValue = ToCommonSensorValue(dataObject);
         return(commonValue);
     }
     catch (Exception e)
     {
         return(null);
     }
 }
Пример #6
0
 public ActionResult <DoubleBarSensorValue> Post([FromBody] DoubleBarSensorValue sensorValue)
 {
     try
     {
         _monitoringCore.AddSensorValue(sensorValue);
         return(Ok(sensorValue));
     }
     catch (Exception e)
     {
         _logger.LogError(e, "Failed to put data!");
         return(BadRequest(sensorValue));
     }
 }
Пример #7
0
 protected override string GetStringData(SensorValueBase data)
 {
     try
     {
         DoubleBarSensorValue typedData = (DoubleBarSensorValue)data;
         return(JsonConvert.SerializeObject(typedData));
         //return Serializer.Serialize(typedData);
     }
     catch (System.Exception e)
     {
         Console.WriteLine(e);
         return(string.Empty);
     }
 }
 public ActionResult <DoubleBarSensorValue> Post([FromBody] DoubleBarSensorValue sensorValue)
 {
     try
     {
         _dataCollector.ReportSensorsCount(1);
         _dataReceiver.AddSensorValue(sensorValue);
         return(Ok(sensorValue));
     }
     catch (Exception e)
     {
         _logger.LogError(e, "Failed to put data!");
         return(BadRequest(sensorValue));
     }
 }
Пример #9
0
        internal static string GetTypedData(SensorValueBase sensorValue)
        {
            object sensorData = sensorValue switch
            {
                BoolSensorValue boolSensorValue => GetBoolSensorTypedData(boolSensorValue),
                IntSensorValue intSensorValue => GetIntSensorTypedData(intSensorValue),
                DoubleSensorValue doubleSensorValue => GetDoubleSensorTypedData(doubleSensorValue),
                StringSensorValue stringSensorValue => GetStringSensorTypedData(stringSensorValue),
                IntBarSensorValue intBarSensorValue => GetIntBarSensorTypedData(intBarSensorValue),
                DoubleBarSensorValue doubleBarSensorValue => GetDoubleBarSensorTypedData(doubleBarSensorValue),
                FileSensorBytesValue fileSensorBytesValue => GetFileSensorBytesTypedData(fileSensorBytesValue),
                UnitedSensorValue unitedSensorValue => GetUnitedSensorTypedData(unitedSensorValue),
                _ => null,
            };

            return(sensorData != null?JsonSerializer.Serialize(sensorData) : string.Empty);
        }
Пример #10
0
        private DoubleBarSensorValue GetPartialDataObject()
        {
            DoubleBarSensorValue result = new DoubleBarSensorValue();
            List <double>        currentValues;

            lock (_syncObject)
            {
                currentValues = new List <double>(_valuesList);

                result.StartTime = barStart;
            }

            result.LastValue = currentValues.Last();
            currentValues.Sort();
            FillNumericData(result, currentValues);
            FillCommonData(result);
            result.EndTime = DateTime.MinValue.ToUniversalTime();

            return(result);
        }
Пример #11
0
        private DoubleBarSensorValue GetDataObject()
        {
            DoubleBarSensorValue result = new DoubleBarSensorValue();
            List <double>        collected;

            lock (_syncObject)
            {
                collected = new List <double>(_valuesList);
                _valuesList.Clear();

                //New bar starts right after the previous one ends
                result.StartTime = barStart;
                result.EndTime   = DateTime.Now;
                barStart         = DateTime.Now;
            }

            result.LastValue = collected.Last();
            collected.Sort();
            FillNumericData(result, collected);

            FillCommonData(result);
            return(result);
        }
Пример #12
0
 private void FillCommonData(DoubleBarSensorValue value)
 {
     value.Key  = ProductKey;
     value.Path = Path;
     value.Time = DateTime.Now;
 }
Пример #13
0
 private static DoubleBarSensorData GetDoubleBarSensorTypedData(DoubleBarSensorValue sensorValue) =>
 GetSensorData(sensorValue.Min, sensorValue.Max, sensorValue.Mean, sensorValue.LastValue,
               sensorValue.Count, sensorValue.StartTime, sensorValue.EndTime, sensorValue.Percentiles, sensorValue.Comment);