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}");
            }
        }
Ejemplo n.º 3
0
 private void FillCommonData(UnitedSensorValue valueBase, DateTime time)
 {
     valueBase.Key         = ProductKey;
     valueBase.Path        = Path;
     valueBase.Type        = _type;
     valueBase.Time        = time.ToUniversalTime();
     valueBase.Description = Description;
 }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
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);
        }
        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);
        }
Ejemplo n.º 16
0
        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);
Ejemplo n.º 19
0
 private static object GetUnitedSensorTypedData(UnitedSensorValue sensorValue) =>
 sensorValue.Type switch
 {
        private void TimerCallback(object state)
        {
            UnitedSensorValue value = GetInvokeResult();

            EnqueueValue(value);
        }
Ejemplo n.º 21
0
 public void EnqueueData(UnitedSensorValue value)
 {
     Enqueue(value);
 }
Ejemplo n.º 22
0
 protected void EnqueueValue(UnitedSensorValue value)
 {
     _queue.EnqueueData(value);
 }