Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions pkg/capabilities/base_trigger.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,9 @@ type EventStore interface {
type BaseTriggerMetrics interface {
IncActiveTriggers()
DecActiveTriggers()
IncRetry(triggerID, eventID string)
IncAck(triggerID, eventID string)
ObserveTimeToAck(triggerID, eventID string, d time.Duration, attempts int)
IncRetry(triggerID string)
IncAck(triggerID string)
ObserveTimeToAck(triggerID string, d time.Duration, attempts int)
IncInboxMissing(triggerID string)
IncInboxFull(triggerID string)
// IncAckError counts ACK paths that return an error (e.g. store delete failure). reason is a stable identifier for dashboards.
Expand All @@ -76,7 +76,7 @@ type BaseTriggerMetrics interface {
// AddPendingEvents adjusts the live gauge of events awaiting ACK. Positive on insert, negative on ACK/unregister.
AddPendingEvents(delta int64)
// IncStoppedResending records a gauge (Unix seconds) when the node exhausted max retries and stopped resending.
IncStoppedResending(triggerID, eventID string, attempts int)
IncStoppedResending(triggerID string, attempts int)
}

// BaseTriggerCapability keeps track of trigger registrations and handles resending events until
Expand Down Expand Up @@ -500,8 +500,8 @@ func (b *BaseTriggerCapability[T]) AckEvent(ctx context.Context, triggerId strin
"capabilityID", b.capabilityId, "triggerID", triggerId, "eventID", eventId,
"attempts", attempts, "firstAt", firstAt)
b.metrics.IncAckMemoryOutcome(ackMemoryOutcomeHit)
b.metrics.IncAck(triggerId, eventId)
b.metrics.ObserveTimeToAck(triggerId, eventId, time.Since(firstAt), attempts)
b.metrics.IncAck(triggerId)
b.metrics.ObserveTimeToAck(triggerId, time.Since(firstAt), attempts)
b.metrics.AddPendingEvents(-1)
} else {
b.lggr.Infow("base trigger ACK: event not found in memory (reconciling store)",
Expand Down Expand Up @@ -683,7 +683,7 @@ func (b *BaseTriggerCapability[T]) emitStoppedResending(ev stoppedResendingEvent
"capabilityID", b.capabilityId, "triggerID", ev.triggerID, "eventID", ev.eventID,
"attempts", ev.attempts, "maxRetries", maxRetries,
"reason", "max_retries_exhausted")
b.metrics.IncStoppedResending(ev.triggerID, ev.eventID, ev.attempts)
b.metrics.IncStoppedResending(ev.triggerID, ev.attempts)
b.metrics.AddPendingEvents(-1)
}

Expand Down Expand Up @@ -792,7 +792,7 @@ func (b *BaseTriggerCapability[T]) trySend(event PendingEvent) {
lastSent := rec.LastSentAt
b.mu.Unlock()

b.metrics.IncRetry(event.TriggerId, event.EventId)
b.metrics.IncRetry(event.TriggerId)
if err := b.store.UpdateDelivery(b.ctx, event.TriggerId, event.EventId, lastSent, attempts); err != nil {
b.lggr.Errorf("failed to persist delivery update for trigger=%s event=%s: %v", event.TriggerId, event.EventId, err)
}
Expand Down
38 changes: 18 additions & 20 deletions pkg/capabilities/base_trigger_metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,10 @@ func NewBaseTriggerBeholderMetrics(capabilityID string) (BaseTriggerMetrics, err
}, nil
}

func (m *BaseTriggerBeholderMetrics) attrs(triggerID, eventID string) []attribute.KeyValue {
func (m *BaseTriggerBeholderMetrics) attrs(triggerID string) []attribute.KeyValue {
return []attribute.KeyValue{
attribute.String("capability_id", m.capabilityID),
attribute.String("trigger_id", triggerID),
attribute.String("event_id", eventID),
}
}

Expand All @@ -118,15 +117,15 @@ func (m *BaseTriggerBeholderMetrics) DecActiveTriggers() {
)
}

func (m *BaseTriggerBeholderMetrics) IncRetry(triggerID, eventID string) {
func (m *BaseTriggerBeholderMetrics) IncRetry(triggerID string) {
m.retryCount.Add(context.Background(), 1,
metric.WithAttributes(m.attrs(triggerID, eventID)...),
metric.WithAttributes(m.attrs(triggerID)...),
)
}

func (m *BaseTriggerBeholderMetrics) IncAck(triggerID, eventID string) {
func (m *BaseTriggerBeholderMetrics) IncAck(triggerID string) {
m.ackCount.Add(context.Background(), 1,
metric.WithAttributes(m.attrs(triggerID, eventID)...),
metric.WithAttributes(m.attrs(triggerID)...),
)
}

Expand All @@ -148,12 +147,12 @@ func (m *BaseTriggerBeholderMetrics) IncAckMemoryOutcome(outcome string) {
)
}

func (m *BaseTriggerBeholderMetrics) ObserveTimeToAck(triggerID, eventID string, d time.Duration, attempts int) {
func (m *BaseTriggerBeholderMetrics) ObserveTimeToAck(triggerID string, d time.Duration, attempts int) {
m.timeToAckMs.Record(context.Background(), d.Milliseconds(),
metric.WithAttributes(m.attrs(triggerID, eventID)...),
metric.WithAttributes(m.attrs(triggerID)...),
)
m.ackAttempts.Record(context.Background(), int64(attempts),
metric.WithAttributes(m.attrs(triggerID, eventID)...),
metric.WithAttributes(m.attrs(triggerID)...),
)
}

Expand Down Expand Up @@ -181,12 +180,11 @@ func (m *BaseTriggerBeholderMetrics) AddPendingEvents(delta int64) {
)
}

func (m *BaseTriggerBeholderMetrics) IncStoppedResending(triggerID, eventID string, attempts int) {
func (m *BaseTriggerBeholderMetrics) IncStoppedResending(triggerID string, attempts int) {
m.stoppedResendingTimestamp.Record(context.Background(), time.Now().Unix(),
metric.WithAttributes(
attribute.String("capability_id", m.capabilityID),
attribute.String("trigger_id", triggerID),
attribute.String("event_id", eventID),
attribute.Int("attempts", attempts),
),
)
Expand All @@ -198,12 +196,12 @@ var _ BaseTriggerMetrics = &noopBaseTriggerMetrics{}

func (noopBaseTriggerMetrics) IncActiveTriggers() {}
func (noopBaseTriggerMetrics) DecActiveTriggers() {}
func (noopBaseTriggerMetrics) IncRetry(string, string) {}
func (noopBaseTriggerMetrics) IncAck(string, string) {}
func (noopBaseTriggerMetrics) ObserveTimeToAck(string, string, time.Duration, int) {}
func (noopBaseTriggerMetrics) IncInboxMissing(string) {}
func (noopBaseTriggerMetrics) IncInboxFull(string) {}
func (noopBaseTriggerMetrics) IncAckError(string) {}
func (noopBaseTriggerMetrics) IncAckMemoryOutcome(string) {}
func (noopBaseTriggerMetrics) AddPendingEvents(int64) {}
func (noopBaseTriggerMetrics) IncStoppedResending(string, string, int) {}
func (noopBaseTriggerMetrics) IncRetry(string) {}
func (noopBaseTriggerMetrics) IncAck(string) {}
func (noopBaseTriggerMetrics) ObserveTimeToAck(string, time.Duration, int) {}
func (noopBaseTriggerMetrics) IncInboxMissing(string) {}
func (noopBaseTriggerMetrics) IncInboxFull(string) {}
func (noopBaseTriggerMetrics) IncAckError(string) {}
func (noopBaseTriggerMetrics) IncAckMemoryOutcome(string) {}
func (noopBaseTriggerMetrics) AddPendingEvents(int64) {}
func (noopBaseTriggerMetrics) IncStoppedResending(string, int) {}
Loading