Skip to content

Commit d9f8142

Browse files
dhaiducekopenshift-merge-robot
authored andcommitted
Add template-sync metrics
Adds metrics to track user vs system errors. ref: https://issues.redhat.com/browse/ACM-2217 Signed-off-by: Dale Haiducek <[email protected]>
1 parent a981f3c commit d9f8142

File tree

7 files changed

+216
-49
lines changed

7 files changed

+216
-49
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package templatesync
2+
3+
import (
4+
"errors"
5+
6+
"github.com/prometheus/client_golang/prometheus"
7+
"sigs.k8s.io/controller-runtime/pkg/metrics"
8+
)
9+
10+
var (
11+
policyUserErrorsCounter = prometheus.NewCounterVec(
12+
prometheus.CounterOpts{
13+
Name: "policy_user_errors_total",
14+
Help: "The number of user errors encountered while processing policies",
15+
},
16+
[]string{
17+
"policy",
18+
"template",
19+
"type",
20+
},
21+
)
22+
policySystemErrorsCounter = prometheus.NewCounterVec(
23+
prometheus.CounterOpts{
24+
Name: "policy_system_errors_total",
25+
Help: "The number of system errors encountered while processing policies",
26+
},
27+
[]string{
28+
"policy",
29+
"template",
30+
"type",
31+
},
32+
)
33+
)
34+
35+
func init() {
36+
// Register custom metrics with the global Prometheus registry
37+
// Error metrics may already be registered by another controller
38+
alreadyReg := &prometheus.AlreadyRegisteredError{}
39+
40+
regErr := metrics.Registry.Register(policySystemErrorsCounter)
41+
if regErr != nil && !errors.As(regErr, alreadyReg) {
42+
panic(regErr)
43+
}
44+
45+
regErr = metrics.Registry.Register(policyUserErrorsCounter)
46+
if regErr != nil && !errors.As(regErr, alreadyReg) {
47+
panic(regErr)
48+
}
49+
}

controllers/templatesync/template_sync.go

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"strings"
1111

1212
"github.com/go-logr/logr"
13+
"github.com/prometheus/client_golang/prometheus"
1314
depclient "github.com/stolostron/kubernetes-dependency-watches/client"
1415
"k8s.io/apimachinery/pkg/api/equality"
1516
"k8s.io/apimachinery/pkg/api/errors"
@@ -89,12 +90,17 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
8990
// Return and don't requeue
9091
reqLogger.Info("Policy not found, may have been deleted, reconciliation completed")
9192

93+
_ = policyUserErrorsCounter.DeletePartialMatch(prometheus.Labels{"policy": request.Name})
94+
_ = policySystemErrorsCounter.DeletePartialMatch(prometheus.Labels{"policy": request.Name})
95+
9296
return reconcile.Result{}, nil
9397
}
9498

9599
// Error reading the object - requeue the request.
96100
reqLogger.Error(err, "Failed to get the policy, will requeue the request")
97101

102+
policySystemErrorsCounter.WithLabelValues(request.Name, "", "get-error").Inc()
103+
98104
return reconcile.Result{}, err
99105
}
100106

@@ -110,6 +116,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
110116
if err != nil {
111117
reqLogger.Error(err, "Failed to create restmapper")
112118

119+
policySystemErrorsCounter.WithLabelValues(instance.Name, "", "get-error").Inc()
120+
113121
return reconcile.Result{}, err
114122
}
115123

@@ -120,6 +128,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
120128
if err != nil {
121129
reqLogger.Error(err, "Failed to create dynamic client")
122130

131+
policySystemErrorsCounter.WithLabelValues(instance.Name, "", "client-error").Inc()
132+
123133
return reconcile.Result{}, err
124134
}
125135
} else {
@@ -153,6 +163,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
153163

154164
reqLogger.Error(err, "Failed to decode the policy dependencies", "policy", instance.GetName())
155165

166+
policyUserErrorsCounter.WithLabelValues(instance.Name, "", "dependency-error").Inc()
167+
156168
continue
157169
}
158170

@@ -196,13 +208,15 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
196208
if ok && existingDep != dep.Compliance {
197209
// dependency conflict, fire error
198210
resultError = fmt.Errorf("dependency on %s has conflicting compliance states", dep.Name)
199-
errMsg := fmt.Sprintf("Failed to decode policy template with err: %s", err)
211+
errMsg := fmt.Sprintf("Failed to decode policy template with err: %s", resultError)
200212

201213
r.emitTemplateError(instance, tIndex, fmt.Sprintf("[template %v]", tIndex), errMsg)
202214
reqLogger.Error(resultError, "Failed to decode the policy template", "templateIndex", tIndex)
203215

204216
depConflictErr = true
205217

218+
policyUserErrorsCounter.WithLabelValues(instance.Name, "", "dependency-error").Inc()
219+
206220
break
207221
}
208222

