Skip to content

Commit beee72e

Browse files
committed
aggregator: add metric for openapi regeneration
1 parent 63dbb23 commit beee72e

File tree

4 files changed

+72
-3
lines changed

4 files changed

+72
-3
lines changed

staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator/BUILD

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go_library(
55
srcs = [
66
"aggregator.go",
77
"downloader.go",
8+
"metrics.go",
89
"priority.go",
910
],
1011
importmap = "k8s.io/kubernetes/vendor/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator",
@@ -14,6 +15,8 @@ go_library(
1415
"//staging/src/k8s.io/apiserver/pkg/authentication/user:go_default_library",
1516
"//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library",
1617
"//staging/src/k8s.io/apiserver/pkg/server:go_default_library",
18+
"//staging/src/k8s.io/component-base/metrics:go_default_library",
19+
"//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
1720
"//staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1:go_default_library",
1821
"//vendor/github.com/emicklei/go-restful:go_default_library",
1922
"//vendor/github.com/go-openapi/spec:go_default_library",

staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator/aggregator.go

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525

2626
restful "github.com/emicklei/go-restful"
2727
"github.com/go-openapi/spec"
28+
2829
"k8s.io/klog"
2930

3031
"k8s.io/apiserver/pkg/server"
@@ -107,7 +108,11 @@ func BuildAndRegisterAggregator(downloader *Downloader, delegationTarget server.
107108
// Build initial spec to serve.
108109
klog.V(2).Infof("Building initial OpenAPI spec")
109110
defer func(start time.Time) {
110-
klog.V(2).Infof("Finished initial OpenAPI spec generation after %v", time.Now().Sub(start))
111+
duration := time.Now().Sub(start)
112+
klog.V(2).Infof("Finished initial OpenAPI spec generation after %v", duration)
113+
114+
regenerationCounter.With(map[string]string{"apiservice": "*", "reason": "startup"})
115+
regenerationDurationGauge.With(map[string]string{"reason": "startup"}).Set(duration.Seconds())
111116
}(time.Now())
112117
specToServe, err := s.buildOpenAPISpec()
113118
if err != nil {
@@ -207,6 +212,7 @@ func (s *specAggregator) tryUpdatingServiceSpecs(specInfo *openAPISpecInfo) erro
207212
if specInfo == nil {
208213
return fmt.Errorf("invalid input: specInfo must be non-nil")
209214
}
215+
_, updated := s.openAPISpecs[specInfo.apiService.Name]
210216
origSpecInfo, existedBefore := s.openAPISpecs[specInfo.apiService.Name]
211217
s.openAPISpecs[specInfo.apiService.Name] = specInfo
212218

@@ -216,7 +222,16 @@ func (s *specAggregator) tryUpdatingServiceSpecs(specInfo *openAPISpecInfo) erro
216222
}
217223
klog.V(2).Infof("Updating OpenAPI spec because %s is updated", specInfo.apiService.Name)
218224
defer func(start time.Time) {
219-
klog.V(2).Infof("Finished OpenAPI spec generation after %v", time.Now().Sub(start))
225+
duration := time.Now().Sub(start)
226+
klog.V(2).Infof("Finished OpenAPI spec generation after %v", duration)
227+
228+
reason := "add"
229+
if updated {
230+
reason = "update"
231+
}
232+
233+
regenerationCounter.With(map[string]string{"apiservice": specInfo.apiService.Name, "reason": reason})
234+
regenerationDurationGauge.With(map[string]string{"reason": reason}).Set(duration.Seconds())
220235
}(time.Now())
221236
if err := s.updateOpenAPISpec(); err != nil {
222237
if existedBefore {
@@ -239,7 +254,11 @@ func (s *specAggregator) tryDeleteServiceSpecs(apiServiceName string) error {
239254
delete(s.openAPISpecs, apiServiceName)
240255
klog.V(2).Infof("Updating OpenAPI spec because %s is removed", apiServiceName)
241256
defer func(start time.Time) {
242-
klog.V(2).Infof("Finished OpenAPI spec generation after %v", time.Now().Sub(start))
257+
duration := time.Now().Sub(start)
258+
klog.V(2).Infof("Finished OpenAPI spec generation after %v", duration)
259+
260+
regenerationCounter.With(map[string]string{"apiservice": apiServiceName, "reason": "delete"})
261+
regenerationDurationGauge.With(map[string]string{"reason": "delete"}).Set(duration.Seconds())
243262
}(time.Now())
244263
if err := s.updateOpenAPISpec(); err != nil {
245264
s.openAPISpecs[apiServiceName] = orgSpecInfo
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
Copyright 2019 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package aggregator
18+
19+
import (
20+
"k8s.io/component-base/metrics"
21+
"k8s.io/component-base/metrics/legacyregistry"
22+
)
23+
24+
var (
25+
regenerationCounter = metrics.NewCounterVec(
26+
&metrics.CounterOpts{
27+
Name: "aggregator_openapi_v2_regeneration_count",
28+
Help: "Counter of OpenAPI v2 spec regeneration count broken down by causing APIService name and reason.",
29+
StabilityLevel: metrics.ALPHA,
30+
},
31+
[]string{"apiservice", "reason"},
32+
)
33+
regenerationDurationGauge = metrics.NewGaugeVec(
34+
&metrics.GaugeOpts{
35+
Name: "aggregator_openapi_v2_regeneration_duration",
36+
Help: "Gauge of OpenAPI v2 spec regeneration duration in seconds.",
37+
StabilityLevel: metrics.ALPHA,
38+
},
39+
[]string{"reason"},
40+
)
41+
)
42+
43+
func init() {
44+
legacyregistry.MustRegister(regenerationCounter)
45+
legacyregistry.MustRegister(regenerationDurationGauge)
46+
}

vendor/modules.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1637,6 +1637,7 @@ k8s.io/component-base/featuregate
16371637
k8s.io/component-base/featuregate/testing
16381638
k8s.io/component-base/logs
16391639
k8s.io/component-base/metrics
1640+
k8s.io/component-base/metrics/legacyregistry
16401641
k8s.io/component-base/version
16411642
# k8s.io/cri-api v0.0.0 => ./staging/src/k8s.io/cri-api
16421643
k8s.io/cri-api/pkg/apis

0 commit comments

Comments
 (0)