diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapiv3/controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapiv3/controller.go index aeb85f6ba92..dfd65810679 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapiv3/controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapiv3/controller.go @@ -178,6 +178,7 @@ func (c *Controller) deleteCRD(name string) { if len(crdListForGV) == 0 { delete(c.specsByGVandName, gv) } + regenerationCounter.With(map[string]string{"group": gv.Group, "version": gv.Version, "crd": name, "reason": "remove"}) c.updateGroupVersion(gv) } } @@ -210,7 +211,9 @@ func (c *Controller) updateCRDSpec(crd *apiextensionsv1.CustomResourceDefinition } _, ok := c.specsByGVandName[gv] + reason := "update" if !ok { + reason = "add" c.specsByGVandName[gv] = map[string]*spec3.OpenAPI{} } @@ -222,7 +225,7 @@ func (c *Controller) updateCRDSpec(crd *apiextensionsv1.CustomResourceDefinition } } c.specsByGVandName[gv][name] = v3 - + regenerationCounter.With(map[string]string{"crd": name, "group": gv.Group, "version": gv.Version, "reason": reason}) return c.updateGroupVersion(gv) } diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapiv3/metrics.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapiv3/metrics.go new file mode 100644 index 00000000000..e97e2cb5ae5 --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapiv3/metrics.go @@ -0,0 +1,37 @@ +/* +Copyright 2022 The Kubernetes 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 openapiv3 + +import ( + "k8s.io/component-base/metrics" + "k8s.io/component-base/metrics/legacyregistry" +) + +var ( + regenerationCounter = metrics.NewCounterVec( + &metrics.CounterOpts{ + Name: "apiextensions_openapi_v3_regeneration_count", + Help: "Counter of OpenAPI v3 spec regeneration count broken down by group, version, causing CRD and reason.", + StabilityLevel: metrics.ALPHA, + }, + []string{"group", "version", "crd", "reason"}, + ) +) + +func init() { + legacyregistry.MustRegister(regenerationCounter) +}