From 9f65f554a99ede89a7b67d2389b233b872df78d7 Mon Sep 17 00:00:00 2001 From: Lijunmao Date: Sat, 18 Sep 2021 11:29:22 +0800 Subject: [PATCH 01/32] #64 --- deploy/charts/octopus/Chart.yaml | 3 + deploy/charts/octopus/requirements.yaml | 3 + deploy/charts/octopus/templates/_helpers.tpl | 46 ++++++++++++ .../charts/octopus/templates/eventrouter.yaml | 71 +++++++++++++++++++ .../octopus/templates/storage/initdb.yaml | 11 ++- .../charts/octopus/templates/storage/pv.yaml | 17 ++++- .../charts/octopus/templates/storage/pvc.yaml | 15 ++++ deploy/charts/octopus/values.yaml | 36 ++++++++++ 8 files changed, 200 insertions(+), 2 deletions(-) create mode 100644 deploy/charts/octopus/templates/eventrouter.yaml diff --git a/deploy/charts/octopus/Chart.yaml b/deploy/charts/octopus/Chart.yaml index b306353a..eaa7f5b9 100644 --- a/deploy/charts/octopus/Chart.yaml +++ b/deploy/charts/octopus/Chart.yaml @@ -35,6 +35,9 @@ dependencies: - name: nginx-ingress-controller version: 7.6.9 repository: https://charts.bitnami.com/bitnami +- name: influxdb + version: 2.3.9 + repository: https://charts.bitnami.com/bitnami home: https://octopus.openi.org.cn/ icon: https://git.openi.org.cn/OpenI/octopus/media/branch/master/logo.png diff --git a/deploy/charts/octopus/requirements.yaml b/deploy/charts/octopus/requirements.yaml index ce1824f5..0dffcc5f 100644 --- a/deploy/charts/octopus/requirements.yaml +++ b/deploy/charts/octopus/requirements.yaml @@ -10,4 +10,7 @@ dependencies: repository: https://charts.bitnami.com/bitnami - name: nginx-ingress-controller version: 7.6.9 + repository: https://charts.bitnami.com/bitnami + - name: influxdb + version: 2.3.9 repository: https://charts.bitnami.com/bitnami \ No newline at end of file diff --git a/deploy/charts/octopus/templates/_helpers.tpl b/deploy/charts/octopus/templates/_helpers.tpl index fa9e51a8..1f6936b0 100644 --- a/deploy/charts/octopus/templates/_helpers.tpl +++ b/deploy/charts/octopus/templates/_helpers.tpl @@ -695,6 +695,52 @@ octopus.pcl.ac.cn/resource: {{ .Values.common.resourceTagValuePrefix }}_{{ inclu {{- printf "%s:%s" (include "redis.serviceName" .) .Values.redis.master.service.port -}} {{- end -}} +{{/******************influxdb******************/}} + +{{- define "influxdb.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "influxdb.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- printf "%s-influxdb" .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "influxdb.serviceName" -}} +{{- printf "%s" (include "influxdb.fullname" .) -}} +{{- end -}} + +{{- define "influxdb.serviceAddr" -}} +{{- printf "%s:%s" (include "influxdb.serviceName" .) .Values.influxdb.service.port -}} +{{- end -}} + +{{/******************eventrouter******************/}} + +{{- define "eventrouter.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "eventrouter.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- printf "%s-eventrouter" .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + {{/****************** Prometheus ******************/}} {{- define "prometheus.name" -}} diff --git a/deploy/charts/octopus/templates/eventrouter.yaml b/deploy/charts/octopus/templates/eventrouter.yaml new file mode 100644 index 00000000..4f6c172e --- /dev/null +++ b/deploy/charts/octopus/templates/eventrouter.yaml @@ -0,0 +1,71 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: eventrouter +--- +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRole +metadata: + name: eventrouter +rules: +- apiGroups: [""] + resources: ["events"] + verbs: ["get", "watch", "list"] +--- +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: eventrouter +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: eventrouter +subjects: +- kind: ServiceAccount + name: eventrouter + namespace: {{ .Release.Namespace }} +--- +apiVersion: v1 +data: + config.json: |- + { + "sink": "influxdb", + "influxdbHost": "{{ include "influxdb.serviceAddr" . }}", + "influxdbUsername": "{{ .Values.influxdb.auth.user.username }}", + "influxdbPassword":"{{ .Values.influxdb.auth.user.password }}", + "influxdbName": "octopus", + "influxdbWithFields": true + } +kind: ConfigMap +metadata: + name: eventrouter-cm +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "eventrouter.fullname" . }} + labels: + app: eventrouter +spec: + replicas: 1 + selector: + matchLabels: + app: eventrouter + template: + metadata: + labels: + app: eventrouter + tier: control-plane-addons + spec: + containers: + - name: kube-eventrouter + image: swr.cn-south-1.myhuaweicloud.com/openioctopus/heptio-images/eventrouter:v0.3 + imagePullPolicy: IfNotPresent + volumeMounts: + - name: config-volume + mountPath: /etc/eventrouter + serviceAccount: eventrouter + volumes: + - name: config-volume + configMap: + name: eventrouter-cm diff --git a/deploy/charts/octopus/templates/storage/initdb.yaml b/deploy/charts/octopus/templates/storage/initdb.yaml index bd129321..e2bb881d 100644 --- a/deploy/charts/octopus/templates/storage/initdb.yaml +++ b/deploy/charts/octopus/templates/storage/initdb.yaml @@ -5,4 +5,13 @@ metadata: data: initdb.sql: | CREATE DATABASE IF NOT EXISTS octopus DEFAULT CHARSET utf8 COLLATE utf8_general_ci; - CREATE DATABASE IF NOT EXISTS core DEFAULT CHARSET utf8 COLLATE utf8_general_ci; \ No newline at end of file + CREATE DATABASE IF NOT EXISTS core DEFAULT CHARSET utf8 COLLATE utf8_general_ci; +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: influxdb-initdb-config +data: + custom-init-scripts.sh: | + influx -execute "CREATE DATABASE octopus" -username octopus -password octopus + influx -execute "CREATE RETENTION POLICY \"default\" ON octopus DURATION 0s REPLICATION 1 DEFAULT" -username {{ .Values.influxdb.auth.user.username }} -password {{ .Values.influxdb.auth.user.password }} \ No newline at end of file diff --git a/deploy/charts/octopus/templates/storage/pv.yaml b/deploy/charts/octopus/templates/storage/pv.yaml index b093e114..77411b0c 100644 --- a/deploy/charts/octopus/templates/storage/pv.yaml +++ b/deploy/charts/octopus/templates/storage/pv.yaml @@ -54,4 +54,19 @@ spec: storage: {{ .Values.pv.logger.requests }} accessModes: - ReadWriteMany -{{ toYaml .Values.pv.logger.storageType | indent 2 }} \ No newline at end of file +{{ toYaml .Values.pv.logger.storageType | indent 2 }} + +--- + +apiVersion: v1 +kind: PersistentVolume +metadata: + name: octopus-influxdb-pv + labels: + pv: influxdb-pv +spec: + capacity: + storage: {{ .Values.pv.influxdb.requests }} + accessModes: + - ReadWriteMany +{{ toYaml .Values.pv.influxdb.storageType | indent 2 }} \ No newline at end of file diff --git a/deploy/charts/octopus/templates/storage/pvc.yaml b/deploy/charts/octopus/templates/storage/pvc.yaml index a3c8aa6c..f04eacae 100644 --- a/deploy/charts/octopus/templates/storage/pvc.yaml +++ b/deploy/charts/octopus/templates/storage/pvc.yaml @@ -56,6 +56,21 @@ spec: --- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: octopus-influxdb-pvc +spec: + accessModes: ["ReadWriteMany"] + resources: + requests: + storage: {{ .Values.pvc.influxdb.requests }} + selector: + matchLabels: + pv: influxdb-pv + +--- + apiVersion: v1 kind: PersistentVolumeClaim metadata: diff --git a/deploy/charts/octopus/values.yaml b/deploy/charts/octopus/values.yaml index 4984ea8d..4369c0c5 100644 --- a/deploy/charts/octopus/values.yaml +++ b/deploy/charts/octopus/values.yaml @@ -38,6 +38,8 @@ pvc: requests: 100Gi redis: requests: 100Gi + influxdb: + requests: 100Gi logger: requests: 100Gi @@ -60,6 +62,12 @@ pv: nfs: server: 192.168.203.72 path: /data/datasets/data/redis + influxdb: + requests: 100Gi + storageType: + nfs: + server: 192.168.203.72 + path: /data/datasets/data/influxdb logger: requests: 100Gi storageType: @@ -304,6 +312,34 @@ nginx-ingress-controller: - x86-64 - x86_64 +# influxdb +influxdb: + replicaCount: 1 + initdbScriptsCM: "influxdb-initdb-config" + service: + type: NodePort + port: "8086" + auth: + user: + username: "octopus" + password: "octopus" + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/arch + operator: In + values: + - amd64 + - x64 + - x86-64 + - x86_64 + persistence: + enabled: true + size: "100Gi" + existingClaim: "octopus-influxdb-pvc" + # grafana grafana: nameOverride: "grafana" -- 2.34.1 From 869fa133b8a7430bf45330b4af28595883fc8fbc Mon Sep 17 00:00:00 2001 From: Lijunmao Date: Sat, 18 Sep 2021 14:47:39 +0800 Subject: [PATCH 02/32] #64 --- deploy/charts/octopus/values.yaml | 38 ++++++++++++++++++------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/deploy/charts/octopus/values.yaml b/deploy/charts/octopus/values.yaml index 4369c0c5..f391a267 100644 --- a/deploy/charts/octopus/values.yaml +++ b/deploy/charts/octopus/values.yaml @@ -315,30 +315,36 @@ nginx-ingress-controller: # influxdb influxdb: replicaCount: 1 - initdbScriptsCM: "influxdb-initdb-config" - service: - type: NodePort - port: "8086" auth: user: username: "octopus" password: "octopus" - affinity: - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: kubernetes.io/arch - operator: In - values: - - amd64 - - x64 - - x86-64 - - x86_64 persistence: enabled: true size: "100Gi" existingClaim: "octopus-influxdb-pvc" + influxdb: + initdbScriptsCM: "influxdb-initdb-config" + service: + type: NodePort + port: "8086" + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/arch + operator: In + values: + - amd64 + - x64 + - x86-64 + - x86_64 + livenessProbe: + timeoutSeconds: 60 + readinessProbe: + timeoutSeconds: 60 + # grafana grafana: -- 2.34.1 From 0ff8bb2f83b38175a2b100168931bcd43e6b9510 Mon Sep 17 00:00:00 2001 From: Lijunmao Date: Sat, 18 Sep 2021 14:59:52 +0800 Subject: [PATCH 03/32] #64 --- deploy/charts/octopus/templates/_helpers.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/charts/octopus/templates/_helpers.tpl b/deploy/charts/octopus/templates/_helpers.tpl index 1f6936b0..df22c6c3 100644 --- a/deploy/charts/octopus/templates/_helpers.tpl +++ b/deploy/charts/octopus/templates/_helpers.tpl @@ -719,7 +719,7 @@ octopus.pcl.ac.cn/resource: {{ .Values.common.resourceTagValuePrefix }}_{{ inclu {{- end -}} {{- define "influxdb.serviceAddr" -}} -{{- printf "%s:%s" (include "influxdb.serviceName" .) .Values.influxdb.service.port -}} +{{- printf "%s:%s" (include "influxdb.serviceName" .) .Values.influxdb.influxdb.service.port -}} {{- end -}} {{/******************eventrouter******************/}} -- 2.34.1 From b9e565c640b3975e9b0f2977f07d25cc1ccf4177 Mon Sep 17 00:00:00 2001 From: Lijunmao Date: Sat, 18 Sep 2021 16:26:53 +0800 Subject: [PATCH 04/32] #64 --- .../octopus/templates/storage/initdb.yaml | 24 ++++++++++++++++++- deploy/charts/octopus/values.yaml | 3 +++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/deploy/charts/octopus/templates/storage/initdb.yaml b/deploy/charts/octopus/templates/storage/initdb.yaml index e2bb881d..d2733f0b 100644 --- a/deploy/charts/octopus/templates/storage/initdb.yaml +++ b/deploy/charts/octopus/templates/storage/initdb.yaml @@ -14,4 +14,26 @@ metadata: data: custom-init-scripts.sh: | influx -execute "CREATE DATABASE octopus" -username octopus -password octopus - influx -execute "CREATE RETENTION POLICY \"default\" ON octopus DURATION 0s REPLICATION 1 DEFAULT" -username {{ .Values.influxdb.auth.user.username }} -password {{ .Values.influxdb.auth.user.password }} \ No newline at end of file + influx -execute "CREATE RETENTION POLICY \"default\" ON octopus DURATION 0s REPLICATION 1 DEFAULT" -username {{ .Values.influxdb.auth.user.username }} -password {{ .Values.influxdb.auth.user.password }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: influxdb-exist-config +data: + influxdb.conf: | + [meta] + dir = "/bitnami/influxdb/meta" + logging-enabled = true + [data] + dir = "/bitnami/influxdb/data" + wal-dir = "/bitnami/influxdb/wal" + query-log-enabled = true + cache-max-memory-size = 0 + max-series-per-database = 0 + max-values-per-tag = 0 + series-id-set-cache-size = 100 + [logging] + format = "logfmt" + level = "debug" + suppress-logo = true diff --git a/deploy/charts/octopus/values.yaml b/deploy/charts/octopus/values.yaml index f391a267..ad831888 100644 --- a/deploy/charts/octopus/values.yaml +++ b/deploy/charts/octopus/values.yaml @@ -315,6 +315,8 @@ nginx-ingress-controller: # influxdb influxdb: replicaCount: 1 + image: + debug: true auth: user: username: "octopus" @@ -325,6 +327,7 @@ influxdb: existingClaim: "octopus-influxdb-pvc" influxdb: initdbScriptsCM: "influxdb-initdb-config" + existingConfiguration: "influxdb-conf-config" service: type: NodePort port: "8086" -- 2.34.1 From 50708adcbd38463e1fc94db941452dc3849b457b Mon Sep 17 00:00:00 2001 From: Lijunmao Date: Sat, 18 Sep 2021 16:38:57 +0800 Subject: [PATCH 05/32] #64 --- deploy/charts/octopus/templates/storage/initdb.yaml | 1 - deploy/charts/octopus/values.yaml | 10 +++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/deploy/charts/octopus/templates/storage/initdb.yaml b/deploy/charts/octopus/templates/storage/initdb.yaml index d2733f0b..0abcabd9 100644 --- a/deploy/charts/octopus/templates/storage/initdb.yaml +++ b/deploy/charts/octopus/templates/storage/initdb.yaml @@ -35,5 +35,4 @@ data: series-id-set-cache-size = 100 [logging] format = "logfmt" - level = "debug" suppress-logo = true diff --git a/deploy/charts/octopus/values.yaml b/deploy/charts/octopus/values.yaml index ad831888..e692bd31 100644 --- a/deploy/charts/octopus/values.yaml +++ b/deploy/charts/octopus/values.yaml @@ -315,8 +315,6 @@ nginx-ingress-controller: # influxdb influxdb: replicaCount: 1 - image: - debug: true auth: user: username: "octopus" @@ -325,9 +323,11 @@ influxdb: enabled: true size: "100Gi" existingClaim: "octopus-influxdb-pvc" + volumePermissions: + enabled: true influxdb: initdbScriptsCM: "influxdb-initdb-config" - existingConfiguration: "influxdb-conf-config" + existingConfiguration: "influxdb-exist-config" service: type: NodePort port: "8086" @@ -343,10 +343,6 @@ influxdb: - x64 - x86-64 - x86_64 - livenessProbe: - timeoutSeconds: 60 - readinessProbe: - timeoutSeconds: 60 # grafana -- 2.34.1 From 2550cbe9f0a3ed68b0a90429df300c5cee3beef2 Mon Sep 17 00:00:00 2001 From: Lijunmao Date: Sat, 18 Sep 2021 17:17:58 +0800 Subject: [PATCH 06/32] #64 --- deploy/charts/octopus/Chart.yaml | 2 +- deploy/charts/octopus/charts/influxdb-2.1.0.tgz | Bin 0 -> 39506 bytes deploy/charts/octopus/charts/influxdb-2.3.9.tgz | Bin 43484 -> 0 bytes deploy/charts/octopus/requirements.yaml | 2 +- deploy/charts/octopus/values.yaml | 2 ++ 5 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 deploy/charts/octopus/charts/influxdb-2.1.0.tgz delete mode 100644 deploy/charts/octopus/charts/influxdb-2.3.9.tgz diff --git a/deploy/charts/octopus/Chart.yaml b/deploy/charts/octopus/Chart.yaml index eaa7f5b9..de572439 100644 --- a/deploy/charts/octopus/Chart.yaml +++ b/deploy/charts/octopus/Chart.yaml @@ -36,7 +36,7 @@ dependencies: version: 7.6.9 repository: https://charts.bitnami.com/bitnami - name: influxdb - version: 2.3.9 + version: 2.1.0 repository: https://charts.bitnami.com/bitnami home: https://octopus.openi.org.cn/ diff --git a/deploy/charts/octopus/charts/influxdb-2.1.0.tgz b/deploy/charts/octopus/charts/influxdb-2.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d206b2f2eac5b47d9893ee7031d1353df997c1cb GIT binary patch literal 39506 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ⅅm#yeXcSKgKo)C~XC?7$T9Quiq|e**9IH`Vb> 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 CV3t<^ literal 0 HcmV?d00001 diff --git a/deploy/charts/octopus/charts/influxdb-2.3.9.tgz b/deploy/charts/octopus/charts/influxdb-2.3.9.tgz deleted file mode 100644 index 4a69037b8bd0aba1b9800f7b606ce0ee7fe44c9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43484 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 =;T&+}CFP7=-bP04VbXY1tf?Cisv z)8|gEWX|;U;l5+*o)VQ%;bl~OvjAPT@21JW+T=IbSnTM5O2}$I=VZQc#B(d*>#_st zYfMuu=<8R&pR-|S0|vB~II76}ZQO(krd-8fuiw0Vapt9;rJV9v#92tLlXtz>yWPy| zz5W$)uP>Q=y|oh0wX?9p+8mFBL>jTg7dt28=GH)!V~3z@A+sR(nh+_}#7`G=*ZOQyIj5AZ;<`X|vvDeY}@>R!k2 z9r+xyBt=#?2M;#Svmx=*5I)wau)&Lg$Ji$(3?ionHiQ zCxOy349Z@-dFeUM*478`qEmohkc1$rk~9*PSiOvd|FpH`I4(NT-p%S~F43VA8p`=X z7*bI^8K6xiKmZNHIU2HbB0t)N>FsIUTOEm&l^HEz`o%tXt9{BOgNQ}pyz8Nle<2B3 zoDEcG0Tm>GW2z=4-IKa-2KI3zXevNc23X2ZzS1Zpusg8R;7C6($3^c17Nkz3QWXv= zFwOS70$3yb+s=k+?E-MFqVg7K#DH&$#3bF>V|fPS})Z4O1Ce|(H^1`Bq8YZor-U^p+D)+89hwVNQf^S%@O51BYgQGrM|AXNYN?x zNrV&1Or|swB8z$P>wpn1hSvg1b0d!CVjXiZ@>$4u$s(`WQPY}yHPDWXXLK>ZONeg;pF=8PRZknYmp*Z9_3E?c95mx}W3;*47W5!cA2Sl#( zj@92XGpT6~!R)dHam5^9Ja@M1rcC{F?|aIuegE7)_s{)vx1aw%00960C(-Xt0KfzQ DFCW?# diff --git a/deploy/charts/octopus/requirements.yaml b/deploy/charts/octopus/requirements.yaml index 0dffcc5f..a3b2dadd 100644 --- a/deploy/charts/octopus/requirements.yaml +++ b/deploy/charts/octopus/requirements.yaml @@ -12,5 +12,5 @@ dependencies: version: 7.6.9 repository: https://charts.bitnami.com/bitnami - name: influxdb - version: 2.3.9 + version: 2.1.0 repository: https://charts.bitnami.com/bitnami \ No newline at end of file diff --git a/deploy/charts/octopus/values.yaml b/deploy/charts/octopus/values.yaml index e692bd31..dfe988bf 100644 --- a/deploy/charts/octopus/values.yaml +++ b/deploy/charts/octopus/values.yaml @@ -325,6 +325,8 @@ influxdb: existingClaim: "octopus-influxdb-pvc" volumePermissions: enabled: true + securityContext: + runAsUser: 0 influxdb: initdbScriptsCM: "influxdb-initdb-config" existingConfiguration: "influxdb-exist-config" -- 2.34.1 From dcab701420696d718a35fdaf48f2c95a6d54f5e9 Mon Sep 17 00:00:00 2001 From: Lijunmao Date: Fri, 24 Sep 2021 01:45:19 +0800 Subject: [PATCH 07/32] #64 --- deploy/charts/octopus/Chart.yaml | 4 +- .../charts/octopus/charts/influxdb-2.1.0.tgz | Bin 39506 -> 0 bytes .../charts/octopus/charts/influxdb-4.10.0.tgz | Bin 0 -> 16598 bytes deploy/charts/octopus/requirements.yaml | 4 +- deploy/charts/octopus/templates/_helpers.tpl | 2 +- .../charts/octopus/templates/eventrouter.yaml | 4 +- .../octopus/templates/storage/initdb.yaml | 4 +- deploy/charts/octopus/values.yaml | 39 +++++++----------- 8 files changed, 24 insertions(+), 33 deletions(-) delete mode 100644 deploy/charts/octopus/charts/influxdb-2.1.0.tgz create mode 100644 deploy/charts/octopus/charts/influxdb-4.10.0.tgz diff --git a/deploy/charts/octopus/Chart.yaml b/deploy/charts/octopus/Chart.yaml index de572439..d5bc7696 100644 --- a/deploy/charts/octopus/Chart.yaml +++ b/deploy/charts/octopus/Chart.yaml @@ -36,8 +36,8 @@ dependencies: version: 7.6.9 repository: https://charts.bitnami.com/bitnami - name: influxdb - version: 2.1.0 - repository: https://charts.bitnami.com/bitnami + version: 4.10.0 + repository: https://helm.influxdata.com/ home: https://octopus.openi.org.cn/ icon: https://git.openi.org.cn/OpenI/octopus/media/branch/master/logo.png diff --git a/deploy/charts/octopus/charts/influxdb-2.1.0.tgz b/deploy/charts/octopus/charts/influxdb-2.1.0.tgz deleted file mode 100644 index d206b2f2eac5b47d9893ee7031d1353df997c1cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39506 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ⅅm#yeXcSKgKo)C~XC?7$T9Quiq|e**9IH`Vb> zRS?As-N@+r_G6sjA&G+CtoX&5)(L9aq>33gH_os`hu(!eCH;`=aCA4k9NfNq+Ap?P zgxf-V`c2WhDyr@wLwk5udKUA4MI<+1{|oKE&XXr){=e6K@c-V)vjYEr`8m}^#+7B` zRw8dU7+f9`R6?QQTi_UWH6wgksnl*D+T0{Dmku7 z#sHWSW_#ZXS7A)OnNwsK80n%3Xn|67dImpmzc>-~w=qP%nkxOs|ItVOC;$4B!WMCZ zNgU769}^s_+g@;*!em4515v$0dm+b=kaHW}1oxRZk{nQ^3(QI#Ii_POOeJE<(WXY# zi`QqeEm*=S>9<1fcwpM+xeN(4rs6+S4m}eawP|lob&%hJPkOk2af!1icfjk*dn5!u z(qzDHRv2%?%wLTRSgkCG8^x7lQq_@y`NQpWbbv02y6b_HDamkL#wnLF%gs@{ZGU!= zMk|uP;wUU@CPlBcRZ?mYROtGkEW5RqQ2lO2Z86Z{_GP-y6%#lxt$3buC#U*8an%$9 zb6Bq?RCT7trY@j42F wcj$|xgfKp*bZcj-+=3=jPnZuaSZ+gYq=ZNazSSGA)&7w zn^QJ290NXGyuo2LEtSd+_77C8pTfqi**C?i4wao#{GwHeUa0mcM|_3T)C3ASp%D_6 z14NUEe4h8!BMWqMjKsq2X1Z9s+iVao%TPu{M#+?@dpZX8Ixcn3SG3fw%tL0CSJgS* zEd)FVioce2A@X&^YV^KX1EL&5-K~kM-tk+=k4Z8VBOi4;u!c;oAspx+ALvyNQ}}!C z0kYow6^cbcfn*=6m3(aT`}D2W5bi2>C3zP@r?fwTMYXl`XKH7l=d%l8SwntLKPIC_ou!rO@XS`1OSG8-Rg7P zM`4NFolTpoXidYyH**Ju7INsH9i;+TQ|%n)j;>jT)GlMjE+#4Rr;=S6-Q>}nnmu}L zZD({~`*S6g5+eEy+zaTGwJWaw!Q#dhWlxS;kHgvl8rnJ`vtLnf?+HozZcU;uPW=og z64KyCD{v&iy_iI95JOJH2QK9{1ra_nHKk6REm6+Vsb6Iyvh=Fh^c+B+Z@};!h-wJK z4FoNN0*MpX$}+0XDyXi_`Z{J!`BW&}U1~IAKeDy_g zDifE8dOaCez?;)$eS}d#IZa)XZ3-2Ku&|DcV3sG3K@DIEHxo zvO%7Slafr`MB69zzBs4BvdLhjp>k74zW^A)>Em=B7GBn5Zk4?`I^U-9nOl{!IO4(l zkLJ2afrD1RGU2V{4{!q)nzTx8B_mngHY(`(SN~VvO+#{}{i1J`dQlHq<7^&S{QY|t z^M8@X+QPW51X#fTJA0jHW&Zzk_u>ApJ9$>(|4BqLj<9wLLf(%Jb1@VX&e5@RQp%vO zTp+;D^`byI3(6XIlN6{9QR3hg|NS&~T;!Zjq_KHp?evD~q3$P}`WtCy{ZBlOTlHVx zqx8YW`(OFMZZZDzNvFL3yU+HXKGgrYlV^qfukwCqqH3|hRq%qLp|rA%&8vO-%^W}x zlXf)@iO~CgzOikJ-soT9o51|IBwuJ4*s1N4nKS=-m|?uP>}4{2k26!2n|y{_;J5;yO0XfDU5ZDUsOV?%Bsao2CMgc>=bCyWvc;J5lPi-h$sC=udt1BOU zMLo>P-V+oA5$Ustv}znE&nGmF5J{$JiZd0csScU3iUeJ_ekEL}#WM>so(1+eXz_}a zx^kS9@CE`Q(wKrrg3CXkGLY1I^|YNYz=d~&Ir&@VQ}6^D6yn|qXD4@}j+R@zyWj&qNaoQ*!%aaJ(& z^V4^|1N9+{?|ck0NWAI&E?+z&PgB50-$ zMcDv7{((Q%K14(lWbPkONAZnijq*ZJ6M_!Vra5WJfhkgm^WwmKR_7|S&eEw|zx*^# zeF8nAIet@hE^BZoXHa)Ci&&;xYHuZMAvpApQNofyw_b+invd;Dr}r0R)-BQ@oY}8R ziG}gXF&}#Ra{T;VMy4d=t z*W_K-n-1L%{qy1Zw$Eby{}N{jO@=ox0T%jyI~D)$?!*0$ck`^E|9?<~fN+mZgf94* zu{efn|M761+HYw{w||R=bIO06GA8En`P$xGpD9ivv}rvPz6m zC$xW~Nre0$`}No8$46iJ2=6@I+xJyfp$~_rua95Hl<4L6b`$( z+Lyn`Hdj}zZKRcrM5_3zbc#@id>KoI@eE}|PLm{&%EH1^Mx!dWb=~O{ieE#0Op;7# z#u61a4Z)cLOm~)&&8D2>kEb{+6ds@2xduO-Pd8q$%C(jD}Uq|Q=bY!R?zal&@8H+Pj0>4t? zd6^idoW5*_P0k@x_{j!YnIPVxt*~5RMlrfvw^P9w`DAr5YdJv`kzrzBE!5WW!2=Dg z8rMXB)kUU;HZV0G$t2BSo`1_SiPjLkQ1;%wns1|wTo$>G^;rsiud!wF9(0$Lw2DH1 zIy7&oj#S%H4^i(OC)r6x2K4h%-CU4as6Hz7WFq<87{A;q%Hx+yV-{--f?5IYgmTP3 zRG%{QRmFdbi2#*=I$riltrCn_nN4FPVhwHjivY_VT-A5=VTFxX8rD$ZcoGYmR?4B9 zerqBZ-B7?%y49lVdk-g{X-si8LxV}8)Fkb)hGN!qI15kU5@OtOwQ(0~84fCpB^yL@B z^s~e&xIVz<6)_W=gZqLrQ8KrN2?j#nh zd3l%BEobq~aHlM#Q5^MFbOkNY|DQdr#Q*I)dAR@eZl3Gt|F0w!ym-EL0WKNQ z=I!55*S*pG%|shDf5?8jnbvQ{xE-Cp2Bj-${N{Vz9iE8MwUz!-U-c?K&iW%N2;B9y z3_wova!(U6YBn88{YXwMKWH!;P8kyorbFhu@(ZKZ^dtGR2{Ul|nCPDue!tj!ng9JM zNn_dv5^0)FwMDhpZ(|ab7opKCDl}|1jWh`aas}6H9Tgxb&IW*V>EJp!hZTCNvyh5$ zZ*HCZ0t~Hc{PMbuP=o0zlGkd6mcyyt>8twCE_3l6QupT|p<&N7Q(sN{C5SNp>K4#c z2h)6v{i_)A%Lur&+45_Y^~=D04P)MPThrfl4EZIyS+f~$Cb7c0U(g9$8yy^Cy zo9`|=U1g6IbhcYG-fwZc6{c{LedbD}RW??`cWZXc$o;#*%H~@1ce$!L_zPCl<&t$P z=Kg-qQ(RZ{|FC4p*6jc3c6KZ0zdKJJ@;~q9xt9M&Qo)Poo2RYyyMQ!--5(cFKG$Y1 zkOKOKexQ7yTXF?eQM;NeNPoW;S5UF923OF02Trkz1_#bUcT#Cm&F-Z8<_da&1@2*9 z{yx$_-<2!rjF{N|suM}QTiDa#M2ueMwBqz*>7u~_1wX%RCbLysDJ~QX%+%HWUdsF6 zj&Ls>Vw#Wr3pm8o2ksua$*8uU#cnurwYM|n5-hjxjVp<(d*zMeL@eQq%el@XH=J&{ z1ktPZ0Vg7`wL;hEd((hCc-@xOCD!M41I?oM!W;a1-Wt`>xP$ z?QFS+&uad^lyNc42>&Bq#Ra&)|JQx`Y_FXEvGe4i{?DB}*YW?IC@MJnAHS^K|K||c zy>S8NFg3dX^ENm00y<;eju)^V!7Dieoi1*e22#^gttZeLx3;}&3oq_fY7XXCo_pvP zjNt@L%<(bRk5(H-6@J6use05kyAi6*n@#8%;$KseNfnCX>@{3c`1o^@-LDCl&wirg?-cfF%^?P$xWcuks}y6~bFH+55}UVc$p z29!E{-^{Y!%6&W17n%rWgc3lV40TsDafDSk!{fM6=PJ()YcQyD3Dam$*N^L5+}vKi zz?Q!MXVLhonVy>lCc*;O57B%qzJwm1OFMN}NNC+71tV$IyWA@@9NL9$zJgv&d(I{5 z^EDkyW#+P>xx0PwoEqoimrIl_+>(V0rd-9y`SW4Z-0h|*X`PkcOE;g}rf>m*Ge5_Z zC})_0GCF9!$9&=5DZ6y8dqq#a3Ivm62Au7SH*<3`XufLvM4- zsjr$S(%%0y`86@YYCrH_6CZ6Zd5>V&YKQ|W8iT5PxYVn{*6alxIEv8YAdqU&5Bvvy z@JKe-TtGsBlPLUwyQGn?zVn+wU!b5KZy&X}G_#{nPCOG0F62}k{ zfyP+$M>H93qm0B@(5V)i`R_Q1ybY9)p$ekiR4xJ?tcd=HT z2?@RM#o4DbDdfBjbOa=d-XEQzh-Taihg7uTzY2UW?EN!q!+*^WqhVYA$NZB|lXl)w z5BD!7DcC;T+Y0$*>TQKReBo_{Vw`$g|K)9<_c)_$!qM@Im)r}}jQvjf!V76ca9g#@ z*zaCA<$V^B_IKp6XxRU!FArb5dKr$Rb&N58|3B^SJ$qW-|J~h({eLIV270dUg)+P0 z7uw6D)^a52!SfE$$A6G`T>SaBO>?u96cZsI!3|Sw!BX1i?N~Maq$z4cwrPPYbeOS8 zDp`u6G8D5R?V}zMmqaog4T$KJp$R2|ls|&(I{5da7*& zaN(4`H{(vb-UUsfeIzY-I(&swZ%hQ1+Oq^%0bFA;!S%r5U=qhFR1WTSG+&KpN;N|M zKS&%i^nqn@_uRn2TWQiB5B5^G$I^fgLC8Alk-YR#?j@7_D86X6R84$ zCm7=3rzB=6O30;N4}Aq0P(x+?TSiErF;4K1WTEFhFDz$a0O0r^f1dORPE(%ucAep%PQ@R-s{pIqFFo6NF0}1N`=> z?Bb&VQ$mv^L=cWn@=MiDCyAhAQUo#0SQJv$ZlTTRKcAeoLi7TlMDkzuPV9+bV=!pm z{&I%;BolN%`&baZE$My;H|ZsiHZMt2{!`9(#wHoUsf{Ai``{!a;7j0C5bk+_3vM^; z?)>NlYQDQ+H|(fSq>W1?J|smDG+=SeF4gsMy;$An%0Zholz^w0#_&!XetIWs5`p-K zK1&H0h7lbM2q^8G^m9lz(BWV}6Dp{L^Q#0(N^u&IL?VD>$bG(|7lijS3RWUo`uU1p zeoobGd&fyS5sN?Yz6SH3Meo=3*;nr?I@dcMTTF!si%7`XK%AqmNL|#6Fp@tY`AXw- zrp#Yjhpn&Z+zr0{+nYDOcC+Ny>^?s{_2qy6({G)ld60~778M|oKioAWDT_2pDmY15 zWB_T)zY{_00JD(v**IkhNrZ(bcMzQy>7)q~g^~(RZVwXJOh-7yJsK~$ohl1)t=+Z! zQ@0NnZ?&6lp;e!{0o;Y|J2(y{f7hb?yf{_8?vgJGoJkh%@L;WVpiLzu`!SWA(d4Ai zfxYb1=^s%Jo(E1uE0h!xo-1L7%oWg$Q07uG%vF!`5|lViGnQr)ytuYiNvejcuJ{U2 za)AXIOkz%oU@i-#`~B@fNfSthC?c}F;&Y%h->-(qRiVs!xL*Nr1t?FSA0DBMa5l;M zWEEgng0i1QbwDl+<q8Ynpu*@VblE5QYg6?CgGIoh@ zf&f6UjNo@J?KIei3Sxx8*a<sysmXjNQC&PT1{F-4-e;V0t$mkMVG^!gW{H%e9|H zd*rT+o@+lY<-*nQT>bCdqSBEoQmPO|I)h0ZBWMZ!mg)*<+OgNo&$*2r`6j#Z(fKyw zgrJYd=Cj{6H=s?%m}uE(KQ6Kfl%on!%>>d(9IFsdeqK9)7p#9lGDU;vlnf~s*$nBZ z(ARiOcxeKbR9%(Xwy?T}-oYZ6Fzw>{SO%-v^e+AZIW49lMa z@oO!)hx->K0q4Tsb@&3phVnI)A>9a(L{h%;y-LBt)IK>pIkvi(-3gpzQ`#pcR)jI% z{&vD3CZvZmU+-Yq%SSU>MAD4t(k=-Tv|n=fDHAWGtlf**u)Wji{<+jylPARf_o&sOBr*A(!gE$80IOB!6Z^X6o+p+CbVgQ z)Ccvmny=;Sq2SC>q4y>nwnIi0f=mWlo7=rj3Y(9oS{D^IF|U1q$vqtRBguP z1_Q7)MXI(isWhJCE}f;;tdUr>q@TadZzwsxLy5WKGoN+cP&9srl6A$$C43b#Rov88 z5|_8N4zQZPHbw$haztx1&Qgw(uQ#@2sb`Y`q>T9Enf=o>%|P>hS@{09%?;Bb*LjpR zI`}%MuY$e{GCN0Q^yx^t3o=`N)ElAC))51>=Ud`v-V7b|<^BeBl6zi*J{thaGL#XK zQ8FbE7DNXK#~H!V4D~@WM4_wy6=H@1U2mp{A>``=@#uZ=Jjx*1jNSFCzwP)f6Y(}u-)|%JEf}k+?crEQ-75bIvthY))CVid&kH_F zQ?pKL(_{+KN;W{)pw^&IeIKHQ=&L`R`ko#mhXu>zRx<8Mp3 zsnpZBkhWDl({vit_;OD2x4&&}IBgsJIY3QsQ&pU5U3%R;*5KBpdfj6s%cV(?#Nqx_58Oc=;nkc<)2gy->8u0wj#K#D5zyC@NCI)_aoL43p}afB2IDmB*(vuzEG zK}PZL0%cvD#bBjAtfI?VlC4XvT1DVjr%_7Hko)K)qlrK?QS6j5 z6><)-az;N{D$-MBnQp6X zLr|PSC67_UlEAcfr%_d~FUYK0oE)gtb<@*a>wTW$wQ>X$x(Dav_gJ>y^|Nwp*jjn* zHJ@)i{ylnJ#`Om32Ke6FS0w$7rJHonaaEZX+R3F>1G zez#d3RD+E0BJ?*76j>0jTz`b%5>|7Po0T|ZSK@!Kw)sy%jxdvA&L>toJw5@oos zhO4gMk?Cbk9JIQA7S32E9q6%=8P3?OKiCIeaWrs8w zdI&}Na_yT?E7RPmXrzK`DMvBuV?iPhA@UiI)0pg|2)+s_^E@Ycd%;krwj~g99{%h0 ztdqRk$&e;@6(QJe(bPLS>GdR{t-;}aIs{z6y**@GFv zs{0fBp{=Biwq;03|KZ+0h+360C(3y)h3lBe3*bujFUdmo%P7Rw_&NzC9I7?S%4y0 zY)CXWEb<0&RvEbn_coB4x`s$6=WihAh%w(ly6)^kJegvxsy%WJC_@(s5|5t8)hYK; zj5%LKf`1<|u8Ml)01EV;#gj2H$K?om+D69%Lt=j5ZzFe@*HF*E_jQtZM7e~Mqi7}( z+E*0_IAxN56(IHl-}7+4PdIo%+js&W@3*_D49Fi@l5xAL1wRTn$iT=MxihLyDbu;`qaYy zg3QzjSY1e}d`XigAQb%Syk;)4RlN=i>IQOw-9X4HkFt>|*Zwn^SyW0~!h|JY6UnJQ z=&UKI+J`tvIE8{quopp*bjx1Q#Ga3BBhJPI2|6ZRc5sOk*px&0wP3RMOdSQMjB^SJ zk25taXbK}jGhW7qWZ7nQH&9;qSK|tP4}ze+#)-zt^$VOJ9qz3J5l++PKUGWkCdGeD zh%J7aZE^LhE3Yu=D2?+OhheBo*^y+rZ|_evMQ2V9&(1!) zIep>fy5!WH74Cbkim6ZumlzC+Z|0!O4b-&72%CZg%YlKV`j^EaFUV}}h!;-v!(|6F zXO`Ma4x>u^c^htNOh9XCM-?~!qTPfFep|i4UcY(!@+=ge6`$&}gtM63qzG}RbGK!P zJKbv(B3`l*@xsd{Zd{TW*5-I1Insb-eJME^w?_o}Zd%CplspTvItfv%496rBys&J# z;u0`pX;2d`(0HaRi$XcZ(o!Ax{&oqQ2fhz9|G3n2$$F3F0UnvH{z-OGssY(t$I`R= zj(kp8CXmz3!K2NKNsshJ3?G}iun@AqQ`{#u=OL#C6fpEVXNd&w!2c3To)Y09+?QxSY0DXRNcTKf=k7a8)EqRqK-P^IBMX z$AP&Zm}C(wOPP)D&kHvV2o{q}b`?dcsFRxNuF|KV7r8670t`_hb|^gqL_0bMYZ`a`7=}4}uD(?ov^R9?0DucLl`nus4*0f6Oe%IgRkpCvyte?cAp5tV!e(BIjb%ExF-}Lg zM+EJ|h5~hW#Kvq$5+Yar63+_WRa3CdDgGu&>_`%7L^37(RAqv^Bmry^YRO0u*Rggx zXf4`Q7$~(>FrmOWM4R$ARvc!Gx2bk2&Ejy-W0~WT+O; z%t0_T-Ic`hj+4P8Mlnq;xS|C!vK+Bc6;ezD%P5X{J0qOMQxZtvcHqCeLCUxYazNBN zx1Ii$nMqA^$TU_hNFe6`;|0^5KrsF1?)Ow?_ThPW9-e#n{J#JI0RR7nh67UoOauTG CV3t<^ diff --git a/deploy/charts/octopus/charts/influxdb-4.10.0.tgz b/deploy/charts/octopus/charts/influxdb-4.10.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..af2553b0527c588028952943773c90b3011d0c90 GIT binary patch literal 16598 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 ZJP*&q^QV6P{{R30|NoHUU>E>e0RYktlXd_A literal 0 HcmV?d00001 diff --git a/deploy/charts/octopus/requirements.yaml b/deploy/charts/octopus/requirements.yaml index a3b2dadd..7b8e8bef 100644 --- a/deploy/charts/octopus/requirements.yaml +++ b/deploy/charts/octopus/requirements.yaml @@ -12,5 +12,5 @@ dependencies: version: 7.6.9 repository: https://charts.bitnami.com/bitnami - name: influxdb - version: 2.1.0 - repository: https://charts.bitnami.com/bitnami \ No newline at end of file + version: 4.10.0 + repository: https://helm.influxdata.com/ \ No newline at end of file diff --git a/deploy/charts/octopus/templates/_helpers.tpl b/deploy/charts/octopus/templates/_helpers.tpl index df22c6c3..00b85aac 100644 --- a/deploy/charts/octopus/templates/_helpers.tpl +++ b/deploy/charts/octopus/templates/_helpers.tpl @@ -719,7 +719,7 @@ octopus.pcl.ac.cn/resource: {{ .Values.common.resourceTagValuePrefix }}_{{ inclu {{- end -}} {{- define "influxdb.serviceAddr" -}} -{{- printf "%s:%s" (include "influxdb.serviceName" .) .Values.influxdb.influxdb.service.port -}} +{{- printf "%s:8086" (include "influxdb.serviceName" .) -}} {{- end -}} {{/******************eventrouter******************/}} diff --git a/deploy/charts/octopus/templates/eventrouter.yaml b/deploy/charts/octopus/templates/eventrouter.yaml index 4f6c172e..e88e8195 100644 --- a/deploy/charts/octopus/templates/eventrouter.yaml +++ b/deploy/charts/octopus/templates/eventrouter.yaml @@ -31,8 +31,8 @@ data: { "sink": "influxdb", "influxdbHost": "{{ include "influxdb.serviceAddr" . }}", - "influxdbUsername": "{{ .Values.influxdb.auth.user.username }}", - "influxdbPassword":"{{ .Values.influxdb.auth.user.password }}", + "influxdbUsername": "{{ .Values.influxdb.setDefaultUser.user.username }}", + "influxdbPassword":"{{ .Values.influxdb.setDefaultUser.user.password }}", "influxdbName": "octopus", "influxdbWithFields": true } diff --git a/deploy/charts/octopus/templates/storage/initdb.yaml b/deploy/charts/octopus/templates/storage/initdb.yaml index 0abcabd9..38620def 100644 --- a/deploy/charts/octopus/templates/storage/initdb.yaml +++ b/deploy/charts/octopus/templates/storage/initdb.yaml @@ -10,11 +10,11 @@ data: apiVersion: v1 kind: ConfigMap metadata: - name: influxdb-initdb-config + name: {{ include "octopus.name" . }}-influxdb data: custom-init-scripts.sh: | influx -execute "CREATE DATABASE octopus" -username octopus -password octopus - influx -execute "CREATE RETENTION POLICY \"default\" ON octopus DURATION 0s REPLICATION 1 DEFAULT" -username {{ .Values.influxdb.auth.user.username }} -password {{ .Values.influxdb.auth.user.password }} + influx -execute "CREATE RETENTION POLICY \"default\" ON octopus DURATION 0s REPLICATION 1 DEFAULT" -username {{ .Values.influxdb.setDefaultUser.user.username }} -password {{ .Values.influxdb.setDefaultUser.user.password }} --- apiVersion: v1 kind: ConfigMap diff --git a/deploy/charts/octopus/values.yaml b/deploy/charts/octopus/values.yaml index dfe988bf..09653c46 100644 --- a/deploy/charts/octopus/values.yaml +++ b/deploy/charts/octopus/values.yaml @@ -315,36 +315,27 @@ nginx-ingress-controller: # influxdb influxdb: replicaCount: 1 - auth: + initScripts: + enabled: true + setDefaultUser: user: username: "octopus" password: "octopus" persistence: enabled: true - size: "100Gi" existingClaim: "octopus-influxdb-pvc" - volumePermissions: - enabled: true - securityContext: - runAsUser: 0 - influxdb: - initdbScriptsCM: "influxdb-initdb-config" - existingConfiguration: "influxdb-exist-config" - service: - type: NodePort - port: "8086" - affinity: - nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: - - key: kubernetes.io/arch - operator: In - values: - - amd64 - - x64 - - x86-64 - - x86_64 + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/arch + operator: In + values: + - amd64 + - x64 + - x86-64 + - x86_64 # grafana -- 2.34.1 From 1adb8ffb851b4e75d12fe315c831e00e3e477f84 Mon Sep 17 00:00:00 2001 From: Lijunmao Date: Fri, 24 Sep 2021 18:06:28 +0800 Subject: [PATCH 08/32] #64 --- .../octopus/templates/storage/initdb.yaml | 21 ----- .../internal/data/dao/train_job.go | 22 +++-- server/base-server/internal/data/data.go | 9 +- .../internal/data/influxdb/influxdb.go | 82 +++++++++++++++++++ server/common/errors/codes.go | 4 + 5 files changed, 111 insertions(+), 27 deletions(-) create mode 100644 server/base-server/internal/data/influxdb/influxdb.go diff --git a/deploy/charts/octopus/templates/storage/initdb.yaml b/deploy/charts/octopus/templates/storage/initdb.yaml index 38620def..8fce93a5 100644 --- a/deploy/charts/octopus/templates/storage/initdb.yaml +++ b/deploy/charts/octopus/templates/storage/initdb.yaml @@ -15,24 +15,3 @@ data: custom-init-scripts.sh: | influx -execute "CREATE DATABASE octopus" -username octopus -password octopus influx -execute "CREATE RETENTION POLICY \"default\" ON octopus DURATION 0s REPLICATION 1 DEFAULT" -username {{ .Values.influxdb.setDefaultUser.user.username }} -password {{ .Values.influxdb.setDefaultUser.user.password }} ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: influxdb-exist-config -data: - influxdb.conf: | - [meta] - dir = "/bitnami/influxdb/meta" - logging-enabled = true - [data] - dir = "/bitnami/influxdb/data" - wal-dir = "/bitnami/influxdb/wal" - query-log-enabled = true - cache-max-memory-size = 0 - max-series-per-database = 0 - max-values-per-tag = 0 - series-id-set-cache-size = 100 - [logging] - format = "logfmt" - suppress-logo = true diff --git a/server/base-server/internal/data/dao/train_job.go b/server/base-server/internal/data/dao/train_job.go index aa965fc3..ca6956fc 100644 --- a/server/base-server/internal/data/dao/train_job.go +++ b/server/base-server/internal/data/dao/train_job.go @@ -5,6 +5,7 @@ import ( stderrors "errors" "fmt" "server/base-server/internal/data/dao/model" + "server/base-server/internal/data/influxdb" "server/common/errors" "server/common/utils" "time" @@ -45,14 +46,16 @@ type TrainJobDao interface { } type trainJobDao struct { - log *log.Helper - db *gorm.DB + log *log.Helper + db *gorm.DB + influxdb *influxdb.Influxdb } -func NewTrainJobDao(db *gorm.DB, logger log.Logger) TrainJobDao { +func NewTrainJobDao(db *gorm.DB, influxdb *influxdb.Influxdb, logger log.Logger) TrainJobDao { return &trainJobDao{ - log: log.NewHelper("TrainJobDao", logger), - db: db, + log: log.NewHelper("TrainJobDao", logger), + db: db, + influxdb: influxdb, } } @@ -347,3 +350,12 @@ func (d *trainJobDao) DeleteTrainJobTemplate(userId string, ids []string) error } return nil } + +func (d *trainJobDao) GetTrainJobEvents(jobId string) error { + + res := d.influxbd.Query("user_id = ? and id in ? ", userId, ids) + if res.Error != nil { + return errors.Errorf(res.Error, errors.ErrorDBDeleteFailed) + } + return nil +} \ No newline at end of file diff --git a/server/base-server/internal/data/data.go b/server/base-server/internal/data/data.go index 0529f752..d563304c 100644 --- a/server/base-server/internal/data/data.go +++ b/server/base-server/internal/data/data.go @@ -10,6 +10,7 @@ import ( "server/base-server/internal/data/minio" "server/base-server/internal/data/pipeline" "server/base-server/internal/data/redis" + "server/base-server/internal/data/influxdb" "server/base-server/internal/data/registry" "server/common/log" @@ -36,6 +37,7 @@ type Data struct { Minio minio.Minio Registry registry.ArtifactRegistry Redis redis.Redis + Influxdb influxdb.Influxdb } func NewData(confData *conf.Data, logger log.Logger) (*Data, func(), error) { @@ -46,6 +48,11 @@ func NewData(confData *conf.Data, logger log.Logger) (*Data, func(), error) { return nil, nil, err } + influxdb, err := influxbd.NewInfluxdb(confData) + if err != nil { + return nil, nil, err + } + d.UserDao = dao.NewUserDao(db, logger) d.AdminUserDao = dao.NewAdminUserDao(db, logger) d.AlgorithmDao = algorithm_dao.NewAlgorithmDao(db, logger) @@ -56,7 +63,7 @@ func NewData(confData *conf.Data, logger log.Logger) (*Data, func(), error) { d.DatasetDao = dao.NewDatasetDao(db, logger) d.WorkspaceDao = dao.NewWorkspaceDao(db, logger) d.ImageDao = dao.NewImageDao(db, logger) - d.TrainJobDao = dao.NewTrainJobDao(db, logger) + d.TrainJobDao = dao.NewTrainJobDao(db, influxdb, logger) d.BillingDao = dao.NewBillingDao(db, logger) d.Pipeline = pipeline.NewPipeline(confData, logger) d.Cluster = cluster.NewCluster(confData, logger) diff --git a/server/base-server/internal/data/influxdb/influxdb.go b/server/base-server/internal/data/influxdb/influxdb.go new file mode 100644 index 00000000..e5121217 --- /dev/null +++ b/server/base-server/internal/data/influxdb/influxdb.go @@ -0,0 +1,82 @@ +package influxdb + + +import ( + "fmt" + "log" + "time" + + influxbd "github.com/influxdata/influxdb1-client/v2" +) + +type Influxdb interface { + //查询 + Query(cmd string) (res []influxbd.Result, err error) + //写入 + Write(measurement string, tags map[string]string, fields map[string]interface{}) (err error) +} + +type influxbd struct { + conf *conf.Data + client *influxbd.Client +} + +func NewInfluxdb(conf *conf.Data) (db Influxdb, err error) { + + client, err := influxbd.NewHTTPClient(influxbd.HTTPConfig{ + Addr: conf.Influxdb.Addr, + Username: conf.Influxdb.Username, + Password: conf.Influxdb.Password, + }) + + if err != nil { + err = errors.Errorf(err, errors.ErroInfluxdbInitFailed) + return nil, err + } + + influxdb := &influxbd{ + conf: conf, + client: client, + } + + return influxdb, nil +} + +func (i *influxbd) Query(cmd string) (res []influxbd.Result, err error) { + + q := influxbd.Query{ + Command: cmd, + Database: i.conf.Database, + } + if response, err := cli.Query(q); err == nil { + if response.Error() != nil { + return res, response.Error() + } + res = response.Results + } else { + return res, err + } + return res, nil +} + +func (i *influxbd) Write(measurement string, tags map[string]string, fields map[string]interface{}) (err error) { + + batchPoints, err := influxbd.NewBatchPoints(influxbd.BatchPointsConfig{ + Database: i.conf.Database, + Precision: i.conf.Precision, + }) + if err != nil { + return err + } + + point, err := influxbd.NewPoint(measurement, tags, fields, time.Now()) + if err != nil { + return err + } + + batchPoints.AddPoint(point) + err = cli.Write(bp) + if err != nil { + return err + } +} \ No newline at end of file diff --git a/server/common/errors/codes.go b/server/common/errors/codes.go index 750f44bf..5e78c8a1 100644 --- a/server/common/errors/codes.go +++ b/server/common/errors/codes.go @@ -60,6 +60,10 @@ const ( ErroRedisHGetFailed = 10102 // redisHGet失败 ErroRedisHDelFailed = 10103 // redisHDel失败 ErrorRedisLockObtainFailed = 10104 // redis锁获取失败 + // influxdb操作相关错误 + ErroInfluxdbInitFailed = 10200 // influxdb初始化失败 + ErroInfluxdbFindFailed = 10201 // influxdb列表查询失败 + ErroInfluxdbWriteFailed = 10202 // influxdb插入失败 /* 11001~12000 资源管理错误*/ ErrorDeleteResourcePool = 11001 // 删除资源池失败 -- 2.34.1 From b4fa95a3d96d153fa807e3221a50a80f834901a8 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 26 Sep 2021 01:01:53 +0800 Subject: [PATCH 09/32] #64 --- .../charts/octopus/templates/base-server.yaml | 6 ++ server/admin-server/configs/config.yaml | 2 +- server/base-server/api/v1/trainJob.proto | 26 ++++- server/base-server/configs/config.yaml | 8 +- server/base-server/internal/conf/conf.proto | 9 ++ .../internal/data/dao/train_job.go | 29 +++--- server/base-server/internal/data/data.go | 4 +- .../internal/data/influxdb/influxdb.go | 96 +++++++++---------- .../internal/service/trainjob/train_job.go | 21 ++++ server/go.mod | 1 + server/go.sum | 2 + server/openai-server/api/v1/trainJob.proto | 29 ++++++ server/openai-server/configs/config.yaml | 2 +- .../internal/service/trainjob.go | 26 +++++ 14 files changed, 196 insertions(+), 65 deletions(-) diff --git a/deploy/charts/octopus/templates/base-server.yaml b/deploy/charts/octopus/templates/base-server.yaml index 94861e57..ccd60abe 100644 --- a/deploy/charts/octopus/templates/base-server.yaml +++ b/deploy/charts/octopus/templates/base-server.yaml @@ -131,6 +131,12 @@ data: addr: {{ include "redis.serviceAddr" . }} username: {{ .Values.baseserver.data.redis.username }} password: {{ .Values.baseserver.data.redis.password }} + influxdb: + addr: {{ include "influxdb.serviceAddr" . }} + username: {{ .Values.influxdb.setDefaultUser.user.username }} + password: {{ .Values.influxdb.setDefaultUser.user.password }} + database: octopus + precision: s service: nfsRootPath: /octopus-storage baseServerAddr: {{ include "baseserver.httpServiceAddr" . }} diff --git a/server/admin-server/configs/config.yaml b/server/admin-server/configs/config.yaml index 4ccbfd00..a3625fb8 100644 --- a/server/admin-server/configs/config.yaml +++ b/server/admin-server/configs/config.yaml @@ -12,7 +12,7 @@ data: baseServerAddr: dns:///127.0.0.1:9001 baseServerRequestTimeout: 30s redis: - addr: 192.168.202.73:31570 + addr: 192.168.202.73:30331 username: password: abcde service: diff --git a/server/base-server/api/v1/trainJob.proto b/server/base-server/api/v1/trainJob.proto index d8d320d6..e3c24c3c 100644 --- a/server/base-server/api/v1/trainJob.proto +++ b/server/base-server/api/v1/trainJob.proto @@ -29,7 +29,8 @@ service TrainJobService { rpc DeleteJobTemplate (DeleteJobTemplateRequest) returns (DeleteJobTemplateReply); //获取任务模板列表 rpc ListJobTemplate (TrainJobTemplateListRequest) returns (TrainJobTemplateListReply); - + //获取任务事件列表 + rpc GetJobEventList (JobEventListRequest) returns (JobEventListReply); } @@ -227,3 +228,26 @@ message TrainJobInfoRequest { message TrainJobInfoReply{ TrainJob trainJob = 1; } + +message JobEventListRequest { + //任务ID + string id = 1[(validate.rules).string = {min_len: 1}]; +} + +message JobEventListReply { + //查询结果总数 + int64 totalSize = 1; + //任务事件 + repeated JobEvent jobEvents = 2; +} + +message JobEvent{ + //发生时间 + string timestamp = 1; + //副本名称 + string name = 2; + //原因 + string reason = 3; + //消息 + string message = 4; +} diff --git a/server/base-server/configs/config.yaml b/server/base-server/configs/config.yaml index 0f52f3c0..3e5fa694 100644 --- a/server/base-server/configs/config.yaml +++ b/server/base-server/configs/config.yaml @@ -16,7 +16,7 @@ data: source: root:root@tcp(192.168.202.73:30336)/octopus?charset=utf8&parseTime=True&loc=Local kubernetes: masterUrl: https://192.168.202.73:6443/ - configPath: /home/hackmong/.kube/config + configPath: /home/hackmong/pclwork/73config pipeline: baseUrl: http://127.0.0.1:8080 token: KLtmMug9BDvvRjlg @@ -42,6 +42,12 @@ data: addr: 192.168.202.73:31663 username: password: abcde + influxdb: + addr: http://192.168.202.73:8086 + username: octopus + password: octopus + database: octopus + precision: s service: baseServerAddr: http://127.0.0.1:8001 dockerDatasetPath: /dataset diff --git a/server/base-server/internal/conf/conf.proto b/server/base-server/internal/conf/conf.proto index 018b62d9..06771f4e 100644 --- a/server/base-server/internal/conf/conf.proto +++ b/server/base-server/internal/conf/conf.proto @@ -79,6 +79,14 @@ message Redis { string password = 3; } +message Influxdb { + string addr = 1; + string username = 2; + string password = 3; + string Database = 4; + string Precision = 5; +} + message Data { Database database = 1; Pipeline pipeline = 2; @@ -86,6 +94,7 @@ message Data { Minio minio = 4; Harbor harbor = 5; Redis redis = 6; + Influxdb influxdb = 7; } message Develop { diff --git a/server/base-server/internal/data/dao/train_job.go b/server/base-server/internal/data/dao/train_job.go index ca6956fc..4d911cb1 100644 --- a/server/base-server/internal/data/dao/train_job.go +++ b/server/base-server/internal/data/dao/train_job.go @@ -43,19 +43,21 @@ type TrainJobDao interface { UpdateTrainJobTemplate(ctx context.Context, trainJobTemplate *model.TrainJobTemplate) error //网关层删除任务模板(软删除) DeleteTrainJobTemplate(userId string, ids []string) error + //获取训练任务事件 + GetTrainJobEvents(jobId string) error } type trainJobDao struct { - log *log.Helper - db *gorm.DB - influxdb *influxdb.Influxdb + log *log.Helper + db *gorm.DB + influxdb influxdb.Influxdb } -func NewTrainJobDao(db *gorm.DB, influxdb *influxdb.Influxdb, logger log.Logger) TrainJobDao { +func NewTrainJobDao(db *gorm.DB, influxdb influxdb.Influxdb, logger log.Logger) TrainJobDao { return &trainJobDao{ - log: log.NewHelper("TrainJobDao", logger), - db: db, - influxdb: influxdb, + log: log.NewHelper("TrainJobDao", logger), + db: db, + influxdb: influxdb, } } @@ -353,9 +355,14 @@ func (d *trainJobDao) DeleteTrainJobTemplate(userId string, ids []string) error func (d *trainJobDao) GetTrainJobEvents(jobId string) error { - res := d.influxbd.Query("user_id = ? and id in ? ", userId, ids) - if res.Error != nil { - return errors.Errorf(res.Error, errors.ErrorDBDeleteFailed) + query := fmt.Sprintf("select object_name, reason, message from events where object_name =~ /^%s/ and kind = 'Pod'", jobId) + + res, err := d.influxdb.Query(query) + + if err != nil { + return errors.Errorf(err, errors.ErroInfluxdbFindFailed) } + + fmt.Println(res) return nil -} \ No newline at end of file +} diff --git a/server/base-server/internal/data/data.go b/server/base-server/internal/data/data.go index d563304c..47c07900 100644 --- a/server/base-server/internal/data/data.go +++ b/server/base-server/internal/data/data.go @@ -7,10 +7,10 @@ import ( "server/base-server/internal/data/dao/algorithm_dao" "server/base-server/internal/data/dao/model" "server/base-server/internal/data/dao/model/resources" + "server/base-server/internal/data/influxdb" "server/base-server/internal/data/minio" "server/base-server/internal/data/pipeline" "server/base-server/internal/data/redis" - "server/base-server/internal/data/influxdb" "server/base-server/internal/data/registry" "server/common/log" @@ -48,7 +48,7 @@ func NewData(confData *conf.Data, logger log.Logger) (*Data, func(), error) { return nil, nil, err } - influxdb, err := influxbd.NewInfluxdb(confData) + influxdb, err := influxdb.NewInfluxdb(confData) if err != nil { return nil, nil, err } diff --git a/server/base-server/internal/data/influxdb/influxdb.go b/server/base-server/internal/data/influxdb/influxdb.go index e5121217..3d86e934 100644 --- a/server/base-server/internal/data/influxdb/influxdb.go +++ b/server/base-server/internal/data/influxdb/influxdb.go @@ -1,33 +1,32 @@ package influxdb - import ( - "fmt" - "log" - "time" - - influxbd "github.com/influxdata/influxdb1-client/v2" + "server/base-server/internal/conf" + "server/common/errors" + "time" + + influxdbClient "github.com/influxdata/influxdb1-client/v2" ) type Influxdb interface { //查询 - Query(cmd string) (res []influxbd.Result, err error) + Query(cmd string) (res []influxdbClient.Result, err error) //写入 Write(measurement string, tags map[string]string, fields map[string]interface{}) (err error) } type influxbd struct { conf *conf.Data - client *influxbd.Client + client influxdbClient.Client } func NewInfluxdb(conf *conf.Data) (db Influxdb, err error) { - - client, err := influxbd.NewHTTPClient(influxbd.HTTPConfig{ - Addr: conf.Influxdb.Addr, - Username: conf.Influxdb.Username, - Password: conf.Influxdb.Password, - }) + + client, err := influxdbClient.NewHTTPClient(influxdbClient.HTTPConfig{ + Addr: conf.Influxdb.Addr, + Username: conf.Influxdb.Username, + Password: conf.Influxdb.Password, + }) if err != nil { err = errors.Errorf(err, errors.ErroInfluxdbInitFailed) @@ -41,42 +40,43 @@ func NewInfluxdb(conf *conf.Data) (db Influxdb, err error) { return influxdb, nil } - -func (i *influxbd) Query(cmd string) (res []influxbd.Result, err error) { - q := influxbd.Query{ - Command: cmd, - Database: i.conf.Database, - } - if response, err := cli.Query(q); err == nil { - if response.Error() != nil { - return res, response.Error() - } - res = response.Results - } else { - return res, err - } - return res, nil +func (i *influxbd) Query(cmd string) (res []influxdbClient.Result, err error) { + + q := influxdbClient.Query{ + Command: cmd, + Database: i.conf.Influxdb.Database, + } + if response, err := i.client.Query(q); err == nil { + if response.Error() != nil { + return res, response.Error() + } + res = response.Results + } else { + return res, err + } + return res, nil } - + func (i *influxbd) Write(measurement string, tags map[string]string, fields map[string]interface{}) (err error) { - - batchPoints, err := influxbd.NewBatchPoints(influxbd.BatchPointsConfig{ - Database: i.conf.Database, - Precision: i.conf.Precision, - }) - if err != nil { - return err - } - - point, err := influxbd.NewPoint(measurement, tags, fields, time.Now()) + + batchPoints, err := influxdbClient.NewBatchPoints(influxdbClient.BatchPointsConfig{ + Database: i.conf.Influxdb.Database, + Precision: i.conf.Influxdb.Precision, + }) if err != nil { - return err - } + return err + } + + point, err := influxdbClient.NewPoint(measurement, tags, fields, time.Now()) + if err != nil { + return err + } - batchPoints.AddPoint(point) - err = cli.Write(bp) - if err != nil { - return err - } -} \ No newline at end of file + batchPoints.AddPoint(point) + err = i.client.Write(batchPoints) + if err != nil { + return err + } + return nil +} diff --git a/server/base-server/internal/service/trainjob/train_job.go b/server/base-server/internal/service/trainjob/train_job.go index 6d7c47b3..51afdd40 100644 --- a/server/base-server/internal/service/trainjob/train_job.go +++ b/server/base-server/internal/service/trainjob/train_job.go @@ -992,3 +992,24 @@ func (s *trainJobService) PipelineCallback(ctx context.Context, req *common.Pipe return common.PipeLineCallbackOK } + +func (s *trainJobService) GetJobEventList(ctx context.Context, req *api.JobEventListRequest) (*api.JobEventListReply, error) { + + //jobEvents, totalSize, err := s.data.TrainJobDao.GetTrainJobEvents(ctx, req.Id) + err := s.data.TrainJobDao.GetTrainJobEvents(req.Id) + if err != nil { + return nil, err + } + + //jobEvents, err = s.convertTemplateFromDb(jobEvents) + //if err != nil { + // return nil, err + //} + jobEvents := make([]*api.JobEvent, 0) + return &api.JobEventListReply{ + //TotalSize: totalSize, + //JobEvents: jobEvents, + TotalSize: 0, + JobEvents: jobEvents, + }, nil +} diff --git a/server/go.mod b/server/go.mod index 09bb2b2a..d058118c 100644 --- a/server/go.mod +++ b/server/go.mod @@ -15,6 +15,7 @@ require ( github.com/google/uuid v1.1.2 github.com/gorilla/mux v1.8.0 github.com/imdario/mergo v0.3.11 // indirect + github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab // indirect github.com/jinzhu/copier v0.2.5 github.com/json-iterator/go v1.1.10 github.com/kr/text v0.2.0 // indirect diff --git a/server/go.sum b/server/go.sum index 64509a75..ea495386 100644 --- a/server/go.sum +++ b/server/go.sum @@ -362,6 +362,8 @@ github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJ github.com/imdario/mergo v0.3.11 h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab h1:HqW4xhhynfjrtEiiSGcQUd6vrK23iMam1FO8rI7mwig= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= github.com/jinzhu/copier v0.2.5 h1:Spb+3hARaAN5eeGvqS1YAZflyIz3hCgh6HgvIlDi7U0= diff --git a/server/openai-server/api/v1/trainJob.proto b/server/openai-server/api/v1/trainJob.proto index f58a8690..65f470db 100644 --- a/server/openai-server/api/v1/trainJob.proto +++ b/server/openai-server/api/v1/trainJob.proto @@ -74,6 +74,12 @@ service TrainJobService { get: "/v1/trainmanage/trainjobtemplate" }; }; + // 获取训练任务事件列表 + rpc GetJobEventList (JobEventListRequest) returns (JobEventListReply) { + option (google.api.http) = { + get: "/v1/trainmanage/trainjobevent/{id}" + }; + }; } @@ -358,3 +364,26 @@ message TrainJobInfoReply{ //训练任务 TrainJob trainJob = 4; } + +message JobEventListRequest { + //任务ID + string id = 1[(validate.rules).string = {min_len: 1}]; +} + +message JobEventListReply { + //查询结果总数 + int64 totalSize = 1; + //任务事件 + repeated JobEvent jobEvents = 2; +} + +message JobEvent{ + //发生时间 + string timestamp = 1; + //副本名称 + string name = 2; + //原因 + string reason = 3; + //消息 + string message = 4; +} \ No newline at end of file diff --git a/server/openai-server/configs/config.yaml b/server/openai-server/configs/config.yaml index 16927552..a21b09df 100644 --- a/server/openai-server/configs/config.yaml +++ b/server/openai-server/configs/config.yaml @@ -12,7 +12,7 @@ data: baseServerAddr: dns:///127.0.0.1:9001 baseServerRequestTimeout: 30s redis: - addr: 192.168.202.73:31570 + addr: 192.168.202.73:30331 username: password: abcde service: diff --git a/server/openai-server/internal/service/trainjob.go b/server/openai-server/internal/service/trainjob.go index df9a019c..9228f705 100644 --- a/server/openai-server/internal/service/trainjob.go +++ b/server/openai-server/internal/service/trainjob.go @@ -461,3 +461,29 @@ func (s *TrainJobService) assignValueToTemplate(ctx context.Context, templates [ return nil } + +// 任务事件列表 +func (s *TrainJobService) GetJobEventList(ctx context.Context, req *api.JobEventListRequest) (*api.JobEventListReply, error) { + session := session.SessionFromContext(ctx) + if session == nil { + return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession) + } + + innerReq := &innerapi.JobEventListRequest{} + err := copier.Copy(innerReq, req) + if err != nil { + return nil, errors.Errorf(err, errors.ErrorStructCopy) + } + + innerReply, err := s.data.TrainJobClient.GetJobEventList(ctx, innerReq) + if err != nil { + return nil, err + } + + reply := &api.JobEventListReply{} + err = copier.Copy(reply, innerReply) + if err != nil { + return nil, err + } + return reply, nil +} -- 2.34.1 From ad16d8038d4957c80315ad4e1ca4874f91544120 Mon Sep 17 00:00:00 2001 From: Lijunmao Date: Sun, 26 Sep 2021 15:13:27 +0800 Subject: [PATCH 10/32] #64 --- .../charts/octopus/templates/base-server.yaml | 1 - server/admin-server/api/v1/trainJob.proto | 2 - server/base-server/api/v1/develop.proto | 36 +- server/base-server/api/v1/trainJob.proto | 11 +- server/base-server/configs/config.yaml | 5 +- .../base-server/internal/data/dao/develop.go | 58 +- .../internal/data/dao/model/develop.go | 15 + .../internal/data/dao/model/train_job.go | 15 + .../internal/data/dao/train_job.go | 47 +- server/base-server/internal/data/data.go | 2 +- .../internal/data/influxdb/influxdb.go | 53 +- .../internal/service/develop/develop.go | 31 +- .../internal/service/trainjob/train_job.go | 28 +- server/go.mod | 10 +- server/go.sum | 656 ++++++++++++++++++ server/openai-server/api/v1/develop.proto | 38 +- server/openai-server/api/v1/trainJob.proto | 14 +- .../openai-server/internal/service/develop.go | 26 + .../services/kubernetes/event_handlers.go | 3 - .../services/kubernetes/logs_helper.go | 113 --- 20 files changed, 986 insertions(+), 178 deletions(-) delete mode 100644 server/taskset/pkg/pipeline/services/kubernetes/logs_helper.go diff --git a/deploy/charts/octopus/templates/base-server.yaml b/deploy/charts/octopus/templates/base-server.yaml index ccd60abe..01d58a4e 100644 --- a/deploy/charts/octopus/templates/base-server.yaml +++ b/deploy/charts/octopus/templates/base-server.yaml @@ -136,7 +136,6 @@ data: username: {{ .Values.influxdb.setDefaultUser.user.username }} password: {{ .Values.influxdb.setDefaultUser.user.password }} database: octopus - precision: s service: nfsRootPath: /octopus-storage baseServerAddr: {{ include "baseserver.httpServiceAddr" . }} diff --git a/server/admin-server/api/v1/trainJob.proto b/server/admin-server/api/v1/trainJob.proto index 5e59490f..fb9a6d77 100644 --- a/server/admin-server/api/v1/trainJob.proto +++ b/server/admin-server/api/v1/trainJob.proto @@ -131,8 +131,6 @@ message TrainJob { string imageVersion = 23; //启动时间 int64 startedAt = 24; - //启动信息 - string initInfo = 25; } message TrainJobListRequest { diff --git a/server/base-server/api/v1/develop.proto b/server/base-server/api/v1/develop.proto index 8e78934c..2b9a3b05 100644 --- a/server/base-server/api/v1/develop.proto +++ b/server/base-server/api/v1/develop.proto @@ -21,6 +21,8 @@ service Develop { rpc ListNotebook (ListNotebookRequest) returns (ListNotebookReply); // 查询notebook详情 rpc GetNotebook (GetNotebookRequest) returns (GetNotebookReply); + //获取任务事件列表 + rpc GetNotebookEventList (NotebookEventListRequest) returns (NotebookEventListReply); } message CreateNotebookRequest { @@ -98,7 +100,6 @@ message Notebook { string datasetVersion = 18; string datasetName = 19; uint32 resourceSpecPrice = 20; - string initInfo = 21; } message ListNotebookReply { @@ -112,4 +113,35 @@ message GetNotebookRequest { message GetNotebookReply { Notebook notebook = 1; -} \ No newline at end of file +} + +message NotebookEventListRequest { + // 页码,从1开始 + int64 pageIndex = 1[(validate.rules).int64 = {gte:1}]; + // 页大小,最小1条,最大100条 + int64 pageSize = 2[(validate.rules).int64 = {gte:1,lt:100}]; + //任务ID + string id = 3[(validate.rules).string = {min_len: 1}]; + //子任务序号,从1开始 + int64 taskIndex = 4[(validate.rules).int64 = {gte:1,lt:100}]; + //副本序号,从1开始 + int64 replicaIndex = 5[(validate.rules).int64 = {gte:1,lt:100}]; +} + +message NotebookEventListReply { + //查询结果总数 + int64 totalSize = 1; + //任务事件 + repeated NotebookEvent notebookEvents = 2; +} + +message NotebookEvent{ + //发生时间 + string timestamp = 1; + //副本名称 + string name = 2; + //原因 + string reason = 3; + //消息 + string message = 4; +} diff --git a/server/base-server/api/v1/trainJob.proto b/server/base-server/api/v1/trainJob.proto index e3c24c3c..40ec0398 100644 --- a/server/base-server/api/v1/trainJob.proto +++ b/server/base-server/api/v1/trainJob.proto @@ -217,7 +217,6 @@ message TrainJob{ string imageName = 20; string dataSetName = 21; int64 startedAt = 22; - string initInfo = 23; } @@ -230,8 +229,16 @@ message TrainJobInfoReply{ } message JobEventListRequest { + // 页码,从1开始 + int64 pageIndex = 1[(validate.rules).int64 = {gte:1}]; + // 页大小,最小1条,最大100条 + int64 pageSize = 2[(validate.rules).int64 = {gte:1,lt:100}]; //任务ID - string id = 1[(validate.rules).string = {min_len: 1}]; + string id = 3[(validate.rules).string = {min_len: 1}]; + //子任务序号,从1开始 + int64 taskIndex = 4[(validate.rules).int64 = {gte:1,lt:100}]; + //副本序号,从1开始 + int64 replicaIndex = 5[(validate.rules).int64 = {gte:1,lt:100}]; } message JobEventListReply { diff --git a/server/base-server/configs/config.yaml b/server/base-server/configs/config.yaml index 3e5fa694..e3d3320a 100644 --- a/server/base-server/configs/config.yaml +++ b/server/base-server/configs/config.yaml @@ -16,7 +16,7 @@ data: source: root:root@tcp(192.168.202.73:30336)/octopus?charset=utf8&parseTime=True&loc=Local kubernetes: masterUrl: https://192.168.202.73:6443/ - configPath: /home/hackmong/pclwork/73config + configPath: /home/hackmong/openi/dev/73config pipeline: baseUrl: http://127.0.0.1:8080 token: KLtmMug9BDvvRjlg @@ -43,11 +43,10 @@ data: username: password: abcde influxdb: - addr: http://192.168.202.73:8086 + addr: 192.168.202.73:8086 username: octopus password: octopus database: octopus - precision: s service: baseServerAddr: http://127.0.0.1:8001 dockerDatasetPath: /dataset diff --git a/server/base-server/internal/data/dao/develop.go b/server/base-server/internal/data/dao/develop.go index 931ef54b..498c97c8 100644 --- a/server/base-server/internal/data/dao/develop.go +++ b/server/base-server/internal/data/dao/develop.go @@ -2,9 +2,11 @@ package dao import ( "context" + "encoding/json" stderrors "errors" "fmt" "server/base-server/internal/data/dao/model" + "server/base-server/internal/data/influxdb" "server/common/errors" "server/common/transaction" "server/common/utils" @@ -29,19 +31,23 @@ type DevelopDao interface { UpdateNotebookJobSelective(ctx context.Context, notebookJob *model.NotebookJob) error DeleteNotebookJobByNbId(ctx context.Context, notebookId string) error ListNotebookJob(ctx context.Context, query *model.NotebookJobQuery) ([]*model.NotebookJob, error) + //获取Notebook事件 + GetNotebookEvents(notebookEventQuery *model.NotebookEventQuery) ([]*model.NotebookEvent, int64, error) } type developDao struct { - log *log.Helper - db transaction.GetDB + log *log.Helper + db transaction.GetDB + influxdb influxdb.Influxdb } -func NewDevelopDao(db *gorm.DB, logger log.Logger) DevelopDao { +func NewDevelopDao(db *gorm.DB, influxdb influxdb.Influxdb, logger log.Logger) DevelopDao { return &developDao{ log: log.NewHelper("DevelopDao", logger), db: func(ctx context.Context) *gorm.DB { return transaction.GetDBFromCtx(ctx, db) }, + influxdb: influxdb, } } @@ -298,3 +304,49 @@ func (d *developDao) ListNotebookJob(ctx context.Context, query *model.NotebookJ return notebookJobs, nil } + +func (d *developDao) GetNotebookEvents(notebookEventQuery *model.NotebookEventQuery) ([]*model.NotebookEvent, int64, error) { + + keyName := "object_name" + keyReason := "reason" + keyMessage := "message" + + PageIndex := notebookEventQuery.PageIndex + PageSize := notebookEventQuery.PageSize + TaskIndex := notebookEventQuery.TaskIndex + ReplicaIndex := notebookEventQuery.ReplicaIndex + events := make([]*model.NotebookEvent, 0) + + objectName := fmt.Sprintf("%s-task%d-%d", notebookEventQuery.Id, TaskIndex-1, ReplicaIndex-1) + + countQuery := fmt.Sprintf("SELECT COUNT(%s) FROM events where object_name =~ /^%s/", keyMessage, objectName) + res, err := d.influxdb.Query(countQuery) + + if err != nil { + return events, 0, errors.Errorf(err, errors.ErroInfluxdbFindFailed) + } + + totalSize, err := res[0].Series[0].Values[0][1].(json.Number).Int64() + if err != nil { + return events, 0, errors.Errorf(err, errors.ErroInfluxdbFindFailed) + } + + query := fmt.Sprintf("select %s, %s, %s from events where object_name =~ /^%s/ and kind = 'Pod' LIMIT %d OFFSET %d", keyName, keyReason, keyMessage, objectName, PageSize, (PageIndex-1)*PageSize) + res, err = d.influxdb.Query(query) + + if err != nil { + return events, 0, errors.Errorf(err, errors.ErroInfluxdbFindFailed) + } + + for _, row := range res[0].Series[0].Values { + + event := &model.NotebookEvent{} + event.Timestamp = row[0].(string) + event.Name = row[1].(string) + event.Reason = row[2].(string) + event.Message = row[3].(string) + events = append(events, event) + } + + return events, totalSize, nil +} diff --git a/server/base-server/internal/data/dao/model/develop.go b/server/base-server/internal/data/dao/model/develop.go index 2c84a4ec..ba065357 100644 --- a/server/base-server/internal/data/dao/model/develop.go +++ b/server/base-server/internal/data/dao/model/develop.go @@ -80,3 +80,18 @@ type NotebookJobQuery struct { PayStatus api.BillingPayRecordStatus Ids []string } + +type NotebookEvent struct { + Timestamp string + Name string + Reason string + Message string +} + +type NotebookEventQuery struct { + PageIndex int + PageSize int + Id string + TaskIndex int + ReplicaIndex int +} diff --git a/server/base-server/internal/data/dao/model/train_job.go b/server/base-server/internal/data/dao/model/train_job.go index c000f49b..e30ebe1b 100644 --- a/server/base-server/internal/data/dao/model/train_job.go +++ b/server/base-server/internal/data/dao/model/train_job.go @@ -152,3 +152,18 @@ type TrainJobTemPlateListQuery struct { WorkspaceId string Ids []string } + +type TrainJobEvent struct { + Timestamp string + Name string + Reason string + Message string +} + +type JobEventQuery struct { + PageIndex int + PageSize int + Id string + TaskIndex int + ReplicaIndex int +} diff --git a/server/base-server/internal/data/dao/train_job.go b/server/base-server/internal/data/dao/train_job.go index 4d911cb1..3170171f 100644 --- a/server/base-server/internal/data/dao/train_job.go +++ b/server/base-server/internal/data/dao/train_job.go @@ -2,6 +2,7 @@ package dao import ( "context" + "encoding/json" stderrors "errors" "fmt" "server/base-server/internal/data/dao/model" @@ -44,7 +45,7 @@ type TrainJobDao interface { //网关层删除任务模板(软删除) DeleteTrainJobTemplate(userId string, ids []string) error //获取训练任务事件 - GetTrainJobEvents(jobId string) error + GetTrainJobEvents(jobEventQuery *model.JobEventQuery) ([]*model.TrainJobEvent, int64, error) } type trainJobDao struct { @@ -353,16 +354,48 @@ func (d *trainJobDao) DeleteTrainJobTemplate(userId string, ids []string) error return nil } -func (d *trainJobDao) GetTrainJobEvents(jobId string) error { +func (d *trainJobDao) GetTrainJobEvents(jobEventQuery *model.JobEventQuery) ([]*model.TrainJobEvent, int64, error) { - query := fmt.Sprintf("select object_name, reason, message from events where object_name =~ /^%s/ and kind = 'Pod'", jobId) + keyName := "object_name" + keyReason := "reason" + keyMessage := "message" - res, err := d.influxdb.Query(query) + PageIndex := jobEventQuery.PageIndex + PageSize := jobEventQuery.PageSize + TaskIndex := jobEventQuery.TaskIndex + ReplicaIndex := jobEventQuery.ReplicaIndex + events := make([]*model.TrainJobEvent, 0) + + objectName := fmt.Sprintf("%s-task%d-%d", jobEventQuery.Id, TaskIndex-1, ReplicaIndex-1) + + countQuery := fmt.Sprintf("SELECT COUNT(%s) FROM events where object_name =~ /^%s/", keyMessage, objectName) + res, err := d.influxdb.Query(countQuery) if err != nil { - return errors.Errorf(err, errors.ErroInfluxdbFindFailed) + return events, 0, errors.Errorf(err, errors.ErroInfluxdbFindFailed) } - fmt.Println(res) - return nil + totalSize, err := res[0].Series[0].Values[0][1].(json.Number).Int64() + if err != nil { + return events, 0, errors.Errorf(err, errors.ErroInfluxdbFindFailed) + } + + query := fmt.Sprintf("select %s, %s, %s from events where object_name =~ /^%s/ and kind = 'Pod' LIMIT %d OFFSET %d", keyName, keyReason, keyMessage, objectName, PageSize, (PageIndex-1)*PageSize) + res, err = d.influxdb.Query(query) + + if err != nil { + return events, 0, errors.Errorf(err, errors.ErroInfluxdbFindFailed) + } + + for _, row := range res[0].Series[0].Values { + + event := &model.TrainJobEvent{} + event.Timestamp = row[0].(string) + event.Name = row[1].(string) + event.Reason = row[2].(string) + event.Message = row[3].(string) + events = append(events, event) + } + + return events, totalSize, nil } diff --git a/server/base-server/internal/data/data.go b/server/base-server/internal/data/data.go index 47c07900..e47b8783 100644 --- a/server/base-server/internal/data/data.go +++ b/server/base-server/internal/data/data.go @@ -58,7 +58,7 @@ func NewData(confData *conf.Data, logger log.Logger) (*Data, func(), error) { d.AlgorithmDao = algorithm_dao.NewAlgorithmDao(db, logger) d.ResourceDao = dao.NewResourceDao(db, logger) d.ResourceSpecDao = dao.NewResourceSpecDao(db, logger) - d.DevelopDao = dao.NewDevelopDao(db, logger) + d.DevelopDao = dao.NewDevelopDao(db, influxdb, logger) d.ModelDao = dao.NewModelDao(db, logger) d.DatasetDao = dao.NewDatasetDao(db, logger) d.WorkspaceDao = dao.NewWorkspaceDao(db, logger) diff --git a/server/base-server/internal/data/influxdb/influxdb.go b/server/base-server/internal/data/influxdb/influxdb.go index 3d86e934..ef95446c 100644 --- a/server/base-server/internal/data/influxdb/influxdb.go +++ b/server/base-server/internal/data/influxdb/influxdb.go @@ -1,11 +1,14 @@ package influxdb import ( + "fmt" "server/base-server/internal/conf" "server/common/errors" "time" - influxdbClient "github.com/influxdata/influxdb1-client/v2" + "net/url" + + influxdbClient "github.com/influxdata/influxdb/client" ) type Influxdb interface { @@ -17,22 +20,37 @@ type Influxdb interface { type influxbd struct { conf *conf.Data - client influxdbClient.Client + client *influxdbClient.Client } func NewInfluxdb(conf *conf.Data) (db Influxdb, err error) { - client, err := influxdbClient.NewHTTPClient(influxdbClient.HTTPConfig{ - Addr: conf.Influxdb.Addr, + url := &url.URL{ + Scheme: "http", + Host: conf.Influxdb.Addr, + } + + iConfig := &influxdbClient.Config{ + URL: *url, Username: conf.Influxdb.Username, Password: conf.Influxdb.Password, - }) + } + client, err := influxdbClient.NewClient(*iConfig) if err != nil { err = errors.Errorf(err, errors.ErroInfluxdbInitFailed) return nil, err } + if _, _, err := client.Ping(); err != nil { + err = fmt.Errorf("failed to ping influxDB server at %q - %v", conf.Influxdb.Addr, err) + return nil, errors.Errorf(err, errors.ErroInfluxdbInitFailed) + } + + if err != nil { + return nil, errors.Errorf(err, errors.ErroInfluxdbInitFailed) + } + influxdb := &influxbd{ conf: conf, client: client, @@ -60,22 +78,23 @@ func (i *influxbd) Query(cmd string) (res []influxdbClient.Result, err error) { func (i *influxbd) Write(measurement string, tags map[string]string, fields map[string]interface{}) (err error) { - batchPoints, err := influxdbClient.NewBatchPoints(influxdbClient.BatchPointsConfig{ - Database: i.conf.Influxdb.Database, - Precision: i.conf.Influxdb.Precision, - }) - if err != nil { - return err + point := influxdbClient.Point{ + Measurement: measurement, + Time: time.Now().UTC(), + Fields: fields, + Tags: tags, } - point, err := influxdbClient.NewPoint(measurement, tags, fields, time.Now()) - if err != nil { - return err + dataPoints := make([]influxdbClient.Point, 0, 10) + dataPoints = append(dataPoints, point) + + batchPoints := influxdbClient.BatchPoints{ + Points: dataPoints, + Database: i.conf.Influxdb.Database, + RetentionPolicy: "default", } - batchPoints.AddPoint(point) - err = i.client.Write(batchPoints) - if err != nil { + if _, err := i.client.Write(batchPoints); err != nil { return err } return nil diff --git a/server/base-server/internal/service/develop/develop.go b/server/base-server/internal/service/develop/develop.go index d037e821..5fece6bf 100644 --- a/server/base-server/internal/service/develop/develop.go +++ b/server/base-server/internal/service/develop/develop.go @@ -796,12 +796,35 @@ func (s *developService) GetNotebook(ctx context.Context, req *api.GetNotebookRe notebook.CreatedAt = notebookTbl.CreatedAt.Unix() notebook.UpdatedAt = notebookTbl.UpdatedAt.Unix() - //pipeline获取job最新任务信息 - info, err := s.data.Pipeline.GetJobDetail(ctx, notebookTbl.NotebookJobId) + return &api.GetNotebookReply{Notebook: notebook}, nil +} + +func (s *developService) GetNotebookEventList(ctx context.Context, req *api.NotebookEventListRequest) (*api.NotebookEventListReply, error) { + + query := &model.NotebookEventQuery{} + err := copier.Copy(query, req) if err != nil { return nil, err } - notebook.InitInfo = info.Job.ExitDiagnostics - return &api.GetNotebookReply{Notebook: notebook}, nil + events, totalSize, err := s.data.DevelopDao.GetNotebookEvents(query) + if err != nil { + return nil, err + } + + notebookEvents := make([]*api.NotebookEvent, 0) + + for _, value := range events { + event := &api.NotebookEvent{} + event.Timestamp = value.Timestamp + event.Name = value.Name + event.Reason = value.Reason + event.Message = value.Message + notebookEvents = append(notebookEvents, event) + } + + return &api.NotebookEventListReply{ + TotalSize: totalSize, + NotebookEvents: notebookEvents, + }, nil } diff --git a/server/base-server/internal/service/trainjob/train_job.go b/server/base-server/internal/service/trainjob/train_job.go index 51afdd40..5af9d7b0 100644 --- a/server/base-server/internal/service/trainjob/train_job.go +++ b/server/base-server/internal/service/trainjob/train_job.go @@ -701,7 +701,6 @@ func (s *trainJobService) GetTrainJobInfo(ctx context.Context, req *api.TrainJob if err != nil { return nil, err } - trainJobDetail.InitInfo = info.Job.ExitDiagnostics for index, config := range trainJobDetail.Config { replyStates := make([]*api.ReplicaState, 0) for ri := 0; ri < int(config.TaskNumber); ri++ { @@ -995,21 +994,30 @@ func (s *trainJobService) PipelineCallback(ctx context.Context, req *common.Pipe func (s *trainJobService) GetJobEventList(ctx context.Context, req *api.JobEventListRequest) (*api.JobEventListReply, error) { - //jobEvents, totalSize, err := s.data.TrainJobDao.GetTrainJobEvents(ctx, req.Id) - err := s.data.TrainJobDao.GetTrainJobEvents(req.Id) + query := &model.JobEventQuery{} + err := copier.Copy(query, req) + if err != nil { + return nil, err + } + + events, totalSize, err := s.data.TrainJobDao.GetTrainJobEvents(query) if err != nil { return nil, err } - //jobEvents, err = s.convertTemplateFromDb(jobEvents) - //if err != nil { - // return nil, err - //} jobEvents := make([]*api.JobEvent, 0) + + for _, value := range events { + event := &api.JobEvent{} + event.Timestamp = value.Timestamp + event.Name = value.Name + event.Reason = value.Reason + event.Message = value.Message + jobEvents = append(jobEvents, event) + } + return &api.JobEventListReply{ - //TotalSize: totalSize, - //JobEvents: jobEvents, - TotalSize: 0, + TotalSize: totalSize, JobEvents: jobEvents, }, nil } diff --git a/server/go.mod b/server/go.mod index d058118c..6f9801a6 100644 --- a/server/go.mod +++ b/server/go.mod @@ -11,10 +11,11 @@ require ( github.com/go-kratos/kratos/v2 v2.0.0-beta3 github.com/go-redis/redis/v8 v8.10.0 github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect - github.com/golang/protobuf v1.4.3 + github.com/golang/protobuf v1.5.2 github.com/google/uuid v1.1.2 github.com/gorilla/mux v1.8.0 github.com/imdario/mergo v0.3.11 // indirect + github.com/influxdata/influxdb v1.9.4 github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab // indirect github.com/jinzhu/copier v0.2.5 github.com/json-iterator/go v1.1.10 @@ -22,15 +23,14 @@ require ( github.com/minio/minio-go/v7 v7.0.11 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect github.com/sony/sonyflake v1.0.0 - golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 + golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1 // indirect golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d golang.org/x/text v0.3.6 - gonum.org/v1/gonum v0.6.2 - google.golang.org/appengine v1.6.5 // indirect + gonum.org/v1/gonum v0.8.2 google.golang.org/genproto v0.0.0-20210212180131-e7f2df4ecc2d google.golang.org/grpc v1.36.0 - google.golang.org/protobuf v1.25.0 + google.golang.org/protobuf v1.26.0 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect gopkg.in/errgo.v2 v2.1.0 gopkg.in/resty.v1 v1.12.0 diff --git a/server/go.sum b/server/go.sum index ea495386..75a8ee1d 100644 --- a/server/go.sum +++ b/server/go.sum @@ -3,24 +3,75 @@ bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1: cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= +cloud.google.com/go/bigtable v1.3.0/go.mod h1:z5EyKrPE8OQmeg4h5MNdKvuSnI9CCT49Ki3f23aBzio= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= github.com/Azure/azure-sdk-for-go v35.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v41.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-storage-blob-go v0.13.0/go.mod h1:pA9kNqtjUeQF2zOSu4s//nUdBD+e64lEuc4sVnuOfNs= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest v0.10.0/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= +github.com/Azure/go-autorest/autorest v0.11.9/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/adal v0.9.2/go.mod h1:/3SMAM86bP6wC9Ev35peQDUeqFZBMH07vvUOmg4z/fE= +github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.3/go.mod h1:4bJZhUhcq8LB20TruwHbAQsmUs2Xh+QR7utuJpLXX3A= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.2/go.mod h1:7qkJkT+j6b+hIpzMOwPChJhTqS8VbsqqgULzMNRugoM= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= +github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= +github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= +github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.16.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.4.16 h1:FtSW/jqD+l4ba5iPBj9CODVtgfYAD8w2wS923g/cFDk= @@ -29,6 +80,7 @@ github.com/Microsoft/hcsshim v0.0.0-20190417211021-672e52e9209d/go.mod h1:Op3hHs github.com/Microsoft/hcsshim v0.8.14 h1:lbPVK25c1cu5xTLITwpUcxoA9vKrKErASPYygvouJns= github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OpenPeeDeeP/depguard v1.0.0/go.mod h1:7/4sitnI9YlQgTLLk734QlzXT8DuHVnAyztLplQjk+o= github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -37,32 +89,78 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Rican7/retry v0.1.0/go.mod h1:FgOROf8P5bebcC1DS0PdOQiqGUridaZvikzUmkFW6gg= +github.com/SAP/go-hdb v0.14.1/go.mod h1:7fdQLVC2lER3urZLjZCm0AuMQfApof92n3aylBPEkMo= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= +github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= +github.com/apache/arrow/go/arrow v0.0.0-20200601151325-b2287a20f230/go.mod h1:QNYViu/X0HXDHw7m3KXzWSVXIbfUvJqBFe6Gj8/pYA0= +github.com/apache/arrow/go/arrow v0.0.0-20200923215132-ac86123a3f01 h1:FSqtT0UCktIlSU19mxj0YE5HK3HOO4IFMU9BpOif/7A= +github.com/apache/arrow/go/arrow v0.0.0-20200923215132-ac86123a3f01/go.mod h1:QNYViu/X0HXDHw7m3KXzWSVXIbfUvJqBFe6Gj8/pYA0= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.3.3/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.28.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.29.16/go.mod h1:1KvfttTE3SPKMpo8g2c6jL3ZKfXtFvKscTgahTma5Xg= +github.com/aws/aws-sdk-go v1.30.12/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.3.2/go.mod h1:7OaACgj2SX3XGWnrIjGlJM22h6yD6MEWKvm7levnnM8= +github.com/aws/aws-sdk-go-v2/config v1.1.5/go.mod h1:P3F1hku7qzC81txjwXnwOM6Ex6ezkU6+/557Teyb64E= +github.com/aws/aws-sdk-go-v2/credentials v1.1.5/go.mod h1:Ir1R6tPiR1/2y1hes8yOijFMz54hzSmgcmCDo6F45Qc= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.6/go.mod h1:0+fWMitrmIpENiY8/1DyhdYPUCAPvd9UNz9mtCsEoLQ= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.1.2/go.mod h1:Azf567f5wBUfUbwpyJJnLM/geFFIzEulGR30L+nQZOE= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.0.4/go.mod h1:BCfU3Uo2fhKcMZFp9zU5QQGQxqWCOYmZ/27Dju3S/do= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.6/go.mod h1:L0KWr0ASo83PRZu9NaZaDsw3koS6PspKv137DMDZjHo= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.2.2/go.mod h1:nnutjMLuna0s3GVY/MAkpLX03thyNER06gXvnMAPj5g= +github.com/aws/aws-sdk-go-v2/service/s3 v1.5.0/go.mod h1:uwA7gs93Qcss43astPUb1eq4RyceNmYWAQjZFDOAMLo= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.5/go.mod h1:bpGz0tidC4y39sZkQSkpO/J0tzWCMXHbw6FZ0j1GkWM= +github.com/aws/aws-sdk-go-v2/service/sts v1.2.2/go.mod h1:ssRzzJ2RZOVuKj2Vx1YE7ypfil/BIlgmQnCSW4DistU= +github.com/aws/smithy-go v1.3.1/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/bazelbuild/bazel-gazelle v0.18.2/go.mod h1:D0ehMSbS+vesFsLGiD6JXu3mVEzOlfUl8wNnq+x/9p0= github.com/bazelbuild/bazel-gazelle v0.19.1-0.20191105222053-70208cbdc798/go.mod h1:rPwzNHUqEzngx1iVBfO/2X2npKaT3tqPqqHW6rVsn/A= github.com/bazelbuild/buildtools v0.0.0-20190731111112-f720930ceb60/go.mod h1:5JP0TXzWDHXv8qvxRC4InIazwdyDseBDbzESUMKk1yU= github.com/bazelbuild/buildtools v0.0.0-20190917191645-69366ca98f89/go.mod h1:5JP0TXzWDHXv8qvxRC4InIazwdyDseBDbzESUMKk1yU= github.com/bazelbuild/rules_go v0.0.0-20190719190356-6dae44dc5cab/go.mod h1:MC23Dc/wkXEyk3Wpq6lCqz0ZAYOZDw2DR5y3N1q2i7M= +github.com/benbjohnson/immutable v0.2.1 h1:EVv7H1ju7cDg/a8HUF4hAH4DBrMJh6RWWFwq9JfoO9I= +github.com/benbjohnson/immutable v0.2.1/go.mod h1:uc6OHo6PN2++n98KHLxW8ef4W42ylHiQSENghE1ezxI= +github.com/benbjohnson/tmpl v1.0.0/go.mod h1:igT620JFIi44B6awvU9IsDhR77IXWtFigTLil/RPdps= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/bonitoo-io/go-sql-bigquery v0.3.4-1.4.0/go.mod h1:J4Y6YJm0qTWB9aFziB7cPeSyc6dOZFyJdteSeybVpXQ= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/bsm/ginkgo v1.16.4 h1:pkHpo2VJRvI0NGlxCYi8qovww76L7+g82MgM+UBvH4A= github.com/bsm/ginkgo v1.16.4/go.mod h1:RabIZLzOCPghgHJKUqHZpqrQETA5AnF4aCSIYy5C1bk= @@ -70,21 +168,37 @@ github.com/bsm/gomega v1.13.0 h1:fzOh8E2Wu/x407rP+v3mEb9yGJaMVguiJBtmFkuOmlc= github.com/bsm/gomega v1.13.0/go.mod h1:JifAceMQ4crZIWYUKrlGcmbN3bqHogVTADMD2ATsbwk= github.com/bsm/redislock v0.7.1 h1:nBMm91MRuGOOSlHZNEF0+HpiaH1i8QpSALrF/q7b/Es= github.com/bsm/redislock v0.7.1/go.mod h1:TSF3xUotaocycoHjVAp535/bET+ZmvrtcyNrXc0Whm8= +github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= +github.com/cactus/go-statsd-client/statsd v0.0.0-20191106001114-12b4e2b38748/go.mod h1:l/bIBLeOl9eX+wxJAzxS4TveKRtAqlyDpHjhkfO0MEI= github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/prettybench v0.0.0-20150116022406-03b8cfe5406c/go.mod h1:Xe6ZsFhtM8HrDku0pxJ3/Lr51rwykrzgFwpmTzleatY= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= github.com/checkpoint-restore/go-criu v0.0.0-20181120144056-17b0214f6c48/go.mod h1:TrMrLQfeENAPYPRsJuq3jsqdlRh3lvi6trTZJG8+tho= github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cilium/ebpf v0.0.0-20191025125908-95b36a581eed/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59 h1:qWj4qVYZ95vLWwqyNJCQg7rDsG5wPdze0UaPolH7DUk= @@ -123,17 +237,24 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= github.com/deckarep/golang-set v1.7.1 h1:SCQV0S6gTtp6itiFrTqI+pfmJ4LN85S1YzhDf9rTHJQ= github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= +github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= +github.com/denisenkom/go-mssqldb v0.10.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/dgryski/go-sip13 v0.0.0-20190329191031-25c5027a8c7b/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= @@ -146,14 +267,22 @@ github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= @@ -165,42 +294,64 @@ github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZM github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/foxcpp/go-mockdns v0.0.0-20201212160233-ede2f9158d15/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsouza/go-dockerclient v1.7.2 h1:bBEAcqLTkpq205jooP5RVroUKiVEWgGecHyeZc4OFjo= github.com/fsouza/go-dockerclient v1.7.2/go.mod h1:+ugtMCVRwnPfY7d8/baCzZ3uwB0BrG5DB8OzbtxaRz8= +github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= +github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= +github.com/go-chi/chi v4.1.0+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= +github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= github.com/go-critic/go-critic v0.3.5-0.20190526074819-1df300866540/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kratos/kratos/v2 v2.0.0-beta3 h1:jka9yZaPlFibyDlbQzvZ2p0cLYUoWRqa37k0pR5Kck0= github.com/go-kratos/kratos/v2 v2.0.0-beta3/go.mod h1:hwEYWw8GFuJ8IoNt3T/3k+7kUfYt+h2fHDcyFlR1jBA= github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.4/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= +github.com/go-openapi/analysis v0.19.10/go.mod h1:qmhS3VNFxBlquFJ0RGoDtylO9y4pgTAUNE9AEEMdlJQ= github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= +github.com/go-openapi/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= +github.com/go-openapi/errors v0.19.4/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= @@ -210,31 +361,45 @@ github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= +github.com/go-openapi/loads v0.19.3/go.mod h1:YVfqhUCdahYwR3f3iiwQLhicVRvLlU/WO5WPaZvcvSI= github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= +github.com/go-openapi/loads v0.19.5/go.mod h1:dswLCAdonkRufe/gSUC3gN8nTSaB9uaS2es0x5/IbjY= github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= +github.com/go-openapi/runtime v0.19.15/go.mod h1:dhGWCTKRXlAfGnQG0ONViOZpjfg0m2gUt9nTQPQZuoo= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/spec v0.19.6/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= +github.com/go-openapi/spec v0.19.7/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= +github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= +github.com/go-openapi/strfmt v0.19.4/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= +github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.7/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= +github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo= github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= +github.com/go-openapi/validate v0.19.8/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-redis/redis/v8 v8.1.0/go.mod h1:isLoQT/NFSP7V67lyvM9GmdvLdyZ7pEhsXvvyQtnQTo= github.com/go-redis/redis/v8 v8.10.0 h1:OZwrQKuZqdJ4QIM8wn8rnuz868Li91xA3J2DEq+TPGA= github.com/go-redis/redis/v8 v8.10.0/go.mod h1:vXLTvigok0VtUX0znvbcEW1SOt4OA9CU1ZfnOtKOaiM= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -251,27 +416,65 @@ github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoM github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= +github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= +github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= +github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= +github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= +github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= +github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= +github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/uuid v3.3.0+incompatible h1:8K4tyRfvU1CYPgJsveYFQMhpFd/wXNM7iK6rR7UHz84= +github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.2.2-0.20190730201129-28a6bbf47e48/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.0.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -281,6 +484,11 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= @@ -292,6 +500,7 @@ github.com/golangci/gofmt v0.0.0-20181222123516-0b8337e80d98/go.mod h1:9qCChq59u github.com/golangci/golangci-lint v1.18.0/go.mod h1:kaqo8l0OZKYPtjNmG4z4HrWLgcYNIJ9B9q3LWri9uLg= github.com/golangci/gosec v0.0.0-20190211064107-66fb7fc33547/go.mod h1:0qUabqiIQgfmlAmulqxyiGkkyF6/tOGSnY2cnPVwrzU= github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= +github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= github.com/golangci/lint-1 v0.0.0-20190420132249-ee948d087217/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= @@ -304,6 +513,9 @@ github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA// github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/cadvisor v0.35.0/go.mod h1:1nql6U13uTHaLYB8rLS5x9IJc2qT6Xd/Tr1sTX6NE48= +github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v2.0.0+incompatible h1:dicJ2oXwypfwUGnB2/TYWYEKiuk9eYQlQO/AnOHl5mI= +github.com/google/flatbuffers v2.0.0+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -320,6 +532,11 @@ github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200417002340-c6e0a841f49a/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -327,14 +544,20 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.1.0 h1:rVsPeBmXbYv4If/cumu1AzZPwV58q433hvONV1UEZoI= github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.4.0 h1:BXDUo8p/DaxC+4FJY/SSx3gvnx9C1VdHNgaUkiEL5mk= +github.com/googleapis/gnostic v0.4.0/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gophercloud/gophercloud v0.10.0/go.mod h1:gmC5oQqMDOMO1t1gq5DquX/yAU808e/4mzjjDA76+Ss= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -345,26 +568,82 @@ github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:Fecb github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.14.4/go.mod h1:6CwZWGDSPRJidgKAtJVvND6soZe6fT7iteq8wDPdhb0= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/api v1.4.0/go.mod h1:xc8u05kyMa3Wjr9eEAsIAo3dg8+LywT5E/Cl7cNS5nU= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.4.0/go.mod h1:fY08Y9z5SvJqevyZNy6WWPXiG3KwBPAvlcdx16zZ0fM= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.12.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.2.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.2.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.0/go.mod h1:YL0HO+FifKOW2u1ke99DGVu1zhcpZzNwrLIqBC7vbYU= github.com/heketi/heketi v9.0.1-0.20190917153846-c2e2a4ab7ab9+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.11 h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/flux v0.65.0/go.mod h1:BwN2XG2lMszOoquQaFdPET8FRQfrXiZsWmcMO9rkaVY= +github.com/influxdata/flux v0.127.3 h1:f93GpWKkBOYoSRcrsiKPObjTlle/3t7mUswjSWfhzeU= +github.com/influxdata/flux v0.127.3/go.mod h1:Zc0P/HNnJnhBlm4QsmsBbAeAdtccKo4Eu0OfkP3RCk0= +github.com/influxdata/httprouter v1.3.1-0.20191122104820-ee83e2772f69/go.mod h1:pwymjR6SrP3gD3pRj9RJwdl1j5s3doEEV8gS4X9qSzA= +github.com/influxdata/influxdb v1.8.0/go.mod h1:SIzcnsjaHRFpmlxpJ4S3NT64qtEKYweNTUMb/vh0OMQ= +github.com/influxdata/influxdb v1.9.4 h1:hZMq5fd4enVnruYHd7qCHsqG7kWQ/msA6x+kCvGFsRY= +github.com/influxdata/influxdb v1.9.4/go.mod h1:dR0WCHqaHPpJLaqWnRSl/QHsbXJR+QpofbZXyTc8ccw= +github.com/influxdata/influxdb-client-go/v2 v2.3.1-0.20210518120617-5d1fff431040/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab h1:HqW4xhhynfjrtEiiSGcQUd6vrK23iMam1FO8rI7mwig= github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/influxql v1.1.0/go.mod h1:KpVI7okXjK6PRi3Z5B+mtKZli+R1DnZgb3N+tzevNgo= +github.com/influxdata/influxql v1.1.1-0.20210223160523-b6ab99450c93 h1:4t/8PcmLnI2vrcaHcEKeeLsGxC0WMRaOQdPX9b7DF8Y= +github.com/influxdata/influxql v1.1.1-0.20210223160523-b6ab99450c93/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= +github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/pkg-config v0.2.8/go.mod h1:EMS7Ll0S4qkzDk53XS3Z72/egBsPInt+BeRxb0WeSwk= +github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= +github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= +github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= +github.com/influxdata/tdigest v0.0.2-0.20210216194612-fc98d27c9e8b/go.mod h1:Z0kXnxzbTC2qrx4NaIzYkE1k66+6oEDQTvL95hQFh5Y= +github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= github.com/jinzhu/copier v0.2.5 h1:Spb+3hARaAN5eeGvqS1YAZflyIz3hCgh6HgvIlDi7U0= github.com/jinzhu/copier v0.2.5/go.mod h1:24xnZezI2Yqac9J61UC6/dG/k76ttpq0DdJI3QmUvro= @@ -374,18 +653,31 @@ github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/ github.com/jinzhu/now v1.1.2 h1:eVKgfIdy9b6zbWBMgFpfDPoAMifwSZagU9HmEU6zgiI= github.com/jinzhu/now v1.1.2/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= +github.com/jsternberg/zap-logfmt v1.2.0/go.mod h1:kz+1CUmCutPWABnNkOu9hOHKdT2q3TDYCcsFy9hpqb0= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= +github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -393,24 +685,35 @@ github.com/kisielk/gotool v0.0.0-20161130080628-0de1eaf82fa3/go.mod h1:jxZFDH7IL github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= +github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= +github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= @@ -418,6 +721,7 @@ github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.7.6/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -427,21 +731,44 @@ github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= +github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-shellwords v1.0.5/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.3 h1:j7a/xn1U6TKA/PHHxqZuzh64CdtRc7rU9M+AvkOl5bA= github.com/mattn/go-sqlite3 v1.14.3/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= +github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mesos/mesos-go v0.0.9/go.mod h1:kPYCMQ9gsOXVAle1OsoY4I1+9kPu8GHkf88aV59fDr4= github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.29/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/mileusna/useragent v0.0.0-20190129205925-3e331f0949a5/go.mod h1:JWhYAp2EXqUtsxTKdeGlY8Wp44M7VxThC9FEoNGi2IE= github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4= github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= @@ -450,13 +777,19 @@ github.com/minio/minio-go/v7 v7.0.11/go.mod h1:WoyW+ySKAKjY98B9+7ZbI8z8S3jaxaisd github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/mistifyio/go-zfs v2.1.1+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.2.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/moby/sys/mount v0.2.0 h1:WhCW5B355jtxndN5ovugJlMFJawbUODuW8fSnEH6SSM= github.com/moby/sys/mount v0.2.0/go.mod h1:aAivFE2LB3W4bACsUXChRHQ0qKWsetY4Y9V7sxOougM= github.com/moby/sys/mountinfo v0.4.0 h1:1KInV3Huv18akCu58V7lzNlt+jFmqlu1EaErnEHE/VM= @@ -470,26 +803,41 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mozilla/tls-observatory v0.0.0-20180409132520-8791a200eb40/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= +github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nbutton23/zxcvbn-go v0.0.0-20160627004424-a22cb81b2ecd/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/nbutton23/zxcvbn-go v0.0.0-20171102151520-eafdab6b0663/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= @@ -506,6 +854,7 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.5 h1:7n6FEkpFmfCoo2t+YYqXH0evK+a9ICQz0xcAy9dYcaQ= github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= @@ -519,53 +868,117 @@ github.com/opencontainers/runc v1.0.0-rc10/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2r github.com/opencontainers/runtime-spec v1.0.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/selinux v1.3.1-0.20190929122143-5215b1806f52/go.mod h1:+BLncwf63G4dgOzykXAxcmnFlUaOlkDdmw/CqsW6pjs= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.1.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= +github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/pquerna/ffjson v0.0.0-20180717144149-af8b230fcd20/go.mod h1:YARuvh7BUWHNhzDq2OM5tzR2RiCcN2D7sapiKyCel/M= +github.com/prometheus/alertmanager v0.20.0/go.mod h1:9g2i48FAyZW6BtbsnvHtMHQXl2aVtrORKwKVCQ+nbrg= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.2.1/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.5.1 h1:bdHYieyGlH+6OLEk2YQha8THib30KP0/yD0YH9m6xcA= +github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.0.11 h1:DhHlBtkHWPYi8O2y31JkK0TF+DGM+51OopZjH/Ia5qI= +github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/prometheus v0.0.0-20200609090129-a6600f564e3c/go.mod h1:S5n0C6tSgdnwWshBUceRx5G1OsjLv/EeZ9t3wIfEtsY= github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= github.com/quobyte/api v0.1.2/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= @@ -575,10 +988,13 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykE github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/snowflakedb/gosnowflake v1.6.1/go.mod h1:1kyg2XEduwti88V11PKRHImhXLK5WpGiayY6lFNYb98= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/sony/sonyflake v1.0.0 h1:MpU6Ro7tfXwgn2l5eluf9xQvQJDROTBImNCfRXn/YeM= github.com/sony/sonyflake v1.0.0/go.mod h1:Jv3cfhf/UFtolOTTRd3q4Nl6ENqM+KfyZ5PseKfZGF4= github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.0/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= @@ -600,9 +1016,13 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.0.2/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -615,34 +1035,62 @@ github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cb github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/timakin/bodyclose v0.0.0-20190721030226-87058b9bfcec/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/uber-go/tally v3.3.15+incompatible/go.mod h1:YDTIBxdXyOU/sCWilKB4bgyufu1cEi0jdVnRdxvjnmU= +github.com/uber/athenadriver v1.1.4/go.mod h1:tQjho4NzXw55LGfSZEcETuYydpY1vtmixUabHkC1K/E= +github.com/uber/jaeger-client-go v2.23.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-client-go v2.28.0+incompatible h1:G4QSBfvPKvg5ZM2j9MrJFdfI5iSljY/WnJqOGFao6HI= +github.com/uber/jaeger-client-go v2.28.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= +github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ultraware/funlen v0.0.1/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/quicktemplate v1.1.1/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= github.com/vishvananda/netlink v1.0.0/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= github.com/vishvananda/netns v0.0.0-20171111001504-be1fbeda1936/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= +github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/willf/bitset v1.1.9/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= +github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8= +github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6 h1:YdYsPAZ2pC6Tow/nPZOPQ96O3hm/ToAkGsPLzedXERk= +github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= +go.mongodb.org/mongo-driver v1.3.2/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/otel v0.11.0/go.mod h1:G8UCk+KooF2HLkgo8RHX9epABH/aRGYET7gQOqBVdB0= go.opentelemetry.io/otel v0.18.0/go.mod h1:PT5zQj4lTsR1YeARt8YNKcFb88/c2IKoSABK9mX0r78= go.opentelemetry.io/otel v0.20.0 h1:eaP0Fqu7SXHwvjiqDq83zImeehOHX8doTvU9AwXON8g= @@ -657,12 +1105,28 @@ go.opentelemetry.io/otel/trace v0.18.0/go.mod h1:FzdUu3BPwZSZebfQ1vl5/tAa8LyMLXS go.opentelemetry.io/otel/trace v0.20.0 h1:1DL6EXUdcg95gukhuRRvLDO/4X5THh/5dIV52lqtnbw= go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.14.1 h1:nYDKopTbvAPq/NrUVZwT15y2lpROBiLLyoRTbXOYWOo= +go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/build v0.0.0-20190927031335-2835ba2e683f/go.mod h1:fYw7AShPAhGMdXqA9gRadk/CcMsvLlClpE5oBwnS3dM= golang.org/x/crypto v0.0.0-20180426230345-b49d69b5da94/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180505025534-4ec37c66abab/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -670,21 +1134,42 @@ golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190424203555-c05e17bb3b2d/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200422194213-44a606286825/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA0mnthyA/nZ00AqCUo7vHg= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200908183739-ae8ad444f925 h1:5XVKs2rlCg8EFyRcvO8/XFwYxh1oKJO1Q3X5vttIf9c= golang.org/x/exp v0.0.0-20200908183739-ae8ad444f925/go.mod h1:1phAWC201xIgDyaFpmDeZkgf70Q4Pd/CNqfRtVPtxNw= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= @@ -695,10 +1180,17 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -709,8 +1201,10 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -725,21 +1219,36 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1 h1:4qWs8cYYH6PoEFy4dfhDFgoMGkwAcETd+MmPdCPMzUc= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= @@ -747,45 +1256,80 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20171026204733-164713f0dfce/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190122071731-054c452bb702/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -794,27 +1338,40 @@ golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210216224549-f992740a1bac/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44 h1:Bli41pIlzTzf3KEY06n+xnzK/BESIg2ze4Pgfh/aI8c= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf h1:2ucpDCmfkl8Bd/FsLtiD653Wf96cW37s+iGx93zsu4k= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201113234701-d7a72108b828/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915090833-1cbadb444a80/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20170915040203-e531a2a1c15f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -832,19 +1389,52 @@ golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190813034749-528a2984e271/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190909030654-5b82db07426d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191203134012-c197fd4bf371/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304024140-c4206d458c3f/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200422205258-72e4a01eba43/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200721032237-77f530d86f9a/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -853,36 +1443,82 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= +gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= gonum.org/v1/gonum v0.6.2 h1:4r+yNT0+8SWcOkXP+63H2zQbN+USnC73cjGUxnDF94Q= gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.6.1-0.20190607001116-5213b8090861/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200420144010-e5e8543f8aeb/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20210114201628-6edceaf6022f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210212180131-e7f2df4ecc2d h1:Edhcm0CKDPLQIecHCp5Iz57Lo7MfT6zUFBAlocmOjcY= google.golang.org/genproto v0.0.0-20210212180131-e7f2df4ecc2d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0 h1:o1bcQ6imQMIOpdrO3SWf2z5RV72WbDwdXuK0MDlc8As= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= @@ -897,6 +1533,9 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -908,7 +1547,9 @@ gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE= gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= @@ -922,10 +1563,14 @@ gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -950,11 +1595,14 @@ gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.2/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.18.18 h1:h+IFTkmyQ5ZwJGy3kG+JXcNYxjRgkJCXHdiFvF284D4= k8s.io/api v0.18.18/go.mod h1:Gq0a7seDxpP8TmcLbtdKv/2kulShUvq7MH4jIh7FiWU= k8s.io/apiextensions-apiserver v0.18.18/go.mod h1:nlBlbr75TmkTiXShdW/2jCHgefEORsDLNXyB0ioRFx0= @@ -975,6 +1623,8 @@ k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8 k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/klog/v2 v2.0.0 h1:Foj74zO6RbjjP4hBEKjnYtjjAhGg4jNynUdYF6fJrok= +k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/kube-aggregator v0.18.18/go.mod h1:3ITDYYCj961QojP9hn9DB9rHmjr5Q9Xn1zEu/LSZEjo= k8s.io/kube-controller-manager v0.18.18/go.mod h1:qTmOAqbIh5ZqiYs+B5JHehHZE/Gt7eTBa1Ge9dQQQLc= k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6 h1:Oh3Mzx5pJ+yIumsAD0MOECPVeXsVot0UkiaCGVyfGQY= @@ -991,6 +1641,8 @@ k8s.io/sample-apiserver v0.18.18/go.mod h1:ST4G3c63szQSDqC9PTVOgn/m0yq5i4WyAcYTK k8s.io/system-validators v1.0.4/go.mod h1:HgSgTg4NAGNoYYjKsUyk52gdNi2PVDswQ9Iyn66R7NI= k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 h1:d4vVOjXm687F1iLSP2q3lyPPuyvTUt3aVoBpi2DqRsU= k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/utils v0.0.0-20200414100711-2df71ebbae66 h1:Ly1Oxdu5p5ZFmiVT71LFgeZETvMfZ1iBIGeOenT2JeM= +k8s.io/utils v0.0.0-20200414100711-2df71ebbae66/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= @@ -999,7 +1651,10 @@ modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34/go.mod h1:H6SUd1XjIs+qQCyskXg5OFSrilMRUkD8ePJpHKDPaeY= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= @@ -1008,5 +1663,6 @@ sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnM sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj6uzU2+8OWDFv/HxUSs7kI= diff --git a/server/openai-server/api/v1/develop.proto b/server/openai-server/api/v1/develop.proto index afd622e1..8ce47745 100644 --- a/server/openai-server/api/v1/develop.proto +++ b/server/openai-server/api/v1/develop.proto @@ -47,6 +47,12 @@ service Develop { get: "/v1/developmanage/notebook/{id}" }; } + // 获取Notebook事件列表 + rpc GetJobEventList (NotebookEventListRequest) returns (NotebookEventListReply) { + option (google.api.http) = { + get: "/v1/developmanage/notebookevent" + }; + }; } message CreateNotebookRequest { @@ -127,10 +133,40 @@ message Notebook { string datasetVersion = 18; string datasetName = 19; uint32 resourceSpecPrice = 20; - string initInfo = 21; } message ListNotebookReply { int64 totalSize = 1; repeated Notebook notebooks = 2; +} + +message NotebookEventListRequest { + // 页码,从1开始 + int64 pageIndex = 1[(validate.rules).int64 = {gte:1}]; + // 页大小,最小1条,最大100条 + int64 pageSize = 2[(validate.rules).int64 = {gte:1,lt:100}]; + //任务ID + string id = 3[(validate.rules).string = {min_len: 1}]; + //子任务序号,从1开始 + int64 taskIndex = 4[(validate.rules).int64 = {gte:1,lt:100}]; + //副本序号,从1开始 + int64 replicaIndex = 5[(validate.rules).int64 = {gte:1,lt:100}]; +} + +message NotebookEventListReply { + //查询结果总数 + int64 totalSize = 1; + //任务事件 + repeated NotebookEvent notebookEvents = 2; +} + +message NotebookEvent{ + //发生时间 + string timestamp = 1; + //副本名称 + string name = 2; + //原因 + string reason = 3; + //消息 + string message = 4; } \ No newline at end of file diff --git a/server/openai-server/api/v1/trainJob.proto b/server/openai-server/api/v1/trainJob.proto index 65f470db..9338b640 100644 --- a/server/openai-server/api/v1/trainJob.proto +++ b/server/openai-server/api/v1/trainJob.proto @@ -77,7 +77,7 @@ service TrainJobService { // 获取训练任务事件列表 rpc GetJobEventList (JobEventListRequest) returns (JobEventListReply) { option (google.api.http) = { - get: "/v1/trainmanage/trainjobevent/{id}" + get: "/v1/trainmanage/trainjobevent" }; }; @@ -312,8 +312,6 @@ message TrainJob{ string imageVersion = 21; //启动时间 int64 startedAt = 22; - //启动信息 - string initInfo = 23; } message TrainJobTemplate{ @@ -366,8 +364,16 @@ message TrainJobInfoReply{ } message JobEventListRequest { + // 页码,从1开始 + int64 pageIndex = 1[(validate.rules).int64 = {gte:1}]; + // 页大小,最小1条,最大100条 + int64 pageSize = 2[(validate.rules).int64 = {gte:1,lt:100}]; //任务ID - string id = 1[(validate.rules).string = {min_len: 1}]; + string id = 3[(validate.rules).string = {min_len: 1}]; + //子任务序号,从1开始 + int64 taskIndex = 4[(validate.rules).int64 = {gte:1,lt:100}]; + //副本序号,从1开始 + int64 replicaIndex = 5[(validate.rules).int64 = {gte:1,lt:100}]; } message JobEventListReply { diff --git a/server/openai-server/internal/service/develop.go b/server/openai-server/internal/service/develop.go index a3c52c67..cb0d2613 100644 --- a/server/openai-server/internal/service/develop.go +++ b/server/openai-server/internal/service/develop.go @@ -172,3 +172,29 @@ func (s *DevelopService) QueryNotebook(ctx context.Context, req *api.QueryNotebo return reply, nil } + +// Notebook事件列表 +func (s *DevelopService) GetNotebookEventList(ctx context.Context, req *api.NotebookEventListRequest) (*api.NotebookEventListReply, error) { + session := session.SessionFromContext(ctx) + if session == nil { + return nil, errors.Errorf(nil, errors.ErrorUserNoAuthSession) + } + + innerReq := &innerapi.NotebookEventListRequest{} + err := copier.Copy(innerReq, req) + if err != nil { + return nil, errors.Errorf(err, errors.ErrorStructCopy) + } + + innerReply, err := s.data.DevelopClient.GetNotebookEventList(ctx, innerReq) + if err != nil { + return nil, err + } + + reply := &api.NotebookEventListReply{} + err = copier.Copy(reply, innerReply) + if err != nil { + return nil, err + } + return reply, nil +} diff --git a/server/taskset/pkg/pipeline/services/kubernetes/event_handlers.go b/server/taskset/pkg/pipeline/services/kubernetes/event_handlers.go index 9384bba3..a4bf102c 100644 --- a/server/taskset/pkg/pipeline/services/kubernetes/event_handlers.go +++ b/server/taskset/pkg/pipeline/services/kubernetes/event_handlers.go @@ -72,8 +72,6 @@ func (s *Service) onTaskSetAdd(obj interface{}) { ta := s.convert(obj) - InitPodInfoWatch(s, ta.Name, ta.Namespace) - if nil == ta { return } @@ -189,5 +187,4 @@ func (s *Service) onTaskSetDelete(obj interface{}) { s.emit(ta.Name, jobstate.STOPPED, ta) s.app.Services().Job().StopJob(ta.Name, ta.Namespace, "exception stopped") - EndPodInfoWatch(ta.Name) } diff --git a/server/taskset/pkg/pipeline/services/kubernetes/logs_helper.go b/server/taskset/pkg/pipeline/services/kubernetes/logs_helper.go deleted file mode 100644 index 6dcdaf30..00000000 --- a/server/taskset/pkg/pipeline/services/kubernetes/logs_helper.go +++ /dev/null @@ -1,113 +0,0 @@ -package kubernetes - -import ( - "time" - "strings" - "k8s.io/client-go/tools/cache" - "k8s.io/apimachinery/pkg/fields" - corev1 "k8s.io/api/core/v1" - "scheduler/pkg/pipeline/utils" - typeJob "volcano.sh/volcano/pkg/apis/batch/v1alpha1" - lrucache "scheduler/pkg/pipeline/utils/lrucache" -) - -type JobEvent struct { - JobID string - Namespace string - PodUID map[string]string - PodEvents map[string][][]*typeJob.PodEvent -} - -var EventUIDCache = lrucache.NewMemCache(32768) -var PodStopChan = make(map[string](chan struct{})) -var EventStopChan = make(map[string](chan struct{})) - - -func getTaskRoleName(pod corev1.Pod) string { - idx := strings.Index(pod.Name, "-") - taskRoleName := pod.Name[idx+1:len(pod.Name)] - return taskRoleName -} - -func InitPodInfoWatch(s * Service, jobID, namespace string) { - k8sClient := s.GetKubeClient() - podWatchlist := cache.NewListWatchFromClient(k8sClient.CoreV1().RESTClient(), "pods", namespace, fields.Everything()) - _, podController := cache.NewInformer( - podWatchlist, - &corev1.Pod{}, - time.Second * 0, - cache.ResourceEventHandlerFuncs{ - DeleteFunc: func(obj interface{}) { - var pod *corev1.Pod = obj.(*corev1.Pod) - if pod.Labels["volcano.sh/job-name"] == jobID { - podEvent := &typeJob.PodEvent{ - UID: utils.GetRandomString(12), - Reason: pod.Status.Reason, - Message:pod.Status.Message, - } - taskRole := getTaskRoleName(*pod) - jobInfo := &typeJob.JobInfo{} - jobInfo.PodRoleName = make(map[string]string) - jobInfo.PodRoleName[taskRole] = taskRole - jobInfo.PodEvents = make(map[string][]*typeJob.PodEvent) - jobInfo.PodEvents[taskRole] = append(jobInfo.PodEvents[taskRole], podEvent) - s.app.Services().Job().UpdateJobSummary(jobID, jobInfo, nil, true) - } - }, - }, - ) - - eventWatchlist := cache.NewListWatchFromClient(k8sClient.CoreV1().RESTClient(), "events", namespace, fields.Everything()) - _, eventController := cache.NewInformer( - eventWatchlist, - &corev1.Event{}, - time.Second * 0, - cache.ResourceEventHandlerFuncs{ - AddFunc: func(e interface{}) { - if event, ok := e.(*corev1.Event); ok { - name := event.InvolvedObject.Name - prefix := jobID + "-" - if strings.Index(name, prefix) == 0 { - uid := string(event.UID) - _, ok := EventUIDCache.Get(uid) - if ok { - return - } - EventUIDCache.Set(uid, uid) - idx := strings.Index(name, "-") - taskRole := name[idx+1:len(name)] - var jobInfo = &typeJob.JobInfo{} - jobInfo.PodRoleName = make(map[string]string) - jobInfo.PodEvents = make(map[string][]*typeJob.PodEvent) - jobInfo.PodRoleName[taskRole] = taskRole - jobInfo.PodEvents[taskRole] = []*typeJob.PodEvent{} - podEvent := &typeJob.PodEvent{ - UID: uid, - Reason: event.Reason, - Message:event.Message, - } - jobInfo.PodEvents[taskRole] = append(jobInfo.PodEvents[taskRole], podEvent) - s.app.Services().Job().UpdateJobSummary(jobID, jobInfo, nil, true) - } - } - }, - }, - ) - - podStop := make(chan struct{}) - eventStop := make(chan struct{}) - PodStopChan[jobID] = podStop - EventStopChan[jobID] = eventStop - go podController.Run(podStop) - go eventController.Run(eventStop) -} - -func EndPodInfoWatch(jobID string) { - podStop := PodStopChan[jobID] - eventStop := EventStopChan[jobID] - close(podStop) - close(eventStop) - delete(PodStopChan, jobID) - delete(EventStopChan, jobID) -} - -- 2.34.1 From 1cb08f984e4e17803de8f81da3e9aed46b24863a Mon Sep 17 00:00:00 2001 From: linfengjun Date: Sun, 26 Sep 2021 15:49:12 +0800 Subject: [PATCH 11/32] =?UTF-8?q?swagger=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/common/utils/protoc.go | 101 +++++++++++++++++++++++----------- server/go.mod | 1 + 2 files changed, 71 insertions(+), 31 deletions(-) diff --git a/server/common/utils/protoc.go b/server/common/utils/protoc.go index 9798ea1a..b2f65d4f 100644 --- a/server/common/utils/protoc.go +++ b/server/common/utils/protoc.go @@ -9,6 +9,8 @@ import ( "os/exec" "path/filepath" "strings" + + jsonpatch "github.com/evanphx/json-patch" ) // copy from source: kratos/cmd/kratos/internal/base/mod.go @@ -127,48 +129,85 @@ func Generate() error { } func GenSwagger() error { - dir, err := os.Getwd() + baseDir, err := os.Getwd() if err != nil { return err } - err = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { - if ext := filepath.Ext(path); ext != ".proto" { - return nil - } - if strings.Contains(path, "vendor") { + + dirs := []string{filepath.Join(baseDir, "admin-server", "api", "v1"), filepath.Join(baseDir, "openai-server", "api", "v1")} + for _, dir := range dirs { + err = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { + if ext := filepath.Ext(path); ext != ".proto" { + return nil + } + if strings.Contains(path, "vendor") { + return nil + } + + execDir := filepath.Dir(baseDir) + name := strings.ReplaceAll(path, execDir+string(filepath.Separator), "") + input := []string{ + "--proto_path=.", + "--proto_path=" + filepath.Join(os.Getenv("GOPATH"), "src"), + "--proto_path=" + filepath.Join(KratosMod(), "api"), + "--proto_path=" + filepath.Join(KratosMod(), "third_party"), + "--openapiv2_out", + "./", + "--openapiv2_opt", + "logtostderr=true", + name, + } + + fd := exec.Command("protoc", input...) + fd.Stdout = os.Stdout + fd.Stderr = os.Stderr + fd.Dir = execDir + if err := fd.Run(); err != nil { + return err + } + fmt.Printf("proto: %s\n", name) return nil + }) + if err != nil { + return err } - if !strings.Contains(path, "admin-server") && - !strings.Contains(path, "openai-server") { + + swaggerFileName := "swagger.json" + swaggerBytes := []byte(`{}`) + err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { + if !strings.Contains(path, ".swagger.json") { + return nil + } + + fileBytes, err := ioutil.ReadFile(path) + if err != nil { + return err + } + + swaggerBytes, err = jsonpatch.MergePatch(swaggerBytes, fileBytes) + if err != nil { + return err + } return nil + }) + if err != nil { + return err } - - execDir := filepath.Dir(dir) - name := strings.ReplaceAll(path, execDir+string(filepath.Separator), "") - input := []string{ - "--proto_path=.", - "--proto_path=" + filepath.Join(os.Getenv("GOPATH"), "src"), - "--proto_path=" + filepath.Join(KratosMod(), "api"), - "--proto_path=" + filepath.Join(KratosMod(), "third_party"), - "--openapiv2_out", - "./", - "--openapiv2_opt", - "logtostderr=true", - name, + swaggerBytes, err = jsonpatch.MergePatch(swaggerBytes, []byte(` + { + "info": { + "title": "octopus api", + "version": "" + } + }`)) + if err != nil { + return err } - fd := exec.Command("protoc", input...) - fd.Stdout = os.Stdout - fd.Stderr = os.Stderr - fd.Dir = execDir - if err := fd.Run(); err != nil { + err = ioutil.WriteFile(filepath.Join(dir, swaggerFileName), swaggerBytes, 0755) + if err != nil { return err } - fmt.Printf("proto: %s\n", name) - return nil - }) - if err != nil { - return err } return nil diff --git a/server/go.mod b/server/go.mod index 09bb2b2a..8d6b76c9 100644 --- a/server/go.mod +++ b/server/go.mod @@ -7,6 +7,7 @@ require ( github.com/bsm/redislock v0.7.1 github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/envoyproxy/protoc-gen-validate v0.1.0 + github.com/evanphx/json-patch v4.9.0+incompatible github.com/fsouza/go-dockerclient v1.7.2 github.com/go-kratos/kratos/v2 v2.0.0-beta3 github.com/go-redis/redis/v8 v8.10.0 -- 2.34.1 From 59c59460ce75e9650f8cbcd4a4c56de505fc7464 Mon Sep 17 00:00:00 2001 From: linfengjun Date: Mon, 27 Sep 2021 09:24:07 +0800 Subject: [PATCH 12/32] =?UTF-8?q?swagger=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .drone.yml | 50 ++++++++++++++++++++ Makefile | 19 +++++++- build/application/api-doc/dockerfile | 11 +++++ build/basic_environment/kratos-v2/dockerfile | 3 +- server/admin-server/.gitignore | 2 +- server/common/utils/protoc.go | 4 ++ server/openai-server/.gitignore | 2 +- 7 files changed, 86 insertions(+), 5 deletions(-) create mode 100644 build/application/api-doc/dockerfile diff --git a/.drone.yml b/.drone.yml index 801c4c62..13a52b45 100644 --- a/.drone.yml +++ b/.drone.yml @@ -427,3 +427,53 @@ steps: from_secret: docker_hub_project commands: - make openai-portal_image_push need_latest=FALSE tag=${DRONE_TAG} docker_hub_project=$DOCKER_HUB_PROJECT docker_hub_host=$DOCKER_HUB_HOST docker_hub_userame=$DOCKER_HUB_USERNAME docker_hub_passwd=$DOCKER_HUB_PASSWD + +--- +kind: pipeline +name: api-doc +type: kubernetes +platform: + os: linux + arch: amd64 +trigger: + event: + - tag +volumes: + - name: docker + host: + path: /var/run/ +steps: + # - name: 代码检查 + # image: golangci/golangci-lint:v1.40.1 + # environment: + # GO111MODULE: on + # GOPROXY: https://goproxy.cn,direct + # commands: + # - make admin-server_lint + + - name: 构建镜像 + image: swr.cn-south-1.myhuaweicloud.com/openioctopus/docker:20.10.6-make + volumes: + - name: docker + path: /var/run/ + commands: + - make api-doc_image tag=${DRONE_TAG} + + - name: 镜像推送 + image: swr.cn-south-1.myhuaweicloud.com/openioctopus/docker:20.10.6-make + volumes: + - name: docker + path: /var/run/ + environment: + DOCKER_HUB_HOST: + from_secret: docker_hub_host + DOCKER_HUB_USERNAME: + from_secret: docker_hub_userame + DOCKER_HUB_PASSWD: + from_secret: docker_hub_passwd + DOCKER_HUB_PROJECT: + from_secret: docker_hub_project + commands: + - make api-doc_image_push need_latest=FALSE tag=${DRONE_TAG} docker_hub_project=$DOCKER_HUB_PROJECT docker_hub_host=$DOCKER_HUB_HOST docker_hub_userame=$DOCKER_HUB_USERNAME docker_hub_passwd=$DOCKER_HUB_PASSWD + +--- \ No newline at end of file diff --git a/Makefile b/Makefile index c0c0b8fb..b88b5173 100644 --- a/Makefile +++ b/Makefile @@ -73,6 +73,8 @@ vc-controller_build: init scheduler_build: init cd ./server/taskset && go build -ldflags ${LD_FLAGS} -o ${SERVER_BINARY_DIR} ./main/scheduler +api-doc_build: init + cd ./server && go generate # 运行 all_run: server_run @@ -165,7 +167,7 @@ taskset_lint: lint_init cd ./server/taskset && golangci-lint run ./... # 构建镜像 -images: base-server_image admin-server_image openai-server_image taskset_image admin-portal_image openai-portal_image +images: base-server_image admin-server_image openai-server_image taskset_image admin-portal_image openai-portal_image api-doc_image base-server_image: docker build --no-cache -t base-server:${RELEASE_VER} -f ./build/application/base-server/dockerfile . @@ -193,8 +195,11 @@ admin-portal_image: openai-portal_image: docker build --no-cache -t openai-portal:${RELEASE_VER} -f ./build/application/openai-portal/dockerfile . +api-doc_image: + docker build --no-cache -t api-doc:${RELEASE_VER} -f ./build/application/api-doc/dockerfile . + # 镜像推送 -images_push: base-server_image_push admin-server_image_push openai-server_image_push taskset_image_push admin-portal_image_push openai-portal_image_push +images_push: base-server_image_push admin-server_image_push openai-server_image_push taskset_image_push admin-portal_image_push openai-portal_image_push api-doc_image_push image_push_init: (echo ${DOCKER_HUB_PASSWD} | docker login ${DOCKER_HUB_HOST} -u ${DOCKER_HUB_USERNAME} --password-stdin) 1>/dev/null 2>&1 @@ -290,6 +295,16 @@ ifeq (${NEED_LATEST}, TRUE) endif endif +api-doc_image_push: image_push_init + docker tag api-doc:${RELEASE_VER} ${DOCKER_HUB_HOST}/${DOCKER_HUB_PROJECT}/api-doc:${RELEASE_VER} + docker push ${DOCKER_HUB_HOST}/${DOCKER_HUB_PROJECT}/api-doc:${RELEASE_VER} + +ifneq (${RELEASE_VER}, latest) +ifeq (${NEED_LATEST}, TRUE) + docker tag api-doc:${RELEASE_VER} ${DOCKER_HUB_HOST}/${DOCKER_HUB_PROJECT}/api-doc:latest + docker push ${DOCKER_HUB_HOST}/${DOCKER_HUB_PROJECT}/api-doc:latest +endif +endif # helm chart charts: charts_build charts_push diff --git a/build/application/api-doc/dockerfile b/build/application/api-doc/dockerfile new file mode 100644 index 00000000..681f0037 --- /dev/null +++ b/build/application/api-doc/dockerfile @@ -0,0 +1,11 @@ +from swr.cn-south-1.myhuaweicloud.com/openioctopus/kratos:v2 as builder +WORKDIR /app +COPY ./ ./ + +RUN make api-doc_build + +FROM swaggerapi/swagger-ui +WORKDIR /app +COPY --from=builder /app/server/admin-server/api/v1/swagger.json /usr/share/nginx/html/admin-server.swagger.json +COPY --from=builder /app/server/openai-server/api/v1/swagger.json /usr/share/nginx/html/openai-server.swagger.json +ENV URLS "[{url:\"/admin-server.swagger.json\",name:\"admin\"},{url:\"/openai-server.swagger.json\",name:\"openai\"}]" \ No newline at end of file diff --git a/build/basic_environment/kratos-v2/dockerfile b/build/basic_environment/kratos-v2/dockerfile index 2e195539..16724db1 100644 --- a/build/basic_environment/kratos-v2/dockerfile +++ b/build/basic_environment/kratos-v2/dockerfile @@ -14,4 +14,5 @@ RUN go get -u google.golang.org/protobuf/cmd/protoc-gen-go@v1.26.0 \ && go get -u github.com/envoyproxy/protoc-gen-validate@v0.5.1 \ && go get -u github.com/go-kratos/kratos/cmd/protoc-gen-go-http/v2@46acad3 \ && go get -u github.com/go-kratos/kratos/cmd/protoc-gen-go-errors/v2@46acad3 \ - && go get -u github.com/go-kratos/kratos/v2@v2.0.0-beta3 \ No newline at end of file + && go get -u github.com/go-kratos/kratos/v2@v2.0.0-beta3 \ + && go get -u github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.6.0 \ No newline at end of file diff --git a/server/admin-server/.gitignore b/server/admin-server/.gitignore index 23978fe2..c524a58e 100644 --- a/server/admin-server/.gitignore +++ b/server/admin-server/.gitignore @@ -38,4 +38,4 @@ bin/ # pb *.pb.go *.pb.validate.go -*.swagger.json \ No newline at end of file +*swagger.json \ No newline at end of file diff --git a/server/common/utils/protoc.go b/server/common/utils/protoc.go index b2f65d4f..db2ebae0 100644 --- a/server/common/utils/protoc.go +++ b/server/common/utils/protoc.go @@ -125,6 +125,10 @@ func Generate() error { return err } + err = GenSwagger() + if err != nil { + return err + } return nil } diff --git a/server/openai-server/.gitignore b/server/openai-server/.gitignore index 23978fe2..c524a58e 100644 --- a/server/openai-server/.gitignore +++ b/server/openai-server/.gitignore @@ -38,4 +38,4 @@ bin/ # pb *.pb.go *.pb.validate.go -*.swagger.json \ No newline at end of file +*swagger.json \ No newline at end of file -- 2.34.1 From 9043eb361c57d2e1b05a8300bc90615297755ec3 Mon Sep 17 00:00:00 2001 From: linfengjun Date: Mon, 27 Sep 2021 11:48:06 +0800 Subject: [PATCH 13/32] swagger dockerfile --- build/application/api-doc/dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/build/application/api-doc/dockerfile b/build/application/api-doc/dockerfile index 681f0037..0a50e160 100644 --- a/build/application/api-doc/dockerfile +++ b/build/application/api-doc/dockerfile @@ -4,8 +4,7 @@ COPY ./ ./ RUN make api-doc_build -FROM swaggerapi/swagger-ui -WORKDIR /app +FROM swaggerapi/swagger-ui:v3.52.3 COPY --from=builder /app/server/admin-server/api/v1/swagger.json /usr/share/nginx/html/admin-server.swagger.json COPY --from=builder /app/server/openai-server/api/v1/swagger.json /usr/share/nginx/html/openai-server.swagger.json ENV URLS "[{url:\"/admin-server.swagger.json\",name:\"admin\"},{url:\"/openai-server.swagger.json\",name:\"openai\"}]" \ No newline at end of file -- 2.34.1 From be185c68ba18982724cb43013e68a02e944d6d29 Mon Sep 17 00:00:00 2001 From: linfengjun Date: Mon, 27 Sep 2021 14:39:23 +0800 Subject: [PATCH 14/32] swagger helm --- deploy/charts/octopus/templates/_helpers.tpl | 56 ++++++++++++++++ deploy/charts/octopus/templates/api-doc.yaml | 69 ++++++++++++++++++++ deploy/charts/octopus/templates/ingress.yaml | 28 ++++++++ deploy/charts/octopus/values.yaml | 12 +++- 4 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 deploy/charts/octopus/templates/api-doc.yaml diff --git a/deploy/charts/octopus/templates/_helpers.tpl b/deploy/charts/octopus/templates/_helpers.tpl index fa9e51a8..3f044edb 100644 --- a/deploy/charts/octopus/templates/_helpers.tpl +++ b/deploy/charts/octopus/templates/_helpers.tpl @@ -778,4 +778,60 @@ app.kubernetes.io/part-of: {{ include "grafana.name" . }} {{- define "prometheus.address" -}} {{- printf "http://%s.%s:%s" (include "prometheus.fullname" .) .Release.Namespace .Values.grafana.prometheus.port -}} +{{- end -}} + +{{/******************api-doc******************/}} + +{{- define "apidoc.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "apidoc.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- printf "%s-apidoc" .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "apidoc.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "apidoc.core-labels" -}} +helm.sh/chart: {{ include "apidoc.chart" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end -}} + +{{- define "apidoc.select-labels" -}} +app.kubernetes.io/name: {{ include "apidoc.name" . }} +app.kubernetes.io/instance: {{ include "apidoc.fullname" . }} +app.kubernetes.io/part-of: {{ include "apidoc.name" . }} +{{- end -}} + +{{- define "apidoc.resource-labels" -}} +octopus.pcl.ac.cn/resource: {{ .Values.common.resourceTagValuePrefix }}_{{ include "apidoc.fullname" . }}_{{ default .Chart.AppVersion .Values.apidoc.image.tag }} +{{- end -}} + + +{{- define "apidoc.labels" -}} +{{ include "apidoc.core-labels" . }} +{{ include "apidoc.select-labels" . }} +{{ include "apidoc.resource-labels" . }} +{{- end -}} + +{{- define "apidoc.port" -}} +{{- printf "8080" -}} +{{- end -}} + +{{- define "apidoc.targetPort" -}} +{{- printf "8080" -}} {{- end -}} \ No newline at end of file diff --git a/deploy/charts/octopus/templates/api-doc.yaml b/deploy/charts/octopus/templates/api-doc.yaml new file mode 100644 index 00000000..ac01a54f --- /dev/null +++ b/deploy/charts/octopus/templates/api-doc.yaml @@ -0,0 +1,69 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ template "apidoc.fullname" . }} + +--- + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "apidoc.fullname" . }} + labels: + {{ include "apidoc.labels" . | indent 4 }} +spec: + ports: + - name: http + protocol: TCP + port: {{ template "apidoc.port" . }} + targetPort: {{ template "apidoc.port" . }} + selector: + {{ include "apidoc.select-labels" . | indent 8 }} + + +--- + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "apidoc.fullname" . }} +spec: + selector: + matchLabels: + {{ include "apidoc.select-labels" . | indent 8 }} + replicas: {{ .Values.apidoc.replicas }} + template: + metadata: + labels: + {{ include "apidoc.labels" . | indent 8 }} + spec: + serviceAccountName: {{ template "apidoc.fullname" . }} + volumes: + - name: localtime + hostPath: + path: /etc/localtime + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.global.image.repository.address }}{{ .Values.global.image.repository.pathname }}/{{ .Values.apidoc.image.name }}:{{ default .Chart.AppVersion .Values.apidoc.image.tag }}" + imagePullPolicy: {{ .Values.global.image.pullPolicy }} + volumeMounts: + - name: localtime + mountPath: /etc/localtime + ports: + - name: http + containerPort: {{ template "apidoc.targetPort" . }} + protocol: TCP + resources: + {{ toYaml .Values.resources | indent 10 }} + {{- with .Values.global.nodeSelector }} + nodeSelector: + {{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{ toYaml . | indent 8 }} + {{- end }} \ No newline at end of file diff --git a/deploy/charts/octopus/templates/ingress.yaml b/deploy/charts/octopus/templates/ingress.yaml index 5fd58add..6e176adf 100644 --- a/deploy/charts/octopus/templates/ingress.yaml +++ b/deploy/charts/octopus/templates/ingress.yaml @@ -4,6 +4,7 @@ {{- $openaiserverName := include "openaiserver.fullname" . -}} {{- $adminportalName := include "adminportal.fullname" . -}} {{- $openaiportalName := include "openaiportal.fullname" . -}} +{{- $apidocName := include "apidoc.fullname" . -}} {{- $adminserverPath := .Values.ingress.adminserverPath -}} {{- $openaiserverPath := .Values.ingress.openaiserverPath -}} {{- $adminportalPath := trimSuffix "/" .Values.ingress.adminportalPath -}} @@ -12,6 +13,7 @@ {{- $minioWebPath := .Values.ingress.minioPath.web -}} {{- $minioApiPath := .Values.ingress.minioPath.api -}} {{- $loggerHttpdPath := .Values.ingress.loggerHttpdPath -}} +{{- $apidocPath := .Values.ingress.apidocPath -}} apiVersion: extensions/v1beta1 kind: Ingress metadata: @@ -136,6 +138,32 @@ spec: --- +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }}-apidoc + labels: + {{ include "octopus.labels" . | indent 4 }} + annotations: + kubernetes.io/ingress.class: "nginx" + kubernetes.io/ingress.allow-http: "true" + ingress.kubernetes.io/ssl-redirect: "false" + nginx.ingress.kubernetes.io/rewrite-target: /$1 +spec: + rules: + - http: + paths: + - backend: + serviceName: {{ $apidocName }} + servicePort: {{ template "apidoc.port" . }} + path: {{ $adminportalPath }}/(.*) + - backend: + serviceName: {{ $apidocName }} + servicePort: {{ template "apidoc.port" . }} + path: {{ $apidocPath }}/(.*) + +--- + apiVersion: v1 kind: ConfigMap metadata: diff --git a/deploy/charts/octopus/values.yaml b/deploy/charts/octopus/values.yaml index 4984ea8d..75b075fe 100644 --- a/deploy/charts/octopus/values.yaml +++ b/deploy/charts/octopus/values.yaml @@ -29,8 +29,10 @@ ingress: minioPath: web: /minio api: /oss + apidocPath: /apidoc tls: [] + pvc: minio: requests: 100Gi @@ -348,4 +350,12 @@ prometheus: targetPort: "9090" resources: {} affinity: {} - nodeSelector: {} \ No newline at end of file + nodeSelector: {} + +# apidoc +apidoc: + image: + pullPolicy: "" + address: "" + pathname: "" + name: "api-doc" \ No newline at end of file -- 2.34.1 From 23cba1d037cd388a3df53e0167f14e6689ef986c Mon Sep 17 00:00:00 2001 From: linfengjun Date: Mon, 27 Sep 2021 14:47:52 +0800 Subject: [PATCH 15/32] swagger helm --- .drone.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.drone.yml b/.drone.yml index 13a52b45..de4390c2 100644 --- a/.drone.yml +++ b/.drone.yml @@ -474,6 +474,4 @@ steps: DOCKER_HUB_PROJECT: from_secret: docker_hub_project commands: - - make api-doc_image_push need_latest=FALSE tag=${DRONE_TAG} docker_hub_project=$DOCKER_HUB_PROJECT docker_hub_host=$DOCKER_HUB_HOST docker_hub_userame=$DOCKER_HUB_USERNAME docker_hub_passwd=$DOCKER_HUB_PASSWD - ---- \ No newline at end of file + - make api-doc_image_push need_latest=FALSE tag=${DRONE_TAG} docker_hub_project=$DOCKER_HUB_PROJECT docker_hub_host=$DOCKER_HUB_HOST docker_hub_userame=$DOCKER_HUB_USERNAME docker_hub_passwd=$DOCKER_HUB_PASSWD \ No newline at end of file -- 2.34.1 From 843bcfa346b1e0fa2f77e24516f777bb9555977e Mon Sep 17 00:00:00 2001 From: Lijunmao Date: Mon, 27 Sep 2021 15:43:14 +0800 Subject: [PATCH 16/32] #53 --- .../charts/octopus/templates/eventrouter.yaml | 15 +++++++++++++++ deploy/charts/octopus/values.yaml | 19 +++++++++++-------- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/deploy/charts/octopus/templates/eventrouter.yaml b/deploy/charts/octopus/templates/eventrouter.yaml index e88e8195..0e89d99f 100644 --- a/deploy/charts/octopus/templates/eventrouter.yaml +++ b/deploy/charts/octopus/templates/eventrouter.yaml @@ -69,3 +69,18 @@ spec: - name: config-volume configMap: name: eventrouter-cm + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: kubernetes.io/arch + operator: In + values: ["amd64", "x64", "x86-64", "x86_64"] + - weight: 100 + preference: + matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: ["amd64", "x64", "x86-64", "x86_64"] diff --git a/deploy/charts/octopus/values.yaml b/deploy/charts/octopus/values.yaml index 09653c46..f3700fb7 100644 --- a/deploy/charts/octopus/values.yaml +++ b/deploy/charts/octopus/values.yaml @@ -326,16 +326,19 @@ influxdb: existingClaim: "octopus-influxdb-pvc" affinity: nodeAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - nodeSelectorTerms: - - matchExpressions: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: - key: kubernetes.io/arch operator: In - values: - - amd64 - - x64 - - x86-64 - - x86_64 + values: ["amd64", "x64", "x86-64", "x86_64"] + - weight: 100 + preference: + matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: ["amd64", "x64", "x86-64", "x86_64"] # grafana -- 2.34.1 From 3fbbd6bf25716081f7516e31361003ae40a41210 Mon Sep 17 00:00:00 2001 From: linfengjun Date: Mon, 27 Sep 2021 16:19:28 +0800 Subject: [PATCH 17/32] =?UTF-8?q?yaml=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/charts/octopus/templates/api-doc.yaml | 64 ++++++++++---------- deploy/charts/octopus/templates/ingress.yaml | 2 +- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/deploy/charts/octopus/templates/api-doc.yaml b/deploy/charts/octopus/templates/api-doc.yaml index ac01a54f..2797cb6a 100644 --- a/deploy/charts/octopus/templates/api-doc.yaml +++ b/deploy/charts/octopus/templates/api-doc.yaml @@ -10,15 +10,15 @@ kind: Service metadata: name: {{ template "apidoc.fullname" . }} labels: - {{ include "apidoc.labels" . | indent 4 }} +{{ include "apidoc.labels" . | indent 4 }} spec: ports: - - name: http - protocol: TCP - port: {{ template "apidoc.port" . }} - targetPort: {{ template "apidoc.port" . }} + - name: http + protocol: TCP + port: {{ template "apidoc.port" . }} + targetPort: {{ template "apidoc.port" . }} selector: - {{ include "apidoc.select-labels" . | indent 8 }} +{{ include "apidoc.select-labels" . | indent 8 }} --- @@ -30,40 +30,40 @@ metadata: spec: selector: matchLabels: - {{ include "apidoc.select-labels" . | indent 8 }} +{{ include "apidoc.select-labels" . | indent 8 }} replicas: {{ .Values.apidoc.replicas }} template: metadata: labels: - {{ include "apidoc.labels" . | indent 8 }} +{{ include "apidoc.labels" . | indent 8 }} spec: serviceAccountName: {{ template "apidoc.fullname" . }} volumes: - - name: localtime - hostPath: - path: /etc/localtime + - name: localtime + hostPath: + path: /etc/localtime containers: - - name: {{ .Chart.Name }} - image: "{{ .Values.global.image.repository.address }}{{ .Values.global.image.repository.pathname }}/{{ .Values.apidoc.image.name }}:{{ default .Chart.AppVersion .Values.apidoc.image.tag }}" - imagePullPolicy: {{ .Values.global.image.pullPolicy }} - volumeMounts: - - name: localtime - mountPath: /etc/localtime - ports: - - name: http - containerPort: {{ template "apidoc.targetPort" . }} - protocol: TCP - resources: - {{ toYaml .Values.resources | indent 10 }} - {{- with .Values.global.nodeSelector }} + - name: {{ .Chart.Name }} + image: "{{ .Values.global.image.repository.address }}{{ .Values.global.image.repository.pathname }}/{{ .Values.apidoc.image.name }}:{{ default .Chart.AppVersion .Values.apidoc.image.tag }}" + imagePullPolicy: {{ .Values.global.image.pullPolicy }} + volumeMounts: + - name: localtime + mountPath: /etc/localtime + ports: + - name: http + containerPort: {{ template "apidoc.targetPort" . }} + protocol: TCP + resources: +{{ toYaml .Values.resources | indent 10 }} +{{- with .Values.global.nodeSelector }} nodeSelector: - {{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.affinity }} +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} affinity: - {{ toYaml . | indent 8 }} - {{- end }} - {{- with .Values.tolerations }} +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} tolerations: - {{ toYaml . | indent 8 }} - {{- end }} \ No newline at end of file +{{ toYaml . | indent 8 }} +{{- end }} \ No newline at end of file diff --git a/deploy/charts/octopus/templates/ingress.yaml b/deploy/charts/octopus/templates/ingress.yaml index 6e176adf..0cd63c4f 100644 --- a/deploy/charts/octopus/templates/ingress.yaml +++ b/deploy/charts/octopus/templates/ingress.yaml @@ -143,7 +143,7 @@ kind: Ingress metadata: name: {{ $fullName }}-apidoc labels: - {{ include "octopus.labels" . | indent 4 }} +{{ include "octopus.labels" . | indent 4 }} annotations: kubernetes.io/ingress.class: "nginx" kubernetes.io/ingress.allow-http: "true" -- 2.34.1 From 5238758d9aa9abbfb567945cb4858780da3af030 Mon Sep 17 00:00:00 2001 From: linfengjun Date: Mon, 27 Sep 2021 17:07:37 +0800 Subject: [PATCH 18/32] =?UTF-8?q?yaml=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/charts/octopus/templates/api-doc.yaml | 3 +++ deploy/charts/octopus/templates/ingress.yaml | 4 ---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/deploy/charts/octopus/templates/api-doc.yaml b/deploy/charts/octopus/templates/api-doc.yaml index 2797cb6a..dcb285af 100644 --- a/deploy/charts/octopus/templates/api-doc.yaml +++ b/deploy/charts/octopus/templates/api-doc.yaml @@ -49,6 +49,9 @@ spec: volumeMounts: - name: localtime mountPath: /etc/localtime + env: + - name: BASE_URL + value: "{{ .Values.ingress.apidocPath }}" ports: - name: http containerPort: {{ template "apidoc.targetPort" . }} diff --git a/deploy/charts/octopus/templates/ingress.yaml b/deploy/charts/octopus/templates/ingress.yaml index 0cd63c4f..40739429 100644 --- a/deploy/charts/octopus/templates/ingress.yaml +++ b/deploy/charts/octopus/templates/ingress.yaml @@ -153,10 +153,6 @@ spec: rules: - http: paths: - - backend: - serviceName: {{ $apidocName }} - servicePort: {{ template "apidoc.port" . }} - path: {{ $adminportalPath }}/(.*) - backend: serviceName: {{ $apidocName }} servicePort: {{ template "apidoc.port" . }} -- 2.34.1 From 2e4da8db1c691f233ca41db05239b4450c21727a Mon Sep 17 00:00:00 2001 From: linfengjun Date: Mon, 27 Sep 2021 17:16:52 +0800 Subject: [PATCH 19/32] apidoc dockerfile --- build/application/api-doc/dockerfile | 3 +-- deploy/charts/octopus/templates/api-doc.yaml | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/build/application/api-doc/dockerfile b/build/application/api-doc/dockerfile index 0a50e160..edf7705d 100644 --- a/build/application/api-doc/dockerfile +++ b/build/application/api-doc/dockerfile @@ -6,5 +6,4 @@ RUN make api-doc_build FROM swaggerapi/swagger-ui:v3.52.3 COPY --from=builder /app/server/admin-server/api/v1/swagger.json /usr/share/nginx/html/admin-server.swagger.json -COPY --from=builder /app/server/openai-server/api/v1/swagger.json /usr/share/nginx/html/openai-server.swagger.json -ENV URLS "[{url:\"/admin-server.swagger.json\",name:\"admin\"},{url:\"/openai-server.swagger.json\",name:\"openai\"}]" \ No newline at end of file +COPY --from=builder /app/server/openai-server/api/v1/swagger.json /usr/share/nginx/html/openai-server.swagger.json \ No newline at end of file diff --git a/deploy/charts/octopus/templates/api-doc.yaml b/deploy/charts/octopus/templates/api-doc.yaml index dcb285af..c74fb880 100644 --- a/deploy/charts/octopus/templates/api-doc.yaml +++ b/deploy/charts/octopus/templates/api-doc.yaml @@ -50,8 +50,8 @@ spec: - name: localtime mountPath: /etc/localtime env: - - name: BASE_URL - value: "{{ .Values.ingress.apidocPath }}" + - name: URLS + value: "[{url:\"{{ .Values.ingress.apidocPath }}/admin-server.swagger.json\",name:\"admin\"},{url:\"{{ .Values.ingress.apidocPath }}/openai-server.swagger.json\",name:\"openai\"}]" ports: - name: http containerPort: {{ template "apidoc.targetPort" . }} -- 2.34.1 From 698c6bed32c2dbb0d731bbcc8245652b3f8c7699 Mon Sep 17 00:00:00 2001 From: linfengjun Date: Tue, 28 Sep 2021 09:02:04 +0800 Subject: [PATCH 20/32] =?UTF-8?q?=E4=BF=AE=E6=94=B9swagger=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=90=8D=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/application/api-doc/dockerfile | 4 ++-- deploy/charts/octopus/templates/api-doc.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build/application/api-doc/dockerfile b/build/application/api-doc/dockerfile index edf7705d..6de33371 100644 --- a/build/application/api-doc/dockerfile +++ b/build/application/api-doc/dockerfile @@ -5,5 +5,5 @@ COPY ./ ./ RUN make api-doc_build FROM swaggerapi/swagger-ui:v3.52.3 -COPY --from=builder /app/server/admin-server/api/v1/swagger.json /usr/share/nginx/html/admin-server.swagger.json -COPY --from=builder /app/server/openai-server/api/v1/swagger.json /usr/share/nginx/html/openai-server.swagger.json \ No newline at end of file +COPY --from=builder /app/server/admin-server/api/v1/swagger.json /usr/share/nginx/html/admin.swagger.json +COPY --from=builder /app/server/openai-server/api/v1/swagger.json /usr/share/nginx/html/openai.swagger.json \ No newline at end of file diff --git a/deploy/charts/octopus/templates/api-doc.yaml b/deploy/charts/octopus/templates/api-doc.yaml index c74fb880..7c8270ab 100644 --- a/deploy/charts/octopus/templates/api-doc.yaml +++ b/deploy/charts/octopus/templates/api-doc.yaml @@ -51,7 +51,7 @@ spec: mountPath: /etc/localtime env: - name: URLS - value: "[{url:\"{{ .Values.ingress.apidocPath }}/admin-server.swagger.json\",name:\"admin\"},{url:\"{{ .Values.ingress.apidocPath }}/openai-server.swagger.json\",name:\"openai\"}]" + value: "[{url:\"{{ .Values.ingress.apidocPath }}/admin.swagger.json\",name:\"admin\"},{url:\"{{ .Values.ingress.apidocPath }}/openai.swagger.json\",name:\"openai\"}]" ports: - name: http containerPort: {{ template "apidoc.targetPort" . }} -- 2.34.1 From ccfabe24720ee5e43683c28798c6ccb9cf36f8cf Mon Sep 17 00:00:00 2001 From: wenlong92 <835952234@qq.com> Date: Wed, 29 Sep 2021 16:23:41 +0800 Subject: [PATCH 21/32] WIP --- openai-portal/src/api/trainingManager.js | 8 +++ .../components/detailDialog/taskInfo.vue | 68 ++++++++++--------- 2 files changed, 43 insertions(+), 33 deletions(-) diff --git a/openai-portal/src/api/trainingManager.js b/openai-portal/src/api/trainingManager.js index 196ee2d3..c3fbb105 100644 --- a/openai-portal/src/api/trainingManager.js +++ b/openai-portal/src/api/trainingManager.js @@ -57,6 +57,14 @@ export function getTempalteDetail(params) { method: 'get' }) } +// 训任务运行信息 +export function getTempalteInfo(data) { + return request({ + url: `/v1/trainmanage/trainjobevent`, + method: 'get', + data + }) +} // 任务模板接口 export function getTemplate(params) { const conditions = [] diff --git a/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue b/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue index a989f607..9bb5b14a 100644 --- a/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue +++ b/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue @@ -5,6 +5,7 @@ -- 2.34.1 From 9e9c3076f65baf7dec33e70a7e9d663b6ea9fce8 Mon Sep 17 00:00:00 2001 From: Lijunmao Date: Mon, 11 Oct 2021 15:52:39 +0800 Subject: [PATCH 22/32] #64 --- server/base-server/internal/data/dao/train_job.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/base-server/internal/data/dao/train_job.go b/server/base-server/internal/data/dao/train_job.go index 3170171f..deb1df6f 100644 --- a/server/base-server/internal/data/dao/train_job.go +++ b/server/base-server/internal/data/dao/train_job.go @@ -368,7 +368,7 @@ func (d *trainJobDao) GetTrainJobEvents(jobEventQuery *model.JobEventQuery) ([]* objectName := fmt.Sprintf("%s-task%d-%d", jobEventQuery.Id, TaskIndex-1, ReplicaIndex-1) - countQuery := fmt.Sprintf("SELECT COUNT(%s) FROM events where object_name =~ /^%s/", keyMessage, objectName) + countQuery := fmt.Sprintf("SELECT COUNT(%s) FROM octopus..events where object_name = '%s'", keyMessage, objectName) res, err := d.influxdb.Query(countQuery) if err != nil { @@ -380,7 +380,7 @@ func (d *trainJobDao) GetTrainJobEvents(jobEventQuery *model.JobEventQuery) ([]* return events, 0, errors.Errorf(err, errors.ErroInfluxdbFindFailed) } - query := fmt.Sprintf("select %s, %s, %s from events where object_name =~ /^%s/ and kind = 'Pod' LIMIT %d OFFSET %d", keyName, keyReason, keyMessage, objectName, PageSize, (PageIndex-1)*PageSize) + query := fmt.Sprintf("select %s, %s, %s from octopus..events where object_name = '%s' and kind = 'Pod' LIMIT %d OFFSET %d", keyName, keyReason, keyMessage, objectName, PageSize, (PageIndex-1)*PageSize) res, err = d.influxdb.Query(query) if err != nil { -- 2.34.1 From f8488ef28810da6a1750c1b701c6e2d1d182c8fd Mon Sep 17 00:00:00 2001 From: Lijunmao Date: Mon, 11 Oct 2021 16:30:14 +0800 Subject: [PATCH 23/32] #64 --- server/base-server/internal/data/dao/train_job.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/base-server/internal/data/dao/train_job.go b/server/base-server/internal/data/dao/train_job.go index deb1df6f..d9cec094 100644 --- a/server/base-server/internal/data/dao/train_job.go +++ b/server/base-server/internal/data/dao/train_job.go @@ -375,6 +375,10 @@ func (d *trainJobDao) GetTrainJobEvents(jobEventQuery *model.JobEventQuery) ([]* return events, 0, errors.Errorf(err, errors.ErroInfluxdbFindFailed) } + if len(res) == 0 || len(res[0].Series) == 0 || len(res[0].Series[0].Values) == 0 || len(res[0].Series[0].Values[0]) < 1 { + return events, 0, errors.Errorf(err, errors.ErroInfluxdbFindFailed) + } + totalSize, err := res[0].Series[0].Values[0][1].(json.Number).Int64() if err != nil { return events, 0, errors.Errorf(err, errors.ErroInfluxdbFindFailed) -- 2.34.1 From 723e094d62ba6bf6dee2313e8553ac68c33fa202 Mon Sep 17 00:00:00 2001 From: wenlong92 <835952234@qq.com> Date: Tue, 12 Oct 2021 09:59:44 +0800 Subject: [PATCH 24/32] WIP --- openai-portal/src/api/trainingManager.js | 4 +- .../components/detailDialog/taskInfo.vue | 49 ++++++++++++++++++- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/openai-portal/src/api/trainingManager.js b/openai-portal/src/api/trainingManager.js index c3fbb105..60bf1ffa 100644 --- a/openai-portal/src/api/trainingManager.js +++ b/openai-portal/src/api/trainingManager.js @@ -58,11 +58,11 @@ export function getTempalteDetail(params) { }) } // 训任务运行信息 -export function getTempalteInfo(data) { +export function getTempalteInfo(params) { return request({ url: `/v1/trainmanage/trainjobevent`, method: 'get', - data + params }) } // 任务模板接口 diff --git a/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue b/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue index 9bb5b14a..922bba0b 100644 --- a/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue +++ b/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue @@ -1,6 +1,22 @@ @@ -16,11 +32,21 @@ }, data() { return { - initInfo: "" + initInfo: "", + subTaskOptions: [], + ruleForm: { + subTaskItem: "" + } } }, created() { console.log("123:",this.row) + for (let i = 0; i < this.row.config.length; i++) { + for (let j = 0; j < this.row.config[i].taskNumber; j++) { + this.subTaskOptions.push({ label: this.row.config[i].replicaStates[j].key, taskIndex: i + 1, replicaIndex: j + 1}) + } + } + // console.log("subTaskOptions:",this.subTaskOptions) // const taskInfoString = this.row.initInfo ? this.row.initInfo.replace(/\n/g, "
") : '' // const taskInfoData = JSON.parse(taskInfoString) // for (const pid in taskInfoData['podEvents']) { @@ -54,6 +80,25 @@ // obj[key] = tempTaskInfoData[key]; // }); // this.initInfo = obj + }, + methods: { + selectedSubTaskOption() { + const param = { + id: this.row.id, + pageIndex: 1, + pageSize: 10, + taskIndex: this.ruleForm.subTaskItem.taskIndex, + replicaIndex: this.ruleForm.subTaskItem.replicaIndex + } + getTempalteInfo(param).then(response => { + if (response.success) { + console.log("payload:",response.payload) + } else [ + console.log("failed:",response) + ] + }) + console.log("this.subTaskItem:",this.ruleForm.subTaskItem) + } } } -- 2.34.1 From 11943c5f4439bbb0cc3f71dbeff4c1927e26b4bb Mon Sep 17 00:00:00 2001 From: Lijunmao Date: Tue, 12 Oct 2021 11:38:41 +0800 Subject: [PATCH 25/32] #64 --- server/base-server/internal/data/dao/train_job.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/base-server/internal/data/dao/train_job.go b/server/base-server/internal/data/dao/train_job.go index d9cec094..a0ac7c1e 100644 --- a/server/base-server/internal/data/dao/train_job.go +++ b/server/base-server/internal/data/dao/train_job.go @@ -375,7 +375,7 @@ func (d *trainJobDao) GetTrainJobEvents(jobEventQuery *model.JobEventQuery) ([]* return events, 0, errors.Errorf(err, errors.ErroInfluxdbFindFailed) } - if len(res) == 0 || len(res[0].Series) == 0 || len(res[0].Series[0].Values) == 0 || len(res[0].Series[0].Values[0]) < 1 { + if len(res) == 0 || len(res[0].Series) == 0 || len(res[0].Series[0].Values) == 0 || len(res[0].Series[0].Values[0]) < 2 { return events, 0, errors.Errorf(err, errors.ErroInfluxdbFindFailed) } -- 2.34.1 From c1ff4d7059ed39b6458a09237197676760d3d009 Mon Sep 17 00:00:00 2001 From: wenlong92 <835952234@qq.com> Date: Tue, 12 Oct 2021 16:45:21 +0800 Subject: [PATCH 26/32] WIP --- .../components/detailDialog/taskInfo.vue | 173 ++++++++++-------- 1 file changed, 97 insertions(+), 76 deletions(-) diff --git a/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue b/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue index 922bba0b..6b697df3 100644 --- a/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue +++ b/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue @@ -1,27 +1,46 @@ @@ -107,4 +123,9 @@ .select { margin-left: 5px; } + + .block { + float: right; + margin: 20px; + } \ No newline at end of file -- 2.34.1 From 58feb107dbf164ddb0021e8951ee9ee240d21742 Mon Sep 17 00:00:00 2001 From: wenlong92 <835952234@qq.com> Date: Wed, 13 Oct 2021 16:13:27 +0800 Subject: [PATCH 27/32] feat:#12,#62 --- .../components/detailDialog/taskInfo.vue | 52 +++++++++++-------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue b/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue index 6b697df3..2b6f1ee8 100644 --- a/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue +++ b/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue @@ -2,26 +2,30 @@
- -
- -
-
+
@@ -59,15 +63,20 @@ subTaskInfo: "", pageIndex: 1, pageSize: 10, - total: 0 + total: 0, + showInfo: false } }, created() { - for (let i = 0; i < this.row.config.length; i++) { - for (let j = 0; j < this.row.config[i].taskNumber; j++) { - this.subTaskOptions.push({ label: this.row.config[i].replicaStates[j].key, taskIndex: i + 1, replicaIndex: j + 1}) - } - } + for (let i = 0; i < this.row.config.length; i++) { + for (let j = 0; j < this.row.config[i].taskNumber; j++) { + this.subTaskOptions.push({ + label: this.row.config[i].replicaStates[j].key, + taskIndex: i + 1, + replicaIndex: j + 1 + }) + } + } }, methods: { // 错误码 @@ -84,13 +93,14 @@ } getTempalteInfo(param).then(response => { if (response.success) { + this.showInfo = response.payload.jobEvents.length this.total = response.payload.totalSize let infoMessage = "" - response.payload.jobEvents.forEach(function (element) { + response.payload.jobEvents.forEach(function(element) { const title = element.reason const message = element.message - infoMessage += "[" + title + "]" + "
" - infoMessage += "[" + message + "]" + "

" + infoMessage += "\n" + "[" + title + "]" + infoMessage += "\n" + "[" + message + "]" + "\n" }) this.subTaskInfo = infoMessage } else { @@ -100,7 +110,7 @@ }); } }).catch(err => { - console.log("err:",err) + console.log("err:", err) this.$message({ message: "未知错误", type: 'warning' -- 2.34.1 From 11a29b18f34e15284723d9230977f72da86dd1a1 Mon Sep 17 00:00:00 2001 From: wenlong92 <835952234@qq.com> Date: Wed, 13 Oct 2021 17:26:42 +0800 Subject: [PATCH 28/32] feat:#12,#62 --- .../components/detailDialog/taskInfo.vue | 62 ++++++++++++++----- 1 file changed, 45 insertions(+), 17 deletions(-) diff --git a/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue b/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue index 2b6f1ee8..01a368f0 100644 --- a/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue +++ b/openai-portal/src/views/trainingManager/components/detailDialog/taskInfo.vue @@ -1,22 +1,36 @@