zlh-agent/main.go
2025-12-13 20:54:18 +00:00

88 lines
2.4 KiB
Go
Executable File

package main
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"time"
agenthttp "zlh-agent/internal/http"
"zlh-agent/internal/system" // <-- ADD THIS
"zlh-agent/internal/util"
)
const AgentVersion = "v1.0.0" // Consolidated agent version tag
func main() {
log.Printf("[agent] starting ZeroLagHub Agent %s", AgentVersion)
// ------------------------------------------------------------
// Optional: enable log file (safe if path doesn't exist yet)
// ------------------------------------------------------------
_ = os.MkdirAll("/opt/zlh-agent/logs", 0755)
if err := util.InitLogFile("/opt/zlh-agent/logs/agent.log"); err != nil {
log.Printf("[agent] warning: log file init failed: %v", err)
} else {
log.Printf("[agent] file logging enabled")
}
defer util.CloseLog()
// ------------------------------------------------------------
// HTTP listen address
// ------------------------------------------------------------
addr := ":18888"
if v := os.Getenv("ZLH_AGENT_LISTEN"); v != "" {
addr = v
} else if v := os.Getenv("ZLH_AGENT_PORT"); v != "" {
addr = ":" + v
}
mux := agenthttp.NewMux()
// ------------------------------------------------------------
// Enable autostart subsystem
// (does nothing unless AutoStartEnabled=true)
// ------------------------------------------------------------
system.InitAutoStart() // <-- ADD THIS
server := &http.Server{
Addr: addr,
Handler: mux,
ReadTimeout: 30 * time.Second,
WriteTimeout: 30 * time.Second,
IdleTimeout: 60 * time.Second,
}
// ------------------------------------------------------------
// Graceful shutdown handling
// ------------------------------------------------------------
go func() {
log.Printf("[agent] listening on %s", addr)
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("[agent] http server error: %v", err)
}
}()
// Catch SIGINT / SIGTERM
stop := make(chan os.Signal, 1)
signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM)
<-stop
log.Println("[agent] shutdown signal received")
// Allow up to 10 seconds for graceful shutdown
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
log.Printf("[agent] http shutdown error: %v", err)
} else {
log.Println("[agent] http server stopped gracefully")
}
log.Println("[agent] exiting")
}