github.com/kubeshop/testkube@v1.17.23/internal/app/api/v1/events.go (about) 1 package v1 2 3 import ( 4 "context" 5 "encoding/json" 6 "net/http" 7 8 "github.com/gofiber/fiber/v2" 9 "github.com/gofiber/websocket/v2" 10 11 events "github.com/fluxcd/pkg/apis/event/v1beta1" 12 ) 13 14 // InitEvents is a handler to emit logs 15 func (s TestkubeAPI) InitEvents() { 16 // run reconciller loop 17 go s.Events.Reconcile(context.Background()) 18 19 // run workers 20 s.Events.Listen(context.Background()) 21 22 // handle response logs 23 go func() { 24 s.Log.Debug("Listening for workers results") 25 for resp := range s.Events.Results { 26 if resp.Error() != "" { 27 s.Log.Errorw("got error when sending webhooks", "response", resp) 28 continue 29 } 30 s.Log.Debugw("got event response", "response", resp) 31 } 32 }() 33 } 34 35 func (s TestkubeAPI) EventsStreamHandler() fiber.Handler { 36 return websocket.New(func(c *websocket.Conn) { 37 s.Log.Debugw("handling websocket connection", "id", c.Params("id"), "locals", c.Locals, "remoteAddr", c.RemoteAddr(), "localAddr", c.LocalAddr()) 38 39 // wait for disconnect 40 // WebsocketLoader will add WebsocketListener which will send data to `c` 41 <-s.WebsocketLoader.Add(c) 42 43 s.Log.Debugw("websocket closed", "id", c.Params("id")) 44 }) 45 } 46 47 // GetTestHandler is method for getting an existing test 48 func (s TestkubeAPI) FluxEventHandler() fiber.Handler { 49 return func(c *fiber.Ctx) error { 50 body := c.Body() 51 52 var event events.Event 53 err := json.Unmarshal(body, &event) 54 if err != nil { 55 return s.Error(c, http.StatusBadRequest, err) 56 } 57 58 // TODO handle Flux logic on deployment change 59 // check event.InvolvedObject? 60 switch event.Reason { 61 default: 62 s.Log.Debugw("got FluxCD event", "event", event) 63 } 64 65 return c.JSON(event) 66 } 67 }