rename metric and add feature stage to metrics

Change-Id: Iccab766ba2ee16ef54abb79e41ee61a6117fa7dd
This commit is contained in:
Han Kang 2022-09-22 08:56:36 -07:00
parent 80024aefcb
commit dc2c486059
2 changed files with 23 additions and 24 deletions

View File

@ -25,27 +25,26 @@ import (
) )
var ( var (
// featureEnabled is a Prometheus Gauge metrics used for recording the enablement of a k8s feature. // featureInfo is a Prometheus Gauge metrics used for recording the enablement of a k8s feature.
featureEnabled = k8smetrics.NewGaugeVec( featureInfo = k8smetrics.NewGaugeVec(
&k8smetrics.GaugeOpts{ &k8smetrics.GaugeOpts{
Namespace: "k8s", Namespace: "k8s",
Name: "feature_enabled", Name: "feature_info",
Help: "This metric records the result of whether a feature is enabled.", Help: "This metric records the data about the stage and enablement of a k8s feature.",
StabilityLevel: k8smetrics.ALPHA, StabilityLevel: k8smetrics.ALPHA,
}, },
[]string{"name", "enabled"}, []string{"name", "stage", "enabled"},
) )
) )
func init() { func init() {
legacyregistry.MustRegister(featureEnabled) legacyregistry.MustRegister(featureInfo)
} }
func ResetFeatureEnabledMetric() { func ResetFeatureInfoMetric() {
featureEnabled.Reset() featureInfo.Reset()
} }
func RecordFeatureEnabled(ctx context.Context, name string, enabled bool) error { func RecordFeatureInfo(ctx context.Context, name string, stage string, enabled bool) {
featureEnabled.WithContext(ctx).WithLabelValues(name, fmt.Sprintf("%v", enabled)).Set(1) featureInfo.WithContext(ctx).WithLabelValues(name, stage, fmt.Sprintf("%v", enabled)).Set(1)
return nil
} }

View File

@ -26,48 +26,48 @@ import (
) )
var ( var (
testedMetrics = []string{"k8s_feature_enabled"} testedMetrics = []string{"k8s_feature_info"}
) )
func TestObserveHealthcheck(t *testing.T) { func TestObserveHealthcheck(t *testing.T) {
defer legacyregistry.Reset() defer legacyregistry.Reset()
defer ResetFeatureEnabledMetric() defer ResetFeatureInfoMetric()
testCases := []struct { testCases := []struct {
desc string desc string
name string name string
stage string
enabled bool enabled bool
want string want string
}{ }{
{ {
desc: "test enabled", desc: "test enabled",
name: "feature-a", name: "feature-a",
stage: "ALPHA",
enabled: true, enabled: true,
want: ` want: `
# HELP k8s_feature_enabled [ALPHA] This metric records the result of whether a feature is enabled. # HELP k8s_feature_info [ALPHA] This metric records the data about the stage and enablement of a k8s feature.
# TYPE k8s_feature_enabled gauge # TYPE k8s_feature_info gauge
k8s_feature_enabled{enabled="true",name="feature-a"} 1 k8s_feature_info{enabled="true",name="feature-a",stage="ALPHA"} 1
`, `,
}, },
{ {
desc: "test disabled", desc: "test disabled",
name: "feature-b", name: "feature-b",
stage: "BETA",
enabled: false, enabled: false,
want: ` want: `
# HELP k8s_feature_enabled [ALPHA] This metric records the result of whether a feature is enabled. # HELP k8s_feature_info [ALPHA] This metric records the data about the stage and enablement of a k8s feature.
# TYPE k8s_feature_enabled gauge # TYPE k8s_feature_info gauge
k8s_feature_enabled{enabled="false",name="feature-b"} 1 k8s_feature_info{enabled="false",name="feature-b",stage="BETA"} 1
`, `,
}, },
} }
for _, test := range testCases { for _, test := range testCases {
t.Run(test.desc, func(t *testing.T) { t.Run(test.desc, func(t *testing.T) {
defer ResetFeatureEnabledMetric() defer ResetFeatureInfoMetric()
err := RecordFeatureEnabled(context.Background(), test.name, test.enabled) RecordFeatureInfo(context.Background(), test.name, test.stage, test.enabled)
if err != nil {
t.Errorf("unexpected err: %v", err)
}
if err := testutil.GatherAndCompare(legacyregistry.DefaultGatherer, strings.NewReader(test.want), testedMetrics...); err != nil { if err := testutil.GatherAndCompare(legacyregistry.DefaultGatherer, strings.NewReader(test.want), testedMetrics...); err != nil {
t.Fatal(err) t.Fatal(err)