From 713733f1f5dea1511d4ec969c3e8b452b9f5ad03 Mon Sep 17 00:00:00 2001 From: Paul Mundt Date: Fri, 13 Dec 2019 11:30:28 +0100 Subject: [PATCH 1/3] Add support for KnowGo Adaptation Layer events --- assets/bees/knowgobee.jpg | Bin 0 -> 106989 bytes bees/knowgobee/knowgobee.go | 166 +++++++++++++++++++++++++++++ bees/knowgobee/knowgobeefactory.go | 131 +++++++++++++++++++++++ go.mod | 13 +-- go.sum | 85 +++++++++++---- hives.go | 1 + 6 files changed, 364 insertions(+), 32 deletions(-) create mode 100644 assets/bees/knowgobee.jpg create mode 100644 bees/knowgobee/knowgobee.go create mode 100644 bees/knowgobee/knowgobeefactory.go diff --git a/assets/bees/knowgobee.jpg b/assets/bees/knowgobee.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ebe7ff72817e32882525b50e682757fedad77bce GIT binary patch literal 106989 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 ItXS{. + * + * Authors: + * Paul Mundt + */ + +package knowgobee + +import ( + "context" + "encoding/json" + "github.com/knowgoio/knowgo-pubsub/api" + "github.com/muesli/beehive/bees" + "net" + "net/url" + "strconv" + "time" +) + +type KnowGoBee struct { + bees.Bee + + apiKey string + server string + client *api.ClientConfig + sub *api.Subscription + interval int + + eventChan chan bees.Event +} + +type CountryChangeNotification struct { + DriverID int `json:"driverId,omitempty"` + Entering string `json:"entering"` + Leaving string `json:"leaving"` + Timestamp string `json:"timestamp"` +} + +func (mod *KnowGoBee) handleEvent(eventData []byte) { + var notification CountryChangeNotification + + err := json.Unmarshal(eventData, ¬ification) + if err != nil { + mod.LogErrorf("Failed to unmarshal event") + return + } + + ev := bees.Event{ + Bee: mod.Name(), + Name: "country-change", + Options: []bees.Placeholder{ + { + Name: "driverId", + Type: "int", + Value: notification.DriverID, + }, + { + Name: "entering", + Type: "string", + Value: notification.Entering, + }, + { + Name: "leaving", + Type: "string", + Value: notification.Leaving, + }, + { + Name: "timestamp", + Type: "timestamp", + Value: notification.Timestamp, + }, + }, + } + + mod.eventChan <- ev +} + +func (mod *KnowGoBee) newAPIClient() *api.ClientConfig { + client := api.DefaultClientConfig() + + if mod.apiKey != "" { + client.APIKey = mod.apiKey + } + + if mod.interval > 0 { + client.PollInterval = time.Duration(mod.interval) * time.Second + } + + if mod.server != "" { + u, err := url.Parse(mod.server) + if err == nil { + client.Host = u.Hostname() + client.Port, _ = strconv.Atoi(u.Port()) + } else { + host, port, err := net.SplitHostPort(mod.server) + if err != nil { + client.Host = mod.server + } else { + client.Host = host + client.Port, _ = strconv.Atoi(port) + } + } + } + + return client +} + +// Run executes the Bee's event loop. +func (mod *KnowGoBee) Run(eventChan chan bees.Event) { + client := mod.newAPIClient() + + sub, err := client.Subscribe(&api.SubscriptionRequest{ + Event: "country-change", + }) + if err != nil { + mod.LogErrorf("Failed to subscribe:", err) + return + } + + mod.Logf("Successfully subscribed") + + mod.client = client + mod.sub = sub + mod.eventChan = eventChan + + ticker := time.NewTicker(client.PollInterval).C + for { + select { + case <-mod.SigChan: + return + case <-ticker: + b := client.Receive(context.Background(), mod.sub) + if b != nil { + mod.handleEvent(b) + } + } + } +} + +// Action triggers the action passed to it. +func (mod *KnowGoBee) Action(action bees.Action) []bees.Placeholder { + return []bees.Placeholder{} +} + +// ReloadOptions parses the config options and initializes the Bee. +func (mod *KnowGoBee) ReloadOptions(options bees.BeeOptions) { + mod.SetOptions(options) + + options.Bind("polling_interval", &mod.interval) + options.Bind("server", &mod.server) + options.Bind("api_key", &mod.apiKey) +} diff --git a/bees/knowgobee/knowgobeefactory.go b/bees/knowgobee/knowgobeefactory.go new file mode 100644 index 00000000..7323947b --- /dev/null +++ b/bees/knowgobee/knowgobeefactory.go @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2019 Adaptant Solutions AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + * Authors: + * Paul Mundt + */ + +package knowgobee + +import ( + "github.com/muesli/beehive/bees" +) + +// HelloBeeFactory is a factory for HelloBees. +type KnowGoBeeFactory struct { + bees.BeeFactory +} + +// New returns a new Bee instance configured with the supplied options. +func (factory *KnowGoBeeFactory) New(name, description string, options bees.BeeOptions) bees.BeeInterface { + bee := KnowGoBee{ + Bee: bees.NewBee(name, factory.ID(), description, options), + } + bee.ReloadOptions(options) + + return &bee +} + +// ID returns the ID of this Bee. +func (factory *KnowGoBeeFactory) ID() string { + return "knowgobee" +} + +// Name returns the name of this Bee. +func (factory *KnowGoBeeFactory) Name() string { + return "KnowGo" +} + +// Description returns the description of this Bee. +func (factory *KnowGoBeeFactory) Description() string { + return "React to various KnowGo platform events" +} + +// Image returns the filename of an image for this Bee. +func (factory *KnowGoBeeFactory) Image() string { + return factory.ID() + ".jpg" +} + +// LogoColor returns the preferred logo background color (used by the admin interface). +func (factory *KnowGoBeeFactory) LogoColor() string { + return "#7ace56" +} + +// Options returns the options available to configure this Bee. +func (factory *KnowGoBeeFactory) Options() []bees.BeeOptionDescriptor { + opts := []bees.BeeOptionDescriptor{ + { + Name: "server", + Description: "URL for the desired KnowGo server", + Type: "string", + }, + { + Name: "polling_interval", + Description: "Number of seconds to wait between polling intervals", + Type: "int", + Default: 10, + }, + { + Name: "api_key", + Description: "API Key for the KnowGo server", + Type: "string", + Mandatory: true, + }, + } + return opts +} + +// Events describes the available events provided by this Bee. +func (factory *KnowGoBeeFactory) Events() []bees.EventDescriptor { + events := []bees.EventDescriptor{ + { + Namespace: factory.Name(), + Name: "country-change", + Description: "A country change event has taken place", + Options: []bees.PlaceholderDescriptor{ + { + Name: "driverId", + Description: "ID of Driver", + Type: "int", + }, + { + Name: "entering", + Description: "ISO 3166-2 country code of country entered", + Type: "string", + Mandatory: true, + }, + { + Name: "leaving", + Description: "ISO 3166-2 country code of country left", + Type: "string", + Mandatory: true, + }, + { + Name: "timestamp", + Description: "Time when event took place", + Type: "timestamp", + Mandatory: true, + }, + }, + }, + } + return events +} + +func init() { + f := KnowGoBeeFactory{} + bees.RegisterFactory(&f) +} diff --git a/go.mod b/go.mod index 429c318d..77df0b9d 100644 --- a/go.mod +++ b/go.mod @@ -31,9 +31,9 @@ require ( github.com/glaxx/go_pastebin v0.0.0-20170619211819-7e72d56770d0 github.com/go-ini/ini v1.42.0 // indirect github.com/go-mail/mail v2.3.1+incompatible + github.com/go-sql-driver/mysql v1.4.1 // indirect github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible github.com/golang/mock v1.2.0 // indirect - github.com/golang/protobuf v1.3.1 // indirect github.com/google/go-github v17.0.0+incompatible github.com/google/go-querystring v1.0.0 // indirect github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c // indirect @@ -44,20 +44,16 @@ require ( github.com/jayeshsolanki93/devgorant v0.0.0-20160810172004-69fb03e5c3b1 github.com/jaytaylor/html2text v0.0.0-20190408195923-01ec452cbe43 // indirect github.com/jpillora/backoff v1.0.0 // indirect - github.com/json-iterator/go v1.1.6 // indirect + github.com/knowgoio/knowgo-pubsub v0.0.0-20191213102205-0c509a43fd2b github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect github.com/kr/pretty v0.1.0 github.com/kurrik/oauth1a v0.0.0-20151019171716-cb1b80e32dd4 // indirect - github.com/lusis/go-slackbot v0.0.0-20180109053408-401027ccfef5 // indirect - github.com/lusis/slack-test v0.0.0-20190426140909-c40012f20018 // indirect github.com/mattn/go-colorable v0.1.1 github.com/mattn/go-isatty v0.0.7 // indirect github.com/mattn/go-mastodon v0.0.3 github.com/mattn/go-xmpp v0.0.0-20190124093244-6093f50721ed github.com/minio/minio-go v6.0.14+incompatible github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.1 // indirect github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474 // indirect github.com/mrexodia/wray v0.0.0-20160318003008-78a2c1f284ff // indirect github.com/muesli/go-pkg-rss v0.0.0-20180307042412-3bef0f3126ec @@ -68,13 +64,13 @@ require ( github.com/nlopes/slack v0.6.0 github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d github.com/odwrtw/transmission v0.0.0-20170515140915-08885b3058e7 - github.com/prometheus/client_golang v0.9.2 + github.com/prometheus/client_golang v1.2.1 github.com/rdegges/go-ipify v0.0.0-20150526035502-2d94a6a86c40 github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4 // indirect github.com/shuheiktgw/go-travis v0.1.10-0.20190502100712-2d0b3e9898f0 github.com/simplepush/simplepush-go v0.0.0-20170307205831-8980e96b7b02 github.com/simplereach/timeutils v1.2.0 // indirect - github.com/sirupsen/logrus v1.4.1 + github.com/sirupsen/logrus v1.4.2 github.com/smartystreets/assertions v0.0.0-20190401211740-f487f9de1cd3 // indirect github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a // indirect github.com/sromku/go-gitter v0.0.0-20170828210750-70f7030a94a6 @@ -84,7 +80,6 @@ require ( github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80 // indirect golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734 // indirect golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a - golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872 // indirect golang.org/x/text v0.3.2 // indirect google.golang.org/appengine v1.5.0 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect diff --git a/go.sum b/go.sum index 0524c8e1..69834668 100644 --- a/go.sum +++ b/go.sum @@ -14,6 +14,10 @@ github.com/PuerkitoBio/goquery v1.5.0 h1:uGvmFXOA73IKluu/F84Xd1tt/z07GYm8X49XKHP github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg= github.com/akashshinde/go_cricket v0.0.0-20170322162016-01a06b2c3f22 h1:2jzZwBlEdGUf34//31M7m+J1k8Iln8yNeVK0FpnZXOY= github.com/akashshinde/go_cricket v0.0.0-20170322162016-01a06b2c3f22/go.mod h1:22G9EQ6wpT/k35p9F2xHsbqfH5uL3bQcjJIjPJ+J6xU= +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/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o= github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/araddon/dateparse v0.0.0-20190426192744-0d74ffceef83 h1:ukTLOeMC0aVxbJWVg6hOsVJ0VPIo8w++PbNsze/pqF8= @@ -24,12 +28,17 @@ github.com/azr/backoff v0.0.0-20160115115103-53511d3c7330 h1:ekDALXAVvY/Ub1UtNta github.com/azr/backoff v0.0.0-20160115115103-53511d3c7330/go.mod h1:nH+k0SvAt3HeiYyOlJpLLv1HG1p7KWP7qU9QPp2/pCo= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= 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/briandowns/openweathermap v0.0.0-20180804155945-5f41b7c9d92d h1:28xWzPQ9bdGxKAAwQpZipZZ9Xz8kQcgMPF9cZnvMeuI= github.com/briandowns/openweathermap v0.0.0-20180804155945-5f41b7c9d92d/go.mod h1:8g1Bgq9PbPpXIA3sdlWmWf2JpiWGJee/O4Q+ddYO6+k= github.com/bwmarrin/discordgo v0.19.0 h1:kMED/DB0NR1QhRcalb85w0Cu3Ep2OrGAqZH1R5awQiY= github.com/bwmarrin/discordgo v0.19.0/go.mod h1:O9S4p+ofTFwB02em7jkpkV8M3R0/PUVOwN61zSZ0r4Q= github.com/carlosdp/twiliogo v0.0.0-20161027183705-b26045ebb9d1 h1:hXakhQtPnXH839q1pBl/GqfTSchqE+R5Fqn98Iu7UQM= github.com/carlosdp/twiliogo v0.0.0-20161027183705-b26045ebb9d1/go.mod h1:pAxCBpjl/0JxYZlWGP/Dyi8f/LQSCQD2WAsG/iNzqQ8= +github.com/cespare/xxhash/v2 v2.1.0 h1:yTUvW7Vhb89inJ+8irsUqiWjh8iT6sQPZiQzI6ReGkA= +github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM= github.com/cloudflare/cloudflare-go v0.10.6 h1:mbv0IrcrrLlPLxAzCdW6aQ/CPlqhyXrXTjviU0Tb+34= github.com/cloudflare/cloudflare-go v0.10.6/go.mod h1:dcRl7AXBH5Bf7QFTBVc3TRzwvotSeO4AlnMhuxORAX8= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f h1:JOrtw2xFKzlg+cbHpyrpLDmnN1HqhBfnX7WDiW7eG2c= @@ -64,10 +73,18 @@ github.com/glaxx/go_pastebin v0.0.0-20170619211819-7e72d56770d0 h1:EdszNpwFiRjmO github.com/glaxx/go_pastebin v0.0.0-20170619211819-7e72d56770d0/go.mod h1:R7D2HdGrozpSe4V0ZuxAH7RKteG/vcpPpPsghEHo2+Y= github.com/go-ini/ini v1.42.0 h1:TWr1wGj35+UiWHlBA8er89seFXxzwFn11spilrrj+38= github.com/go-ini/ini v1.42.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +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-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-mail/mail v2.3.1+incompatible h1:UzNOn0k5lpfVtO31cK3hn6I4VEVGhe3lX8AJBAxXExM= github.com/go-mail/mail v2.3.1+incompatible/go.mod h1:VPWjmmNyRsWXQZHVHT3g0YbIINUkSmuKOiLIDkWbL6M= +github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible h1:2cauKuaELYAEARXRkq2LrJ0yDDv1rW7+wrTEdVL3uaU= github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible/go.mod h1:qf9acutJ8cwBUhm1bqgz6Bei9/C/c93FPDljKWwsOgM= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk= @@ -76,14 +93,23 @@ github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 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/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/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -103,11 +129,17 @@ github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2E github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 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/knowgoio/knowgo-pubsub v0.0.0-20191213102205-0c509a43fd2b h1:1sC8zYPDPUrWfngZg6nyigWAQ4sskm6xLCtgfwhE4V4= +github.com/knowgoio/knowgo-pubsub v0.0.0-20191213102205-0c509a43fd2b/go.mod h1:6ePDLEQrIvYIBG+9jmTGskEY3O6lDhDLuUmi2mdwzQ4= 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/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -115,10 +147,6 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kurrik/oauth1a v0.0.0-20151019171716-cb1b80e32dd4 h1:hGX8e8fDuWmCOQEneaHtuiqiy1NsBnZW2G6lxitngus= github.com/kurrik/oauth1a v0.0.0-20151019171716-cb1b80e32dd4/go.mod h1:8buhLMuecANgNgxrsQynWlNt03oXr1B/v2xbuRSrnEc= -github.com/lusis/go-slackbot v0.0.0-20180109053408-401027ccfef5 h1:AsEBgzv3DhuYHI/GiQh2HxvTP71HCCE9E/tzGUzGdtU= -github.com/lusis/go-slackbot v0.0.0-20180109053408-401027ccfef5/go.mod h1:c2mYKRyMb1BPkO5St0c/ps62L4S0W2NAkaTXj9qEI+0= -github.com/lusis/slack-test v0.0.0-20190426140909-c40012f20018 h1:MNApn+Z+fIT4NPZopPfCc1obT6aY3SVM6DOctz1A9ZU= -github.com/lusis/slack-test v0.0.0-20190426140909-c40012f20018/go.mod h1:sFlOUpQL1YcjhFVXhg1CG8ZASEs/Mf1oVb6H75JL/zg= github.com/mattn/go-colorable v0.1.1 h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -136,8 +164,10 @@ github.com/minio/minio-go v6.0.14+incompatible h1:fnV+GD28LeqdN6vT2XdGKW8Qe/IfjJ github.com/minio/minio-go v6.0.14+incompatible/go.mod h1:7guKYtitv8dktvNUGrhzmNlA5wrAABTQXCoesZdFQO8= 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/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= 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/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474 h1:oKIteTqeSpenyTrOVj5zkiyCaflLa8B+CD0324otT+o= @@ -152,12 +182,9 @@ github.com/muesli/go.hue v0.0.0-20140802040715-8aefcc693caf h1:LxZj9OgYtTw5bQWoH github.com/muesli/go.hue v0.0.0-20140802040715-8aefcc693caf/go.mod h1:kbCdPkiPQGNQW+m9a1XHIrOCT4/FtfpqBF2bVkwZjMg= github.com/muesli/goefa v0.0.0-20180507204150-08d8ee2555d2 h1:A0yDQZg4PVcBvzH9IYGydylu0ytfiTK8LaHOH5eJrLY= github.com/muesli/goefa v0.0.0-20180507204150-08d8ee2555d2/go.mod h1:cbhVWIL28EF8sTH71/qsU+TeEEmYC33MES0J7Ul0TFI= -github.com/muesli/smolder v0.0.0-20181113094957-e6752d792454 h1:M4sPHl3GXRrWLL4gQHzjf0pIiy3LyqCHqNfbGWNA7OI= -github.com/muesli/smolder v0.0.0-20181113094957-e6752d792454/go.mod h1:vBtOJlVGxLheofBQdKVQGaG40aJQUwr6Lh4PVliqebY= github.com/muesli/smolder v0.0.0-20190505085143-9c21fc7135ee h1:owp+45s+e2xN1fFUHIld1X+2ZtHSUjXKkgEr7iwq7u8= github.com/muesli/smolder v0.0.0-20190505085143-9c21fc7135ee/go.mod h1:vBtOJlVGxLheofBQdKVQGaG40aJQUwr6Lh4PVliqebY= -github.com/nlopes/slack v0.5.0 h1:NbIae8Kd0NpqaEI3iUrsuS0KbcEDhzhc939jLW5fNm0= -github.com/nlopes/slack v0.5.0/go.mod h1:jVI4BBK3lSktibKahxBF74txcK2vyvkza1z/+rRnVAM= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nlopes/slack v0.6.0 h1:jt0jxVQGhssx1Ib7naAOZEZcGdtIhTzkP0nopK0AsRA= github.com/nlopes/slack v0.6.0/go.mod h1:JzQ9m3PMAqcpeCam7UaHSuBuupz7CmpjehYMayT6YOk= github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d h1:VhgPp6v9qf9Agr/56bj7Y/xa04UccTW04VP0Qed4vnQ= @@ -171,21 +198,29 @@ github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 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/prometheus/client_golang v0.9.2 h1:awm861/B8OKDd2I/6o1dy3ra4BamzKhYOiGItCeZ740= -github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.2.1 h1:JnMpQc6ppsNgw9QPAGF6Dod479itz7lvlsMzzNayLOI= +github.com/prometheus/client_golang v1.2.1/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/common v0.0.0-20181126121408-4724e9255275 h1:PnBWHBf+6L0jOqq0gIVUe6Yk0/QMZ640k6NvkxcBf+8= -github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a h1:9a8MnZMP0X2nLJdBg+pBmGgkJlSaKC2KaQmTCk1XDtE= -github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +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/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8= +github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/rdegges/go-ipify v0.0.0-20150526035502-2d94a6a86c40 h1:31Y7UZ1yTYBU4E79CE52I/1IRi3TqiuwquXGNtZDXWs= github.com/rdegges/go-ipify v0.0.0-20150526035502-2d94a6a86c40/go.mod h1:j4c6zEU0eMG1oiZPUy+zD4ykX0NIpjZAEOEAviTWC18= github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4 h1:BN/Nyn2nWMoqGRA7G7paDNDqTXE30mXGqzzybrfo05w= github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shuheiktgw/go-travis v0.1.9 h1:qfu71EtAGkloDGS4jIA0f19g6goejqw782qParyaLPw= -github.com/shuheiktgw/go-travis v0.1.9/go.mod h1:QJJOek1pLVgh75HK4mUDw99bME0MIyam8+fH6Ebnjq4= +github.com/sauerbraten/pubsub v0.0.0-20171021135711-897f02c5bb09 h1:GoW+FUM13TEL0fQYVuydKdc1mqUsz8kTRN8d+QZqprY= +github.com/sauerbraten/pubsub v0.0.0-20171021135711-897f02c5bb09/go.mod h1:L3sU7HgoQXlzgOfcb/72kMwyNGOyiowGJQ23EjzzTYc= github.com/shuheiktgw/go-travis v0.1.10-0.20190502100712-2d0b3e9898f0 h1:+VL5INItDu3Gf4Wak1XZRgsmSTI482GzkTc7Rf2DjI8= github.com/shuheiktgw/go-travis v0.1.10-0.20190502100712-2d0b3e9898f0/go.mod h1:QJJOek1pLVgh75HK4mUDw99bME0MIyam8+fH6Ebnjq4= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= @@ -193,8 +228,9 @@ github.com/simplepush/simplepush-go v0.0.0-20170307205831-8980e96b7b02 h1:1wFJqw github.com/simplepush/simplepush-go v0.0.0-20170307205831-8980e96b7b02/go.mod h1:3SZdv/t76bM6vmmSa251/VnQMn9S8gRuZcRFy2Ack9A= github.com/simplereach/timeutils v1.2.0 h1:btgOAlu9RW6de2r2qQiONhjgxdAG7BL6je0G6J/yPnA= github.com/simplereach/timeutils v1.2.0/go.mod h1:VVbQDfN/FHRZa1LSqcwo4kNZ62OOyqLLGQKYB3pB0Q8= -github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v0.0.0-20190401211740-f487f9de1cd3 h1:hBSHahWMEgzwRyS6dRpxY0XyjZsHyQ61s084wo5PJe0= @@ -220,6 +256,7 @@ github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6 github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80 h1:nrZ3ySNYwJbSpD6ce9duiP+QkD3JuLCcWkdaehUS/3Y= github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80/go.mod h1:iFyPdL66DjUD96XmzVL3ZntbzcflLnznH0fr99w5VqE= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 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= @@ -229,12 +266,10 @@ golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/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-20190108225652-1e06a53dbb7e/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-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09 h1:KaQtG+aDELoNmXYas3TVkGNYRuq8JQ1aa7LJt8EXVyo= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191014212845-da9a3fd4c582 h1:p9xBe/w/OzkeYVKm234g55gMdD1nSIooTir5kV11kfA= golang.org/x/net v0.0.0-20191014212845-da9a3fd4c582/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA= @@ -242,12 +277,14 @@ golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4Iltr 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/sys v0.0.0-20180905080454-ebe1bf3edb33/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-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= 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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872 h1:cGjJzUd8RgBw428LXP65YXni0aiGNA4Bl+ls8SmLOm8= -golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191010194322-b09406accb47 h1:/XfQ9z7ib8eEJX2hdgFTZJ/ntt0swNk5oYBziWeTCvY= +golang.org/x/sys v0.0.0-20191010194322-b09406accb47/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/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= @@ -259,6 +296,7 @@ golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -270,6 +308,7 @@ gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk= gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce h1:xcEWjVhvbDy+nHP67nPDDpbYrY+ILlfndk4bRioVHaU= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= +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= layeh.com/gumble v0.0.0-20180508205105-1ea1159c4956 h1:TaQ2ECrcAom2bkjRvOxhsUkD6l5iiCJ/++lHHZ42zII= diff --git a/hives.go b/hives.go index 8c9bafee..cc21f99c 100644 --- a/hives.go +++ b/hives.go @@ -46,6 +46,7 @@ import ( _ "github.com/muesli/beehive/bees/ircbee" _ "github.com/muesli/beehive/bees/jabberbee" _ "github.com/muesli/beehive/bees/jenkinsbee" + _ "github.com/muesli/beehive/bees/knowgobee" _ "github.com/muesli/beehive/bees/mastodonbee" _ "github.com/muesli/beehive/bees/mixcloudbee" _ "github.com/muesli/beehive/bees/mumblebee" From dce9f0e2984deb38a58237902b513eac3e8ee1b6 Mon Sep 17 00:00:00 2001 From: Paul Mundt Date: Sat, 14 Dec 2019 13:53:47 +0100 Subject: [PATCH 2/3] Fix up comment typo in KnowGoBeeFactory --- bees/knowgobee/knowgobeefactory.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bees/knowgobee/knowgobeefactory.go b/bees/knowgobee/knowgobeefactory.go index 7323947b..86d9e67b 100644 --- a/bees/knowgobee/knowgobeefactory.go +++ b/bees/knowgobee/knowgobeefactory.go @@ -24,7 +24,7 @@ import ( "github.com/muesli/beehive/bees" ) -// HelloBeeFactory is a factory for HelloBees. +// KnowGoBeeFactory is a factory for KnowGoBees. type KnowGoBeeFactory struct { bees.BeeFactory } From 57901ff1d237cf555c6a556331ed950bf11a254d Mon Sep 17 00:00:00 2001 From: Paul Mundt Date: Wed, 18 Dec 2019 16:14:54 +0100 Subject: [PATCH 3/3] Switch knowgobee subscription notifications to debug logger --- bees/knowgobee/knowgobee.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bees/knowgobee/knowgobee.go b/bees/knowgobee/knowgobee.go index 70a27cc7..ffea6e48 100644 --- a/bees/knowgobee/knowgobee.go +++ b/bees/knowgobee/knowgobee.go @@ -25,6 +25,7 @@ import ( "encoding/json" "github.com/knowgoio/knowgo-pubsub/api" "github.com/muesli/beehive/bees" + log "github.com/sirupsen/logrus" "net" "net/url" "strconv" @@ -131,7 +132,7 @@ func (mod *KnowGoBee) Run(eventChan chan bees.Event) { return } - mod.Logf("Successfully subscribed") + log.Debugln("Successfully subscribed") mod.client = client mod.sub = sub