Skip to content

Commit 04db3dc

Browse files
author
Han Kang
committed
move files to component-base
1 parent 634ab0b commit 04db3dc

File tree

12 files changed

+105
-61
lines changed

12 files changed

+105
-61
lines changed

pkg/util/metrics/BUILD

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,6 @@ filegroup(
3434

3535
filegroup(
3636
name = "all-srcs",
37-
srcs = [
38-
":package-srcs",
39-
"//pkg/util/metrics/framework:all-srcs",
40-
],
37+
srcs = [":package-srcs"],
4138
tags = ["automanaged"],
4239
)

staging/src/k8s.io/component-base/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ filegroup(
1313
"//staging/src/k8s.io/component-base/cli/globalflag:all-srcs",
1414
"//staging/src/k8s.io/component-base/config:all-srcs",
1515
"//staging/src/k8s.io/component-base/logs:all-srcs",
16+
"//staging/src/k8s.io/component-base/metrics:all-srcs",
1617
],
1718
tags = ["automanaged"],
1819
visibility = ["//visibility:public"],

pkg/util/metrics/framework/BUILD renamed to staging/src/k8s.io/component-base/metrics/BUILD

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ go_library(
1616
"version_parser.go",
1717
"wrappers.go",
1818
],
19-
importpath = "k8s.io/kubernetes/pkg/util/metrics/framework",
19+
importmap = "k8s.io/kubernetes/vendor/k8s.io/component-base/metrics",
20+
importpath = "k8s.io/component-base/metrics",
2021
deps = [
21-
"//pkg/version:go_default_library",
2222
"//staging/src/k8s.io/apimachinery/pkg/version:go_default_library",
2323
"//vendor/github.com/blang/semver:go_default_library",
2424
"//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",

pkg/util/metrics/framework/counter.go renamed to staging/src/k8s.io/component-base/metrics/counter.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package framework
17+
package metrics
1818

1919
import (
2020
"github.com/blang/semver"

pkg/util/metrics/framework/counter_test.go renamed to staging/src/k8s.io/component-base/metrics/counter_test.go

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,22 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package framework
17+
package metrics
1818

1919
import (
2020
"bytes"
2121
"github.com/blang/semver"
2222
"github.com/prometheus/common/expfmt"
23+
apimachineryversion "k8s.io/apimachinery/pkg/version"
2324
"testing"
2425
)
2526

2627
func TestCounter(t *testing.T) {
27-
v115 := semver.MustParse("1.15.0")
2828
v114 := semver.MustParse("1.14.0")
29+
v115 := semver.MustParse("1.15.0")
2930
var tests = []struct {
3031
desc string
3132
*CounterOpts
32-
registryVersion *semver.Version
3333
expectedMetricCount int
3434
expectedHelp string
3535
}{
@@ -42,7 +42,6 @@ func TestCounter(t *testing.T) {
4242
StabilityLevel: ALPHA,
4343
Help: "counter help",
4444
},
45-
registryVersion: &v115,
4645
expectedMetricCount: 1,
4746
expectedHelp: "[ALPHA] counter help",
4847
},
@@ -56,7 +55,6 @@ func TestCounter(t *testing.T) {
5655
StabilityLevel: ALPHA,
5756
DeprecatedVersion: &v115,
5857
},
59-
registryVersion: &v115,
6058
expectedMetricCount: 1,
6159
expectedHelp: "[ALPHA] (Deprecated since 1.15.0) counter help",
6260
},
@@ -70,14 +68,17 @@ func TestCounter(t *testing.T) {
7068
StabilityLevel: ALPHA,
7169
DeprecatedVersion: &v114,
7270
},
73-
registryVersion: &v115,
7471
expectedMetricCount: 0,
7572
},
7673
}
7774

7875
for _, test := range tests {
7976
t.Run(test.desc, func(t *testing.T) {
80-
registry := newKubeRegistry(*test.registryVersion)
77+
registry := newKubeRegistry(&apimachineryversion.Info{
78+
Major: "1",
79+
Minor: "15",
80+
GitVersion: "v1.15.0-alpha-1.12345",
81+
})
8182
c := NewCounter(test.CounterOpts)
8283
registry.MustRegister(c)
8384

@@ -141,7 +142,6 @@ func TestCounterVec(t *testing.T) {
141142
Help: "counter help",
142143
},
143144
labels: []string{"label_a", "label_b"},
144-
registryVersion: &v115,
145145
expectedMetricFamilyCount: 1,
146146
expectedHelp: "counter help",
147147
},
@@ -155,7 +155,6 @@ func TestCounterVec(t *testing.T) {
155155
DeprecatedVersion: &v115,
156156
},
157157
labels: []string{"label_a", "label_b"},
158-
registryVersion: &v115,
159158
expectedMetricFamilyCount: 1,
160159
expectedHelp: "(Deprecated since 1.15.0) counter help",
161160
},
@@ -169,15 +168,18 @@ func TestCounterVec(t *testing.T) {
169168
DeprecatedVersion: &v114,
170169
},
171170
labels: []string{"label_a", "label_b"},
172-
registryVersion: &v115,
173171
expectedMetricFamilyCount: 0,
174172
expectedHelp: "counter help",
175173
},
176174
}
177175

