Skip to content

Commit

Permalink
Merge pull request #2 from bizflycloud/add-gpu-exporter
Browse files Browse the repository at this point in the history
add gpu collector
  • Loading branch information
botranvan authored Jan 26, 2021
2 parents c72c8ca + 842a2ec commit 26f2c28
Show file tree
Hide file tree
Showing 3 changed files with 261 additions and 1 deletion.
242 changes: 242 additions & 0 deletions collector/gpu_common.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,242 @@
// This file is part of bizfly-agent
//
// Copyright (C) 2020 BizFly Cloud
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>

// +build !nogpu

package collector

import (
"strconv"
"time"

"github.com/go-kit/kit/log"
"github.com/go-kit/kit/log/level"
"github.com/prometheus/client_golang/prometheus"

"github.com/mindprince/gonvml"
)

var (
averageDuration = 10 * time.Second
)

type gpuCollector struct {
gpuMinorNumber *prometheus.Desc
gpuName *prometheus.Desc
gpuUUID *prometheus.Desc
gpuTemperature *prometheus.Desc
gpuPowerUsage *prometheus.Desc
gpuFanSpeed *prometheus.Desc
gpuMemoryTotal *prometheus.Desc
gpuMemoryUsed *prometheus.Desc
gpuUtilizationMemory *prometheus.Desc
gpuUtilizationGPU *prometheus.Desc
gpuUtilizationGPUAverage *prometheus.Desc
logger log.Logger
}

type gpuDevice struct {
Index string
MinorNumber string
Name string
UUID string
Temperature float64
PowerUsage float64
FanSpeed float64
MemoryTotal float64
MemoryUsed float64
UtilizationMemory float64
UtilizationGPU float64
UtilizationGPUAverage float64
}

type gpuMetrics struct {
Version string
Devices []gpuDevice
}

func init() {
registerCollector("gpu", defaultEnabled, NewGPUCollector)
}

// NewGPUCollector returns a new Collector exposing CPU stats.
func NewGPUCollector(logger log.Logger) (Collector, error) {
subsystem := "gpu"
return &gpuCollector{
gpuTemperature: prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "Temperature"),
"Temperature of GPU device in system",
[]string{"minornumber", "name", "uuid", "system_driver_version"}, nil,
),
gpuPowerUsage: prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "PowerUsage"),
"Power Usage of GPU device in system",
[]string{"minornumber", "name", "uuid", "system_driver_version"}, nil,
),
gpuFanSpeed: prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "FanSpeed"),
"Fan Speed of GPU device in system",
[]string{"minornumber", "name", "uuid", "system_driver_version"}, nil,
),
gpuMemoryTotal: prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "MemoryTotal_Bytes"),
"Memory Total of GPU device in system",
[]string{"minornumber", "name", "uuid", "system_driver_version"}, nil,
),
gpuMemoryUsed: prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "MemoryUsed_Bytes"),
"Memory Used of GPU device in system",
[]string{"minornumber", "name", "uuid", "system_driver_version"}, nil,
),
gpuUtilizationMemory: prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "UtilizationMemory"),
"Utilization Memory of GPU device in system",
[]string{"minornumber", "name", "uuid", "system_driver_version"}, nil,
),
gpuUtilizationGPU: prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "UtilizationGPU"),
"Utilization of GPU device in system",
[]string{"minornumber", "name", "uuid", "system_driver_version"}, nil,
),
gpuUtilizationGPUAverage: prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "UtilizationGPUAverage"),
"Utilization Average of GPU device in system",
[]string{"minornumber", "name", "uuid", "system_driver_version"}, nil,
),
logger: logger,
}, nil
}

