diff --git a/report/slack.go b/report/slack.go index d38e49ca22..985f569fe2 100644 --- a/report/slack.go +++ b/report/slack.go @@ -59,6 +59,8 @@ type SlackWriter struct{} func (w SlackWriter) Write(rs ...models.ScanResult) error { conf := config.Conf.Slack channel := conf.Channel + count := 0 + retryMax := 10 for _, r := range rs { if channel == "${servername}" { @@ -75,9 +77,14 @@ func (w SlackWriter) Write(rs ...models.ScanResult) error { bytes, _ := json.Marshal(msg) jsonBody := string(bytes) + f := func() (err error) { resp, body, errs := gorequest.New().Proxy(config.Conf.HTTPProxy).Post(conf.HookURL).Send(string(jsonBody)).End() if 0 < len(errs) || resp == nil || resp.StatusCode != 200 { + count++ + if count == retryMax { + return nil + } return fmt.Errorf( "HTTP POST error: %v, url: %s, resp: %v, body: %s", errs, conf.HookURL, resp, body) @@ -85,13 +92,18 @@ func (w SlackWriter) Write(rs ...models.ScanResult) error { return nil } notify := func(err error, t time.Duration) { - log.Warn("Error %s", err) + log.Warnf("Error %s", err) log.Warn("Retrying in ", t) } - if err := backoff.RetryNotify(f, backoff.NewExponentialBackOff(), notify); err != nil { - return fmt.Errorf("HTTP Error: %s", err) + boff := backoff.NewExponentialBackOff() + if err := backoff.RetryNotify(f, boff, notify); err != nil { + return fmt.Errorf("HTTP error: %s", err) } } + + if count == retryMax { + return fmt.Errorf("Retry count exceeded") + } return nil }