@@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
"time"
|
||||||
|
|
||||||
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/proto/proto"
|
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/proto/proto"
|
||||||
"google.golang.org/grpc/metadata"
|
"google.golang.org/grpc/metadata"
|
||||||
@@ -23,6 +24,9 @@ func (c *Collector) ReportServices(ctx context.Context, req *proto.ServicesUpdat
|
|||||||
}
|
}
|
||||||
agentName := whoamiVals[0]
|
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))
|
services := make([]Service, 0, len(req.Services))
|
||||||
for _, s := range req.Services {
|
for _, s := range req.Services {
|
||||||
services = append(services, Service{s.Name, s.Status})
|
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]
|
agentName := whoamiVals[0]
|
||||||
|
|
||||||
|
// Auto-register agent if not yet known (e.g. log stream not connected yet)
|
||||||
|
c.ensureAgentRegistered(agentName)
|
||||||
|
|
||||||
metrics := SystemMetrics{
|
metrics := SystemMetrics{
|
||||||
CPUPercent: req.CpuPercent,
|
CPUPercent: req.CpuPercent,
|
||||||
MemoryPercent: req.MemoryPercent,
|
MemoryPercent: req.MemoryPercent,
|
||||||
@@ -68,3 +75,18 @@ func (c *Collector) ReportSystemMetrics(ctx context.Context, req *proto.SystemMe
|
|||||||
|
|
||||||
return &proto.SystemMetricsResp{}, nil
|
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