@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user