mirror of https://github.com/knative/pkg.git
178 lines
6.0 KiB
Go
178 lines
6.0 KiB
Go
/*
|
|
Copyright 2019 The Knative 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.
|
|
*/
|
|
|
|
package metrics
|
|
|
|
import (
|
|
"go.opencensus.io/stats"
|
|
"go.opencensus.io/stats/view"
|
|
"go.opencensus.io/tag"
|
|
"k8s.io/client-go/util/workqueue"
|
|
)
|
|
|
|
// WorkqueueProvider implements workqueue.MetricsProvider and may be used with
|
|
// workqueue.SetProvider to have metrics exported to the provided metrics.
|
|
type WorkqueueProvider struct {
|
|
Adds *stats.Int64Measure
|
|
Depth *stats.Int64Measure
|
|
Latency *stats.Float64Measure
|
|
UnfinishedWorkSeconds *stats.Float64Measure
|
|
LongestRunningProcessorSeconds *stats.Float64Measure
|
|
Retries *stats.Int64Measure
|
|
WorkDuration *stats.Float64Measure
|
|
}
|
|
|
|
var _ workqueue.MetricsProvider = (*WorkqueueProvider)(nil)
|
|
|
|
// NewAddsMetric implements MetricsProvider
|
|
func (wp *WorkqueueProvider) NewAddsMetric(name string) workqueue.CounterMetric {
|
|
return counterMetric{
|
|
mutators: []tag.Mutator{tag.Insert(tagName, name)},
|
|
measure: wp.Adds,
|
|
}
|
|
}
|
|
|
|
// AddsView returns a view of the Adds metric.
|
|
func (wp *WorkqueueProvider) AddsView() *view.View {
|
|
return measureView(wp.Adds, view.Count())
|
|
}
|
|
|
|
// NewDepthMetric implements MetricsProvider
|
|
func (wp *WorkqueueProvider) NewDepthMetric(name string) workqueue.GaugeMetric {
|
|
return &gaugeMetric{
|
|
mutators: []tag.Mutator{tag.Insert(tagName, name)},
|
|
measure: wp.Depth,
|
|
}
|
|
}
|
|
|
|
// DepthView returns a view of the Depth metric.
|
|
func (wp *WorkqueueProvider) DepthView() *view.View {
|
|
return measureView(wp.Depth, view.LastValue())
|
|
}
|
|
|
|
// NewLatencyMetric implements MetricsProvider
|
|
func (wp *WorkqueueProvider) NewLatencyMetric(name string) workqueue.HistogramMetric {
|
|
return floatMetric{
|
|
mutators: []tag.Mutator{tag.Insert(tagName, name)},
|
|
measure: wp.Latency,
|
|
}
|
|
}
|
|
|
|
// LatencyView returns a view of the Latency metric.
|
|
func (wp *WorkqueueProvider) LatencyView() *view.View {
|
|
return measureView(wp.Latency, view.Distribution(BucketsNBy10(1e-08, 10)...))
|
|
}
|
|
|
|
// NewLongestRunningProcessorSecondsMetric implements MetricsProvider
|
|
func (wp *WorkqueueProvider) NewLongestRunningProcessorSecondsMetric(name string) workqueue.SettableGaugeMetric {
|
|
return floatMetric{
|
|
mutators: []tag.Mutator{tag.Insert(tagName, name)},
|
|
measure: wp.LongestRunningProcessorSeconds,
|
|
}
|
|
}
|
|
|
|
// LongestRunningProcessorSecondsView returns a view of the LongestRunningProcessorSeconds metric.
|
|
func (wp *WorkqueueProvider) LongestRunningProcessorSecondsView() *view.View {
|
|
return measureView(wp.LongestRunningProcessorSeconds, view.Distribution(BucketsNBy10(1e-08, 10)...))
|
|
}
|
|
|
|
// NewRetriesMetric implements MetricsProvider
|
|
func (wp *WorkqueueProvider) NewRetriesMetric(name string) workqueue.CounterMetric {
|
|
return counterMetric{
|
|
mutators: []tag.Mutator{tag.Insert(tagName, name)},
|
|
measure: wp.Retries,
|
|
}
|
|
}
|
|
|
|
// RetriesView returns a view of the Retries metric.
|
|
func (wp *WorkqueueProvider) RetriesView() *view.View {
|
|
return measureView(wp.Retries, view.Count())
|
|
}
|
|
|
|
// NewUnfinishedWorkSecondsMetric implements MetricsProvider
|
|
func (wp *WorkqueueProvider) NewUnfinishedWorkSecondsMetric(name string) workqueue.SettableGaugeMetric {
|
|
return floatMetric{
|
|
mutators: []tag.Mutator{tag.Insert(tagName, name)},
|
|
measure: wp.UnfinishedWorkSeconds,
|
|
}
|
|
}
|
|
|
|
// UnfinishedWorkSecondsView returns a view of the UnfinishedWorkSeconds metric.
|
|
func (wp *WorkqueueProvider) UnfinishedWorkSecondsView() *view.View {
|
|
return measureView(wp.UnfinishedWorkSeconds, view.Distribution(BucketsNBy10(1e-08, 10)...))
|
|
}
|
|
|
|
// NewWorkDurationMetric implements MetricsProvider
|
|
func (wp *WorkqueueProvider) NewWorkDurationMetric(name string) workqueue.HistogramMetric {
|
|
return floatMetric{
|
|
mutators: []tag.Mutator{tag.Insert(tagName, name)},
|
|
measure: wp.WorkDuration,
|
|
}
|
|
}
|
|
|
|
// WorkDurationView returns a view of the WorkDuration metric.
|
|
func (wp *WorkqueueProvider) WorkDurationView() *view.View {
|
|
return measureView(wp.WorkDuration, view.Distribution(BucketsNBy10(1e-08, 10)...))
|
|
}
|
|
|
|
// DefaultViews returns a list of views suitable for passing to view.Register
|
|
func (wp *WorkqueueProvider) DefaultViews() []*view.View {
|
|
return []*view.View{
|
|
wp.AddsView(),
|
|
wp.DepthView(),
|
|
wp.LatencyView(),
|
|
wp.RetriesView(),
|
|
wp.WorkDurationView(),
|
|
wp.UnfinishedWorkSecondsView(),
|
|
wp.LongestRunningProcessorSecondsView(),
|
|
}
|
|
}
|
|
|
|
// NewDeprecatedAddsMetric implements MetricsProvider
|
|
func (wp *WorkqueueProvider) NewDeprecatedAddsMetric(name string) workqueue.CounterMetric {
|
|
return noopMetric{}
|
|
}
|
|
|
|
// NewDeprecatedDepthMetric implements MetricsProvider
|
|
func (wp *WorkqueueProvider) NewDeprecatedDepthMetric(name string) workqueue.GaugeMetric {
|
|
return noopMetric{}
|
|
}
|
|
|
|
// NewDeprecatedLatencyMetric implements MetricsProvider
|
|
func (wp *WorkqueueProvider) NewDeprecatedLatencyMetric(name string) workqueue.SummaryMetric {
|
|
return noopMetric{}
|
|
}
|
|
|
|
// NewDeprecatedLongestRunningProcessorMicrosecondsMetric implements MetricsProvider
|
|
func (wp *WorkqueueProvider) NewDeprecatedLongestRunningProcessorMicrosecondsMetric(name string) workqueue.SettableGaugeMetric {
|
|
return noopMetric{}
|
|
}
|
|
|
|
// NewDeprecatedRetriesMetric implements MetricsProvider
|
|
func (wp *WorkqueueProvider) NewDeprecatedRetriesMetric(name string) workqueue.CounterMetric {
|
|
return noopMetric{}
|
|
}
|
|
|
|
// NewDeprecatedUnfinishedWorkSecondsMetric implements MetricsProvider
|
|
func (wp *WorkqueueProvider) NewDeprecatedUnfinishedWorkSecondsMetric(name string) workqueue.SettableGaugeMetric {
|
|
return noopMetric{}
|
|
}
|
|
|
|
// NewDeprecatedWorkDurationMetric implements MetricsProvider
|
|
func (wp *WorkqueueProvider) NewDeprecatedWorkDurationMetric(name string) workqueue.SummaryMetric {
|
|
return noopMetric{}
|
|
}
|