public override void HandleItem(WatchEventType eventType, TCustomResource item)
        {
            var executionContext = new CustomResourceExecutionContext <TCustomResource>()
            {
                Item = item, EventType = eventType, PreviousExecutionsCount = 0
            };

            executionQueue.Enqueue(executionContext);
            Metrics?.Measure.Gauge.SetValue(RepeatingQueuedOperatorMetrics.ExecutionQueueDepth, tags, executionQueue.Count);
            Metrics?.Measure.Counter.Increment(RepeatingQueuedOperatorMetrics.MessagesProcessed, tags);
        }
        private void RequeueContext(CustomResourceExecutionContext <TCustomResource> context)
        {
            if (executionLimit == null || context.PreviousExecutionsCount < executionLimit)
            {
                context.PreviousExecutionsCount++;
                var backoffFactor  = Math.Min(context.PreviousExecutionsCount, 6);
                var backoffSeconds = Math.Pow(2, backoffFactor);
                context.NextExecutionTime = DateTimeOffset.Now.AddSeconds(backoffSeconds);

                Logger.LogDebug("Requeuing {kind} {name} to execute after {time} ({backoffSeconds})", context.Item.Kind, context.Item.Metadata.Name, context.NextExecutionTime, backoffSeconds);
                retryItems.TryAdd(context, context);
                Metrics?.Measure.Gauge.SetValue(RepeatingQueuedOperatorMetrics.RetryItemDepth, tags, retryItems.Count);
            }
        }