mirror of
https://github.com/lorsanstand/HomeOps-Hub.git
synced 2026-06-21 17:35:16 +03:00
refactor: sync
This commit is contained in:
@@ -32,7 +32,6 @@ func NewApp() (*App, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
logger := log.NewLogger(cfg)
|
logger := log.NewLogger(cfg)
|
||||||
logger = logger.With().Str("component", "internal.app").Logger()
|
|
||||||
logger = logger.With().Str("name", cfg.AppName).Logger()
|
logger = logger.With().Str("name", cfg.AppName).Logger()
|
||||||
|
|
||||||
sett, err := settings.ReadSettings(cfg.SettingsPath)
|
sett, err := settings.ReadSettings(cfg.SettingsPath)
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package domain
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
domainHub "github.com/lorsanstand/HomeOps-Hub/shared/domain"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Command struct {
|
||||||
|
domainHub.CapabilityCommand
|
||||||
|
Execute func(ctx context.Context, args map[string]string) (string, error)
|
||||||
|
}
|
||||||
@@ -9,19 +9,6 @@ import (
|
|||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Collector interface {
|
|
||||||
GatherInfoSystem() (domain.HostInfo, []domain.Capability)
|
|
||||||
}
|
|
||||||
|
|
||||||
type Settings interface {
|
|
||||||
InsertAgentID(agentID string) error
|
|
||||||
GetAgentID() string
|
|
||||||
}
|
|
||||||
|
|
||||||
type HubConnection interface {
|
|
||||||
RegisterAgent(ctx context.Context, RegisterData domain.RegisterAgentRequest) (domain.RegisterAgentResponse, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
type AgentService struct {
|
type AgentService struct {
|
||||||
collect Collector
|
collect Collector
|
||||||
conn HubConnection
|
conn HubConnection
|
||||||
@@ -38,8 +25,6 @@ func NewAgentService(
|
|||||||
cfg *config_yaml.AgentConfig,
|
cfg *config_yaml.AgentConfig,
|
||||||
logger zerolog.Logger,
|
logger zerolog.Logger,
|
||||||
) *AgentService {
|
) *AgentService {
|
||||||
logger = logger.With().Str("component", "internal.service.agent_serivce").Logger()
|
|
||||||
|
|
||||||
return &AgentService{collect: collector, conn: conn, cfg: cfg, log: logger, settings: settings}
|
return &AgentService{collect: collector, conn: conn, cfg: cfg, log: logger, settings: settings}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package agent_service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/lorsanstand/HomeOps-Hub/shared/domain"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Collector interface {
|
||||||
|
GatherInfoSystem() (domain.HostInfo, []domain.Capability)
|
||||||
|
}
|
||||||
|
|
||||||
|
type Settings interface {
|
||||||
|
InsertAgentID(agentID string) error
|
||||||
|
GetAgentID() string
|
||||||
|
}
|
||||||
|
|
||||||
|
type HubConnection interface {
|
||||||
|
RegisterAgent(ctx context.Context, RegisterData domain.RegisterAgentRequest) (domain.RegisterAgentResponse, error)
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package docker_service
|
||||||
|
|
||||||
|
import domainHub "github.com/lorsanstand/HomeOps-Hub/shared/domain"
|
||||||
|
|
||||||
|
func (d *DockerService) Capability() domainHub.Capability {
|
||||||
|
capability := domainHub.Capability{
|
||||||
|
Available: true,
|
||||||
|
Version: "0",
|
||||||
|
Name: "docker",
|
||||||
|
Reason: "",
|
||||||
|
}
|
||||||
|
|
||||||
|
for command := com
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package docker_service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/lorsanstand/HomeOps-Hub/agent/internal/domain"
|
||||||
|
domainHub "github.com/lorsanstand/HomeOps-Hub/shared/domain"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (d *DockerService) commands() []domain.Command {
|
||||||
|
return []domain.Command{
|
||||||
|
{Execute: d.CheckDockerDaemon, CapabilityCommand: domainHub.CapabilityCommand{
|
||||||
|
Name: "check",
|
||||||
|
OptionalArgs: []domainHub.CommandArgs{},
|
||||||
|
RequiredArgs: []domainHub.CommandArgs{},
|
||||||
|
Version: "0",
|
||||||
|
Description: "Check docker daemon",
|
||||||
|
TypeOutput: "string",
|
||||||
|
}},
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,8 +5,6 @@ import (
|
|||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/lorsanstand/HomeOps-Hub/shared/domain"
|
|
||||||
|
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -23,14 +21,17 @@ type DockerService struct {
|
|||||||
func NewDockerService(api dockerAPI, logger zerolog.Logger) *DockerService {
|
func NewDockerService(api dockerAPI, logger zerolog.Logger) *DockerService {
|
||||||
return &DockerService{
|
return &DockerService{
|
||||||
dockerClient: api,
|
dockerClient: api,
|
||||||
log: logger.With().Str("component", "internal.serivce.docker").Logger(),
|
log: logger,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DockerService) CheckDockerDaemon(ctx context.Context) error {
|
func (d *DockerService) CheckDockerDaemon(ctx context.Context, args map[string]string) (string, error) {
|
||||||
_, err := d.dockerClient.Ping(ctx)
|
_, err := d.dockerClient.Ping(ctx)
|
||||||
d.log.Debug().Msg("ping docker")
|
d.log.Debug().Msg("ping docker")
|
||||||
return err
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return "successful", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DockerService) ContainersList(ctx context.Context) ([]container.Summary, error) {
|
func (d *DockerService) ContainersList(ctx context.Context) ([]container.Summary, error) {
|
||||||
@@ -38,12 +39,3 @@ func (d *DockerService) ContainersList(ctx context.Context) ([]container.Summary
|
|||||||
d.log.Debug().Msg("get container list")
|
d.log.Debug().Msg("get container list")
|
||||||
return ContainersList, err
|
return ContainersList, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DockerService) Capability() domain.Capability {
|
|
||||||
return domain.Capability{
|
|
||||||
Available: true,
|
|
||||||
Version: "0",
|
|
||||||
Name: "docker",
|
|
||||||
Reason: "",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package command_store
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"github.com/lorsanstand/HomeOps-Hub/agent/internal/domain"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CommandStore struct {
|
||||||
|
mutex sync.RWMutex
|
||||||
|
store map[string]*domain.Command
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CommandStore) Get(name string) (*domain.Command, bool) {
|
||||||
|
c.mutex.RLock()
|
||||||
|
function, ok := c.store[name]
|
||||||
|
c.mutex.Unlock()
|
||||||
|
return function, ok
|
||||||
|
}
|
||||||
@@ -8,7 +8,7 @@ import (
|
|||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
pb "github.com/lorsanstand/HomeOps-Hub/api/gen/homeops"
|
pb "github.com/lorsanstand/HomeOps-Hub/api/gen/homeops"
|
||||||
domainHub "github.com/lorsanstand/HomeOps-Hub/hub/internal/domain"
|
domainHub "github.com/lorsanstand/HomeOps-Hub/shared/domain"
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
pb "github.com/lorsanstand/HomeOps-Hub/api/gen/homeops"
|
pb "github.com/lorsanstand/HomeOps-Hub/api/gen/homeops"
|
||||||
domainHub "github.com/lorsanstand/HomeOps-Hub/hub/internal/domain"
|
domainHub "github.com/lorsanstand/HomeOps-Hub/shared/domain"
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
|
|
||||||
pb "github.com/lorsanstand/HomeOps-Hub/api/gen/homeops"
|
pb "github.com/lorsanstand/HomeOps-Hub/api/gen/homeops"
|
||||||
domainHub "github.com/lorsanstand/HomeOps-Hub/hub/internal/domain"
|
domainHub "github.com/lorsanstand/HomeOps-Hub/shared/domain"
|
||||||
)
|
)
|
||||||
|
|
||||||
type StreamConn interface {
|
type StreamConn interface {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
pb "github.com/lorsanstand/HomeOps-Hub/api/gen/homeops"
|
pb "github.com/lorsanstand/HomeOps-Hub/api/gen/homeops"
|
||||||
domainHub "github.com/lorsanstand/HomeOps-Hub/hub/internal/domain"
|
domainHub "github.com/lorsanstand/HomeOps-Hub/shared/domain"
|
||||||
)
|
)
|
||||||
|
|
||||||
func toCreateHeartbeatModel(agentID string, heartbeat *pb.AgentEvent_Heartbeat) domainHub.CreateHeartbeatModel {
|
func toCreateHeartbeatModel(agentID string, heartbeat *pb.AgentEvent_Heartbeat) domainHub.CreateHeartbeatModel {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
pb "github.com/lorsanstand/HomeOps-Hub/api/gen/homeops"
|
pb "github.com/lorsanstand/HomeOps-Hub/api/gen/homeops"
|
||||||
domainHub "github.com/lorsanstand/HomeOps-Hub/hub/internal/domain"
|
domainHub "github.com/lorsanstand/HomeOps-Hub/shared/domain"
|
||||||
)
|
)
|
||||||
|
|
||||||
type streamMock struct {
|
type streamMock struct {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package connection_manager
|
|||||||
import (
|
import (
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
domainHub "github.com/lorsanstand/HomeOps-Hub/hub/internal/domain"
|
domainHub "github.com/lorsanstand/HomeOps-Hub/shared/domain"
|
||||||
)
|
)
|
||||||
|
|
||||||
type AgentConnStore struct {
|
type AgentConnStore struct {
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ func toDomainCapabilities(caps []byte) []domain.Capability {
|
|||||||
return capabilities
|
return capabilities
|
||||||
}
|
}
|
||||||
|
|
||||||
func toDBHeartbeat(heartbeat domainHub.CreateHeartbeatModel) gen2.InsertHeartbeatParams {
|
func toDBHeartbeat(heartbeat domain.CreateHeartbeatModel) gen2.InsertHeartbeatParams {
|
||||||
|
|
||||||
return gen2.InsertHeartbeatParams{
|
return gen2.InsertHeartbeatParams{
|
||||||
AgentID: heartbeat.AgentID,
|
AgentID: heartbeat.AgentID,
|
||||||
@@ -88,12 +88,12 @@ func toDBHeartbeat(heartbeat domainHub.CreateHeartbeatModel) gen2.InsertHeartbea
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func toHeartBeatModel(heartbeat gen2.Heartbeat) domainHub.HeartbeatModel {
|
func toHeartBeatModel(heartbeat gen2.Heartbeat) domain.HeartbeatModel {
|
||||||
return domainHub.HeartbeatModel{
|
return domain.HeartbeatModel{
|
||||||
Timestamp: heartbeat.HeartbeatTimestamp,
|
Timestamp: heartbeat.HeartbeatTimestamp,
|
||||||
AgentID: heartbeat.AgentID,
|
AgentID: heartbeat.AgentID,
|
||||||
ID: int(heartbeat.ID),
|
ID: int(heartbeat.ID),
|
||||||
Metrics: domainHub.SystemMetrics{
|
Metrics: domain.SystemMetrics{
|
||||||
CPUUsage: heartbeat.CpuUsage,
|
CPUUsage: heartbeat.CpuUsage,
|
||||||
DiskUsage: heartbeat.DiskUsage,
|
DiskUsage: heartbeat.DiskUsage,
|
||||||
MemoryUsage: heartbeat.MemoryUsage,
|
MemoryUsage: heartbeat.MemoryUsage,
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
|
|
||||||
domainHub "github.com/lorsanstand/HomeOps-Hub/hub/internal/domain"
|
domainHub "github.com/lorsanstand/HomeOps-Hub/hub/internal/domain"
|
||||||
"github.com/lorsanstand/HomeOps-Hub/hub/internal/store/sqlc/gen"
|
"github.com/lorsanstand/HomeOps-Hub/hub/internal/store/sqlc/gen"
|
||||||
|
"github.com/lorsanstand/HomeOps-Hub/shared/domain"
|
||||||
)
|
)
|
||||||
|
|
||||||
type HubStore struct {
|
type HubStore struct {
|
||||||
@@ -36,19 +37,19 @@ func (h *HubStore) UpdateAgentByID(ctx context.Context, ID int, updateAgent doma
|
|||||||
return h.queries.UpdateAgentByID(ctx, data)
|
return h.queries.UpdateAgentByID(ctx, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *HubStore) CreateHeartbeat(ctx context.Context, heartbeat domainHub.CreateHeartbeatModel) error {
|
func (h *HubStore) CreateHeartbeat(ctx context.Context, heartbeat domain.CreateHeartbeatModel) error {
|
||||||
data := toDBHeartbeat(heartbeat)
|
data := toDBHeartbeat(heartbeat)
|
||||||
return h.queries.InsertHeartbeat(ctx, data)
|
return h.queries.InsertHeartbeat(ctx, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *HubStore) GetHeartbeatsByIDAfter(ctx context.Context, agentID string, timestamp time.Time) ([]domainHub.HeartbeatModel, error) {
|
func (h *HubStore) GetHeartbeatsByIDAfter(ctx context.Context, agentID string, timestamp time.Time) ([]domain.HeartbeatModel, error) {
|
||||||
data := gen.SelectHeartbeatsAfterParams{AgentID: agentID, Timestamp: timestamp}
|
data := gen.SelectHeartbeatsAfterParams{AgentID: agentID, Timestamp: timestamp}
|
||||||
heartbeats, err := h.queries.SelectHeartbeatsAfter(ctx, data)
|
heartbeats, err := h.queries.SelectHeartbeatsAfter(ctx, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []domainHub.HeartbeatModel{}, err
|
return []domain.HeartbeatModel{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
heartbeatsModel := make([]domainHub.HeartbeatModel, len(heartbeats))
|
heartbeatsModel := make([]domain.HeartbeatModel, len(heartbeats))
|
||||||
|
|
||||||
for i, heartbeat := range heartbeats {
|
for i, heartbeat := range heartbeats {
|
||||||
heartbeatsModel[i] = toHeartBeatModel(heartbeat)
|
heartbeatsModel[i] = toHeartBeatModel(heartbeat)
|
||||||
|
|||||||
Reference in New Issue
Block a user