github.com/operator-framework/operator-lifecycle-manager@v0.30.0/pkg/controller/registry/resolver/instrumented_resolver.go (about) 1 package resolver 2 3 import ( 4 "time" 5 6 "github.com/operator-framework/api/pkg/operators/v1alpha1" 7 ) 8 9 type InstrumentedResolver struct { 10 resolver StepResolver 11 successMetricsEmitter func(time.Duration) 12 failureMetricsEmitter func(time.Duration) 13 } 14 15 var _ StepResolver = &InstrumentedResolver{} 16 17 func NewInstrumentedResolver(resolver StepResolver, successMetricsEmitter, failureMetricsEmitter func(time.Duration)) *InstrumentedResolver { 18 return &InstrumentedResolver{ 19 resolver: resolver, 20 successMetricsEmitter: successMetricsEmitter, 21 failureMetricsEmitter: failureMetricsEmitter, 22 } 23 } 24 25 func (ir *InstrumentedResolver) ResolveSteps(namespace string) ([]*v1alpha1.Step, []v1alpha1.BundleLookup, []*v1alpha1.Subscription, error) { 26 start := time.Now() 27 steps, lookups, subs, err := ir.resolver.ResolveSteps(namespace) 28 if err != nil { 29 ir.failureMetricsEmitter(time.Since(start)) 30 } else { 31 ir.successMetricsEmitter(time.Since(start)) 32 } 33 return steps, lookups, subs, err 34 }