diff --git a/src/server/engine/callback.go b/src/server/engine/callback.go index 292acbca..c77d0a03 100644 --- a/src/server/engine/callback.go +++ b/src/server/engine/callback.go @@ -1,12 +1,15 @@ package engine import ( + "bytes" + "encoding/json" + "io/ioutil" + "net/http" "strconv" "strings" "time" "github.com/toolkits/pkg/logger" - "github.com/toolkits/pkg/net/httplib" "github.com/didi/nightingale/v5/src/models" "github.com/didi/nightingale/v5/src/pkg/ibex" @@ -14,6 +17,39 @@ import ( "github.com/didi/nightingale/v5/src/server/memsto" ) +func PostJSON(url string, timeout time.Duration, v interface{}) (response []byte, code int, err error) { + var bs []byte + + bs, err = json.Marshal(v) + if err != nil { + return + } + + bf := bytes.NewBuffer(bs) + + client := http.Client{ + Timeout: timeout, + } + + req, err := http.NewRequest("POST", url, bf) + req.Header.Set("Content-Type", "application/json") + + var resp *http.Response + resp, err = client.Do(req) + if err != nil { + return + } + + code = resp.StatusCode + + if resp.Body != nil { + defer resp.Body.Close() + response, err = ioutil.ReadAll(resp.Body) + } + + return +} + func callback(event *models.AlertCurEvent) { urls := strings.Fields(event.Callbacks) for _, url := range urls { @@ -21,8 +57,10 @@ func callback(event *models.AlertCurEvent) { continue } - if strings.HasPrefix(url, "${ibex}") && !event.IsRecovered { - handleIbex(url, event) + if strings.HasPrefix(url, "${ibex}") { + if !event.IsRecovered { + handleIbex(url, event) + } continue } @@ -30,7 +68,7 @@ func callback(event *models.AlertCurEvent) { url = "http://" + url } - resp, code, err := httplib.PostJSON(url, 5*time.Second, event, map[string]string{}) + resp, code, err := PostJSON(url, 5*time.Second, event) if err != nil { logger.Errorf("event_callback(rule_id=%d url=%s) fail, resp: %s, err: %v, code: %d", event.RuleId, url, string(resp), err, code) } else {