public static Summary.Child WithConsumerLabels(this Summary summary, ICompetingConsumer consumer) => summary.WithLabels(AppName, consumer.StreamName, consumer.GroupName);
private string GetConsumerId(ICompetingConsumer consumer) { return(consumer.GetType().Name); }
public static Gauge.Child WithConsumerLabels(this Gauge counter, ICompetingConsumer consumer) => counter.WithLabels(AppName, consumer.StreamName, consumer.GroupName);
private Func <EventStorePersistentSubscriptionBase, ResolvedEvent, Task> OnEventAppeared(ICompetingConsumer consumer) { return(async(sub, e) => { DittoMetrics.ReceivedEvents.WithConsumerLabels(consumer).Inc(); DittoMetrics.CurrentEvent.WithConsumerLabels(consumer).Set(e.OriginalEventNumber); if (!e.IsResolved) // Handle deleted streams { _logger.Information("Event #{EventNumber} from {StreamName} is not resolved. Skipping", e.OriginalEventNumber, consumer.StreamName); // log DittoMetrics.UnresolvedEvents.WithConsumerLabels(consumer).Inc(); sub.Fail(e, PersistentSubscriptionNakEventAction.Skip, "Unresolved Event"); return; } double delaySeconds = (DateTime.UtcNow - e.Event.Created).TotalSeconds; DittoMetrics.ReplicationLatency.WithConsumerLabels(consumer).Observe(delaySeconds); if (!consumer.CanConsume(e.Event.EventType)) { _logger.Information("Unable to consume {EventType} #{EventNumber} from {StreamName}. Skipping", e.Event.EventType, e.OriginalEventNumber, consumer.StreamName); DittoMetrics.SkippedEvents.WithConsumerLabels(consumer).Inc(); sub.Fail(e, PersistentSubscriptionNakEventAction.Skip, "Cannot consume"); return; } string consumerId = GetConsumerId(consumer); try { await consumer.ConsumeAsync(e.Event.EventType, e); DittoMetrics.ProcessedEvents.WithConsumerLabels(consumer).Inc(); sub.Acknowledge(e); } catch (Exception ex) { DittoMetrics.FailedEvents.WithConsumerLabels(consumer).Inc(); _logger.Error(ex, "{Consumer} failed to handle {EventType} #{EventNumber} from {StreamName} in group {GroupName}", consumerId, e.Event.EventType, e.OriginalEventNumber, consumer.StreamName, consumer.GroupName); sub.Fail(e, PersistentSubscriptionNakEventAction.Retry, ex.Message); } }); }