func (g *gpuCollector) Update(ch chan<- prometheus.Metric) error {
gpu, err := collectMetricDevice()
if err != nil {
level.Debug(g.logger).Log("msg", "gpu information is unavailable to collect")
return nil
}

for _, metrics := range gpu.Devices {
ch <- prometheus.MustNewConstMetric(
g.gpuTemperature, prometheus.GaugeValue, metrics.Temperature, metrics.MinorNumber, metrics.Name, metrics.UUID, gpu.Version)
ch <- prometheus.MustNewConstMetric(
g.gpuPowerUsage, prometheus.GaugeValue, metrics.PowerUsage, metrics.MinorNumber, metrics.Name, metrics.UUID, gpu.Version)
ch <- prometheus.MustNewConstMetric(
g.gpuFanSpeed, prometheus.GaugeValue, metrics.FanSpeed, metrics.MinorNumber, metrics.Name, metrics.UUID, gpu.Version)
ch <- prometheus.MustNewConstMetric(
g.gpuMemoryTotal, prometheus.CounterValue, metrics.MemoryTotal, metrics.MinorNumber, metrics.Name, metrics.UUID, gpu.Version)
ch <- prometheus.MustNewConstMetric(
g.gpuMemoryUsed, prometheus.GaugeValue, metrics.MemoryUsed, metrics.MinorNumber, metrics.Name, metrics.UUID, gpu.Version)
ch <- prometheus.MustNewConstMetric(
g.gpuUtilizationMemory, prometheus.GaugeValue, metrics.UtilizationMemory, metrics.MinorNumber, metrics.Name, metrics.UUID, gpu.Version)
ch <- prometheus.MustNewConstMetric(
g.gpuUtilizationGPU, prometheus.GaugeValue, metrics.UtilizationGPU, metrics.MinorNumber, metrics.Name, metrics.UUID, gpu.Version)
ch <- prometheus.MustNewConstMetric(
g.gpuUtilizationGPUAverage, prometheus.GaugeValue, metrics.UtilizationGPUAverage, metrics.MinorNumber, metrics.Name, metrics.UUID, gpu.Version)
}

return nil
}

func collectMetricDevice() (*gpuMetrics, error) {
if err := gonvml.Initialize(); err != nil {
return nil, err
}
defer gonvml.Shutdown()

version, err := gonvml.SystemDriverVersion()
if err != nil {
return nil, err
}

metrics := &gpuMetrics{
Version: version,
}

numDevices, err := gonvml.DeviceCount()
if err != nil {
return nil, err
}

for index := 0; index < int(numDevices); index++ {
device, err := gonvml.DeviceHandleByIndex(uint(index))
if err != nil {
return nil, err
}

uuid, err := device.UUID()
if err != nil {
return nil, err
}

name, err := device.Name()
if err != nil {
return nil, err
}

minorNumber, err := device.MinorNumber()
if err != nil {
return nil, err
}

temperature, err := device.Temperature()
if err != nil {
return nil, err
}

powerUsage, err := device.PowerUsage()
if err != nil {
return nil, err
}

fanSpeed, err := device.FanSpeed()
if err != nil {
return nil, err
}

memoryTotal, memoryUsed, err := device.MemoryInfo()
if err != nil {
return nil, err
}

utilizationGPU, utilizationMemory, err := device.UtilizationRates()
if err != nil {
return nil, err
}

utilizationGPUAverage, err := device.AverageGPUUtilization(averageDuration)
if err != nil {
return nil, err
}

metrics.Devices = append(metrics.Devices,
gpuDevice{
Index: strconv.Itoa(index),
MinorNumber: strconv.Itoa(int(minorNumber)),
Name: name,
UUID: uuid,
Temperature: float64(temperature),
PowerUsage: float64(powerUsage),
FanSpeed: float64(fanSpeed),
MemoryTotal: float64(memoryTotal),
MemoryUsed: float64(memoryUsed),
UtilizationMemory: float64(utilizationMemory),
UtilizationGPU: float64(utilizationGPU),
UtilizationGPUAverage: float64(utilizationGPUAverage),
})
}

return metrics, nil
}
4 changes: 3 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module github.com/prometheus/node_exporter
module github.com/bizflycloud/node_exporter

