public void SetValue([NotNull] string key, [CanBeNull] string arguments, ZabbixValue value)
        {
            var counterId = new CounterId(key, arguments);

            if (value.IsNotSupported)
            {
                store.TryRemove(counterId, out _);
            }
            else
            {
                store.AddOrUpdate(counterId, k => value.Value, (k, v) => value.Value);
            }
        }
Exemple #2
0
        //refactor: This is also implemented in the full counter object so maybe we should rethink this functionality
        /// <summary>
        /// Sets the value as received from the Qbox for the given measurement time.
        /// It uses the Storage Provider to actually store the data
        /// Every time the data is presented the LastValue property will be updated with the value.
        /// </summary>
        public void SetValue(DateTime measurementTime, ulong value, QboxStatus ioQboxStatus)
        {
            Guard.IsNotNull(StorageProvider, "storage provider is missing");

            var formula     = FormulaForTime(measurementTime);
            var formulaEuro = RateForTime();
            var lastValue   = GetLastRecord(measurementTime);

            Record runningTotal = StorageProvider.SetValue(measurementTime, value, formula, formulaEuro, lastValue);

            if (runningTotal != null)
            {
                runningTotal.Id = LastValueKey;
                ClientRepositories.MetaData?.Save(runningTotal);
            }

            if (lastValue != null && runningTotal != null && runningTotal.Raw > lastValue.Raw)
            {
                var counterKey = String.IsNullOrEmpty(StorageId) ? CounterId.ToString(CultureInfo.InvariantCulture) : StorageId;
                ioQboxStatus.LastValidDataReceivedPerCounter[counterKey] = DateTime.Now.ToUniversalTime();

                if (IsElectricityConsumptionCounter)
                {
                    ioQboxStatus.LastElectricityConsumptionSeen = DateTime.Now.ToUniversalTime();
                }
                else if (IsElectricityGenerationCounter)
                {
                    ioQboxStatus.LastElectricityGenerationSeen = DateTime.Now.ToUniversalTime();
                }
                else if (IsGasCounter)
                {
                    ioQboxStatus.LastGasConsumptionSeen = DateTime.Now.ToUniversalTime();
                }
                else
                {
                    // We end up here for counters that can't be properly mapped to either LastElectricityConsumptionSeen, LastElectricityGenerationSeen or
                    // LastGasConsumptionSeen. This doesn't mean that we couldn't handle the data. So to update the status to reflect that we saw SOME
                    // valid data, we update LastElectricityConsumptionSeen.
                    ioQboxStatus.LastElectricityConsumptionSeen = DateTime.Now.ToUniversalTime();
                }
            }
        }