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
38 changes: 38 additions & 0 deletions scheduler/metrics/duration.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package metrics

import (
"sync"
"time"
)

type durationMeasurement struct {
startTime time.Time
started bool
duration time.Duration
sem sync.Mutex
}

func (dm *durationMeasurement) Start(start time.Time) {
// If we have already started, don't start again. This can happen for relational tables that are resolved multiple times (per parent resource)
dm.sem.Lock()
defer dm.sem.Unlock()
if dm.started {
return
}

dm.started = true
dm.startTime = start
}

// End calculates, updates and returns the delta duration for updating OTEL counters.
func (dm *durationMeasurement) End(end time.Time) time.Duration {
var delta time.Duration
newDuration := end.Sub(dm.startTime)

dm.sem.Lock()
defer dm.sem.Unlock()

delta = newDuration - dm.duration
dm.duration = newDuration
return delta
}
Loading
Loading