require (
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
Expand All @@ -14,10 +14,12 @@ require (
github.com/mattn/go-xmlrpc v0.0.3
github.com/mdlayher/genetlink v1.0.0 // indirect
github.com/mdlayher/wifi v0.0.0-20200527114002-84f0b9457fdd
github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989
github.com/prometheus/client_golang v1.7.1
github.com/prometheus/client_model v0.2.0
github.com/prometheus/common v0.15.0
github.com/prometheus/exporter-toolkit v0.5.0
github.com/prometheus/node_exporter v1.0.1
github.com/prometheus/procfs v0.2.0
github.com/shirou/gopsutil v3.20.10+incompatible
github.com/siebenmann/go-kstat v0.0.0-20200303194639-4e8294f9e9d5
Expand Down
16 changes: 16 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5m
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/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/ema/qdisc v0.0.0-20190904071900-b82c76788043/go.mod h1:ix4kG2zvdUd8kEKSW0ZTr1XLks0epFpI4j745DXxlNE=
github.com/ema/qdisc v0.0.0-20200603082823-62d0308e3e00 h1:0GHzegkDz/zSrt+Zph1OueNImPdUxoToypnkhhRYTjI=
github.com/ema/qdisc v0.0.0-20200603082823-62d0308e3e00/go.mod h1:ix4kG2zvdUd8kEKSW0ZTr1XLks0epFpI4j745DXxlNE=
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
Expand Down Expand Up @@ -109,6 +110,7 @@ github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:x
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
Expand Down Expand Up @@ -175,6 +177,7 @@ github.com/jsimonetti/rtnetlink v0.0.0-20201125080424-8bebea019a6c/go.mod h1:cR7
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/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
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=
Expand Down Expand Up @@ -215,9 +218,12 @@ github.com/mdlayher/netlink v1.1.0 h1:mpdLgm+brq10nI9zM1BpX1kpDbh3NLl3RSnVq6ZSkf
github.com/mdlayher/netlink v1.1.0/go.mod h1:H4WCitaheIsdF9yOYu8CFmCgQthAPIWZmcKp9uZHgmY=
github.com/mdlayher/netlink v1.1.1 h1:VqG+Voq9V4uZ+04vjIrcSCWDpf91B1xxbP4QBUmUJE8=
github.com/mdlayher/netlink v1.1.1/go.mod h1:WTYpFb/WTvlRJAyKhZL5/uy69TDDpHHu2VZmb2XgV7o=
github.com/mdlayher/wifi v0.0.0-20190303161829-b1436901ddee/go.mod h1:Evt/EIne46u9PtQbeTx2NTcqURpr5K4SvKtGmBuDPN8=
github.com/mdlayher/wifi v0.0.0-20200527114002-84f0b9457fdd h1:50p1vPNK43pzCVX10+5MmiOerbBzC1vR6+sLB3FZewE=
github.com/mdlayher/wifi v0.0.0-20200527114002-84f0b9457fdd/go.mod h1:Evt/EIne46u9PtQbeTx2NTcqURpr5K4SvKtGmBuDPN8=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989 h1:PS1dLCGtD8bb9RPKJrc8bS7qHL6JnW1CZvwzH9dPoUs=
github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY=
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-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
Expand Down Expand Up @@ -276,6 +282,7 @@ github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod
github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
github.com/prometheus/client_golang v1.6.0/go.mod h1:ZLOG9ck3JLRdB5MgO8f+lLTe83AXG6ro35rLTxvnIl4=
github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8=
Expand All @@ -292,17 +299,21 @@ github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY=
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
github.com/prometheus/common v0.15.0 h1:4fgOnadei3EZvgRwxJ7RMpG1k1pOZth5Pc13tyspaKM=
github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
github.com/prometheus/exporter-toolkit v0.5.0 h1:GwrxhCviqOl8Mm0vKqkh7Xy54m+FPlHEJacFs48M3gY=
github.com/prometheus/exporter-toolkit v0.5.0/go.mod h1:OCkM4805mmisBhLmVFw858QYi3v0wKdY6/UxrT0pZVg=
github.com/prometheus/node_exporter v1.0.1 h1:xTBtauxuNCMhuF4FKiNo2wDCuCAWgS3PoTlVbXLzNO0=
github.com/prometheus/node_exporter v1.0.1/go.mod h1:IC23eAmBHxDOtCRUgP9uqJewluDPwjStnbvWJEYtisQ=
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 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4=
Expand Down Expand Up @@ -374,6 +385,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9 h1:sYNJzB4J8toYPQTM6pAkcmBRgw9SnQKP9oXCHfgy604=
golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
Expand Down Expand Up @@ -414,6 +426,7 @@ golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/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-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201010224723-4f7140c49acb h1:mUVeFHoDKis5nxCAzoAi7E8Ghb86EXh/RK6wtvJIqRY=
Expand Down Expand Up @@ -459,6 +472,8 @@ golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/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 h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo=
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
Expand Down Expand Up @@ -521,6 +536,7 @@ google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
Expand Down

0 comments on commit 26f2c28

Please sign in to comment.