Skip to content

Commit 1b7ec91

Browse files
authored
feat: set GOMEMLIMIT and add basic metrics (#75)
- Allow setting the GOMEMLIMIT environment variable - Allow enabling basic (default) metrics
2 parents e7b6a64 + a229d0f commit 1b7ec91

File tree

8 files changed

+245
-2
lines changed

8 files changed

+245
-2
lines changed

cmd/csi-rclone-plugin/main.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package main
22

33
import (
4+
"context"
45
"flag"
56
"fmt"
67
"os"
8+
"os/signal"
9+
"syscall"
710
"time"
811

12+
"github.com/SwissDataScienceCenter/csi-rclone/pkg/metrics"
913
"github.com/SwissDataScienceCenter/csi-rclone/pkg/rclone"
1014
"github.com/spf13/cobra"
1115
"k8s.io/klog"
@@ -17,18 +21,28 @@ var (
1721
nodeID string
1822
cacheDir string
1923
cacheSize string
24+
meters []metrics.Observable
2025
)
2126

2227
func init() {
2328
flag.Set("logtostderr", "true")
2429
}
2530

2631
func main() {
32+
metricsServerConfig := metrics.ServerConfig{
33+
Host: "localhost",
34+
Port: 9090,
35+
PathPrefix: "/metrics",
36+
PollPeriod: 30 * time.Second,
37+
ShutdownTimeout: 5 * time.Second,
38+
Enabled: false,
39+
}
2740

2841
root := &cobra.Command{
2942
Use: "rclone",
3043
Short: "CSI based rclone driver",
3144
}
45+
metricsServerConfig.CommandLineParameters(root)
3246

3347
runCmd := &cobra.Command{
3448
Use: "run",
@@ -73,6 +87,16 @@ func main() {
7387
root.AddCommand(versionCmd)
7488

7589
root.ParseFlags(os.Args[1:])
90+
91+
if metricsServerConfig.Enabled {
92+
// Gracefully exit the metrics background servers
93+
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGTERM, syscall.SIGINT)
94+
defer stop()
95+
96+
metricsServer := metricsServerConfig.NewServer(ctx, &meters)
97+
go metricsServer.ListenAndServe()
98+
}
99+
76100
if err := root.Execute(); err != nil {
77101
fmt.Fprintf(os.Stderr, "%s", err.Error())
78102
os.Exit(1)
@@ -91,6 +115,7 @@ func handleNode() {
91115
if err != nil {
92116
panic(err)
93117
}
118+
meters = append(meters, ns.Metrics()...)
94119
d.WithNodeServer(ns)
95120
err = d.Run()
96121
if err != nil {
@@ -101,6 +126,7 @@ func handleNode() {
101126
func handleController() {
102127
d := rclone.NewDriver(nodeID, endpoint)
103128
cs := rclone.NewControllerServer(d.CSIDriver)
129+
meters = append(meters, cs.Metrics()...)
104130
d.WithControllerServer(cs)
105131
err := d.Run()
106132
if err != nil {

deploy/csi-rclone/templates/csi-controller-rclone.yaml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,21 @@ spec:
5959
- name: rclone
6060
args:
6161
- run
62+
{{- if .Values.csiControllerRclone.rclone.metrics.enabled }}
63+
- --metrics-enabled={{.Values.csiControllerRclone.rclone.metrics.enabled}}
64+
{{- end }}
65+
{{- if .Values.csiControllerRclone.rclone.metrics.host }}
66+
- --metrics-host={{.Values.csiControllerRclone.rclone.metrics.host}}
67+
{{- end }}
68+
{{- if .Values.csiControllerRclone.rclone.metrics.port }}
69+
- --metrics-port={{.Values.csiControllerRclone.rclone.metrics.port}}
70+
{{- end }}
71+
{{- if .Values.csiControllerRclone.rclone.metrics.pathPrefix }}
72+
- --metrics-path-prefix={{.Values.csiControllerRclone.rclone.metrics.pathPrefix}}
73+
{{- end }}
74+
{{- if .Values.csiControllerRclone.rclone.metrics.pollPeriod }}
75+
- --metrics-path-prefix={{.Values.csiControllerRclone.rclone.metrics.pollPeriod}}
76+
{{- end }}
6277
- controller
6378
- --nodeid=$(NODE_ID)
6479
- --endpoint=$(CSI_ENDPOINT)
@@ -73,6 +88,10 @@ spec:
7388
value: "unix://plugin/csi.sock"
7489
- name: KUBERNETES_CLUSTER_DOMAIN
7590
value: {{ quote .Values.kubernetesClusterDomain }}
91+
{{- if .Values.csiControllerRclone.rclone.goMemLimit }}
92+
- name: GOMEMLIMIT
93+
value: {{ .Values.csiControllerRclone.rclone.goMemLimit }}
94+
{{- end }}
7695
image: {{ .Values.csiControllerRclone.rclone.image.repository }}:{{ .Values.csiControllerRclone.rclone.image.tag | default .Chart.AppVersion }}
7796
imagePullPolicy: {{ .Values.csiControllerRclone.rclone.imagePullPolicy }}
7897
resources:
@@ -81,6 +100,11 @@ spec:
81100
- containerPort: 9808
82101
name: healthz
83102
protocol: TCP
103+
{{- if .Values.csiControllerRclone.rclone.metrics.port }}
104+
- containerPort: {{.Values.csiControllerRclone.rclone.metrics.port }}
105+
name: metrics
106+
protocol: TCP
107+
{{- end }}
84108
livenessProbe:
85109
failureThreshold: 5
86110
httpGet:

deploy/csi-rclone/templates/csi-nodeplugin-rclone.yaml

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,21 @@ spec:
6060
- name: rclone
6161
args:
6262
- run
63+
{{- if .Values.csiNodepluginRclone.rclone.metrics.enabled }}
64+
- --metrics-enabled={{.Values.csiNodepluginRclone.rclone.metrics.enabled}}
65+
{{- end }}
66+
{{- if .Values.csiNodepluginRclone.rclone.metrics.host }}
67+
- --metrics-host={{.Values.csiNodepluginRclone.rclone.metrics.host}}
68+
{{- end }}
69+
{{- if .Values.csiNodepluginRclone.rclone.metrics.port }}
70+
- --metrics-port={{.Values.csiNodepluginRclone.rclone.metrics.port}}
71+
{{- end }}
72+
{{- if .Values.csiNodepluginRclone.rclone.metrics.pathPrefix }}
73+
- --metrics-path-prefix={{.Values.csiNodepluginRclone.rclone.metrics.pathPrefix}}
74+
{{- end }}
75+
{{- if .Values.csiNodepluginRclone.rclone.metrics.pollPeriod }}
76+
- --metrics-path-prefix={{.Values.csiNodepluginRclone.rclone.metrics.pollPeriod}}
77+
{{- end }}
6378
- node
6479
- --nodeid=$(NODE_ID)
6580
- --endpoint=$(CSI_ENDPOINT)
@@ -82,6 +97,10 @@ spec:
8297
value: {{ .Values.csiNodepluginRclone.rclone.cache.dir | quote }}
8398
- name: CACHE_SIZE
8499
value: {{ .Values.csiNodepluginRclone.rclone.cache.size | quote }}
100+
{{- if .Values.csiNodepluginRclone.rclone.goMemLimit }}
101+
- name: GOMEMLIMIT
102+
value: {{ .Values.csiNodepluginRclone.rclone.goMemLimit }}
103+
{{- end }}
85104
{{- if .Values.csiNodepluginRclone.rclone.extraArgs }}
86105
- name: EXTRA_ARGS
87106
value: {{ .Values.csiNodepluginRclone.rclone.extraArgs | toJson | quote }}
@@ -94,13 +113,18 @@ spec:
94113
image: {{ .Values.csiNodepluginRclone.rclone.image.repository }}:{{ .Values.csiNodepluginRclone.rclone.image.tag | default .Chart.AppVersion }}
95114
imagePullPolicy: {{ .Values.csiNodepluginRclone.rclone.imagePullPolicy }}
96115
resources:
97-
{{- toYaml .Values.csiControllerRclone.rclone.resources | nindent 12 }}
116+
{{- toYaml .Values.csiNodepluginRclone.rclone.resources | nindent 12 }}
98117
securityContext: {{- toYaml .Values.csiNodepluginRclone.rclone.containerSecurityContext
99118
| nindent 10 }}
100119
ports:
101120
- containerPort: 9808
102121
name: healthz
103122
protocol: TCP
123+
{{- if .Values.csiNodepluginRclone.rclone.metrics.port }}
124+
- containerPort: {{ .Values.csiNodepluginRclone.rclone.metrics.port }}
125+
name: metrics
126+
protocol: TCP
127+
{{- end }}
104128
livenessProbe:
105129
failureThreshold: 5
106130
httpGet:

deploy/csi-rclone/values.yaml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ csiControllerRclone:
2323
# requests:
2424
# cpu: 100m
2525
# memory: 128M
26+
# If set, used to set GOMEMLIMIT, it should be strictly lower than
27+
# limits.memory to prevent OOMkills
28+
goMemLimit: # 115Mi
29+
# Prometheus metrics
30+
metrics:
31+
enabled: true
32+
host: # localhost
33+
port: 9090
34+
pathPrefix: # /metrics
35+
pollPeriod: # 30s
2636
replicas: 1
2737
serviceAccount:
2838
annotations: {}
@@ -55,7 +65,17 @@ csiNodepluginRclone:
5565
# memory: 128Mi
5666
# requests:
5767
# cpu: 100m
58-
# memory: 128M
68+
# memory: 128Mi
69+
# If set, used to set GOMEMLIMIT, it should be strictly lower than
70+
# limits.memory to prevent OOMkills
71+
goMemLimit: # 115Mi
72+
# Prometheus metrics
73+
metrics:
74+
enabled: true
75+
host: # localhost
76+
port: 9090
77+
pathPrefix: # /metrics
78+
pollPeriod: # 30s
5979
# Options to configure rclone's caching with VFS
6080
cache:
6181
# The location of the cache directory

go.mod

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ require (
1212
github.com/kubernetes-csi/drivers v1.0.2
1313
github.com/onsi/ginkgo/v2 v2.13.1
1414
github.com/onsi/gomega v1.30.0
15+
github.com/prometheus/client_golang v0.9.3
1516
github.com/spf13/cobra v1.1.1
1617
golang.org/x/net v0.17.0
1718
google.golang.org/grpc v1.58.1
@@ -25,6 +26,9 @@ require (
2526
)
2627

2728
require (
29+
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc // indirect
30+
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf // indirect
31+
github.com/beorn7/perks v1.0.0 // indirect
2832
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
2933
github.com/go-logr/logr v1.4.2 // indirect
3034
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
@@ -38,11 +42,17 @@ require (
3842
github.com/imdario/mergo v0.3.7 // indirect
3943
github.com/inconshreveable/mousetrap v1.0.0 // indirect
4044
github.com/json-iterator/go v1.1.10 // indirect
45+
github.com/konsorten/go-windows-terminal-sequences v1.0.1 // indirect
4146
github.com/kubernetes-csi/csi-lib-utils v0.3.1 // indirect
47+
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
4248
github.com/moby/sys/mountinfo v0.7.2 // indirect
4349
github.com/moby/sys/userns v0.1.0 // indirect
4450
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
4551
github.com/modern-go/reflect2 v1.0.1 // indirect
52+
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 // indirect
53+
github.com/prometheus/common v0.4.0 // indirect
54+
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084 // indirect
55+
github.com/sirupsen/logrus v1.2.0 // indirect
4656
github.com/spf13/pflag v1.0.5 // indirect
4757
golang.org/x/crypto v0.14.0 // indirect
4858
golang.org/x/oauth2 v0.10.0 // indirect
@@ -54,6 +64,7 @@ require (
5464
google.golang.org/appengine v1.6.7 // indirect
5565
google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5 // indirect
5666
google.golang.org/protobuf v1.31.0 // indirect
67+
gopkg.in/alecthomas/kingpin.v2 v2.2.6 // indirect
5768
gopkg.in/inf.v0 v0.9.1 // indirect
5869
gopkg.in/yaml.v2 v2.4.0 // indirect
5970
gopkg.in/yaml.v3 v3.0.1 // indirect

go.sum

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,16 @@ github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb0
3737
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
3838
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
3939
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
40+
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU=
4041
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
42+
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY=
4143
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
4244
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
4345
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
4446
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
4547
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
4648
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
49+
github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
4750
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
4851
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
4952
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
@@ -209,6 +212,7 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
209212
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
210213
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
211214
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
215+
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
212216
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
213217
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
214218
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -230,6 +234,7 @@ github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN
230234
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
231235
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
232236
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
237+
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
233238
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
234239
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
235240
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
@@ -274,13 +279,17 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI
274279
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
275280
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
276281
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
282+
github.com/prometheus/client_golang v0.9.3 h1:9iH4JKXLzFbOAdtqv/a+j8aewx2Y8lAjAydhbaScPF8=
277283
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
278284
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
279285
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
286+
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=
280287
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
281288
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
289+
github.com/prometheus/common v0.4.0 h1:7etb9YClo3a6HjLzfl6rIQaU+FDfi0VSX39io3aQ+DM=
282290
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
283291
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
292+
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084 h1:sofwID9zm4tzrgykg80hfFph1mryUeLRsUfoocVVmRY=
284293
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
285294
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
286295
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
@@ -291,6 +300,7 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
291300
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
292301
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
293302
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
303+
github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo=
294304
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
295305
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
296306
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
@@ -560,6 +570,7 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
560570
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
561571
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
562572
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
573+
gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
563574
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
564575
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
565576
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

0 commit comments

Comments
 (0)