@@ -223,6 +237,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
223237
r.emitTemplateError(instance, tIndex, fmt.Sprintf("[template %v]", tIndex), errMsg)
224238
reqLogger.Error(resultError, "Failed to decode the policy template", "templateIndex", tIndex)
225239

240+
policyUserErrorsCounter.WithLabelValues(instance.Name, "", "format-error").Inc()
241+
226242
continue
227243
}
228244

@@ -238,6 +254,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
238254
r.emitTemplateError(instance, tIndex, fmt.Sprintf("[template %v]", tIndex), errMsg)
239255
reqLogger.Error(resultError, "Failed to process the policy template", "templateIndex", tIndex)
240256

257+
policyUserErrorsCounter.WithLabelValues(instance.Name, "", "format-error").Inc()
258+
241259
continue
242260
}
243261

@@ -260,6 +278,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
260278
"kind", gvk.Kind,
261279
)
262280

281+
policyUserErrorsCounter.WithLabelValues(instance.Name, tName, "crd-error").Inc()
282+
263283
continue
264284
}
265285

@@ -274,6 +294,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
274294
r.emitTemplateError(instance, tIndex, tName, errMsg)
275295
tLogger.Error(resultError, "Failed to process the policy template")
276296

297+
policyUserErrorsCounter.WithLabelValues(instance.Name, tName, "format-error").Inc()
298+
277299
continue
278300
}
279301
}
@@ -292,6 +314,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
292314
r.emitTemplateError(instance, tIndex, tName, errMsg)
293315
tLogger.Error(resultError, "Failed to unmarshal the policy template")
294316

317+
policySystemErrorsCounter.WithLabelValues(instance.Name, tName, "unmarshal-error").Inc()
318+
295319
continue
296320
}
297321

@@ -344,6 +368,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
344368
r.emitTemplateError(instance, tIndex, tName, errMsg)
345369
tLogger.Error(resultError, "Failed to create policy template")
346370

371+
policySystemErrorsCounter.WithLabelValues(instance.Name, tName, "create-error").Inc()
372+
347373
continue
348374
}
349375

@@ -354,6 +380,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
354380
if err != nil {
355381
resultError = err
356382
tLogger.Error(resultError, "Error after creating template (will requeue)")
383+
384+
policySystemErrorsCounter.WithLabelValues(instance.Name, tName, "patch-error").Inc()
357385
}
358386

359387
continue
@@ -368,6 +396,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
368396
"kind", gvk.Kind,
369397
)
370398

399+
policySystemErrorsCounter.WithLabelValues(instance.Name, tName, "get-error").Inc()
400+
371401
continue
372402
}
373403
}
@@ -386,6 +416,7 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
386416
"namespace", instance.GetNamespace(),
387417
"name", tName,
388418
)
419+
policySystemErrorsCounter.WithLabelValues(instance.Name, tName, "delete-error").Inc()
389420

390421
resultError = err
391422
}
@@ -406,6 +437,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
406437
r.emitTemplateError(instance, tIndex, tName, errMsg)
407438
tLogger.Error(resultError, "Failed to create the policy template")
408439

440+
policyUserErrorsCounter.WithLabelValues(instance.Name, tName, "format-error").Inc()
441+
409442
continue
410443
}
411444

@@ -435,6 +468,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
435468
r.emitTemplateError(instance, tIndex, tName, errMsg)
436469
tLogger.Error(err, "Failed to update the policy template")
437470

471+
policySystemErrorsCounter.WithLabelValues(instance.Name, tName, "patch-error").Inc()
472+
438473
continue
439474
}
440475

@@ -444,6 +479,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
444479
if err != nil {
445480
resultError = err
446481
tLogger.Error(resultError, "Error after updating template (will requeue)")
482+
483+
policySystemErrorsCounter.WithLabelValues(instance.Name, tName, "patch-error").Inc()
447484
}
448485

449486
tLogger.Info("Existing object has been updated")
@@ -452,6 +489,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
452489
if err != nil {
453490
resultError = err
454491
tLogger.Error(resultError, "Error after confirming template matches (will requeue)")
492+
493+
policySystemErrorsCounter.WithLabelValues(instance.Name, tName, "patch-error").Inc()
455494
}
456495

