refactor: refactor app

This commit is contained in:
lorsan
2026-04-12 10:21:37 +03:00
parent 3f950f37b3
commit 26b31221f8
4 changed files with 53 additions and 18 deletions
+26 -7
View File
@@ -3,10 +3,14 @@ package app
import ( import (
standartlog "log" standartlog "log"
"github.com/docker/docker/client"
"github.com/lorsanstand/HomeOps-Hub/internal/agent/rpc" "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" "github.com/lorsanstand/HomeOps-Hub/internal/agent/utils/config_yaml"
log2 "github.com/lorsanstand/HomeOps-Hub/internal/shared/log" log2 "github.com/lorsanstand/HomeOps-Hub/internal/shared/log"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"google.golang.org/grpc"
) )
type App struct { type App struct {
@@ -27,11 +31,26 @@ func NewApp() *App {
} }
func (a *App) Run() { func (a *App) Run() {
//conn, err := rpc.NewConnectAgent(a.cfg.GetGRPCAddress()) GRPCConn, err := grpc.NewClient(a.cfg.GetGRPCAddress())
//if err != nil { if err != nil {
// a.log.Error().Err(err) a.log.Error().Err(err).Msg("failed to get hub connections")
// return return
//} }
//
//a.hubConn = conn 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()
} }
@@ -1,31 +1,26 @@
package collector package collector
import ( import (
"context"
"os" "os"
"runtime" "runtime"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/lorsanstand/HomeOps-Hub/internal/agent/domain" "github.com/lorsanstand/HomeOps-Hub/internal/agent/domain"
"github.com/rs/zerolog" "github.com/rs/zerolog"
) )
type Docker interface { type Docker interface {
Ping(ctx context.Context) (types.Ping, error)
ContainerList(ctx context.Context, opts container.ListOptions) ([]container.Summary, error)
Capability() domain.Capability Capability() domain.Capability
} }
type Collector struct { type Collector struct {
log zerolog.Logger log zerolog.Logger
docker Docker dockerReader Docker
} }
func NewCollector(docker Docker, logger zerolog.Logger) *Collector { func NewCollector(docker Docker, logger zerolog.Logger) *Collector {
logger = logger.With().Str("component", "agent.service.collector").Logger() 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) { 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.Arch = runtime.GOARCH
host.System = runtime.GOOS host.System = runtime.GOOS
caps := []domain.Capability{c.docker.Capability()} caps := []domain.Capability{c.dockerReader.Capability()}
return host, caps return host, caps
} }
@@ -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}
}
@@ -3,9 +3,10 @@ package docker_service
import ( import (
"context" "context"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/lorsanstand/HomeOps-Hub/internal/agent/domain" "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" "github.com/rs/zerolog"
) )