Skip to content

Commit

Permalink
feat: implement config loading for bifrost
Browse files Browse the repository at this point in the history
Signed-off-by: Christian Stewart <[email protected]>
  • Loading branch information
paralin committed Aug 20, 2019
1 parent b44f5fa commit e129d50
Show file tree
Hide file tree
Showing 5 changed files with 139 additions and 23 deletions.
17 changes: 17 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch Daemon",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceRoot}/cmd/bifrost",
"env": {},
"args": ["daemon", "--udp-listen", ":5112"]
}
]
}
14 changes: 6 additions & 8 deletions cli/client_dial.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package cli
import (
"os"

"github.com/aperturerobotics/bifrost/stream/grpc"
"github.com/aperturerobotics/bifrost/stream/grpc/rpc"
stream_grpc "github.com/aperturerobotics/bifrost/stream/grpc"
stream_grpc_rpc "github.com/aperturerobotics/bifrost/stream/grpc/rpc"
"github.com/aperturerobotics/bifrost/util/rwc"
"github.com/urfave/cli"
)
Expand All @@ -17,27 +17,25 @@ func (a *ClientArgs) RunDial(*cli.Context) error {
return err
}

client, err := c.AcceptStream(ctx)
client, err := c.DialStream(ctx)
if err != nil {
return err
}

