summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWim <wim@42.be>2019-02-11 01:34:50 +0100
committerWim <wim@42.be>2019-02-11 01:34:50 +0100
commit40d76b22960fcc57e167fb08b97f4ff3aec31090 (patch)
tree832a9b0cb7aa02df10083e18be91a98434e227a5
parent81478150373979a3061d94948ad2f2842ee87243 (diff)
downloadmatterbridge-msglm-40d76b22960fcc57e167fb08b97f4ff3aec31090.tar.gz
matterbridge-msglm-40d76b22960fcc57e167fb08b97f4ff3aec31090.tar.bz2
matterbridge-msglm-40d76b22960fcc57e167fb08b97f4ff3aec31090.zip
Fix error handling on bad event queue id (zulip). Closes #694
-rw-r--r--bridge/zulip/zulip.go18
-rw-r--r--go.mod2
-rw-r--r--go.sum4
-rw-r--r--vendor/github.com/matterbridge/gozulipbot/queue.go52
-rw-r--r--vendor/modules.txt2
5 files changed, 63 insertions, 15 deletions
diff --git a/bridge/zulip/zulip.go b/bridge/zulip/zulip.go
index 88832d36..165bdb18 100644
--- a/bridge/zulip/zulip.go
+++ b/bridge/zulip/zulip.go
@@ -100,7 +100,23 @@ func (b *Bzulip) getChannel(id int) string {
func (b *Bzulip) handleQueue() error {
for {
- messages, _ := b.q.GetEvents()
+ messages, err := b.q.GetEvents()
+ switch err {
+ case gzb.BackoffError:
+ time.Sleep(time.Second * 5)
+ case gzb.BadEventQueueError:
+ b.Log.Info("got a bad event queue id error, reconnecting")
+ b.bot.Queues = nil
+ b.q, err = b.bot.RegisterAll()
+ if err != nil {
+ b.Log.Errorf("reconnecting failed: %s. Sleeping 10 seconds", err)
+ time.Sleep(time.Second * 10)
+ continue
+ }
+ continue
+ default:
+ b.Log.Debugf("receiving error: %#v", err)
+ }
for _, m := range messages {
b.Log.Debugf("== Receiving %#v", m)
// ignore our own messages
diff --git a/go.mod b/go.mod
index 1f8cb17f..dc3d0fb5 100644
--- a/go.mod
+++ b/go.mod
@@ -25,7 +25,7 @@ require (
github.com/lusis/slack-test v0.0.0-20180109053238-3c758769bfa6 // indirect
github.com/matterbridge/go-xmpp v0.0.0-20180529212104-cd19799fba91
github.com/matterbridge/gomatrix v0.0.0-20190102230110-6f9631ca6dea
- github.com/matterbridge/gozulipbot v0.0.0-20180507190239-b6bb12d33544
+ github.com/matterbridge/gozulipbot v0.0.0-20190211002717-befe50663a92
github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61
github.com/mattermost/mattermost-server v5.5.0+incompatible
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
diff --git a/go.sum b/go.sum
index c5aca265..6403ebd7 100644
--- a/go.sum
+++ b/go.sum
@@ -70,8 +70,8 @@ github.com/matterbridge/go-xmpp v0.0.0-20180529212104-cd19799fba91 h1:KzDEcy8eDb
github.com/matterbridge/go-xmpp v0.0.0-20180529212104-cd19799fba91/go.mod h1:ECDRehsR9TYTKCAsRS8/wLeOk6UUqDydw47ln7wG41Q=
github.com/matterbridge/gomatrix v0.0.0-20190102230110-6f9631ca6dea h1:kaADGqpK4gGO2BpzEyJrBxq2Jc57Rsar4i2EUxcACUc=
github.com/matterbridge/gomatrix v0.0.0-20190102230110-6f9631ca6dea/go.mod h1:+jWeaaUtXQbBRdKYWfjW6JDDYiI2XXE+3NnTjW5kg8g=
-github.com/matterbridge/gozulipbot v0.0.0-20180507190239-b6bb12d33544 h1:A8lLG3DAu75B5jITHs9z4JBmU6oCq1WiUNnDAmqKCZc=
-github.com/matterbridge/gozulipbot v0.0.0-20180507190239-b6bb12d33544/go.mod h1:yAjnZ34DuDyPHMPHHjOsTk/FefW4JJjoMMCGt/8uuQA=
+github.com/matterbridge/gozulipbot v0.0.0-20190211002717-befe50663a92 h1:4L4vltV2H74Wl+fuwH3xDBe5jvFTn85UXdTqkCPs6Mg=
+github.com/matterbridge/gozulipbot v0.0.0-20190211002717-befe50663a92/go.mod h1:yAjnZ34DuDyPHMPHHjOsTk/FefW4JJjoMMCGt/8uuQA=
github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61 h1:R/MgM/eUyRBQx2FiH6JVmXck8PaAuKfe2M1tWIzW7nE=
github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61/go.mod h1:iXGEotOvwI1R1SjLxRc+BF5rUORTMtE0iMZBT2lxqAU=
github.com/mattermost/mattermost-server v5.5.0+incompatible h1:0wcLGgYtd+YImtLDPf2AOfpBHxbU4suATx+6XKw1XbU=
diff --git a/vendor/github.com/matterbridge/gozulipbot/queue.go b/vendor/github.com/matterbridge/gozulipbot/queue.go
index 9a37a8e7..af32bb6e 100644
--- a/vendor/github.com/matterbridge/gozulipbot/queue.go
+++ b/vendor/github.com/matterbridge/gozulipbot/queue.go
@@ -13,10 +13,11 @@ import (
)
var (
- HeartbeatError = fmt.Errorf("EventMessage is a heartbeat")
- UnauthorizedError = fmt.Errorf("Request is unauthorized")
- BackoffError = fmt.Errorf("Too many requests")
- UnknownError = fmt.Errorf("Error was unknown")
+ HeartbeatError = fmt.Errorf("EventMessage is a heartbeat")
+ UnauthorizedError = fmt.Errorf("Request is unauthorized")
+ BackoffError = fmt.Errorf("Too many requests")
+ BadEventQueueError = fmt.Errorf("BAD_EVENT_QUEUE_ID error")
+ UnknownError = fmt.Errorf("Error was unknown")
)
type Queue struct {
@@ -26,6 +27,13 @@ type Queue struct {
Bot *Bot `json:"-"`
}
+type QueueError struct {
+ Code string `json:"code"`
+ Msg string `json:"msg"`
+ ID string `json:"queue_id"`
+ Result string `json:"result"`
+}
+
func (q *Queue) EventsChan() (chan EventMessage, func()) {
end := false
endFunc := func() {
@@ -131,18 +139,22 @@ func (q *Queue) GetEvents() ([]EventMessage, error) {
}
defer resp.Body.Close()
+ body, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ return nil, err
+ }
+
switch {
case resp.StatusCode == 429:
return nil, BackoffError
case resp.StatusCode == 403:
return nil, UnauthorizedError
case resp.StatusCode >= 400:
- return nil, UnknownError
- }
-
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- return nil, err
+ qErr, err := q.ParseError(body)
+ if err != nil || qErr == nil {
+ return nil, UnknownError
+ }
+ return nil, BadEventQueueError
}
msgs, err := q.ParseEventMessages(body)
@@ -170,6 +182,26 @@ func (q *Queue) RawGetEvents() (*http.Response, error) {
return q.Bot.Client.Do(req)
}
+func (q *Queue) ParseError(rawEventResponse []byte) (*QueueError, error) {
+ rawResponse := map[string]json.RawMessage{}
+ err := json.Unmarshal(rawEventResponse, &rawResponse)
+ if err != nil {
+ return nil, err
+ }
+
+ if _, ok := rawResponse["code"]; ok {
+ var qErr QueueError
+ err = json.Unmarshal(rawEventResponse, &qErr)
+ if err != nil {
+ return nil, err
+ }
+ if qErr.Code == "BAD_EVENT_QUEUE_ID" {
+ return &qErr, nil
+ }
+ }
+ return nil, nil
+}
+
func (q *Queue) ParseEventMessages(rawEventResponse []byte) ([]EventMessage, error) {
rawResponse := map[string]json.RawMessage{}
err := json.Unmarshal(rawEventResponse, &rawResponse)
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 3baabde5..1b268fcb 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -70,7 +70,7 @@ github.com/magiconair/properties
github.com/matterbridge/go-xmpp
# github.com/matterbridge/gomatrix v0.0.0-20190102230110-6f9631ca6dea
github.com/matterbridge/gomatrix
-# github.com/matterbridge/gozulipbot v0.0.0-20180507190239-b6bb12d33544
+# github.com/matterbridge/gozulipbot v0.0.0-20190211002717-befe50663a92
github.com/matterbridge/gozulipbot
# github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61
github.com/matterbridge/logrus-prefixed-formatter