From 26b31221f827cb37861d00b8a9c295590be6bd4c Mon Sep 17 00:00:00 2001 From: lorsan Date: Sun, 12 Apr 2026 10:21:37 +0300 Subject: [PATCH] refactor: refactor app --- internal/agent/app/app.go | 33 +++++++++++++++---- internal/agent/service/collector/collector.go | 13 +++----- internal/agent/service/docker_service/bad.go | 20 +++++++++++ .../agent/service/docker_service/docker.go | 5 +-- 4 files changed, 53 insertions(+), 18 deletions(-) create mode 100644 internal/agent/service/docker_service/bad.go diff --git a/internal/agent/app/app.go b/internal/agent/app/app.go index 2ff3ba4..e16df09 100644 --- a/internal/agent/app/app.go +++ b/internal/agent/app/app.go @@ -3,10 +3,14 @@ package app import ( standartlog "log" + "github.com/docker/docker/client" "github.com/lorsanstand/HomeOps-Hub/internal/agent/rpc" + "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" ) type App struct { @@ -27,11 +31,26 @@ func NewApp() *App { } func (a *App) Run() { - //conn, err := rpc.NewConnectAgent(a.cfg.GetGRPCAddress()) - //if err != nil { - // a.log.Error().Err(err) - // return - //} - // - //a.hubConn = conn + GRPCConn, err := grpc.NewClient(a.cfg.GetGRPCAddress()) + if err != nil { + a.log.Error().Err(err).Msg("failed to get hub connections") + return + } + + conn := rpc.NewConnectAgent(GRPCConn, a.log) + defer conn.Close() + + var DockerService collector.Docker + + DockerClient, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) + if err != nil { + a.log.Warn().Err(err).Msg("failed to get docker API") + DockerService = docker_service.NewBadDocker("not_installed") + } else { + DockerService = docker_service.NewDockerService(DockerClient, a.log) + } + + Collector := collector.NewCollector(DockerService, a.log) + + Collector.GatherInfoSystem() } diff --git a/internal/agent/service/collector/collector.go b/internal/agent/service/collector/collector.go index fdd4e67..4b613d9 100644 --- a/internal/agent/service/collector/collector.go +++ b/internal/agent/service/collector/collector.go @@ -1,31 +1,26 @@ package collector import ( - "context" "os" "runtime" - "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/container" "github.com/lorsanstand/HomeOps-Hub/internal/agent/domain" "github.com/rs/zerolog" ) type Docker interface { - Ping(ctx context.Context) (types.Ping, error) - ContainerList(ctx context.Context, opts container.ListOptions) ([]container.Summary, error) Capability() domain.Capability } type Collector struct { - log zerolog.Logger - docker Docker + log zerolog.Logger + dockerReader Docker } func NewCollector(docker Docker, logger zerolog.Logger) *Collector { logger = logger.With().Str("component", "agent.service.collector").Logger() - return &Collector{log: logger, docker: docker} + return &Collector{log: logger, dockerReader: docker} } func (c *Collector) GatherInfoSystem() (domain.HostInfo, []domain.Capability) { @@ -40,6 +35,6 @@ func (c *Collector) GatherInfoSystem() (domain.HostInfo, []domain.Capability) { host.Arch = runtime.GOARCH host.System = runtime.GOOS - caps := []domain.Capability{c.docker.Capability()} + caps := []domain.Capability{c.dockerReader.Capability()} return host, caps } diff --git a/internal/agent/service/docker_service/bad.go b/internal/agent/service/docker_service/bad.go new file mode 100644 index 0000000..bbd22ca --- /dev/null +++ b/internal/agent/service/docker_service/bad.go @@ -0,0 +1,20 @@ +package docker_service + +import "github.com/lorsanstand/HomeOps-Hub/internal/agent/domain" + +type BadDocker struct { + reason string +} + +func (d *BadDocker) Capability() domain.Capability { + return domain.Capability{ + Name: "docker", + Available: false, + Version: "", + Reason: d.reason, + } +} + +func NewBadDocker(reason string) *BadDocker { + return &BadDocker{reason: reason} +} diff --git a/internal/agent/service/docker_service/docker.go b/internal/agent/service/docker_service/docker.go index 680b39b..991d9e7 100644 --- a/internal/agent/service/docker_service/docker.go +++ b/internal/agent/service/docker_service/docker.go @@ -3,9 +3,10 @@ package docker_service import ( "context" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" "github.com/lorsanstand/HomeOps-Hub/internal/agent/domain" - "github.com/moby/moby/api/types" - "github.com/moby/moby/api/types/container" + "github.com/rs/zerolog" )