|
|
@@ -111,63 +111,68 @@ func (this *DiscordNotifier) Notify(evalContext *alerting.EvalContext) error {
|
|
|
|
|
|
json, _ := bodyJSON.MarshalJSON()
|
|
|
|
|
|
- content_type := "application/json"
|
|
|
-
|
|
|
- var body []byte
|
|
|
-
|
|
|
- if embeddedImage {
|
|
|
-
|
|
|
- var b bytes.Buffer
|
|
|
-
|
|
|
- w := multipart.NewWriter(&b)
|
|
|
-
|
|
|
- f, err := os.Open(evalContext.ImageOnDiskPath)
|
|
|
+ cmd := &m.SendWebhookSync{
|
|
|
+ Url: this.WebhookURL,
|
|
|
+ HttpMethod: "POST",
|
|
|
+ ContentType: "application/json",
|
|
|
+ }
|
|
|
|
|
|
+ if !embeddedImage {
|
|
|
+ cmd.Body = string(json)
|
|
|
+ } else {
|
|
|
+ err := this.embedImage(cmd, evalContext.ImageOnDiskPath, json)
|
|
|
if err != nil {
|
|
|
- this.log.Error("Can't open graph file", err)
|
|
|
+ this.log.Error("failed to embed image", "error", err)
|
|
|
return err
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- defer f.Close()
|
|
|
-
|
|
|
- fw, err := w.CreateFormField("payload_json")
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
+ if err := bus.DispatchCtx(evalContext.Ctx, cmd); err != nil {
|
|
|
+ this.log.Error("Failed to send notification to Discord", "error", err)
|
|
|
+ return err
|
|
|
+ }
|
|
|
|
|
|
- if _, err = fw.Write([]byte(string(json))); err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
+ return nil
|
|
|
+}
|
|
|
|
|
|
- fw, err = w.CreateFormFile("file", "graph.png")
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
+func (this *DiscordNotifier) embedImage(cmd *m.SendWebhookSync, imagePath string, existingJSONBody []byte) error {
|
|
|
+ f, err := os.Open(imagePath)
|
|
|
+ defer f.Close()
|
|
|
+ if err != nil {
|
|
|
+ if os.IsNotExist(err) {
|
|
|
+ cmd.Body = string(existingJSONBody)
|
|
|
+ return nil
|
|
|
}
|
|
|
-
|
|
|
- if _, err = io.Copy(fw, f); err != nil {
|
|
|
+ if !os.IsNotExist(err) {
|
|
|
return err
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- w.Close()
|
|
|
+ var b bytes.Buffer
|
|
|
+ w := multipart.NewWriter(&b)
|
|
|
|
|
|
- body = b.Bytes()
|
|
|
- content_type = w.FormDataContentType()
|
|
|
+ fw, err := w.CreateFormField("payload_json")
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
|
|
|
- } else {
|
|
|
- body = json
|
|
|
+ if _, err = fw.Write([]byte(string(existingJSONBody))); err != nil {
|
|
|
+ return err
|
|
|
}
|
|
|
|
|
|
- cmd := &m.SendWebhookSync{
|
|
|
- Url: this.WebhookURL,
|
|
|
- Body: string(body),
|
|
|
- HttpMethod: "POST",
|
|
|
- ContentType: content_type,
|
|
|
+ fw, err = w.CreateFormFile("file", "graph.png")
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
}
|
|
|
|
|
|
- if err := bus.DispatchCtx(evalContext.Ctx, cmd); err != nil {
|
|
|
- this.log.Error("Failed to send notification to Discord", "error", err)
|
|
|
+ if _, err = io.Copy(fw, f); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
+ w.Close()
|
|
|
+
|
|
|
+ cmd.Body = string(b.Bytes())
|
|
|
+ cmd.ContentType = w.FormDataContentType()
|
|
|
+
|
|
|
return nil
|
|
|
}
|