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
+
+
+ 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
+}