Пример #1
0
        public override void Process(K key, V value)
        {
            if (key == null || value == null)
            {
                log.Warn($"Skipping record due to null key or value. key=[{key}] value=[{value}] topic=[{Context.Topic}] partition=[{Context.Partition}] offset=[{Context.Offset}]");
                return;
            }

            ValueAndTimestamp <T> oldAggAndTimestamp = store.Get(key);
            T    oldAgg, newAgg;
            long newTimestamp;

            if (oldAggAndTimestamp == null)
            {
                oldAgg       = initializer.Apply();
                newTimestamp = Context.Timestamp;
            }
            else
            {
                oldAgg       = oldAggAndTimestamp.Value;
                newTimestamp = Math.Max(Context.Timestamp, oldAggAndTimestamp.Timestamp);
            }

            newAgg = aggregator.Apply(key, value, oldAgg);

            store.Put(key, ValueAndTimestamp <T> .Make(newAgg, newTimestamp));
            tupleForwarder.MaybeForward(key, newAgg, sendOldValues ? oldAgg : default, newTimestamp);
Пример #2
0
        /// <summary>
        /// Конструктор, использующийся для инициализации WebMoneyAccessor ключом Keeper Classic
        /// </summary>
        public WebMoneyAccessor()
        {
            var wmAccountDictionary = WebMoneyUtil.Instance.GetWmAccountSettings();

            if (wmAccountDictionary == null)
            {
                Logger.Error("WebMoneyAccessor() - не удалось прочитать необходимые для инициализировать WebMoney параметры (wmId, purseNumber и др.)");
                return;
            }

            keeperKeyValue    = wmAccountDictionary["WmKeeperKeyValue"].ToString();
            targetPurseNumber = (ulong)wmAccountDictionary["WmTargetPurseNumber"];
            wmId = (WmId)(ulong)wmAccountDictionary["WmId"];
            var targetPurseType = WebMoneyUtil.StrToCurrency(wmAccountDictionary["WmPurseCurrency"].ToString());

            purse = new Purse
            {
                Number = targetPurseNumber,
                Type   = targetPurseType
            };

            var keeperKey = new KeeperKey(keeperKeyValue);

            initializer = new Initializer(wmId, keeperKey)
            {
                StartDate = new DateTime(1983, 1, 1).ToUniversalTime()
            };
            initializer.Apply();

            wmServerTimeDifference = (WmDateTime.ServerTime2UtcTime(DateTime.Now).Hour - DateTime.Now.ToUniversalTime().Hour);
        }
Пример #3
0
        public override void Process(K key, Change <V> value)
        {
            if (key == null)
            {
                throw new StreamsException($"Record key for KTable aggregate operator with state {queryableStoreName} should not be null.");
            }

            ValueAndTimestamp <T> oldAggAndTimestamp = store.Get(key);
            T    oldAgg = oldAggAndTimestamp != null ? oldAggAndTimestamp.Value : default;
            T    intermediateAgg;
            long newTimestamp = Context.Timestamp;

            // first try to remove the old value
            if (oldAggAndTimestamp != null && value.OldValue != null && oldAgg != null)
            {
                intermediateAgg = remove.Apply(key, value.OldValue, oldAgg);
                newTimestamp    = Math.Max(Context.Timestamp, oldAggAndTimestamp.Timestamp);
            }
            else
            {
                intermediateAgg = oldAgg;
            }

            // then try to add the new value
            T newAgg;

            if (value.NewValue != null)
            {
                T initializedAgg;
                if (intermediateAgg == null)
                {
                    initializedAgg = initializer.Apply();
                }
                else
                {
                    initializedAgg = intermediateAgg;
                }

                newAgg = add.Apply(key, value.NewValue, initializedAgg);
                if (oldAggAndTimestamp != null)
                {
                    newTimestamp = Math.Max(Context.Timestamp, oldAggAndTimestamp.Timestamp);
                }
            }
            else
            {
                newAgg = intermediateAgg;
            }

            // update the store with the new value
            store.Put(key, ValueAndTimestamp <T> .Make(newAgg, newTimestamp));
            tupleForwarder.MaybeForward(key, newAgg, sendOldValues ? oldAgg : default, newTimestamp);
        public override void Process(K key, V value)
        {
            if (key == null)
            {
                log.LogWarning($"Skipping record due to null key.value =[{value}] topic =[{Context.RecordContext.Topic}] partition =[{Context.RecordContext.Partition}] offset =[{Context.RecordContext.Offset }]");
                droppedRecordsSensor.Record();
                return;
            }

            observedStreamTime = Math.Max(observedStreamTime, Context.Timestamp);
            long closeTime      = observedStreamTime - windowOptions.GracePeriodMs;
            var  matchedWindows = windowOptions.WindowsFor(Context.Timestamp);

            foreach (var entry in matchedWindows)
            {
                long windowStart = entry.Key, windowEnd = entry.Value.EndMs;
                if (windowEnd > closeTime)
                {
                    var oldAggAndTimestamp = windowStore.Fetch(key, windowStart);

                    Agg oldAgg = oldAggAndTimestamp == null ? default : oldAggAndTimestamp.Value;
                                 long newTs;
                                 Agg  newAgg;

                                 if (oldAggAndTimestamp == null)
                                 {
                                     oldAgg = initializer.Apply();
                                     newTs  = Context.Timestamp;
                                 }
                                 else
                                 {
                                     newTs = Math.Max(Context.Timestamp, oldAggAndTimestamp.Timestamp);
                                 }

                                 newAgg = aggregator.Apply(key, value, oldAgg);
                                 windowStore.Put(key, ValueAndTimestamp <Agg> .Make(newAgg, newTs), windowStart);
                                 tupleForwarder.MaybeForward(new Windowed <K>(key, entry.Value), newAgg, sendOldValues ? oldAgg : default, newTs);