1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- /*
- Copyright 2016 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- // This file provides abstractions for setting the provider (e.g., prometheus)
- // of metrics.
- package cache
- import (
- "sync"
- )
- // GaugeMetric represents a single numerical value that can arbitrarily go up
- // and down.
- type GaugeMetric interface {
- Set(float64)
- }
- // CounterMetric represents a single numerical value that only ever
- // goes up.
- type CounterMetric interface {
- Inc()
- }
- // SummaryMetric captures individual observations.
- type SummaryMetric interface {
- Observe(float64)
- }
- type noopMetric struct{}
- func (noopMetric) Inc() {}
- func (noopMetric) Dec() {}
- func (noopMetric) Observe(float64) {}
- func (noopMetric) Set(float64) {}
- // MetricsProvider generates various metrics used by the reflector.
- type MetricsProvider interface {
- NewListsMetric(name string) CounterMetric
- NewListDurationMetric(name string) SummaryMetric
- NewItemsInListMetric(name string) SummaryMetric
- NewWatchesMetric(name string) CounterMetric
- NewShortWatchesMetric(name string) CounterMetric
- NewWatchDurationMetric(name string) SummaryMetric
- NewItemsInWatchMetric(name string) SummaryMetric
- NewLastResourceVersionMetric(name string) GaugeMetric
- }
- type noopMetricsProvider struct{}
- func (noopMetricsProvider) NewListsMetric(name string) CounterMetric { return noopMetric{} }
- func (noopMetricsProvider) NewListDurationMetric(name string) SummaryMetric { return noopMetric{} }
- func (noopMetricsProvider) NewItemsInListMetric(name string) SummaryMetric { return noopMetric{} }
- func (noopMetricsProvider) NewWatchesMetric(name string) CounterMetric { return noopMetric{} }
- func (noopMetricsProvider) NewShortWatchesMetric(name string) CounterMetric { return noopMetric{} }
- func (noopMetricsProvider) NewWatchDurationMetric(name string) SummaryMetric { return noopMetric{} }
- func (noopMetricsProvider) NewItemsInWatchMetric(name string) SummaryMetric { return noopMetric{} }
- func (noopMetricsProvider) NewLastResourceVersionMetric(name string) GaugeMetric {
- return noopMetric{}
- }
- var metricsFactory = struct {
- metricsProvider MetricsProvider
- setProviders sync.Once
- }{
- metricsProvider: noopMetricsProvider{},
- }
- // SetReflectorMetricsProvider sets the metrics provider
- func SetReflectorMetricsProvider(metricsProvider MetricsProvider) {
- metricsFactory.setProviders.Do(func() {
- metricsFactory.metricsProvider = metricsProvider
- })
- }
|