457496
tLogger.Info("Existing object matches the policy template")
@@ -480,6 +519,8 @@ func (r *PolicyReconciler) Reconcile(ctx context.Context, request reconcile.Requ
480519
if err != nil {
481520
resultError = err
482521
reqLogger.Error(resultError, "Error updating dependency watcher")
522+
523+
policySystemErrorsCounter.WithLabelValues(instance.Name, "", "client-error").Inc()
483524
}
484525

485526
reqLogger.Info("Completed the reconciliation")

go.mod

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ module open-cluster-management.io/governance-policy-framework-addon
33
go 1.19
44

55
require (
6+
github.com/go-logr/logr v1.2.2
67
github.com/go-logr/zapr v1.2.3
78
github.com/onsi/ginkgo/v2 v2.1.6
89
github.com/onsi/gomega v1.20.2
10+
github.com/prometheus/client_golang v1.14.0
911
github.com/spf13/pflag v1.0.5
1012
github.com/stolostron/go-log-utils v0.1.1
1113
github.com/stolostron/kubernetes-dependency-watches v0.1.0
@@ -35,7 +37,6 @@ require (
3537
github.com/evanphx/json-patch v5.6.0+incompatible // indirect
3638
github.com/fsnotify/fsnotify v1.5.1 // indirect
3739
github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 // indirect
38-
github.com/go-logr/logr v1.2.2 // indirect
3940
github.com/gogo/protobuf v1.3.2 // indirect
4041
github.com/golang-jwt/jwt/v4 v4.2.0 // indirect
4142
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
@@ -53,23 +54,22 @@ require (
5354
github.com/openshift/api v0.0.0-20211209135129-c58d9f695577 // indirect
5455
github.com/openshift/library-go v0.0.0-20220203150523-45e0cded6a36 // indirect
5556
github.com/pkg/errors v0.9.1 // indirect
56-
github.com/prometheus/client_golang v1.12.1 // indirect
57-
github.com/prometheus/client_model v0.2.0 // indirect
58-
github.com/prometheus/common v0.32.1 // indirect
59-
github.com/prometheus/procfs v0.7.3 // indirect
57+
github.com/prometheus/client_model v0.3.0 // indirect
58+
github.com/prometheus/common v0.37.0 // indirect
59+
github.com/prometheus/procfs v0.8.0 // indirect
6060
go.uber.org/atomic v1.7.0 // indirect
6161
go.uber.org/multierr v1.6.0 // indirect
6262
go.uber.org/zap v1.21.0 // indirect
6363
golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064 // indirect
6464
golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect
65-
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect
65+
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect
6666
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect
6767
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
6868
golang.org/x/text v0.3.7 // indirect
6969
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
7070
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
7171
google.golang.org/appengine v1.6.7 // indirect
72-
google.golang.org/protobuf v1.28.0 // indirect
72+
google.golang.org/protobuf v1.28.1 // indirect
7373
gopkg.in/inf.v0 v0.9.1 // indirect
7474
gopkg.in/yaml.v2 v2.4.0 // indirect
7575
gopkg.in/yaml.v3 v3.0.1 // indirect

go.sum

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -193,9 +193,11 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2
193193
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
194194
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
195195
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
196+
github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
196197
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
197198
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
198199
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
200+
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
199201
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
200202
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
201203
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
@@ -516,28 +518,32 @@ github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDf
516518
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
517519
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
518520
github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
519-
github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk=
520521
github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
522+
github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw=
523+
github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y=
521524
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
522525
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
523526
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
524-
github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
525527
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
528+
github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4=
529+
github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w=
526530
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
527531
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
528532
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
529533
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
530534
github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
531535
github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
532-
github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4=
533536
github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
537+
github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE=
538+
github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
534539
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
535540
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
536541
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
537542
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
538543
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
539-
github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
540544
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
545+
github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo=
546+
github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
541547
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
542548
github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M=
543549
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
@@ -754,6 +760,8 @@ golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qx
754760
golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
755761
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
756762
golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
763+
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
764+
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
757765
golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0=
758766
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
759767
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -770,8 +778,8 @@ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ
770778
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
771779
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
772780
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
773-
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg=
774-
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
781+
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg=
782+
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
775783
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
776784
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
777785
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -855,6 +863,7 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc
855863
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
856864
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
857865
golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
866+
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
858867
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
859868
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
860869
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
@@ -1058,8 +1067,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
10581067
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
10591068
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
10601069
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
1061-
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
1062-
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
1070+
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
1071+
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
10631072
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
10641073
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
10651074
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

0 commit comments

Comments
 (0)