From 645f934db12d013830cac69d2f4b4208e230efcff5920b67b342fcea35e3311a Mon Sep 17 00:00:00 2001 From: Adam Majer Date: Thu, 15 Aug 2024 10:47:59 +0200 Subject: [PATCH] . --- gitea-events-rabbitmq-publisher/main.go | 21 ++++++++++------ gitea-events-rabbitmq-publisher/rabbitmq.go | 28 ++++++++++++++------- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/gitea-events-rabbitmq-publisher/main.go b/gitea-events-rabbitmq-publisher/main.go index 47f0e66..1e10c01 100644 --- a/gitea-events-rabbitmq-publisher/main.go +++ b/gitea-events-rabbitmq-publisher/main.go @@ -1,6 +1,7 @@ package main import ( + "flag" "fmt" "log" "net/http" @@ -10,25 +11,29 @@ import ( ) const ( - ListenAddr = "[::1]:8002" - RabbitForwarderPath = "rabbitmq-forwarder" + ListenAddr = "[::1]:8002" + AppName = "rabbitmq-forwarder" ) +var DebugMode bool + func connectToRabbitMQ() { host := os.Getenv("RABBITMQ_HOST") username := os.Getenv("RABBITMQ_USERNAME") password := os.Getenv("RABBITMQ_PASSWORD") if len(host) == 0 || len(username) == 0 || len(password) == 0 { - fmt.Printf("Missing RABBITMQ_HOST, RABBITMQ_USERNAME, RABBITMQ_PASSWORD") + fmt.Println("Missing RABBITMQ_HOST, RABBITMQ_USERNAME, RABBITMQ_PASSWORD") os.Exit(1) } - + go ConnectToExchangeForPublish(host, username, password) } func main() { - common.RequireGiteaSecretToken() + flag.BoolVar(&DebugMode, "debug", false, "enables debugging messages") + flag.Parse() + connectToRabbitMQ() http.HandleFunc("POST /rabbitmq-forwarder/{Org}", func(res http.ResponseWriter, req *http.Request) { @@ -42,9 +47,11 @@ func main() { hdr := req.Header[common.GiteaRequestHeader] if len(hdr) != 1 { - // h.LogError("Unsupported number of %s headers: %d: %#v\n", GiteaRequestHeader, len(hdr), hdr) - // h.WriteError() res.WriteHeader(http.StatusInternalServerError) + log.Printf("Multiple Gitea headers received. %#v\n", hdr) + if DebugMode { + log.Println(req.Header) + } return } reqType := hdr[0] diff --git a/gitea-events-rabbitmq-publisher/rabbitmq.go b/gitea-events-rabbitmq-publisher/rabbitmq.go index a7f54ec..abf0c53 100644 --- a/gitea-events-rabbitmq-publisher/rabbitmq.go +++ b/gitea-events-rabbitmq-publisher/rabbitmq.go @@ -4,6 +4,7 @@ import ( "context" "crypto/tls" "encoding/json" + "errors" "fmt" "io" "log" @@ -15,7 +16,7 @@ import ( func failOnError(err error, msg string) { if err != nil { - log.Panicf("%s: %s", err, msg) + log.Panicf("%s: %s\n", err, msg) } } @@ -37,12 +38,17 @@ func PublicMessage(giteaWebhookType, giteaOrg string, msgBody io.Reader) error { } if !json.Valid(data) { - return fmt.Errorf("Invalid JSON in request") + return errors.New("Invalid JSON in request") } - messageQueue <- Message{ + select { + case messageQueue <- Message{ Topic: fmt.Sprintf("opensuse.gitea.%s.%s", giteaOrg, giteaWebhookType), Body: data, + }: + + default: + return errors.New("Enable to queue message. Possibly queue full.") } return nil } @@ -81,16 +87,20 @@ func ConnectToExchangeForPublish(host, username, password string) { for { msg, ok := <-messageQueue if !ok { - log.Printf("Shutdown ... \n") + log.Println("Shutdown ...") return } ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() + if DebugMode { + log.Println(msg) + } + err = ch.PublishWithContext(ctx, "pubsub", msg.Topic, false, false, rabbitmq.Publishing{ ContentType: "application/json", - AppId: RabbitForwarderPath, + AppId: AppName, Body: []byte(msg.Body), Timestamp: time.Now(), DeliveryMode: 2, @@ -101,17 +111,17 @@ func ConnectToExchangeForPublish(host, username, password string) { if ch.IsClosed() || connection.IsClosed() { select { case messageQueue <- msg: - log.Printf("requed ...") + log.Println("requed ...") default: - log.Printf("queue full... message lost") + log.Println("queue full... message lost") } // reconnect - log.Printf("reconnecting...") + log.Println("reconnecting...") time.Sleep(5 * time.Second) go ConnectToExchangeForPublish(host, username, password) return } else { - log.Printf("Error sending request. %v", err) + log.Printf("Error sending request. %v\n", err) } } }