Add logging and fix /agents/ route error
All checks were successful
Build and Release / build (push) Successful in 35s

This commit is contained in:
Ducky SSH User
2025-12-20 07:34:02 +00:00
parent 761b91b031
commit 50dcfcdc83
9 changed files with 158 additions and 65 deletions

View File

@@ -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),
)
}

View File

@@ -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)
}
}