if len(a.RemotePeerIdsCsv) != 0 {
a.AcceptConf.RemotePeerIds = a.ParseRemotePeerIdsCsv()
}
err = client.Send(&stream_grpc.AcceptStreamRequest{
Config: &a.AcceptConf,
err = client.Send(&stream_grpc.DialStreamRequest{
Config: &a.DialConf,
})
if err != nil {
return err
}

drpc := stream_grpc.NewAcceptStreamClientRPC(client)
drpc := stream_grpc.NewDialStreamClientRPC(client)
return stream_grpc_rpc.AttachRPCToStream(
drpc,
rwc.NewReadWriteCloser(os.Stdin, os.Stdout),
nil,
)

return nil
}
95 changes: 83 additions & 12 deletions cmd/bifrost/cmd_daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,19 @@ import (
api_controller "github.com/aperturerobotics/bifrost/daemon/api/controller"
egctr "github.com/aperturerobotics/bifrost/entitygraph"
"github.com/aperturerobotics/bifrost/keypem"
"github.com/aperturerobotics/bifrost/stream/forwarding"
"github.com/aperturerobotics/bifrost/stream/grpc/accept"
"github.com/aperturerobotics/bifrost/stream/listening"
stream_forwarding "github.com/aperturerobotics/bifrost/stream/forwarding"
stream_grpc_accept "github.com/aperturerobotics/bifrost/stream/grpc/accept"
stream_listening "github.com/aperturerobotics/bifrost/stream/listening"
xbtpt "github.com/aperturerobotics/bifrost/transport/xbee"
"github.com/aperturerobotics/controllerbus/bus"
configset "github.com/aperturerobotics/controllerbus/controller/configset"
configset_controller "github.com/aperturerobotics/controllerbus/controller/configset/controller"
configset_json "github.com/aperturerobotics/controllerbus/controller/configset/json"
"github.com/aperturerobotics/controllerbus/controller/resolver"
"github.com/aperturerobotics/controllerbus/directive"
egc "github.com/aperturerobotics/entitygraph/controller"
"github.com/aperturerobotics/entitygraph/logger"
"github.com/libp2p/go-libp2p-crypto"
entitygraph_logger "github.com/aperturerobotics/entitygraph/logger"
crypto "github.com/libp2p/go-libp2p-crypto"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
Expand All @@ -36,6 +39,8 @@ import _ "net/http/pprof"
var daemonFlags struct {
bcli.DaemonArgs

WriteConfig bool
ConfigPath string
PeerPrivPath string
APIListen string
ProfListen string
Expand All @@ -50,11 +55,24 @@ func init() {
Action: runDaemon,
Flags: append(
(&daemonFlags.DaemonArgs).BuildFlags(),
cli.StringFlag{
Name: "config, c",
Usage: "path to configuration yaml file",
EnvVar: "BIFROST_CONFIG",
Value: "bifrost_daemon.yaml",
Destination: &daemonFlags.ConfigPath,
},
cli.BoolFlag{
Name: "write-config",
Usage: "write the daemon config file on startup",
EnvVar: "BIFROST_WRITE_CONFIG",
Destination: &daemonFlags.WriteConfig,
},
cli.StringFlag{
Name: "node-priv",
Usage: "path to node private key, will be generated if doesn't exist",
EnvVar: "BIFROST_NODE_PRIV",
Value: "daemon_node_priv.pem",
Value: "bifrost_daemon.pem",
Destination: &daemonFlags.PeerPrivPath,
},
cli.StringFlag{
Expand Down Expand Up @@ -160,6 +178,35 @@ func runDaemon(c *cli.Context) error {
return errors.Wrap(err, "start entitygraph logger")
}

// Construct config set.
confSet := configset.ConfigSet{}

// Load config file
configLe := le.WithField("config", daemonFlags.ConfigPath)
if confPath := daemonFlags.ConfigPath; confPath != "" {
confDat, err := ioutil.ReadFile(confPath)
if err != nil {
if os.IsNotExist(err) {
if daemonFlags.WriteConfig {
configLe.Info("cannot find config but write-config is set, continuing")
} else {
return errors.Wrapf(
err,
"cannot find config at %s",
daemonFlags.ConfigPath,
)
}
} else {
return errors.Wrap(err, "load config")
}
}

err = configset_json.UnmarshalYAML(ctx, b, confDat, confSet, true)
if err != nil {
return errors.Wrap(err, "unmarshal config yaml")
}
}

// Daemon API
if daemonFlags.APIListen != "" {
_, apiRef, err := b.AddDirective(
Expand All @@ -176,22 +223,46 @@ func runDaemon(c *cli.Context) error {
defer apiRef.Release()
}

// ConfigSet controller
_, csRef, err := b.AddDirective(
resolver.NewLoadControllerWithConfig(&configset_controller.Config{}),
nil,
)
if err != nil {
return errors.Wrap(err, "construct configset controller")
}
defer csRef.Release()

// TODO: Load these from CLI/yaml configuration.
// For now, hardcode it.
confs, err := daemonFlags.BuildControllerConfigs()
if err != nil {
return err
}

for id, conf := range confs {
_, confRef, err := b.AddDirective(
resolver.NewLoadControllerWithConfig(conf),
nil,
)
confSet[id] = configset.NewControllerConfig(1, conf)
}

if daemonFlags.ConfigPath != "" && daemonFlags.WriteConfig {
confDat, err := configset_json.MarshalYAML(confSet)
if err != nil {
return errors.Wrap(err, id+" controller")
return errors.Wrap(err, "marshal config")
}
defer confRef.Release()
err = ioutil.WriteFile(daemonFlags.ConfigPath, confDat, 0644)
if err != nil {
return errors.Wrap(err, "write config file")
}
}

_, bdbRef, err := b.AddDirective(
configset.NewApplyConfigSet(confSet),
nil,
)
if err != nil {
return err
}
defer bdbRef.Release()

if daemonFlags.ProfListen != "" {
runtime.SetBlockProfileRate(1)
Expand Down
6 changes: 3 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ replace github.com/multiformats/go-multihash => github.com/paralin/go-multihash
replace github.com/libp2p/go-libp2p-crypto => github.com/paralin/go-libp2p-crypto v0.0.0-20181130162722-b150863d61f7

require (
github.com/aperturerobotics/controllerbus v0.0.0-20190412141224-a86f75f58cec
github.com/aperturerobotics/controllerbus v0.0.0-20190820025710-22efcef818fb
github.com/aperturerobotics/entitygraph v0.0.0-20190314052401-c4dff866fe8f
github.com/aperturerobotics/timestamp v0.2.2-0.20190226083629-0175fc7d961e
github.com/blang/semver v3.5.1+incompatible
Expand Down Expand Up @@ -33,7 +33,7 @@ require (
github.com/pauleyj/gobee v0.0.0-20190212035730-6270c53072a4
github.com/pierrec/lz4 v2.0.5+incompatible
github.com/pkg/errors v0.8.2-0.20190227000051-27936f6d90f9
github.com/sirupsen/logrus v1.4.0
github.com/sirupsen/logrus v1.4.1
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 // indirect
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07
github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 // indirect
Expand All @@ -42,5 +42,5 @@ require (
github.com/urfave/cli v1.20.1-0.20190203184040-693af58b4d51
github.com/xtaci/smux v1.1.1
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
google.golang.org/grpc v1.19.0
google.golang.org/grpc v1.23.0
)
30 changes: 30 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ github.com/aperturerobotics/controllerbus v0.0.0-20190314041023-9288fa0e12c9 h1:
github.com/aperturerobotics/controllerbus v0.0.0-20190314041023-9288fa0e12c9/go.mod h1:lWgkdt/EVFeV1N7nNA895276svmon1Wj7CR95FBeif0=
github.com/aperturerobotics/controllerbus v0.0.0-20190412141224-a86f75f58cec h1:cY50NpUURx3euFUezKWbJ1u6Ac+9kXeSlSOmW7PRbjM=
github.com/aperturerobotics/controllerbus v0.0.0-20190412141224-a86f75f58cec/go.mod h1:lWgkdt/EVFeV1N7nNA895276svmon1Wj7CR95FBeif0=
github.com/aperturerobotics/controllerbus v0.0.0-20190820015919-244c78093e70 h1:gjgiY+Q2ijec4c2jSfRlo+Gvt1UkYw8qM/Y64GCgRDo=
github.com/aperturerobotics/controllerbus v0.0.0-20190820015919-244c78093e70/go.mod h1:s9ELCbtHCGXyu7ztijT/U09wi4De1OgJdsE8f3kDRQ0=
github.com/aperturerobotics/controllerbus v0.0.0-20190820023906-1b1fb349602a h1:4h7wvqArxg/nMq5zRGCqE3xIJ4UW9R1t82JO0A0s6kA=
github.com/aperturerobotics/controllerbus v0.0.0-20190820023906-1b1fb349602a/go.mod h1:s9ELCbtHCGXyu7ztijT/U09wi4De1OgJdsE8f3kDRQ0=
github.com/aperturerobotics/controllerbus v0.0.0-20190820025710-22efcef818fb h1:wRPy1RasoIMpE5TNvSn+hFjJD5LKNXOXS/n70SMICyw=
github.com/aperturerobotics/controllerbus v0.0.0-20190820025710-22efcef818fb/go.mod h1:s9ELCbtHCGXyu7ztijT/U09wi4De1OgJdsE8f3kDRQ0=
github.com/aperturerobotics/entitygraph v0.0.0-20190314052401-c4dff866fe8f h1:CeatIaQ+q2akgnaUmU5SZmClaxYTHfyweGODOqv1Cik=
github.com/aperturerobotics/entitygraph v0.0.0-20190314052401-c4dff866fe8f/go.mod h1:kwXRXbNyQIjylr7WmwL0zxTzu6SQUl6ShLlk2v3pF2o=
github.com/aperturerobotics/timestamp v0.2.2-0.20190226083629-0175fc7d961e h1:B6jBrRLChnQhCaF+AL55fAUVQp2xxHE+DFWN+uTGz5E=
Expand All @@ -24,11 +30,14 @@ github.com/cenkalti/backoff v2.1.1+incompatible h1:tKJnvO2kl0zmb/jA5UKAt4VoEVw1q
github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/djherbis/buffer v1.0.1-0.20181027144806-3c732ee9b562 h1:srKOrjxdE9Ld+rDdLlpS7OPmtGpOLYBYjPktiYvSHVo=
github.com/djherbis/buffer v1.0.1-0.20181027144806-3c732ee9b562/go.mod h1:VwN8VdFkMY0DCALdY8o00d3IZ6Amz/UNVMWcSaJT44o=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gogo/protobuf v1.2.2-0.20190611061853-dadb62585089 h1:raOeh+DEb2K79TKYcitwQUJOc4xdEOEJsgm8zQ6q1IU=
github.com/gogo/protobuf v1.2.2-0.20190611061853-dadb62585089/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
Expand All @@ -41,6 +50,7 @@ github.com/golang/protobuf v1.3.3-0.20190805180045-4c88cc3f1a34 h1:lOqqfn77CiAxt
github.com/golang/protobuf v1.3.3-0.20190805180045-4c88cc3f1a34/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c h1:7lF+Vz0LqiRidnzC1Oq86fpX1q/iEv2KJdrCtttYjT4=
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/websocket v0.0.0-20170522004412-87ee47603f13 h1:3TcZe31zyrteCrSU2+4QSSx9N6sQC6PjXwrHjfX3USM=
Expand All @@ -66,6 +76,8 @@ github.com/klauspost/reedsolomon v1.9.3-0.20190625143044-789068412913 h1:qzAosvI
github.com/klauspost/reedsolomon v1.9.3-0.20190625143044-789068412913/go.mod h1:CwCi+NUr9pqSVktrkN+Ondf06rkhYZ/pcNv7fu+8Un4=
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
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 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ=
github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16 h1:5W7KhL8HVF3XCFOweFD3BNESdnO8ewyYTFT2R+/b8FQ=
github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U=
Expand Down Expand Up @@ -101,11 +113,15 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.4.0 h1:yKenngtzGh+cUSSh6GWbxW2abRqhYUSR/t/6+2QqNvE=
github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
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/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
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/tarm/serial v0.0.0-20180830185346-98f6abe2eb07 h1:UyzmZLoiDWMRywV4DUYb9Fbt8uiOSooupjTq10vpvnU=
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 h1:89CEmDvlq/F7SJEOqkIdNDGJXrQIhuIx9D2DBXjavSU=
Expand All @@ -124,14 +140,19 @@ golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnf
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190313220215-9f648a60d977 h1:actzWV6iWn3GLqN8dZjzsB+CLt+gaV2+wsxroxiQI8I=
golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
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 h1:o3PsSEY8E4eXWkXrIP9YJALUkVZqzHJT5DOasTyn8Vs=
Expand All @@ -140,19 +161,28 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190219092855-153ac476189d h1:Z0Ahzd7HltpJtjAHHxX8QFP3j1yYgiuvjbjRzDj/KH0=
golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb h1:fgwFCsaw9buMuxNd6+DQfAuSFqbNiQZpcgJQAgJsK6k=
golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20180831171423-11092d34479b h1:lohp5blsw53GBXtLyLNaTXPXS9pJ1tiTw61ZHUoE9Qw=
google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

0 comments on commit e129d50

Please sign in to comment.