Add MQTT client wrapper; wire startup publish; support env-config
This commit is contained in:
+41
-3
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
@@ -11,12 +12,46 @@ import (
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"git.piskot.si/SeminarM2/lambdaiot-core/internal/config"
|
||||
mqttclient "git.piskot.si/SeminarM2/lambdaiot-core/internal/mqtt"
|
||||
"git.piskot.si/SeminarM2/lambdaiot-core/internal/handler"
|
||||
"git.piskot.si/SeminarM2/lambdaiot-core/internal/middleware"
|
||||
)
|
||||
|
||||
func main() {
|
||||
addr := ":8080"
|
||||
// load configuration (look for ./config.toml by default)
|
||||
cfg, err := config.Load("")
|
||||
if err != nil {
|
||||
log.Fatalf("failed to load config: %v", err)
|
||||
}
|
||||
|
||||
// determine address
|
||||
addr := cfg.Server.Address
|
||||
if addr == "" {
|
||||
addr = ":8080"
|
||||
}
|
||||
if cfg.Server.Port != 0 {
|
||||
addr = fmt.Sprintf(":%d", cfg.Server.Port)
|
||||
}
|
||||
|
||||
// connect to MQTT broker (best-effort)
|
||||
var mq *mqttclient.Client
|
||||
if cfg.MQTT.Broker != "" {
|
||||
mqc, err := mqttclient.Connect(cfg.MQTT)
|
||||
if err != nil {
|
||||
log.Printf("warning: mqtt connect failed: %v", err)
|
||||
} else {
|
||||
mq = mqc
|
||||
// publish a startup message (non-blocking)
|
||||
go func() {
|
||||
msg := fmt.Sprintf("lambdaiot-core started on %s", addr)
|
||||
if err := mq.Publish(cfg.MQTT.Topic, []byte(msg)); err != nil {
|
||||
log.Printf("mqtt publish failed: %v", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Gin setup
|
||||
r := gin.New()
|
||||
@@ -30,7 +65,7 @@ func main() {
|
||||
|
||||
// Protected routes
|
||||
auth := r.Group("/")
|
||||
auth.Use(middleware.AuthMiddleware(getJWTSecret()))
|
||||
auth.Use(middleware.AuthMiddleware(cfg.Server.JWTSecret))
|
||||
auth.GET("/protected", handler.Protected)
|
||||
|
||||
srv := &http.Server{
|
||||
@@ -53,6 +88,9 @@ func main() {
|
||||
if err := srv.Shutdown(ctx); err != nil {
|
||||
log.Fatalf("server forced to shutdown: %v", err)
|
||||
}
|
||||
if mq != nil {
|
||||
mq.Close()
|
||||
}
|
||||
log.Println("server exiting")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user