From 05cad1fb4b9ed02c96ffb49ba6004adb3daeeb97 Mon Sep 17 00:00:00 2001 From: Vitaly Zhuravlev Date: Fri, 20 May 2022 12:08:37 +0400 Subject: [PATCH 1/5] mixin: update units for disk and networking panels (#7) * Update units of network ad disk graphs https://prometheus.io/docs/prometheus/latest/querying/functions/#rate rate() calculates per-second average rate, therefore Bps units should be used for disks. In networking bandwidth throughput is usually measured in bits/s so units are changed accordingly. Signed-off-by: Vitaly Zhuravlev * Change io time units to %util When appying rate() to seconds we have 'seconds per second' or fractions of the second, so actually it actually can be from 0 to 1. Also update intervalFactor to 1 for better rates. Signed-off-by: Vitaly Zhuravlev --- docs/node-mixin/lib/prom-mixin.libsonnet | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/docs/node-mixin/lib/prom-mixin.libsonnet b/docs/node-mixin/lib/prom-mixin.libsonnet index 7e22fd9a73..6b541ac360 100644 --- a/docs/node-mixin/lib/prom-mixin.libsonnet +++ b/docs/node-mixin/lib/prom-mixin.libsonnet @@ -192,14 +192,17 @@ local table = grafana70.panel.table; .addTarget(prometheus.target( 'rate(node_disk_read_bytes_total{%(nodeExporterSelector)s, instance="$instance", %(diskDeviceSelector)s}[$__rate_interval])' % config, legendFormat='{{device}} read', + intervalFactor=1, )) .addTarget(prometheus.target( 'rate(node_disk_written_bytes_total{%(nodeExporterSelector)s, instance="$instance", %(diskDeviceSelector)s}[$__rate_interval])' % config, legendFormat='{{device}} written', + intervalFactor=1, )) .addTarget(prometheus.target( 'rate(node_disk_io_time_seconds_total{%(nodeExporterSelector)s, instance="$instance", %(diskDeviceSelector)s}[$__rate_interval])' % config, legendFormat='{{device}} io time', + intervalFactor=1, )) + { seriesOverrides: [ @@ -213,8 +216,8 @@ local table = grafana70.panel.table; }, ], yaxes: [ - self.yaxe(format='bytes'), - self.yaxe(format='s'), + self.yaxe(format='Bps'), + self.yaxe(format='percentunit'), ], }, @@ -410,29 +413,33 @@ local table = grafana70.panel.table; local networkReceived = graphPanel.new( 'Network Received', + description='Network received (bits/s)', datasource='$datasource', span=6, - format='bytes', + format='bps', min=0, fill=0, ) .addTarget(prometheus.target( - 'rate(node_network_receive_bytes_total{%(nodeExporterSelector)s, instance="$instance", device!="lo"}[$__rate_interval])' % config, + 'rate(node_network_receive_bytes_total{%(nodeExporterSelector)s, instance="$instance", device!="lo"}[$__rate_interval]) * 8' % config, legendFormat='{{device}}', + intervalFactor=1, )), local networkTransmitted = graphPanel.new( 'Network Transmitted', + description='Network transmitted (bits/s)', datasource='$datasource', span=6, - format='bytes', + format='bps', min=0, fill=0, ) .addTarget(prometheus.target( - 'rate(node_network_transmit_bytes_total{%(nodeExporterSelector)s, instance="$instance", device!="lo"}[$__rate_interval])' % config, + 'rate(node_network_transmit_bytes_total{%(nodeExporterSelector)s, instance="$instance", device!="lo"}[$__rate_interval]) * 8' % config, legendFormat='{{device}}', + intervalFactor=1, )), local cpuRow = From ef24d54230e1b896a79196512286bd800f0f0890 Mon Sep 17 00:00:00 2001 From: "Ryan J. Geyer" Date: Wed, 26 Oct 2022 14:44:01 -0700 Subject: [PATCH 2/5] Replace mistaken ) with }, resulting in parsable promql Signed-off-by: Ryan J. Geyer --- docs/node-mixin/dashboards/use.libsonnet | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/node-mixin/dashboards/use.libsonnet b/docs/node-mixin/dashboards/use.libsonnet index 1602c13480..65e96dd8dc 100644 --- a/docs/node-mixin/dashboards/use.libsonnet +++ b/docs/node-mixin/dashboards/use.libsonnet @@ -453,7 +453,7 @@ local diskSpaceUtilisation = sum ( sum without (device) ( max without (fstype, mountpoint, instance, pod) (( - node_filesystem_size_bytes{%(nodeExporterSelector)s, %(fsSelector)s, %(fsMountpointSelector)s) - node_filesystem_avail_bytes{%(nodeExporterSelector)s, %(fsSelector)s, %(fsMountpointSelector)s} + node_filesystem_size_bytes{%(nodeExporterSelector)s, %(fsSelector)s, %(fsMountpointSelector)s} - node_filesystem_avail_bytes{%(nodeExporterSelector)s, %(fsSelector)s, %(fsMountpointSelector)s} ) != 0) ) / scalar(sum(max without (fstype, mountpoint) (node_filesystem_size_bytes{%(nodeExporterSelector)s, %(fsSelector)s, %(fsMountpointSelector)s}))) From e9e74722d820c1b3de435b570421b3d5fb15ebb3 Mon Sep 17 00:00:00 2001 From: "Ryan J. Geyer" Date: Thu, 27 Oct 2022 14:00:57 -0700 Subject: [PATCH 3/5] Add some lint exclusions. Add UIDs to all dashboards. Add units and descriptions to all panels which were missing them. Modify alerts descriptions and summaries as needed for linting. Signed-off-by: Ryan J. Geyer --- docs/node-mixin/.lint | 56 +++++++++++++++++++ docs/node-mixin/alerts/alerts.libsonnet | 6 +- docs/node-mixin/dashboards.jsonnet | 2 +- .../dashboards/dashboards.libsonnet | 3 +- docs/node-mixin/dashboards/defaults.libsonnet | 8 +++ docs/node-mixin/dashboards/use.libsonnet | 9 +++ docs/node-mixin/lib/prom-mixin.libsonnet | 6 ++ 7 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 docs/node-mixin/.lint create mode 100644 docs/node-mixin/dashboards/defaults.libsonnet diff --git a/docs/node-mixin/.lint b/docs/node-mixin/.lint new file mode 100644 index 0000000000..535c75e6c4 --- /dev/null +++ b/docs/node-mixin/.lint @@ -0,0 +1,56 @@ +--- +exclusions: + template-datasource-rule: + reason: using the not yet implemented new convention for dashboards with Loki and Prometheus datasources. + panel-datasource-rule: + reason: using the not yet implemented new convention for dashboards with Loki and Prometheus datasources. + target-job-rule: + reason: Job is hardcoded by the mixin. + entries: + - dashboard: Node Exporter / USE Method / Node + - dashboard: Node Exporter / Nodes + - dashboard: Node Exporter / MacOS + - dashboard: Node Exporter / USE Method / Multi-cluster + - dashboard: Node Exporter / USE Method / Cluster + template-job-rule: + reason: Job is hardcoded by the mixin. + entries: + - dashboard: Node Exporter / USE Method / Node + - dashboard: Node Exporter / Nodes + - dashboard: Node Exporter / MacOS + - dashboard: Node Exporter / USE Method / Multi-cluster + - dashboard: Node Exporter / USE Method / Cluster + target-instance-rule: + entries: + - dashboard: Node Exporter / USE Method / Multi-cluster + reason: Instances are aggregated for all clusters + - dashboard: Node Exporter / USE Method / Cluster + reason: Instances are aggregated for the whole cluster + - dashboard: Node Exporter / USE Method / Node + reason: Dashboard only allows selecting a single instance at a time. + - dashboard: Node Exporter / Nodes + reason: Dashboard only allows selecting a single instance at a time. + - dashboard: Node Exporter / MacOS + reason: Dashboard only allows selecting a single instance at a time. + template-instance-rule: + entries: + - dashboard: Node Exporter / USE Method / Multi-cluster + reason: Instances are aggregated for all clusters + - dashboard: Node Exporter / USE Method / Cluster + reason: Instances are aggregated for the whole cluster + - dashboard: Node Exporter / Nodes + reason: Dashboard only allows selecting a single instance at a time. + - dashboard: Node Exporter / MacOS + reason: Ignoring mislabeling of instance template + - dashboard: Node Exporter / USE Method / Node + reason: Ignoring mislabeling of instance template + panel-units-rule: + entries: + - dashboard: Node Exporter / Nodes + reason: Units are indeed set for all but load average (which doesn't have a reasonable unit), but in the yaxis "format" property rather than in field config. The dashboard linter needs to be patched accordingly. + - dashboard: Node Exporter / MacOS + reason: Units are indeed set for all but load average (which doesn't have a reasonable unit), but in the yaxis "format" property rather than in field config. The dashboard linter needs to be patched accordingly. + - dashboard: Node Exporter / USE Method / Cluster + reason: Units are indeed set, but in the yaxis "format" property rather than in field config. The dashboard linter needs to be patched accordingly. + - dashboard: Node Exporter / USE Method / Node + reason: Units are indeed set, but in the yaxis "format" property rather than in field config. The dashboard linter needs to be patched accordingly. diff --git a/docs/node-mixin/alerts/alerts.libsonnet b/docs/node-mixin/alerts/alerts.libsonnet index 2382ac292d..4496573204 100644 --- a/docs/node-mixin/alerts/alerts.libsonnet +++ b/docs/node-mixin/alerts/alerts.libsonnet @@ -204,7 +204,7 @@ ||| % $._config, annotations: { summary: 'Node Exporter text file collector failed to scrape.', - description: 'Node Exporter text file collector failed to scrape.', + description: 'Node Exporter text file collector on {{ $labels.instance }} failed to scrape.', }, labels: { severity: 'warning', @@ -260,7 +260,7 @@ severity: 'critical', }, annotations: { - summary: 'RAID Array is degraded', + summary: 'RAID Array is degraded.', description: "RAID array '{{ $labels.device }}' on {{ $labels.instance }} is in degraded state due to one or more disks failures. Number of spare drives is insufficient to fix issue automatically.", }, }, @@ -273,7 +273,7 @@ severity: 'warning', }, annotations: { - summary: 'Failed device in RAID array', + summary: 'Failed device in RAID array.', description: "At least one device in RAID array on {{ $labels.instance }} failed. Array '{{ $labels.device }}' needs attention and possibly a disk swap.", }, }, diff --git a/docs/node-mixin/dashboards.jsonnet b/docs/node-mixin/dashboards.jsonnet index 9d913ed3f1..fb70fdeabe 100644 --- a/docs/node-mixin/dashboards.jsonnet +++ b/docs/node-mixin/dashboards.jsonnet @@ -1,6 +1,6 @@ local dashboards = (import 'mixin.libsonnet').grafanaDashboards; { - [name]: dashboards[name] + [name]: dashboards[name] + { uid: std.md5(name) }, for name in std.objectFields(dashboards) } diff --git a/docs/node-mixin/dashboards/dashboards.libsonnet b/docs/node-mixin/dashboards/dashboards.libsonnet index e6adbd4fa0..cb340b952a 100644 --- a/docs/node-mixin/dashboards/dashboards.libsonnet +++ b/docs/node-mixin/dashboards/dashboards.libsonnet @@ -1,2 +1,3 @@ (import 'node.libsonnet') + -(import 'use.libsonnet') +(import 'use.libsonnet') + +(import 'defaults.libsonnet') \ No newline at end of file diff --git a/docs/node-mixin/dashboards/defaults.libsonnet b/docs/node-mixin/dashboards/defaults.libsonnet new file mode 100644 index 0000000000..e9197bb0e8 --- /dev/null +++ b/docs/node-mixin/dashboards/defaults.libsonnet @@ -0,0 +1,8 @@ +{ + local grafanaDashboards = super.grafanaDashboards, + grafanaDashboards:: + { + [fname]: grafanaDashboards[fname] { uid: std.md5(fname) } + for fname in std.objectFields(grafanaDashboards) + }, +} diff --git a/docs/node-mixin/dashboards/use.libsonnet b/docs/node-mixin/dashboards/use.libsonnet index 1602c13480..9dc1465b28 100644 --- a/docs/node-mixin/dashboards/use.libsonnet +++ b/docs/node-mixin/dashboards/use.libsonnet @@ -25,6 +25,7 @@ local datasourceTemplate = { local CPUUtilisation = graphPanel.new( 'CPU Utilisation', + description='Total CPU utilisation percent.', datasource='$datasource', span=6, format='percentunit', @@ -38,6 +39,7 @@ local CPUSaturation = // average relates to the "CPU saturation" in the title. graphPanel.new( 'CPU Saturation (Load1 per CPU)', + description='System load average over the last minute. A measurement of how many processes are waiting for CPU cycles. The maximum number is the number of CPU cores for the node.', datasource='$datasource', span=6, format='percentunit', @@ -49,6 +51,7 @@ local CPUSaturation = local memoryUtilisation = graphPanel.new( 'Memory Utilisation', + description='Total memory utilisation in bytes.', datasource='$datasource', span=6, format='percentunit', @@ -60,6 +63,7 @@ local memoryUtilisation = local memorySaturation = graphPanel.new( 'Memory Saturation (Major Page Faults)', + description='Rate of major memory page faults.', datasource='$datasource', span=6, format='rds', @@ -71,6 +75,7 @@ local memorySaturation = local networkUtilisation = graphPanel.new( 'Network Utilisation (Bytes Receive/Transmit)', + description='Network Utilisation (Bytes Receive/Transmit)', datasource='$datasource', span=6, format='Bps', @@ -85,6 +90,7 @@ local networkUtilisation = local networkSaturation = graphPanel.new( 'Network Saturation (Drops Receive/Transmit)', + description='Network Saturation (Drops Receive/Transmit)', datasource='$datasource', span=6, format='Bps', @@ -99,6 +105,7 @@ local networkSaturation = local diskIOUtilisation = graphPanel.new( 'Disk IO Utilisation', + description='Disk total IO seconds.', datasource='$datasource', span=6, format='percentunit', @@ -110,6 +117,7 @@ local diskIOUtilisation = local diskIOSaturation = graphPanel.new( 'Disk IO Saturation', + description='Disk saturation (weighted seconds spent, 1 second rate)', datasource='$datasource', span=6, format='percentunit', @@ -121,6 +129,7 @@ local diskIOSaturation = local diskSpaceUtilisation = graphPanel.new( 'Disk Space Utilisation', + description='Total disk utilisation percent', datasource='$datasource', span=12, format='percentunit', diff --git a/docs/node-mixin/lib/prom-mixin.libsonnet b/docs/node-mixin/lib/prom-mixin.libsonnet index 6c4d990481..d8e4d9ff07 100644 --- a/docs/node-mixin/lib/prom-mixin.libsonnet +++ b/docs/node-mixin/lib/prom-mixin.libsonnet @@ -47,6 +47,7 @@ local table = grafana70.panel.table; local idleCPU = graphPanel.new( 'CPU Usage', + description='Total CPU utilisation percent.', datasource='$datasource', span=6, format='percentunit', @@ -69,6 +70,7 @@ local table = grafana70.panel.table; local systemLoad = graphPanel.new( 'Load Average', + description='System load average over the previous 1, 5, and 15 minute ranges. A measurement of how many processes are waiting for CPU cycles. The maximum number is the number of CPU cores for the node.', datasource='$datasource', span=6, format='short', @@ -83,6 +85,7 @@ local table = grafana70.panel.table; local memoryGraphPanelPrototype = graphPanel.new( 'Memory Usage', + description='Memory usage by category, measured in bytes.', datasource='$datasource', span=9, format='bytes', @@ -137,6 +140,7 @@ local table = grafana70.panel.table; local memoryGaugePanelPrototype = gaugePanel.new( title='Memory Usage', + description='Total memory utilisation by category, in bytes.', datasource='$datasource', ) .addThresholdStep('rgba(50, 172, 45, 0.97)') @@ -183,6 +187,7 @@ local table = grafana70.panel.table; local diskIO = graphPanel.new( 'Disk I/O', + description='Disk read/writes in bytes, and total IO seconds.', datasource='$datasource', span=6, min=0, @@ -224,6 +229,7 @@ local table = grafana70.panel.table; local diskSpaceUsage = table.new( title='Disk Space Usage', + description='Disk utilisation in percent, by mountpoint. Some duplication can occur if the same filesystem is mounted in multiple locations.', datasource='$datasource', ) .setFieldConfig(unit='decbytes') From af1d44b47828847ac78b0538f124c3aee2bce2d8 Mon Sep 17 00:00:00 2001 From: "Ryan J. Geyer" Date: Thu, 27 Oct 2022 14:17:36 -0700 Subject: [PATCH 4/5] Add multi-cluster dashboard lint exclusions --- docs/node-mixin/.lint | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/node-mixin/.lint b/docs/node-mixin/.lint index 535c75e6c4..c95289c4dc 100644 --- a/docs/node-mixin/.lint +++ b/docs/node-mixin/.lint @@ -52,5 +52,7 @@ exclusions: reason: Units are indeed set for all but load average (which doesn't have a reasonable unit), but in the yaxis "format" property rather than in field config. The dashboard linter needs to be patched accordingly. - dashboard: Node Exporter / USE Method / Cluster reason: Units are indeed set, but in the yaxis "format" property rather than in field config. The dashboard linter needs to be patched accordingly. + - dashboard: Node Exporter / USE Method / Multi-cluster + reason: Units are indeed set, but in the yaxis "format" property rather than in field config. The dashboard linter needs to be patched accordingly. - dashboard: Node Exporter / USE Method / Node reason: Units are indeed set, but in the yaxis "format" property rather than in field config. The dashboard linter needs to be patched accordingly. From 2d014dd17f6c4d7fbef696fe0a9035598fb1bbff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Jan 2023 01:08:40 +0000 Subject: [PATCH 5/5] build(deps): bump github.com/mdlayher/netlink from 1.6.2 to 1.7.1 Bumps [github.com/mdlayher/netlink](https://github.com/mdlayher/netlink) from 1.6.2 to 1.7.1. - [Release notes](https://github.com/mdlayher/netlink/releases) - [Changelog](https://github.com/mdlayher/netlink/blob/main/CHANGELOG.md) - [Commits](https://github.com/mdlayher/netlink/compare/v1.6.2...v1.7.1) --- updated-dependencies: - dependency-name: github.com/mdlayher/netlink dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 10 +++++----- go.sum | 28 ++++++++++++++++++---------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index a98d3de2d4..7bd00dd312 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/jsimonetti/rtnetlink v1.2.2 github.com/lufia/iostat v1.2.1 github.com/mattn/go-xmlrpc v0.0.3 - github.com/mdlayher/netlink v1.6.2 + github.com/mdlayher/netlink v1.7.1 github.com/mdlayher/wifi v0.0.0-20220320220353-954ff73a19a5 github.com/opencontainers/selinux v1.10.2 github.com/prometheus/client_golang v1.13.0 @@ -26,7 +26,7 @@ require ( github.com/prometheus/procfs v0.8.0 github.com/safchain/ethtool v0.2.0 github.com/soundcloud/go-runit v0.0.0-20150630195641-06ad41a06c4a - golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 + golang.org/x/sys v0.2.0 gopkg.in/alecthomas/kingpin.v2 v2.2.6 ) @@ -43,16 +43,16 @@ require ( github.com/jpillora/backoff v1.0.0 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect github.com/mdlayher/genetlink v1.2.0 // indirect - github.com/mdlayher/socket v0.2.3 // indirect + github.com/mdlayher/socket v0.4.0 // indirect github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect github.com/siebenmann/go-kstat v0.0.0-20210513183136-173c9b0a9973 // indirect go.uber.org/atomic v1.7.0 // indirect go.uber.org/multierr v1.6.0 // indirect golang.org/x/crypto v0.0.0-20221012134737-56aed061732a // indirect - golang.org/x/net v0.0.0-20220923203811-8be639271d50 // indirect + golang.org/x/net v0.2.0 // indirect golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/text v0.3.7 // indirect + golang.org/x/text v0.4.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index f20b226111..ebe4fcdc80 100644 --- a/go.sum +++ b/go.sum @@ -265,12 +265,12 @@ github.com/mdlayher/genetlink v1.2.0/go.mod h1:ra5LDov2KrUCZJiAtEvXXZBxGMInICMXI github.com/mdlayher/netlink v0.0.0-20190409211403-11939a169225/go.mod h1:eQB3mZE4aiYnlUsyGGCOpPETfdQq4Jhsgf1fk3cwQaA= github.com/mdlayher/netlink v0.0.0-20190828143259-340058475d09/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M= github.com/mdlayher/netlink v1.6.0/go.mod h1:0o3PlBmGst1xve7wQ7j/hwpNaFaH4qCRyWCdcZk8/vA= -github.com/mdlayher/netlink v1.6.2 h1:D2zGSkvYsJ6NreeED3JiVTu1lj2sIYATqSaZlhPzUgQ= -github.com/mdlayher/netlink v1.6.2/go.mod h1:O1HXX2sIWSMJ3Qn1BYZk1yZM+7iMki/uYGGiwGyq/iU= +github.com/mdlayher/netlink v1.7.1 h1:FdUaT/e33HjEXagwELR8R3/KL1Fq5x3G5jgHLp/BTmg= +github.com/mdlayher/netlink v1.7.1/go.mod h1:nKO5CSjE/DJjVhk/TNp6vCE1ktVxEA8VEh8drhZzxsQ= github.com/mdlayher/socket v0.1.1/go.mod h1:mYV5YIZAfHh4dzDVzI8x8tWLWCliuX8Mon5Awbj+qDs= github.com/mdlayher/socket v0.2.2/go.mod h1:IcNFWYJJuSGgnfKie27UfpEDWytPDqy+TrDd9I5hUKQ= -github.com/mdlayher/socket v0.2.3 h1:XZA2X2TjdOwNoNPVPclRCURoX/hokBY8nkTmRZFEheM= -github.com/mdlayher/socket v0.2.3/go.mod h1:bz12/FozYNH/VbvC3q7TRIK/Y6dH1kCKsXaUeXi/FmY= +github.com/mdlayher/socket v0.4.0 h1:280wsy40IC9M9q1uPGcLBwXpcTQDtoGwVt+BNoITxIw= +github.com/mdlayher/socket v0.4.0/go.mod h1:xxFqz5GRCUN3UEOm9CZqEJsAbe1C8OwSK46NlmWuVoc= github.com/mdlayher/wifi v0.0.0-20220320220353-954ff73a19a5 h1:MF42w18blaPLP7ulkLDBRbpAolaMqCSCKp59lU/cCzw= github.com/mdlayher/wifi v0.0.0-20220320220353-954ff73a19a5/go.mod h1:IqdtNfemiXr50M8tnxLWSFdZKZ9vcI1Mgt0oTrCIS7A= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -346,6 +346,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -364,6 +365,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20221012134737-56aed061732a h1:NmSIgad6KjE6VvHciPZuNRTKxGhlPfD6OA87W/PLkqg= golang.org/x/crypto v0.0.0-20221012134737-56aed061732a/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -402,6 +404,7 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -450,9 +453,10 @@ golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20220923203811-8be639271d50 h1:vKyz8L3zkd+xrMeIaBsQ/MNVPVFSffdaU3ZyYlBGFnI= -golang.org/x/net v0.0.0-20220923203811-8be639271d50/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= 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-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -487,7 +491,7 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220923202941-7f9b1623fab7/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -559,7 +563,6 @@ golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220307203707-22a9840ba4d7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -568,10 +571,13 @@ golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/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= @@ -580,8 +586,9 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 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= @@ -636,6 +643,7 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=