From 49fb716135a47a5fd96be40c4500ff6d983c666f Mon Sep 17 00:00:00 2001 From: yusing Date: Sat, 1 Feb 2025 01:42:49 +0800 Subject: [PATCH] fix notification fields order --- internal/notif/dispatcher.go | 11 ++++++++++- internal/notif/format.go | 22 ++++++---------------- internal/watcher/health/monitor/monitor.go | 14 +++++++------- 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/internal/notif/dispatcher.go b/internal/notif/dispatcher.go index af466e1..c8f4c67 100644 --- a/internal/notif/dispatcher.go +++ b/internal/notif/dispatcher.go @@ -14,10 +14,15 @@ type ( logCh chan *LogMessage providers F.Set[Provider] } + LogField struct { + Name string `json:"name"` + Value string `json:"value"` + } + LogFields []LogField LogMessage struct { Level zerolog.Level Title string - Extras map[string]any + Extras LogFields Color Color } ) @@ -48,6 +53,10 @@ func Notify(msg *LogMessage) { } } +func (f *LogFields) Add(name, value string) { + *f = append(*f, LogField{Name: name, Value: value}) +} + func (disp *Dispatcher) RegisterProvider(cfg *NotificationConfig) { disp.providers.Add(cfg.Provider) } diff --git a/internal/notif/format.go b/internal/notif/format.go index f78e38a..f54d897 100644 --- a/internal/notif/format.go +++ b/internal/notif/format.go @@ -3,32 +3,22 @@ package notif import ( "bytes" "encoding/json" - "fmt" ) -func formatMarkdown(extras map[string]interface{}) string { +func formatMarkdown(extras LogFields) string { msg := bytes.NewBufferString("") - for k, v := range extras { + for _, field := range extras { msg.WriteString("#### ") - msg.WriteString(k) + msg.WriteString(field.Name) msg.WriteRune('\n') - msg.WriteString(fmt.Sprintf("%v", v)) + msg.WriteString(field.Value) msg.WriteRune('\n') } return msg.String() } -func formatDiscord(extras map[string]interface{}) (string, error) { - fieldsMap := make([]map[string]any, len(extras)) - i := 0 - for k, extra := range extras { - fieldsMap[i] = map[string]any{ - "name": k, - "value": extra, - } - i++ - } - fields, err := json.Marshal(fieldsMap) +func formatDiscord(extras LogFields) (string, error) { + fields, err := json.Marshal(extras) if err != nil { return "", err } diff --git a/internal/watcher/health/monitor/monitor.go b/internal/watcher/health/monitor/monitor.go index 0895f08..be6aae6 100644 --- a/internal/watcher/health/monitor/monitor.go +++ b/internal/watcher/health/monitor/monitor.go @@ -198,22 +198,22 @@ func (mon *monitor) checkUpdateHealth() error { status = health.StatusUnhealthy } if result.Healthy != (mon.status.Swap(status) == health.StatusHealthy) { - extras := map[string]any{ - "Service Name": mon.service, - "Time": strutils.FormatTime(time.Now()), + extras := notif.LogFields{ + {Name: "Service Name", Value: mon.service}, + {Name: "Time", Value: strutils.FormatTime(time.Now())}, } if !result.Healthy { - extras["Last Seen"] = strutils.FormatLastSeen(GetLastSeen(mon.service)) + extras.Add("Last Seen", strutils.FormatLastSeen(GetLastSeen(mon.service))) } if !mon.url.Load().Nil() { - extras["Service URL"] = mon.url.Load().String() + extras.Add("Service URL", mon.url.Load().String()) } if result.Detail != "" { - extras["Detail"] = result.Detail + extras.Add("Detail", result.Detail) } if result.Healthy { logger.Info().Msg("service is up") - extras["Ping"] = fmt.Sprintf("%d ms", result.Latency.Milliseconds()) + extras.Add("Ping", fmt.Sprintf("%d ms", result.Latency.Milliseconds())) notif.Notify(¬if.LogMessage{ Title: "✅ Service is up ✅", Extras: extras,