Basic functionality working
Some checks failed
Deploy and Push Docker Image / BuildAndPush (push) Failing after 14s

This commit is contained in:
Henri Burau
2025-06-19 13:57:36 +02:00
parent fac655242f
commit 64f955c4a1
8 changed files with 293 additions and 0 deletions

28
internal/server/server.go Normal file
View File

@ -0,0 +1,28 @@
package server
import (
"fmt"
"net/http"
"sync"
"gitea.henriburau.de/ace966/WeeWooWebhook/internal/olc"
)
type Server struct {
OfficeLightClient *olc.OfficeLightClient
downServices map[int]bool
mu sync.Mutex
}
func NewServer(olc *olc.OfficeLightClient) *Server {
return &Server{
OfficeLightClient: olc,
downServices: make(map[int]bool),
}
}
func (s *Server) ListenAndServe() error {
fmt.Println("Server listening on :8085/wehook...")
http.HandleFunc("/webhook", s.webhookHandler())
return http.ListenAndServe(":8085", nil)
}

View File

@ -0,0 +1,56 @@
package server
import (
"encoding/json"
"fmt"
"log"
"net/http"
"gitea.henriburau.de/ace966/WeeWooWebhook/internal/model"
)
func (s *Server) webhookHandler() http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var data model.UptimeKumaWebhookRequest
if err := json.NewDecoder(r.Body).Decode(&data); err != nil {
http.Error(w, "Invalid JSON", http.StatusBadRequest)
return
}
log.Printf("Received webhook msg: %s\n", data.Msg)
s.mu.Lock()
defer s.mu.Unlock()
wasDown := s.downServices[data.Monitor.ID]
switch data.Heartbeat.Status {
case model.MonitorStatusDown:
if !wasDown {
s.downServices[data.Heartbeat.MonitorID] = true
log.Printf("Service DOWN: %s", data.Monitor.Name)
go s.activateEmergencyLight()
}
case model.MonitorStatusUp:
if wasDown {
delete(s.downServices, data.Heartbeat.MonitorID)
log.Printf("Service UP: %s", data.Monitor.Name)
if len(s.downServices) == 0 {
go s.deactivateEmergencyLight()
}
}
}
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, "Received")
}
}
func (s *Server) activateEmergencyLight() {
s.OfficeLightClient.SetColor(255, 0, 0) // Set to red
s.OfficeLightClient.SetLightState(true) // Turn on
}
func (s *Server) deactivateEmergencyLight() {
s.OfficeLightClient.SetLightState(false) // Turn off
}