-
Notifications
You must be signed in to change notification settings - Fork 20
/
naming.go
71 lines (61 loc) · 1.94 KB
/
naming.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package workqueue
import (
"fmt"
"sync"
)
var (
nameProvidersInstance *nameProviders = &nameProviders{}
)
// NameProvider is the interface for name providers contributed by
// packages that make use of k8s.io/client-go/util/workqueue.
type NameProvider interface {
/*
Returns the subsystem name to be used for Prometheus workqueue metrics for
the given queue name. If the given queue name is not identified to belong to
the name provider's package, return value `ok` must be `false`.
*/
GetSubsystemFor(queueName string) (subsystem string, ok bool)
}
// NameProviderFunc is an adapter that allows to use functions with the right
// signature as NameProvider.
type NameProviderFunc func(queueName string) (subsystem string, ok bool)
// GetSubsystemFor implements interface NameProvider.
func (f NameProviderFunc) GetSubsystemFor(queueName string) (string, bool) {
return f(queueName)
}
// nameProviders is a composite name provider that queries all registered
// name provides in the order of registration. The first positive result
// will be returned.
type nameProviders struct {
lock sync.Mutex
children []NameProvider
}
func (a *nameProviders) GetSubsystemFor(queueName string) (subsystem string, ok bool) {
for _, child := range a.children {
subsystem, ok = child.GetSubsystemFor(queueName)
if ok {
return
}
}
return "", false
}
func (a *nameProviders) MustGetSubsystemFor(queueName string) (subsystem string) {
subsystem, ok := a.GetSubsystemFor(queueName)
if !ok {
panic(fmt.Sprintf(
"failed to map workqueue name '%s' to subsystem name: "+
"none of the registered name providers provided a subsystem name",
queueName,
))
}
return
}
func (a *nameProviders) register(child NameProvider) {
a.lock.Lock()
defer a.lock.Unlock()
a.children = append(a.children, child)
}
// RegisterNameProvider registers a new NameProvider.
func RegisterNameProvider(provider NameProvider) {
nameProvidersInstance.register(provider)
}