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  }