178176
for _, test := range tests {
179177
t.Run(test.desc, func(t *testing.T) {
180-
registry := newKubeRegistry(*test.registryVersion)
178+
registry := newKubeRegistry(&apimachineryversion.Info{
179+
Major: "1",
180+
Minor: "15",
181+
GitVersion: "v1.15.0-alpha-1.12345",
182+
})
181183
c := NewCounterVec(test.CounterOpts, test.labels)
182184
registry.MustRegister(c)
183185
c.WithLabelValues("1", "2").Inc()

pkg/util/metrics/framework/metric.go renamed to staging/src/k8s.io/component-base/metrics/metric.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package framework
17+
package metrics
1818

1919
import (
2020
"github.com/blang/semver"

pkg/util/metrics/framework/opts.go renamed to staging/src/k8s.io/component-base/metrics/opts.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package framework
17+
package metrics
1818

1919
import (
2020
"fmt"

pkg/util/metrics/framework/registry.go renamed to staging/src/k8s.io/component-base/metrics/registry.go

Lines changed: 63 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,46 +14,80 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package framework
17+
package metrics
1818

1919
import (
2020
"github.com/blang/semver"
2121
"github.com/prometheus/client_golang/prometheus"
2222
dto "github.com/prometheus/client_model/go"
23-
"k8s.io/klog"
24-
"k8s.io/kubernetes/pkg/version"
23+
apimachineryversion "k8s.io/apimachinery/pkg/version"
24+
"sync"
2525
)
2626

27-
// DefaultGlobalRegistry is a stub for the global registry which prometheus client
28-
// currently uses.
29-
var DefaultGlobalRegistry = NewKubeRegistry()
27+
var globalRegistryFactory = metricsRegistryFactory{
28+
globalRegistry: &noopKubeRegistry{},
29+
}
3030

31-
// KubeRegistry is a wrapper around a prometheus registry-type object. Upon initialization
31+
// NewKubeRegistry creates a new kubernetes metric registry, loading in the kubernetes
32+
// version information available to the binary.
33+
func (r metricsRegistryFactory) newKubeRegistry() KubeRegistry {
34+
if r.kubeVersion == nil {
35+
return noopKubeRegistry{}
36+
}
37+
return newKubeRegistry(r.kubeVersion)
38+
}
39+
40+
type metricsRegistryFactory struct {
41+
globalRegistry KubeRegistry
42+
kubeVersion *apimachineryversion.Info
43+
setVersionOnce sync.Once
44+
}
45+
46+
// KubeRegistry is an interface which implements a subset of prometheus.Registerer and
47+
// prometheus.Gatherer interfaces
48+
type KubeRegistry interface {
49+
Register(KubeCollector) error
50+
MustRegister(...KubeCollector)
51+
Unregister(KubeCollector) bool
52+
Gather() ([]*dto.MetricFamily, error)
53+
}
54+
55+
// kubeRegistry is a wrapper around a prometheus registry-type object. Upon initialization
3256
// the kubernetes binary version information is loaded into the registry object, so that
3357
// automatic behavior can be configured for metric versioning.
34-
type KubeRegistry struct {
58+
type kubeRegistry struct {
3559
PromRegistry
3660
version semver.Version
3761
}
3862

63+
// SetRegistryFactoryVersion sets the kubernetes version information for all
64+
// subsequent metrics registry initializations. Only the first call has an effect.
65+
// If a version is not set, then metrics registry creation will no-opt
66+
func SetRegistryFactoryVersion(ver *apimachineryversion.Info) {
67+
globalRegistryFactory.setVersionOnce.Do(func() {
68+
globalRegistryFactory.globalRegistry = newKubeRegistry(ver)
69+
globalRegistryFactory.kubeVersion = ver
70+
})
71+
}
72+
3973
// Register registers a collectable metric, but it uses a global registry.
4074
func Register(c KubeCollector) error {
41-
return DefaultGlobalRegistry.Register(c)
75+
return globalRegistryFactory.globalRegistry.Register(c)
4276
}
4377

4478
// MustRegister works like Register but registers any number of
4579
// Collectors and panics upon the first registration that causes an
4680
// error.
4781
func MustRegister(cs ...KubeCollector) {
48-
DefaultGlobalRegistry.MustRegister(cs...)
82+
globalRegistryFactory.globalRegistry.MustRegister(cs...)
4983
}
5084

5185
// Register registers a new Collector to be included in metrics
5286
// collection. It returns an error if the descriptors provided by the
5387
// Collector are invalid or if they — in combination with descriptors of
5488
// already registered Collectors — do not fulfill the consistency and
5589
// uniqueness criteria described in the documentation of metric.Desc.
56-
func (kr *KubeRegistry) Register(c KubeCollector) error {
90+
func (kr *kubeRegistry) Register(c KubeCollector) error {
5791
if c.Create(&kr.version) {
5892
return kr.PromRegistry.Register(c)
5993
}
@@ -63,7 +97,7 @@ func (kr *KubeRegistry) Register(c KubeCollector) error {
6397
// MustRegister works like Register but registers any number of
6498
// Collectors and panics upon the first registration that causes an
6599
// error.
66-
func (kr *KubeRegistry) MustRegister(cs ...KubeCollector) {
100+
func (kr *kubeRegistry) MustRegister(cs ...KubeCollector) {
67101
metrics := make([]prometheus.Collector, 0, len(cs))
68102
for _, c := range cs {
69103
if c.Create(&kr.version) {
@@ -79,7 +113,7 @@ func (kr *KubeRegistry) MustRegister(cs ...KubeCollector) {
79113
// returns whether a Collector was unregistered. Note that an unchecked
80114
// Collector cannot be unregistered (as its Describe method does not
81115
// yield any descriptor).
82-
func (kr *KubeRegistry) Unregister(collector KubeCollector) bool {
116+
func (kr *kubeRegistry) Unregister(collector KubeCollector) bool {
83117
return kr.PromRegistry.Unregister(collector)
84118
}
85119

@@ -90,28 +124,31 @@ func (kr *KubeRegistry) Unregister(collector KubeCollector) bool {
90124
// for valid exposition. As an exception to the strict consistency
91125
// requirements described for metric.Desc, Gather will tolerate
92126
// different sets of label names for metrics of the same metric family.
93-
func (kr *KubeRegistry) Gather() ([]*dto.MetricFamily, error) {
127+
func (kr *kubeRegistry) Gather() ([]*dto.MetricFamily, error) {
94128
return kr.PromRegistry.Gather()
95129
}
96130

97131
// NewKubeRegistry creates a new kubernetes metric registry, loading in the kubernetes
98132
// version information available to the binary.
99-
func NewKubeRegistry() *KubeRegistry {
100-
v, err := parseVersion(version.Get())
101-
if err != nil {
102-
klog.Fatalf("Can't initialize a registry without a valid version %v", err)
103-
}
104-
if v == nil {
105-
klog.Fatalf("No valid version loaded for metrics registry")
106-
}
107-
return newKubeRegistry(semver.MustParse(*v))
133+
func NewKubeRegistry() KubeRegistry {
134+
return globalRegistryFactory.newKubeRegistry()
108135
}
109136

110137
// newKubeRegistry creates a new vanilla Registry without any Collectors
111138
// pre-registered.
112-
func newKubeRegistry(version semver.Version) *KubeRegistry {
113-
return &KubeRegistry{
139+
func newKubeRegistry(v *apimachineryversion.Info) KubeRegistry {
140+
return &kubeRegistry{
114141
PromRegistry: prometheus.NewRegistry(),
115-
version: version,
142+
version: parseVersion(*v),
116143
}
117144
}
145+
146+
// noop registry
147+
var noopRegistry = &noopKubeRegistry{}
148+
149+
type noopKubeRegistry struct{}
150+
151+
func (noopKubeRegistry) Register(KubeCollector) error { return nil }
152+
func (noopKubeRegistry) MustRegister(...KubeCollector) {}
153+
func (noopKubeRegistry) Unregister(KubeCollector) bool { return false }
154+
func (noopKubeRegistry) Gather() ([]*dto.MetricFamily, error) { return nil, nil }

pkg/util/metrics/framework/registry_test.go renamed to staging/src/k8s.io/component-base/metrics/registry_test.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package framework
17+
package metrics
1818

1919
import (
2020
"github.com/blang/semver"
2121
"github.com/prometheus/client_golang/prometheus"
2222
"github.com/stretchr/testify/assert"
23+
apimachineryversion "k8s.io/apimachinery/pkg/version"
2324
"testing"
2425
)
2526

@@ -116,7 +117,11 @@ func TestRegister(t *testing.T) {
116117

117118
for _, test := range tests {
118119
t.Run(test.desc, func(t *testing.T) {
119-
registry := newKubeRegistry(*test.registryVersion)
120+
registry := newKubeRegistry(&apimachineryversion.Info{
121+
Major: "1",
122+
Minor: "15",
123+
GitVersion: "v1.15.0-alpha-1.12345",
124+
})
120125
for i, m := range test.metrics {
121126
err := registry.Register(m)
122127
if err != test.expectedErrors[i] && err.Error() != test.expectedErrors[i].Error() {
@@ -183,7 +188,11 @@ func TestMustRegister(t *testing.T) {
183188

184189
for _, test := range tests {
185190
t.Run(test.desc, func(t *testing.T) {
186-
registry := newKubeRegistry(*test.registryVersion)
191+
registry := newKubeRegistry(&apimachineryversion.Info{
192+
Major: "1",
193+
Minor: "15",
194+
GitVersion: "v1.15.0-alpha-1.12345",
195+
})
187196
for i, m := range test.metrics {
188197
if test.expectedPanics[i] {
189198
assert.Panics(t,

pkg/util/metrics/framework/version_parser.go renamed to staging/src/k8s.io/component-base/metrics/version_parser.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package framework
17+
package metrics
1818

1919
import (
2020
"fmt"
21+
"github.com/blang/semver"
2122
apimachineryversion "k8s.io/apimachinery/pkg/version"
2223
"regexp"
2324
)
@@ -30,11 +31,11 @@ var (
3031
versionRe = regexp.MustCompile(versionRegexpString)
3132
)
3233

33-
func parseVersion(ver apimachineryversion.Info) (*string, error) {
34+
func parseVersion(ver apimachineryversion.Info) semver.Version {
3435
matches := versionRe.FindAllStringSubmatch(ver.String(), -1)
3536

3637
if len(matches) != 1 {
37-
return nil, fmt.Errorf("version string \"%v\" doesn't match expected regular expression: \"%v\"", ver.String(), versionRe.String())
38+
panic(fmt.Sprintf("version string \"%v\" doesn't match expected regular expression: \"%v\"", ver.String(), versionRe.String()))
3839
}
39-
return &matches[0][1], nil
40+
return semver.MustParse(matches[0][1])
4041
}

0 commit comments

Comments
 (0)