From e3ffbcadd82d71e87e7f5841f9a037f9358a010b Mon Sep 17 00:00:00 2001 From: Alex Vandiver Date: Sat, 23 Oct 2021 14:46:27 -0700 Subject: [PATCH] Add better error handling on Zulip (#1589) * zulip: Treat unknown errors with a 10-second backoff. An unknown error (including an unauthorized error) would fall through with no calls to time.Sleep, resulting in hammering the server as quickly as possible. Add a 10-second sleep in the default error case. The heartbeat is left with no explicit sleep, but all other codepaths now contain one. * version: Move version information into a separate package. This will allow it to be accessed by other sections of the code. * zulip: Use the matterbridge version in the user-agent. Co-authored-by: Wim --- .github/workflows/development.yml | 6 +++--- .goreleaser.yml | 2 +- Dockerfile | 2 +- bridge/zulip/zulip.go | 5 ++++- matterbridge.go | 10 ++++------ tgs.Dockerfile | 2 +- version/version.go | 6 ++++++ 7 files changed, 20 insertions(+), 13 deletions(-) create mode 100644 version/version.go diff --git a/.github/workflows/development.yml b/.github/workflows/development.yml index ff7313cf..0f62c997 100644 --- a/.github/workflows/development.yml +++ b/.github/workflows/development.yml @@ -35,9 +35,9 @@ jobs: run: | mkdir -p output/{win,lin,arm,mac} VERSION=$(git describe --tags) - CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -X main.githash=$(git log --pretty=format:'%h' -n 1)" -o output/lin/matterbridge-$VERSION-linux-amd64 - CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "-s -X main.githash=$(git log --pretty=format:'%h' -n 1)" -o output/win/matterbridge-$VERSION-windows-amd64.exe - CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "-s -X main.githash=$(git log --pretty=format:'%h' -n 1)" -o output/mac/matterbridge-$VERSION-darwin-amd64 + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -X github.com/42wim/matterbridge/version.GitHash=$(git log --pretty=format:'%h' -n 1)" -o output/lin/matterbridge-$VERSION-linux-amd64 + CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "-s -X github.com/42wim/matterbridge/version.GitHash=$(git log --pretty=format:'%h' -n 1)" -o output/win/matterbridge-$VERSION-windows-amd64.exe + CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "-s -X github.com/42wim/matterbridge/version.GitHash=$(git log --pretty=format:'%h' -n 1)" -o output/mac/matterbridge-$VERSION-darwin-amd64 - name: Upload linux 64-bit if: startsWith(matrix.go-version,'1.17') uses: actions/upload-artifact@v2 diff --git a/.goreleaser.yml b/.goreleaser.yml index 5af21a85..c4f9064b 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -22,7 +22,7 @@ builds: - 6 - 7 ldflags: - - -s -w -X main.githash={{.ShortCommit}} + - -s -w -X github.com/42wim/matterbridge/version.GitHash={{.ShortCommit}} archives: - diff --git a/Dockerfile b/Dockerfile index 8e2dded6..6a2b8659 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM alpine:edge AS builder COPY . /go/src/matterbridge RUN apk --no-cache add go git \ && cd /go/src/matterbridge \ - && CGO_ENABLED=0 go build -mod vendor -ldflags "-X main.githash=$(git log --pretty=format:'%h' -n 1)" -o /bin/matterbridge + && CGO_ENABLED=0 go build -mod vendor -ldflags "-X github.com/42wim/matterbridge/version.GitHash=$(git log --pretty=format:'%h' -n 1)" -o /bin/matterbridge FROM alpine RUN apk --no-cache add ca-certificates mailcap diff --git a/bridge/zulip/zulip.go b/bridge/zulip/zulip.go index e66558a2..c912b6f0 100644 --- a/bridge/zulip/zulip.go +++ b/bridge/zulip/zulip.go @@ -2,6 +2,7 @@ package bzulip import ( "encoding/json" + "fmt" "io/ioutil" "strconv" "strings" @@ -11,6 +12,7 @@ import ( "github.com/42wim/matterbridge/bridge" "github.com/42wim/matterbridge/bridge/config" "github.com/42wim/matterbridge/bridge/helper" + "github.com/42wim/matterbridge/version" gzb "github.com/matterbridge/gozulipbot" ) @@ -27,7 +29,7 @@ func New(cfg *bridge.Config) bridge.Bridger { } func (b *Bzulip) Connect() error { - bot := gzb.Bot{APIKey: b.GetString("token"), APIURL: b.GetString("server") + "/api/v1/", Email: b.GetString("login")} + bot := gzb.Bot{APIKey: b.GetString("token"), APIURL: b.GetString("server") + "/api/v1/", Email: b.GetString("login"), UserAgent: fmt.Sprintf("matterbridge/%s", version.Release)} bot.Init() q, err := bot.RegisterAll() b.q = q @@ -125,6 +127,7 @@ func (b *Bzulip) handleQueue() error { b.Log.Debug("heartbeat received.") default: b.Log.Debugf("receiving error: %#v", err) + time.Sleep(time.Second * 10) } if err != nil { continue diff --git a/matterbridge.go b/matterbridge.go index b9b7d6d3..7ab29784 100644 --- a/matterbridge.go +++ b/matterbridge.go @@ -10,15 +10,13 @@ import ( "github.com/42wim/matterbridge/bridge/config" "github.com/42wim/matterbridge/gateway" "github.com/42wim/matterbridge/gateway/bridgemap" + "github.com/42wim/matterbridge/version" "github.com/google/gops/agent" prefixed "github.com/matterbridge/logrus-prefixed-formatter" "github.com/sirupsen/logrus" ) var ( - version = "1.23.1-dev" - githash string - flagConfig = flag.String("conf", "matterbridge.toml", "config file") flagDebug = flag.Bool("debug", false, "enable debug") flagVersion = flag.Bool("version", false, "show version") @@ -28,7 +26,7 @@ var ( func main() { flag.Parse() if *flagVersion { - fmt.Printf("version: %s %s\n", version, githash) + fmt.Printf("version: %s %s\n", version.Release, version.GitHash) return } @@ -43,8 +41,8 @@ func main() { } } - logger.Printf("Running version %s %s", version, githash) - if strings.Contains(version, "-dev") { + logger.Printf("Running version %s %s", version.Release, version.GitHash) + if strings.Contains(version.Release, "-dev") { logger.Println("WARNING: THIS IS A DEVELOPMENT VERSION. Things may break.") } diff --git a/tgs.Dockerfile b/tgs.Dockerfile index 83a77e73..5badc0a7 100644 --- a/tgs.Dockerfile +++ b/tgs.Dockerfile @@ -5,7 +5,7 @@ RUN apk add \ go \ git \ && cd /go/src/matterbridge \ - && go build -mod vendor -ldflags "-X main.githash=$(git log --pretty=format:'%h' -n 1)" -o /bin/matterbridge + && go build -mod vendor -ldflags "-X github.com/42wim/matterbridge/version.GitHash=$(git log --pretty=format:'%h' -n 1)" -o /bin/matterbridge FROM alpine RUN apk --no-cache add \ diff --git a/version/version.go b/version/version.go new file mode 100644 index 00000000..19f3fa3a --- /dev/null +++ b/version/version.go @@ -0,0 +1,6 @@ +package version + +var ( + Release = "1.23.1-dev" + GitHash string +)