Exemplo n.º 1
0
 public ValueContainer(
     ICalculator <TValue> calculator,
     ITriggerSettings triggerSettings,
     IHistorySettings historySettings)
     : this(calculator, triggerSettings, historySettings, null)
 {
 }
Exemplo n.º 2
0
 public ValueContainer(
     ICalculator <TValue> calculator,
     ITriggerSettings triggerSettings,
     IHistorySettings historySettings,
     IDetectionRange <TValue> range)
 {
     Calculator      = calculator;
     TriggerSettings = triggerSettings;
     HistorySettings = historySettings ?? new HistorySettings(0);
     Range           = range;
     SetCalculationDate(DateTimeOffset.Now);
 }
        /// <summary>
        /// Reduce number of entries in <see cref="settings"/> based on <see cref="IHistorySettings"/>.
        /// </summary>
        /// <typeparam name="TValue"></typeparam>
        /// <param name="settings"></param>
        /// <param name="values"></param>
        /// <param name="anomalies"></param>
        /// <param name="referenceDate"></param>
        /// <returns></returns>
        internal static long ReduceValues <TValue>(
            this IHistorySettings settings,
            ConcurrentDictionary <DateTimeOffset, TValue> values,
            ConcurrentBag <TValue> anomalies,
            DateTimeOffset referenceDate)
        {
            long result      = 0;
            var  oldestValue = values.Keys.OrderBy(x => x).FirstOrDefault();

            while (!anomalies.IsEmpty)
            {
                if (!anomalies.TryTake(out var _))
                {
                    return(result++);
                }
            }

            if (settings.PreserveTimeSpan > TimeSpan.Zero)
            {
                var preserveDate = referenceDate - settings.PreserveTimeSpan;

                while (!CompareUtilities.IsDefault(oldestValue) && oldestValue < preserveDate)
                {
                    values.TryRemove(oldestValue, out _);
                    oldestValue = values.Keys.OrderBy(x => x).FirstOrDefault();
                    result++;
                }

                return(result);
            }

            while (!CompareUtilities.IsDefault(oldestValue) && values.Keys.Count > settings.PreserveCount)
            {
                if (!values.TryRemove(oldestValue, out _))
                {
                    return(result);
                }

                oldestValue = values.Keys.OrderBy(x => x).FirstOrDefault();
                result++;
            }

            return(result);
        }