diff --git a/agent/internal/app/app.go b/agent/internal/app/app.go index d7b5f8e..86add75 100644 --- a/agent/internal/app/app.go +++ b/agent/internal/app/app.go @@ -32,7 +32,6 @@ func NewApp() (*App, error) { } logger := log.NewLogger(cfg) - logger = logger.With().Str("component", "internal.app").Logger() logger = logger.With().Str("name", cfg.AppName).Logger() sett, err := settings.ReadSettings(cfg.SettingsPath) diff --git a/agent/internal/domain/command.go b/agent/internal/domain/command.go new file mode 100644 index 0000000..feca470 --- /dev/null +++ b/agent/internal/domain/command.go @@ -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) +} diff --git a/agent/internal/service/agent_service/agent.go b/agent/internal/service/agent_service/agent.go index 6eb18b0..54b847f 100644 --- a/agent/internal/service/agent_service/agent.go +++ b/agent/internal/service/agent_service/agent.go @@ -9,19 +9,6 @@ import ( "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 { collect Collector conn HubConnection @@ -38,8 +25,6 @@ func NewAgentService( cfg *config_yaml.AgentConfig, logger zerolog.Logger, ) *AgentService { - logger = logger.With().Str("component", "internal.service.agent_serivce").Logger() - return &AgentService{collect: collector, conn: conn, cfg: cfg, log: logger, settings: settings} } diff --git a/agent/internal/service/agent_service/interface.go b/agent/internal/service/agent_service/interface.go new file mode 100644 index 0000000..0e7f3a7 --- /dev/null +++ b/agent/internal/service/agent_service/interface.go @@ -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) +} diff --git a/agent/internal/service/docker_service/capability.go b/agent/internal/service/docker_service/capability.go new file mode 100644 index 0000000..df084df --- /dev/null +++ b/agent/internal/service/docker_service/capability.go @@ -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 +} diff --git a/agent/internal/service/docker_service/command.go b/agent/internal/service/docker_service/command.go new file mode 100644 index 0000000..01c9a5e --- /dev/null +++ b/agent/internal/service/docker_service/command.go @@ -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", + }}, + } +} diff --git a/agent/internal/service/docker_service/docker.go b/agent/internal/service/docker_service/docker.go index 825878c..571cddf 100644 --- a/agent/internal/service/docker_service/docker.go +++ b/agent/internal/service/docker_service/docker.go @@ -5,8 +5,6 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" - "github.com/lorsanstand/HomeOps-Hub/shared/domain" - "github.com/rs/zerolog" ) @@ -23,14 +21,17 @@ type DockerService struct { func NewDockerService(api dockerAPI, logger zerolog.Logger) *DockerService { return &DockerService{ 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) 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) { @@ -38,12 +39,3 @@ func (d *DockerService) ContainersList(ctx context.Context) ([]container.Summary d.log.Debug().Msg("get container list") return ContainersList, err } - -func (d *DockerService) Capability() domain.Capability { - return domain.Capability{ - Available: true, - Version: "0", - Name: "docker", - Reason: "", - } -} diff --git a/agent/internal/utils/command_store/store.go b/agent/internal/utils/command_store/store.go new file mode 100644 index 0000000..bc877e3 --- /dev/null +++ b/agent/internal/utils/command_store/store.go @@ -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 +} diff --git a/hub/internal/service/connection_manager/agent.go b/hub/internal/service/connection_manager/agent.go index ce11c91..238cb6e 100644 --- a/hub/internal/service/connection_manager/agent.go +++ b/hub/internal/service/connection_manager/agent.go @@ -8,7 +8,7 @@ import ( "github.com/google/uuid" 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" ) diff --git a/hub/internal/service/connection_manager/agent_test.go b/hub/internal/service/connection_manager/agent_test.go index 5f0e0e6..d612095 100644 --- a/hub/internal/service/connection_manager/agent_test.go +++ b/hub/internal/service/connection_manager/agent_test.go @@ -8,7 +8,7 @@ import ( "time" 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" "gotest.tools/v3/assert" ) diff --git a/hub/internal/service/connection_manager/interface.go b/hub/internal/service/connection_manager/interface.go index a6844b9..43abf2e 100644 --- a/hub/internal/service/connection_manager/interface.go +++ b/hub/internal/service/connection_manager/interface.go @@ -4,7 +4,7 @@ import ( "context" 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 { diff --git a/hub/internal/service/connection_manager/mapper.go b/hub/internal/service/connection_manager/mapper.go index 6ffabfc..4d32468 100644 --- a/hub/internal/service/connection_manager/mapper.go +++ b/hub/internal/service/connection_manager/mapper.go @@ -4,7 +4,7 @@ import ( "time" 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 { diff --git a/hub/internal/service/connection_manager/mock_test.go b/hub/internal/service/connection_manager/mock_test.go index 25237ad..2a7b660 100644 --- a/hub/internal/service/connection_manager/mock_test.go +++ b/hub/internal/service/connection_manager/mock_test.go @@ -6,7 +6,7 @@ import ( "sync" 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 { diff --git a/hub/internal/service/connection_manager/store.go b/hub/internal/service/connection_manager/store.go index 3e5ffa8..204750e 100644 --- a/hub/internal/service/connection_manager/store.go +++ b/hub/internal/service/connection_manager/store.go @@ -3,7 +3,7 @@ package connection_manager import ( "sync" - domainHub "github.com/lorsanstand/HomeOps-Hub/hub/internal/domain" + domainHub "github.com/lorsanstand/HomeOps-Hub/shared/domain" ) type AgentConnStore struct { diff --git a/hub/internal/store/mapper.go b/hub/internal/store/mapper.go index 8130740..cf1a108 100644 --- a/hub/internal/store/mapper.go +++ b/hub/internal/store/mapper.go @@ -77,7 +77,7 @@ func toDomainCapabilities(caps []byte) []domain.Capability { return capabilities } -func toDBHeartbeat(heartbeat domainHub.CreateHeartbeatModel) gen2.InsertHeartbeatParams { +func toDBHeartbeat(heartbeat domain.CreateHeartbeatModel) gen2.InsertHeartbeatParams { return gen2.InsertHeartbeatParams{ AgentID: heartbeat.AgentID, @@ -88,12 +88,12 @@ func toDBHeartbeat(heartbeat domainHub.CreateHeartbeatModel) gen2.InsertHeartbea } } -func toHeartBeatModel(heartbeat gen2.Heartbeat) domainHub.HeartbeatModel { - return domainHub.HeartbeatModel{ +func toHeartBeatModel(heartbeat gen2.Heartbeat) domain.HeartbeatModel { + return domain.HeartbeatModel{ Timestamp: heartbeat.HeartbeatTimestamp, AgentID: heartbeat.AgentID, ID: int(heartbeat.ID), - Metrics: domainHub.SystemMetrics{ + Metrics: domain.SystemMetrics{ CPUUsage: heartbeat.CpuUsage, DiskUsage: heartbeat.DiskUsage, MemoryUsage: heartbeat.MemoryUsage, diff --git a/hub/internal/store/store.go b/hub/internal/store/store.go index 9d9fd94..1fb371d 100644 --- a/hub/internal/store/store.go +++ b/hub/internal/store/store.go @@ -7,6 +7,7 @@ import ( domainHub "github.com/lorsanstand/HomeOps-Hub/hub/internal/domain" "github.com/lorsanstand/HomeOps-Hub/hub/internal/store/sqlc/gen" + "github.com/lorsanstand/HomeOps-Hub/shared/domain" ) type HubStore struct { @@ -36,19 +37,19 @@ func (h *HubStore) UpdateAgentByID(ctx context.Context, ID int, updateAgent doma 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) 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} heartbeats, err := h.queries.SelectHeartbeatsAfter(ctx, data) 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 { heartbeatsModel[i] = toHeartBeatModel(heartbeat) diff --git a/hub/internal/domain/stream.go b/shared/domain/stream.go similarity index 100% rename from hub/internal/domain/stream.go rename to shared/domain/stream.go