private bool ProcessBarSensor(UnitedSensorValue value, DateTime timeCollected, string productName) { try { var bar = _converter.GetBarSensorValue(value); if (bar.EndTime != DateTime.MinValue) { _barsStorage.Remove(productName, value.Path); return(true); } if (value.Type == SensorType.IntegerBarSensor) { var intBar = (IntBarSensorValue)bar; _barsStorage.Add(intBar, productName, timeCollected); return(false); } var doubleBar = (DoubleBarSensorValue)bar; _barsStorage.Add(doubleBar, productName, timeCollected); return(false); } catch (Exception e) { _logger.LogError(e, $"Failed to process bar sensor {value.Path}"); } return(true); }
private void AddUnitedValue(UnitedSensorValue value) { try { string productName = _productManager.GetProductNameByKey(value.Key); if (!_productManager.IsSensorRegistered(productName, value.Path)) { _productManager.AddSensor(productName, value); } DateTime timeCollected = DateTime.Now; SensorData updateMessage = _converter.ConvertUnitedValue(value, productName, timeCollected); _queueManager.AddSensorData(updateMessage); _valuesCache.AddValue(productName, updateMessage); bool isToDB = true; if (value.IsBarSensor()) { isToDB = ProcessBarSensor(value, timeCollected, productName); } if (!isToDB) { return; } SensorDataEntity dataObject = _converter.ConvertUnitedValueToDatabase(value, timeCollected); Task.Run(() => SaveSensorValue(dataObject, productName)); } catch (Exception e) { _logger.LogError(e, $"Failed to add value for sensor {value?.Path}"); } }
private void FillCommonData(UnitedSensorValue valueBase, DateTime time) { valueBase.Key = ProductKey; valueBase.Path = Path; valueBase.Type = _type; valueBase.Time = time.ToUniversalTime(); valueBase.Description = Description; }
public void AddValue(T value) { UnitedSensorValue valueObject = new UnitedSensorValue(); valueObject.Data = value.ToString(); valueObject.Description = _description; valueObject.Path = Path; valueObject.Key = ProductKey; valueObject.Time = DateTime.Now; valueObject.Type = _type; EnqueueValue(valueObject); }
private UnitedSensorValue CreateDataObject(T value) { UnitedSensorValue valueObject = new UnitedSensorValue(); valueObject.Data = value.ToString(); valueObject.Description = Description; valueObject.Path = Path; valueObject.Key = ProductKey; valueObject.Time = DateTime.Now; valueObject.Type = Type; return(valueObject); }
private void TrimDataIfNecessary(UnitedSensorValue value) { if (value?.Data == null || value.Data.Length <= Constants.MaxSensorValueStringLength) { return; } value.Data = value.Data.Substring(0, Constants.MaxSensorValueStringLength); if (!string.IsNullOrEmpty(value.Comment)) { value.Comment = value.Comment.Substring(0, Constants.MaxSensorValueStringLength); } }
private void Enqueue(UnitedSensorValue value) { lock (_lockObj) { _queue.Enqueue(value); } ++_internalCount; if (_internalCount == MAX_QUEUE_CAPACITY) { OnQueueOverflow(); } }
protected UnitedSensorValue CreateDataObject <T>(T value, string description = "") { var valueObject = new UnitedSensorValue(); valueObject.Data = value.ToString(); valueObject.Description = description; valueObject.Path = Path; valueObject.Key = ProductKey; valueObject.Time = DateTime.Now; valueObject.Type = Type; return(valueObject); }
protected UnitedSensorValue CreateErrorDataObject(Exception ex) { UnitedSensorValue result = new UnitedSensorValue(); result.Key = ProductKey; result.Path = Path; result.Status = SensorStatus.Error; result.Time = DateTime.Now; result.Comment = $"Error occurred! {ex.ToString()}"; result.Type = Type; result.Data = ex.Message; return(result); }
public void AddValue(T value, SensorStatus status = SensorStatus.Unknown, string comment = "") { UnitedSensorValue valueObject = new UnitedSensorValue(); valueObject.Comment = comment; valueObject.Data = value.ToString(); valueObject.Description = _description; valueObject.Path = Path; valueObject.Key = ProductKey; valueObject.Time = DateTime.Now; valueObject.Type = _type; valueObject.Status = status; EnqueueValue(valueObject); }
private UnitedSensorValue GetDoubleDataObject(List <double> values, DateTime barStartTime, DateTime barEndTime) { UnitedSensorValue result = new UnitedSensorValue(); FillCommonData(result, barStartTime); DoubleBarData barData = new DoubleBarData(); barData.LastValue = values.Any() ? GetRoundedNumber(values.Last()) : 0.0; FillNumericData(barData, values); barData.StartTime = barStartTime.ToUniversalTime(); barData.EndTime = barEndTime.ToUniversalTime(); result.Data = JsonConvert.SerializeObject(barData); return(result); }
private UnitedSensorValue GetIntegerDataObject(List <int> values, DateTime barStartTime, DateTime barEndTime) { UnitedSensorValue result = new UnitedSensorValue(); FillCommonData(result, barStartTime); IntBarData barData = new IntBarData(); barData.LastValue = values.Any() ? values.Last() : 0; FillNumericData(barData, values); barData.StartTime = barStartTime.ToUniversalTime(); barData.EndTime = barEndTime.ToUniversalTime(); result.Data = JsonConvert.SerializeObject(barData); return(result); }
protected override void SmallTimerTick(object state) { List <T> collected; DateTime startTime; lock (_syncObject) { collected = new List <T>(_valuesList); startTime = barStart; } UnitedSensorValue dataObject = GetSensorValueFromGenericList(collected, startTime); EnqueueValue(dataObject); }
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); }
public override UnitedSensorValue GetLastValueNew() { UnitedSensorValue value = new UnitedSensorValue(); value.Type = _type; value.Key = ProductKey; value.Path = Path; value.Time = DateTime.Now; value.Description = Description; lock (_syncRoot) { value.Data = _currentValue.ToString(); value.Comment = _currentComment; value.Status = _currentStatus; } return(value); }
protected override void SendDataTimer(object state) { List <T> collected; DateTime endTime; DateTime startTime; lock (_syncObject) { collected = new List <T>(_valuesList); startTime = barStart; endTime = DateTime.Now; barStart = DateTime.Now; _valuesList.Clear(); } UnitedSensorValue dataObject = GetSensorValueFromGenericList(collected, startTime, endTime); EnqueueValue(dataObject); }
public void EnqueueData(UnitedSensorValue value) { TrimDataIfNecessary(value); Enqueue(value); }
public static BarSensorValueBase Convert(this UnitedSensorValue value) => BuildBarSensorValue(value)?.FillBarSensorValueCommonSettings(value);
private static object GetUnitedSensorTypedData(UnitedSensorValue sensorValue) => sensorValue.Type switch {
private void TimerCallback(object state) { UnitedSensorValue value = GetInvokeResult(); EnqueueValue(value); }
public void EnqueueData(UnitedSensorValue value) { Enqueue(value); }
protected void EnqueueValue(UnitedSensorValue value) { _queue.EnqueueData(value); }