Add logging and fix /agents/ route error
All checks were successful
Build and Release / build (push) Successful in 35s
All checks were successful
Build and Release / build (push) Successful in 35s
This commit is contained in:
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
@@ -25,8 +25,12 @@ func main() {
|
||||
)
|
||||
flag.Parse()
|
||||
|
||||
// Set up verbose logging
|
||||
slog.SetLogLoggerLevel(slog.LevelDebug)
|
||||
|
||||
if *server == "" {
|
||||
log.Fatal("--server flag is required")
|
||||
slog.Error("Server flag is required")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Normalize server URL (add http:// if missing)
|
||||
@@ -38,12 +42,13 @@ func main() {
|
||||
var err error
|
||||
id, err = generateAgentID()
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to generate agent ID: %v", err)
|
||||
slog.Error("Failed to generate agent ID", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
log.Printf("Starting agent with ID: %s\n", id)
|
||||
log.Printf("Reporting to: %s every %v\n", *server, *interval)
|
||||
slog.Info("Starting agent", "id", id)
|
||||
slog.Info("Reporting configuration", "server", *server, "interval", *interval)
|
||||
|
||||
// Initialize stats collector
|
||||
collector := stats.NewCollector()
|
||||
@@ -64,7 +69,7 @@ func main() {
|
||||
case <-ticker.C:
|
||||
reportStats(id, *server, collector)
|
||||
case <-sigChan:
|
||||
log.Println("Agent shutting down gracefully...")
|
||||
slog.Info("Agent shutting down gracefully")
|
||||
os.Exit(0)
|
||||
}
|
||||
}
|
||||
@@ -79,37 +84,39 @@ func reportStats(agentID, serverURL string, collector *stats.Collector) {
|
||||
|
||||
stat, err := collector.Collect(hostname)
|
||||
if err != nil {
|
||||
log.Printf("Error collecting stats: %v", err)
|
||||
slog.Error("Error collecting stats", "agentID", agentID, "hostname", hostname, "error", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Marshal to JSON
|
||||
body, err := json.Marshal(stat)
|
||||
if err != nil {
|
||||
log.Printf("Error marshaling stats: %v", err)
|
||||
slog.Error("Error marshaling stats", "agentID", agentID, "error", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Send to server
|
||||
reportURL := fmt.Sprintf("%s/api/report?id=%s", serverURL, agentID)
|
||||
slog.Debug("Sending stats report", "agentID", agentID, "url", reportURL, "bodySize", len(body))
|
||||
resp, err := http.Post(reportURL, "application/json", bytes.NewReader(body))
|
||||
if err != nil {
|
||||
log.Printf("Error reporting stats: %v", err)
|
||||
slog.Error("Error reporting stats", "agentID", agentID, "url", reportURL, "error", err)
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
log.Printf("Server returned status %d", resp.StatusCode)
|
||||
slog.Error("Server returned non-OK status", "agentID", agentID, "statusCode", resp.StatusCode, "url", reportURL)
|
||||
return
|
||||
}
|
||||
|
||||
log.Printf("Stats reported: CPU %.1f%% | RAM %s / %s | Disk %s / %s",
|
||||
stat.CPUUsage,
|
||||
formatBytes(stat.RAMUsage),
|
||||
formatBytes(stat.RAMTotal),
|
||||
formatBytes(stat.DiskUsage),
|
||||
formatBytes(stat.DiskTotal),
|
||||
slog.Debug("Stats reported successfully",
|
||||
"agentID", agentID,
|
||||
"cpu", stat.CPUUsage,
|
||||
"ramUsage", formatBytes(stat.RAMUsage),
|
||||
"ramTotal", formatBytes(stat.RAMTotal),
|
||||
"diskUsage", formatBytes(stat.DiskUsage),
|
||||
"diskTotal", formatBytes(stat.DiskTotal),
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"log"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
@@ -24,6 +24,9 @@ func main() {
|
||||
)
|
||||
flag.Parse()
|
||||
|
||||
// Set up verbose logging
|
||||
slog.SetLogLoggerLevel(slog.LevelDebug)
|
||||
|
||||
// Initialize dependencies
|
||||
s := store.New()
|
||||
authMgr := auth.New(*username, *password)
|
||||
@@ -63,14 +66,15 @@ func main() {
|
||||
|
||||
go func() {
|
||||
<-sigChan
|
||||
log.Println("Shutting down server...")
|
||||
slog.Info("Shutting down server...")
|
||||
server.Close()
|
||||
os.Exit(0)
|
||||
}()
|
||||
|
||||
log.Printf("Starting server on http://%s:%s\n", *addr, *port)
|
||||
log.Printf("Login with %s / %s\n", *username, *password)
|
||||
slog.Info("Starting server", "addr", *addr+":"+*port, "url", "http://"+*addr+":"+*port)
|
||||
slog.Info("Login credentials", "username", *username, "password", *password)
|
||||
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||||
log.Fatalf("Server error: %v", err)
|
||||
slog.Error("Server error", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user