From cc745d177d31d1875d01dc84418dbdeb9f913841 Mon Sep 17 00:00:00 2001 From: vaporvee Date: Sun, 17 Mar 2024 12:07:17 +0100 Subject: [PATCH] added log webhook support --- .env.example | 3 +- go.mod | 2 +- go.sum | 5 ++- log2webhook/log2webhook.go | 87 ++++++++++++++++++++++++++++++++++++++ main.go | 3 +- 5 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 log2webhook/log2webhook.go diff --git a/.env.example b/.env.example index b68c09d..bcb28e0 100644 --- a/.env.example +++ b/.env.example @@ -3,4 +3,5 @@ DB_USER="postgres" DB_PASSWORD="" DB_SERVER="localhost" DB_PORT=0000 -DB_NAME="postgres" \ No newline at end of file +DB_NAME="postgres" +LOG_WEBHOOK="" \ No newline at end of file diff --git a/go.mod b/go.mod index a6e18fd..1e29e29 100644 --- a/go.mod +++ b/go.mod @@ -7,11 +7,11 @@ require ( github.com/google/uuid v1.6.0 github.com/joho/godotenv v1.5.1 github.com/lib/pq v1.10.9 + github.com/sirupsen/logrus v1.9.3 ) require ( github.com/gorilla/websocket v1.4.2 // indirect - github.com/sirupsen/logrus v1.9.3 // indirect golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect ) diff --git a/go.sum b/go.sum index 8d6aa43..a7b0048 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,7 @@ github.com/bwmarrin/discordgo v0.27.1 h1:ib9AIc/dom1E/fSIulrBwnez0CToJE113ZGt4HoliGY= github.com/bwmarrin/discordgo v0.27.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -10,15 +11,16 @@ github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b h1:7mWr3k41Qtv8XlltBkDkl8LoP3mpSgBW8BUoxtEdbXg= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -26,4 +28,5 @@ golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9sn golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/log2webhook/log2webhook.go b/log2webhook/log2webhook.go new file mode 100644 index 0000000..af03f45 --- /dev/null +++ b/log2webhook/log2webhook.go @@ -0,0 +1,87 @@ +package log2webhook + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "net/http" + "os" + "strings" +) + +type Log struct { + File string `json:"file"` + Function string `json:"func"` + Level string `json:"level"` + Message string `json:"msg"` + Time string `json:"time"` +} + +type Message struct { + Embeds []Embed `json:"embeds"` +} +type Embed struct { + Author Author `json:"author"` + Title string `json:"title"` + Description string `json:"description"` + Footer Footer `json:"footer"` + Timestamp string `json:"timestamp"` +} + +type Author struct { + Name string `json:"name"` +} +type Footer struct { + Text string `json:"text"` +} + +type WebhookWriter struct{} + +func (cw *WebhookWriter) Write(p []byte) (n int, err error) { + webhook(p) + return len(p), nil +} + +func webhook(p []byte) { + webhookURL := os.Getenv("LOG_WEBHOOK") + if webhookURL == "" || !strings.HasPrefix(webhookURL, "http://") && !strings.HasPrefix(webhookURL, "https://") { + return + } + var logJson Log + json.Unmarshal(p, &logJson) + m := Message{ + Embeds: []Embed{ + { + Author: Author{ + Name: logJson.File, + }, + Title: logJson.Function, + Description: logJson.Message, + Footer: Footer{ + Text: logJson.Level, + }, + Timestamp: logJson.Time, + }, + }, + } + messageJson, err := json.Marshal(m) + if err != nil { + fmt.Println(err) + return + } + req, err := http.NewRequest("POST", webhookURL, bytes.NewBuffer(messageJson)) + if err != nil { + fmt.Println(err) + return + } + req.Header.Set("Content-Type", "application/json") + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + fmt.Println(err) + } + body, _ := io.ReadAll(resp.Body) + fmt.Println(string(body)) + defer resp.Body.Close() +} diff --git a/main.go b/main.go index efbf8e9..869955d 100644 --- a/main.go +++ b/main.go @@ -15,6 +15,7 @@ import ( "github.com/joho/godotenv" _ "github.com/lib/pq" "github.com/sirupsen/logrus" + "github.com/vaporvee/acecore/log2webhook" ) //TODO: add more error handlings @@ -79,6 +80,6 @@ func logrusInitFile() { return } - mw := io.MultiWriter(os.Stdout, log) + mw := io.MultiWriter(os.Stdout, log, &log2webhook.WebhookWriter{}) logrus.SetOutput(mw) }