From eb8aef11a4fa9a1f93dc72950cd90148a79ddf83 Mon Sep 17 00:00:00 2001 From: d3m0k1d Date: Sun, 5 Apr 2026 08:46:29 +0300 Subject: [PATCH] fix unknow agent --- .../internal/grpcsrv/collector/services.go | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/backend/internal/grpcsrv/collector/services.go b/backend/internal/grpcsrv/collector/services.go index 1534182..18bd8eb 100644 --- a/backend/internal/grpcsrv/collector/services.go +++ b/backend/internal/grpcsrv/collector/services.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "log" + "time" "gitea.d3m0k1d.ru/d3m0k1d/HellreigN/proto/proto" "google.golang.org/grpc/metadata" @@ -23,6 +24,9 @@ func (c *Collector) ReportServices(ctx context.Context, req *proto.ServicesUpdat } agentName := whoamiVals[0] + // Auto-register agent if not yet known (e.g. log stream not connected yet) + c.ensureAgentRegistered(agentName) + services := make([]Service, 0, len(req.Services)) for _, s := range req.Services { services = append(services, Service{s.Name, s.Status}) @@ -51,6 +55,9 @@ func (c *Collector) ReportSystemMetrics(ctx context.Context, req *proto.SystemMe } agentName := whoamiVals[0] + // Auto-register agent if not yet known (e.g. log stream not connected yet) + c.ensureAgentRegistered(agentName) + metrics := SystemMetrics{ CPUPercent: req.CpuPercent, MemoryPercent: req.MemoryPercent, @@ -68,3 +75,18 @@ func (c *Collector) ReportSystemMetrics(ctx context.Context, req *proto.SystemMe return &proto.SystemMetricsResp{}, nil } + +// ensureAgentRegistered registers the agent in the tracker if it's not already there. +// This handles the case where agents send metrics/services before connecting to the log stream. +func (c *Collector) ensureAgentRegistered(agentName string) { + if _, ok := c.tracker.GetAgent(agentName); !ok { + agent := &Agent{ + ID: agentName, + Label: agentName, + Services: make([]Service, 0), + ConnectedAt: time.Now(), + } + c.tracker.Register(agent) + log.Printf("Auto-registered agent via unary RPC: %s", agentName) + } +}