CUB-117: Port Moonraker + MQTT printer integrations to Go

- Add internal/clients/moonraker.go: HTTP client for Moonraker REST API
- Add internal/clients/mqtt.go: MQTT client via paho.mqtt.golang with TLS support
- Add internal/workers/moonraker_poller.go: background polling, usage logging, SSE broadcasts
- Add internal/workers/mqtt_subscriber.go: per-printer MQTT subscriber, Bambu telemetry parsing, SSE broadcasts
- Wire workers into cmd/server/main.go (Start/Stop with graceful shutdown)

Blocked at step 4: go toolchain not installed on build host
This commit is contained in:
2026-05-10 16:14:35 -04:00
parent f1614029b5
commit 90fd028bfc
5 changed files with 844 additions and 0 deletions

View File

@@ -11,8 +11,10 @@ import (
"github.com/CubeCraft-Creations/Extrudex/backend/internal/config"
"github.com/CubeCraft-Creations/Extrudex/backend/internal/db"
"github.com/CubeCraft-Creations/Extrudex/backend/internal/repositories"
"github.com/CubeCraft-Creations/Extrudex/backend/internal/router"
"github.com/CubeCraft-Creations/Extrudex/backend/internal/sse"
"github.com/CubeCraft-Creations/Extrudex/backend/internal/workers"
)
func main() {
@@ -40,6 +42,11 @@ func main() {
slog.Info("database connected")
// Repositories (for background workers)
printerRepo := repositories.NewPrinterRepository(dbPool)
jobRepo := repositories.NewPrintJobRepository(dbPool)
usageLogRepo := repositories.NewUsageLogRepository(dbPool)
// Create SSE broadcaster and start it
sseBC := sse.NewBroadcaster(128)
sseBC.Start()
@@ -47,6 +54,19 @@ func main() {
slog.Info("sse broadcaster started")
// Start background workers
mrCfg := workers.DefaultMoonrakerPollerConfig()
mrPoller := workers.NewMoonrakerPoller(mrCfg, dbPool, printerRepo, jobRepo, usageLogRepo, sseBC)
mrPoller.Start()
defer mrPoller.Stop()
mqttCfg := workers.DefaultMQTTSubscriberConfig()
mqttSub := workers.NewMQTTSubscriber(mqttCfg, dbPool, printerRepo, usageLogRepo, sseBC)
mqttSub.Start()
defer mqttSub.Stop()
slog.Info("background workers started")
// Create router
r := router.New(cfg, dbPool, sseBC)