Fix infinite retry at size overrun error in Slack report

This commit is contained in:
Kota Kanbe
2017-02-10 18:33:11 +09:00
parent 1730caf124
commit f821a26aec

View File

@@ -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
}