Skip to content

Commit 37423f4

Browse files
Import k8s metrics stability framework
1 parent 0880c8d commit 37423f4

File tree

4 files changed

+25
-7
lines changed

4 files changed

+25
-7
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ require (
4040
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect
4141
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect
4242
github.com/beorn7/perks v1.0.1 // indirect
43+
github.com/blang/semver v3.5.0+incompatible // indirect
4344
github.com/cespare/xxhash/v2 v2.1.2 // indirect
4445
github.com/davecgh/go-spew v1.1.1 // indirect
4546
github.com/emicklei/go-restful/v3 v3.8.0 // indirect

internal/store/node.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"k8s.io/kube-state-metrics/v2/pkg/constant"
2424
"k8s.io/kube-state-metrics/v2/pkg/metric"
2525
generator "k8s.io/kube-state-metrics/v2/pkg/metric_generator"
26+
basemetrics "k8s.io/component-base/metrics"
2627

2728
v1 "k8s.io/api/core/v1"
2829
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -79,10 +80,11 @@ func createNodeCreatedFamilyGenerator() generator.FamilyGenerator {
7980
}
8081

8182
func createNodeInfoFamilyGenerator() generator.FamilyGenerator {
82-
return *generator.NewFamilyGenerator(
83+
return *generator.NewFamilyGeneratorWithStability(
8384
"kube_node_info",
8485
"Information about a cluster node.",
8586
metric.Gauge,
87+
basemetrics.STABLE,
8688
"",
8789
wrapNodeFunc(func(n *v1.Node) *metric.Family {
8890
labelKeys := []string{

internal/store/node_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func TestNodeStore(t *testing.T) {
5454
},
5555
},
5656
Want: `
57-
# HELP kube_node_info Information about a cluster node.
57+
# HELP kube_node_info [STABLE] Information about a cluster node.
5858
# HELP kube_node_labels Kubernetes labels converted to Prometheus labels.
5959
# HELP kube_node_spec_unschedulable Whether a node can schedule new pods.
6060
# TYPE kube_node_info gauge
@@ -74,7 +74,7 @@ func TestNodeStore(t *testing.T) {
7474
Spec: v1.NodeSpec{},
7575
},
7676
Want: `
77-
# HELP kube_node_info Information about a cluster node.
77+
# HELP kube_node_info [STABLE] Information about a cluster node.
7878
# TYPE kube_node_info gauge
7979
kube_node_info{container_runtime_version="",kernel_version="",kubelet_version="",kubeproxy_version="",node="",os_image="",pod_cidr="",provider_id="",internal_ip="",system_uuid=""} 1
8080
`,
@@ -127,7 +127,7 @@ func TestNodeStore(t *testing.T) {
127127
},
128128
Want: `
129129
# HELP kube_node_created Unix creation timestamp
130-
# HELP kube_node_info Information about a cluster node.
130+
# HELP kube_node_info [STABLE] Information about a cluster node.
131131
# HELP kube_node_labels Kubernetes labels converted to Prometheus labels.
132132
# HELP kube_node_role The role of a cluster node.
133133
# HELP kube_node_spec_unschedulable Whether a node can schedule new pods.

pkg/metric_generator/generator.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"strings"
2222

2323
"k8s.io/kube-state-metrics/v2/pkg/metric"
24+
basemetrics "k8s.io/component-base/metrics"
2425
)
2526

2627
// FamilyGenerator provides everything needed to generate a metric family with a
@@ -33,16 +34,19 @@ type FamilyGenerator struct {
3334
Type metric.Type
3435
OptIn bool
3536
DeprecatedVersion string
37+
StabilityLevel basemetrics.StabilityLevel
3638
GenerateFunc func(obj interface{}) *metric.Family
3739
}
3840

39-
// NewFamilyGenerator creates new FamilyGenerator instances.
40-
func NewFamilyGenerator(name string, help string, metricType metric.Type, deprecatedVersion string, generateFunc func(obj interface{}) *metric.Family) *FamilyGenerator {
41+
// NewFamilyGenerator creates new FamilyGenerator instances with metric
42+
// stabilityLevel.
43+
func NewFamilyGeneratorWithStability(name string, help string, metricType metric.Type, stabilityLevel basemetrics.StabilityLevel, deprecatedVersion string, generateFunc func(obj interface{}) *metric.Family) *FamilyGenerator {
4144
f := &FamilyGenerator{
4245
Name: name,
4346
Type: metricType,
4447
Help: help,
4548
OptIn: false,
49+
StabilityLevel: stabilityLevel,
4650
DeprecatedVersion: deprecatedVersion,
4751
GenerateFunc: generateFunc,
4852
}
@@ -52,6 +56,11 @@ func NewFamilyGenerator(name string, help string, metricType metric.Type, deprec
5256
return f
5357
}
5458

59+
// NewFamilyGenerator creates new FamilyGenerator instances.
60+
func NewFamilyGenerator(name string, help string, metricType metric.Type, deprecatedVersion string, generateFunc func(obj interface{}) *metric.Family) *FamilyGenerator {
61+
return NewFamilyGeneratorWithStability(name, help, metricType, basemetrics.ALPHA, deprecatedVersion, generateFunc)
62+
}
63+
5564
// NewOptInFamilyGenerator creates new FamilyGenerator instances for opt-in metric families.
5665
func NewOptInFamilyGenerator(name string, help string, metricType metric.Type, deprecatedVersion string, generateFunc func(obj interface{}) *metric.Family) *FamilyGenerator {
5766
f := NewFamilyGenerator(name, help, metricType, deprecatedVersion, generateFunc)
@@ -75,7 +84,13 @@ func (g *FamilyGenerator) generateHeader() string {
7584
header.WriteString("# HELP ")
7685
header.WriteString(g.Name)
7786
header.WriteByte(' ')
78-
header.WriteString(g.Help)
87+
// Will remove if-else after all metrics are attached with right
88+
// StabilityLevel.
89+
if g.StabilityLevel == basemetrics.STABLE {
90+
header.WriteString(fmt.Sprintf("[%v] %v", g.StabilityLevel, g.Help))
91+
} else {
92+
header.WriteString(g.Help)
93+
}
7994
header.WriteByte('\n')
8095
header.WriteString("# TYPE ")
8196
header.WriteString(g.Name)

0 commit comments

Comments
 (0)