From 648c2d0a999202901e417129e5f462e4d24e0185 Mon Sep 17 00:00:00 2001 From: lorsan Date: Mon, 13 Apr 2026 16:37:54 +0300 Subject: [PATCH] create register agent in agent --- .idea/inspectionProfiles/Project_Default.xml | 6 ++ ....sync-conflict-20260413-162916-XNSB2YU.xml | 74 +++++++++++++++++++ cmd/agent/main.go | 2 +- internal/agent/app/app.go | 13 +++- internal/agent/rpc/mapper.go | 4 + internal/agent/service/agent_service/agent.go | 53 +++++++++++++ internal/agent/utils/config_yaml/config.go | 4 +- internal/hub/rpc/server.go | 4 + 8 files changed, 154 insertions(+), 6 deletions(-) create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/workspace.sync-conflict-20260413-162916-XNSB2YU.xml create mode 100644 internal/agent/service/agent_service/agent.go diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..5cb71ef --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/workspace.sync-conflict-20260413-162916-XNSB2YU.xml b/.idea/workspace.sync-conflict-20260413-162916-XNSB2YU.xml new file mode 100644 index 0000000..24c3faf --- /dev/null +++ b/.idea/workspace.sync-conflict-20260413-162916-XNSB2YU.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + { + "associatedIndex": 6 +} + + + + + + + + + + + + + + 1775479991162 + + + + + + \ No newline at end of file diff --git a/cmd/agent/main.go b/cmd/agent/main.go index 3a3986a..9370bec 100644 --- a/cmd/agent/main.go +++ b/cmd/agent/main.go @@ -1,6 +1,6 @@ package main -import "github.com/lorsanstand/HomeOps-Hub/internal/hub/app" +import "github.com/lorsanstand/HomeOps-Hub/internal/agent/app" func main() { start := app.NewApp() diff --git a/internal/agent/app/app.go b/internal/agent/app/app.go index e16df09..d87f5c8 100644 --- a/internal/agent/app/app.go +++ b/internal/agent/app/app.go @@ -1,16 +1,19 @@ package app import ( + "context" standartlog "log" "github.com/docker/docker/client" "github.com/lorsanstand/HomeOps-Hub/internal/agent/rpc" + "github.com/lorsanstand/HomeOps-Hub/internal/agent/service/agent_service" "github.com/lorsanstand/HomeOps-Hub/internal/agent/service/collector" "github.com/lorsanstand/HomeOps-Hub/internal/agent/service/docker_service" "github.com/lorsanstand/HomeOps-Hub/internal/agent/utils/config_yaml" log2 "github.com/lorsanstand/HomeOps-Hub/internal/shared/log" "github.com/rs/zerolog" "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" ) type App struct { @@ -20,6 +23,7 @@ type App struct { } func NewApp() *App { + cfg, err := config_yaml.NewConfig() if err != nil { standartlog.Fatalf("failed get config: %v", err) @@ -31,7 +35,9 @@ func NewApp() *App { } func (a *App) Run() { - GRPCConn, err := grpc.NewClient(a.cfg.GetGRPCAddress()) + ctx := context.Background() + + GRPCConn, err := grpc.NewClient(a.cfg.GetGRPCAddress(), grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { a.log.Error().Err(err).Msg("failed to get hub connections") return @@ -50,7 +56,8 @@ func (a *App) Run() { DockerService = docker_service.NewDockerService(DockerClient, a.log) } - Collector := collector.NewCollector(DockerService, a.log) + collect := collector.NewCollector(DockerService, a.log) - Collector.GatherInfoSystem() + agent := agent_service.NewAgentService(collect, conn, "", a.cfg, a.log) + agent.RegisterAgentConn(ctx) } diff --git a/internal/agent/rpc/mapper.go b/internal/agent/rpc/mapper.go index 79c45dc..f4d729a 100644 --- a/internal/agent/rpc/mapper.go +++ b/internal/agent/rpc/mapper.go @@ -33,6 +33,10 @@ func toGRPCCapability(caps []domain.Capability) []*pb.Capability { } func toAgentRegisterDataResponse(response *pb.RegisterAgentResponse) domain.RegisterAgentDataResponse { + if response == nil { + return domain.RegisterAgentDataResponse{} + } + return domain.RegisterAgentDataResponse{ AgentID: response.AgentId, Heartbeat: int(response.HeartbeatIntervalSecond), diff --git a/internal/agent/service/agent_service/agent.go b/internal/agent/service/agent_service/agent.go new file mode 100644 index 0000000..2f28a1c --- /dev/null +++ b/internal/agent/service/agent_service/agent.go @@ -0,0 +1,53 @@ +package agent_service + +import ( + "context" + "fmt" + + "github.com/lorsanstand/HomeOps-Hub/internal/agent/domain" + "github.com/lorsanstand/HomeOps-Hub/internal/agent/utils/config_yaml" + "github.com/rs/zerolog" +) + +type Collector interface { + GatherInfoSystem() (domain.HostInfo, []domain.Capability) +} + +type HubConnection interface { + RegisterAgent(ctx context.Context, RegisterData domain.RegisterAgentData) (domain.RegisterAgentDataResponse, error) +} + +type AgentService struct { + collect Collector + conn HubConnection + log zerolog.Logger + cfg *config_yaml.AgentConfig + heartBeat int + agentID string +} + +func NewAgentService( + collector Collector, + conn HubConnection, + AgentID string, + cfg *config_yaml.AgentConfig, + logger zerolog.Logger, +) *AgentService { + logger = logger.With().Str("component", "agent.service.agent_serivce").Logger() + + return &AgentService{collect: collector, conn: conn, cfg: cfg, log: logger, agentID: AgentID} +} + +func (a *AgentService) RegisterAgentConn(ctx context.Context) { + info, caps := a.collect.GatherInfoSystem() + AgentID := a.agentID + AgentName := a.cfg.AppName + AgentData := domain.RegisterAgentData{AgentId: AgentID, AgentName: AgentName, Host: info, Capabilities: caps} + + data, err := a.conn.RegisterAgent(ctx, AgentData) + if err != nil { + a.log.Error().Err(err).Msg("failed register agent") + return + } + fmt.Println(data) +} diff --git a/internal/agent/utils/config_yaml/config.go b/internal/agent/utils/config_yaml/config.go index 5472b34..6bccab3 100644 --- a/internal/agent/utils/config_yaml/config.go +++ b/internal/agent/utils/config_yaml/config.go @@ -18,7 +18,7 @@ type AgentConfig struct { } func NewConfig() (*AgentConfig, error) { - yamlFile, err := os.ReadFile("config.yaml") + yamlFile, err := os.ReadFile("agent.dev.yaml") if err != nil { return nil, fmt.Errorf("failed open file: %v", err) } @@ -41,7 +41,7 @@ func (c *AgentConfig) GetLogLevel() zerolog.Level { } func (c *AgentConfig) GetMode() string { - return "PROD" + return "DEV" } func (c *AgentConfig) GetGRPCAddress() string { diff --git a/internal/hub/rpc/server.go b/internal/hub/rpc/server.go index 0692d17..3e5429d 100644 --- a/internal/hub/rpc/server.go +++ b/internal/hub/rpc/server.go @@ -30,3 +30,7 @@ func (h *HubHandler) Ping(ctx context.Context, _ *emptypb.Empty) (*pb.PongRespon h.log.Info().Msg("pong request") return &pb.PongResponse{Pong: "Pong"}, nil } + +func (h *HubHandler) RegisterAgent(ctx context.Context, request *pb.RegisterAgentRequest) (*pb.RegisterAgentResponse, error) { + return &pb.RegisterAgentResponse{AgentId: "12234", HeartbeatIntervalSecond: 2}, nil +}