github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/apiserver/observers.go (about)

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package apiserver
     5  
     6  import (
     7  	"github.com/juju/clock"
     8  	"github.com/juju/errors"
     9  	"github.com/juju/loggo"
    10  	"github.com/juju/pubsub"
    11  
    12  	"github.com/juju/juju/agent"
    13  	"github.com/juju/juju/apiserver"
    14  	"github.com/juju/juju/apiserver/observer"
    15  	"github.com/juju/juju/apiserver/observer/metricobserver"
    16  	"github.com/juju/juju/controller"
    17  )
    18  
    19  func newObserverFn(
    20  	agentConfig agent.Config,
    21  	controllerConfig controller.Config,
    22  	clock clock.Clock,
    23  	hub *pubsub.StructuredHub,
    24  	metricsCollector *apiserver.Collector,
    25  ) (observer.ObserverFactory, error) {
    26  
    27  	var observerFactories []observer.ObserverFactory
    28  
    29  	// Common logging of RPC requests
    30  	observerFactories = append(observerFactories, func() observer.Observer {
    31  		logger := loggo.GetLogger("juju.apiserver")
    32  		ctx := observer.RequestObserverContext{
    33  			Clock:  clock,
    34  			Logger: logger,
    35  			Hub:    hub,
    36  		}
    37  		return observer.NewRequestObserver(ctx)
    38  	})
    39  
    40  	// Metrics observer.
    41  	metricObserver, err := metricobserver.NewObserverFactory(metricobserver.Config{
    42  		Clock:            clock,
    43  		MetricsCollector: metricCollectorWrapper{collector: metricsCollector},
    44  	})
    45  	if err != nil {
    46  		return nil, errors.Annotate(err, "creating metric observer factory")
    47  	}
    48  	observerFactories = append(observerFactories, metricObserver)
    49  
    50  	return observer.ObserverFactoryMultiplexer(observerFactories...), nil
    51  }
    52  
    53  type metricCollectorWrapper struct {
    54  	collector *apiserver.Collector
    55  }
    56  
    57  func (o metricCollectorWrapper) APIRequestDuration() metricobserver.SummaryVec {
    58  	return o.collector.APIRequestDuration
    59  }
    60  
    61  // TODO (stickupkid): Remove this in 2.6+ as DeprecatedAPIRequestsTotal will become
    62  // obsolete
    63  func (o metricCollectorWrapper) DeprecatedAPIRequestsTotal() metricobserver.CounterVec {
    64  	return o.collector.DeprecatedAPIRequestsTotal
    65  }
    66  
    67  // TODO (stickupkid): Remove this in 2.6+ as DeprecatedAPIRequestDuration will become
    68  // obsolete
    69  func (o metricCollectorWrapper) DeprecatedAPIRequestDuration() metricobserver.SummaryVec {
    70  	return o.collector.DeprecatedAPIRequestDuration
    71  }