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