From 6307923dd9164136c8bf7a502a5f8540c0cbdbff Mon Sep 17 00:00:00 2001 From: Iru Sensei Date: Sun, 23 Nov 2025 16:39:06 +0100 Subject: [PATCH] initial hopefully work setup --- main.go | 9 +++++---- parser.go | 34 ---------------------------------- server.go | 30 ++++++++++++++++++++++++++++++ types.go | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 38 deletions(-) create mode 100644 server.go create mode 100644 types.go diff --git a/main.go b/main.go index 8d683c8..67809f1 100644 --- a/main.go +++ b/main.go @@ -2,12 +2,13 @@ package main import ( "log" + "fmt" + "net/http" ) func main() { cfg := LoadConfig() - log.Printf("Port: %s", cfg.Port) - log.Printf("Nsec: %s", cfg.NSec) - log.Printf("Npub: %s", cfg.NPub) - log.Printf("Relays: %s", cfg.Relays) + http.HandleFunc("/", alertReceiver) + log.Printf("Server starting on http://localhost:%d", cfg.Port) + log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", cfg.Port), nil)) } diff --git a/parser.go b/parser.go index 1a7caec..555366f 100644 --- a/parser.go +++ b/parser.go @@ -5,40 +5,6 @@ import ( "encoding/json" ) -type Alert struct { - Status string `json:"status"` - StartsAt string `json:"startsAt"` - EndsAt string `json:"endsAt"` - GeneratorURL string `json:"generatorURL"` - Fingerprint string `json:"fingerprint"` - SilenceURL string `json:"silenceURL"` - DashboardURL string `json:"dashboardURL"` - PanelURL string `json:"panelURL"` - ValueString string `json:"valueString"` - OrgId int `json:"orgId"` - Labels map[string]any `json:"labels"` - Annotations map[string]any `json:"annotations"` - values map[int]any `json:"values"` -} - -type Payload struct { - Receiver string `json:"receiver"` - Status string `json:"firing"` - ExternalURL string `json:"externalURL"` - Version string `json:"version"` - GroupKey string `json:"groupKey"` - TruncatedAlerts int `json:"truncatedAlerts"` - OrgID int `json:"orgId"` - Title string `json:"title"` - State string `json"state"` - Message string `json:"message"` - Alerts []Alert `json:"alerts"` - GroupLabels map[string]any `json:"groupLabels"` - CommonLabels map[string]any `json:"groupLabels"` - CommonAnnotations map[string]any `json:"commonAnnotations"` -} - - func ParseAlert(payload []byte) (string) { var data Payload p1 := json.Unmarshal(payload, &data) diff --git a/server.go b/server.go new file mode 100644 index 0000000..da142fc --- /dev/null +++ b/server.go @@ -0,0 +1,30 @@ +package main + +import ( + "fmt" + "io" + "net/http" +) + +func alertReceiver(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) + return + } + + body, err := io.ReadAll(io.LimitReader(r.Body, 1<<20)) + if err != nil { + http.Error(w, "Payload exceeded maximum size. Are you really sending alerts?", http.StatusBadRequest) + return + } + defer r.Body.Close() + + if len(body) == 0 { + http.Error(w, "Empty payload", http.StatusBadRequest) + return + } + + payload := ParseAlert(body) + fmt.Printf(payload) + +} diff --git a/types.go b/types.go new file mode 100644 index 0000000..80fd10a --- /dev/null +++ b/types.go @@ -0,0 +1,35 @@ +package main + + +type Alert struct { + Status string `json:"status"` + StartsAt string `json:"startsAt"` + EndsAt string `json:"endsAt"` + GeneratorURL string `json:"generatorURL"` + Fingerprint string `json:"fingerprint"` + SilenceURL string `json:"silenceURL"` + DashboardURL string `json:"dashboardURL"` + PanelURL string `json:"panelURL"` + ValueString string `json:"valueString"` + OrgId int `json:"orgId"` + Labels map[string]any `json:"labels"` + Annotations map[string]any `json:"annotations"` + values map[int]any `json:"values"` +} + +type Payload struct { + Receiver string `json:"receiver"` + Status string `json:"firing"` + ExternalURL string `json:"externalURL"` + Version string `json:"version"` + GroupKey string `json:"groupKey"` + TruncatedAlerts int `json:"truncatedAlerts"` + OrgID int `json:"orgId"` + Title string `json:"title"` + State string `json"state"` + Message string `json:"message"` + Alerts []Alert `json:"alerts"` + GroupLabels map[string]any `json:"groupLabels"` + CommonLabels map[string]any `json:"groupLabels"` + CommonAnnotations map[string]any `json:"commonAnnotations"` +}