mirror of
https://github.com/lorsanstand/HomeOps-Hub.git
synced 2026-09-18 16:18:21 +03:00
feat: create save new agent in db
This commit is contained in:
@@ -2,15 +2,20 @@ package hub_service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/lorsanstand/HomeOps-Hub/internal/domain"
|
||||
"github.com/lorsanstand/HomeOps-Hub/internal/hub/store"
|
||||
domainHub "github.com/lorsanstand/HomeOps-Hub/internal/hub/domain"
|
||||
"github.com/lorsanstand/HomeOps-Hub/internal/hub/utils/hasher"
|
||||
"github.com/rs/zerolog"
|
||||
)
|
||||
|
||||
type Store interface {
|
||||
NewAgent(ctx context.Context, agent store.Agent) error
|
||||
NewAgent(ctx context.Context, agent domainHub.CreateAgentModel) error
|
||||
GetAgentByAgentID(ctx context.Context, AgentID string) (domainHub.AgentModel, error)
|
||||
UpdateAgentByID(ctx context.Context, ID int, updateAgent domainHub.CreateAgentModel) error
|
||||
}
|
||||
|
||||
type HubService struct {
|
||||
@@ -23,31 +28,43 @@ func NewHubService(store Store, logger zerolog.Logger) *HubService {
|
||||
}
|
||||
|
||||
func (h *HubService) RegisterAgent(ctx context.Context, data domain.RegisterAgentRequest) (domain.RegisterAgentResponse, error) {
|
||||
h.log.Debug().Msg("registered new agent")
|
||||
AgentID := data.AgentId
|
||||
if data.AgentId == "" {
|
||||
var err error
|
||||
AgentID, err = hasher.MakeID(data.Host, data.AgentName)
|
||||
if err != nil {
|
||||
h.log.Error().Err(err).Msg("failed create agent id")
|
||||
AgentID = ""
|
||||
h.log.Debug().Str("agentId", data.AgentId).Str("agentName", data.AgentName).Msg("started registering agent")
|
||||
agent, err := h.store.GetAgentByAgentID(ctx, data.AgentId)
|
||||
if err != nil && !errors.Is(err, sql.ErrNoRows) {
|
||||
h.log.Error().Err(err).Str("agentId", data.AgentId).Msg("failed to get agent from database")
|
||||
return domain.RegisterAgentResponse{}, fmt.Errorf("failed select agent to db: %w", err)
|
||||
}
|
||||
|
||||
if data.AgentId != "" && !errors.Is(err, sql.ErrNoRows) {
|
||||
h.log.Debug().Str("agentId", agent.AgentID).Str("agentName", data.AgentName).Msg("agent exists, updating")
|
||||
|
||||
data.AgentId = agent.AgentID
|
||||
|
||||
agentStore := toCreateAgentModel(data)
|
||||
|
||||
if err := h.store.UpdateAgentByID(ctx, agent.ID, agentStore); err != nil {
|
||||
h.log.Error().Err(err).Str("agentId", agent.AgentID).Msg("failed to update agent in database")
|
||||
return domain.RegisterAgentResponse{}, err
|
||||
}
|
||||
h.log.Info().Str("agentId", agent.AgentID).Msg("agent updated successfully")
|
||||
return domain.RegisterAgentResponse{AgentID: agent.AgentID, Heartbeat: 5}, nil
|
||||
}
|
||||
|
||||
agentStore := store.Agent{
|
||||
AgentID: AgentID,
|
||||
AgentName: data.AgentName,
|
||||
Architecture: data.Host.Arch,
|
||||
System: data.Host.System,
|
||||
Hostname: data.Host.Hostname,
|
||||
Version: data.AgentVersion,
|
||||
Capabilities: data.Capabilities,
|
||||
}
|
||||
|
||||
if err := h.store.NewAgent(ctx, agentStore); err != nil {
|
||||
h.log.Warn().Err(err).Msg("failed add new agent in db")
|
||||
AgentID, err := hasher.MakeID(data.Host, data.AgentName)
|
||||
if err != nil {
|
||||
h.log.Error().Err(err).Str("agentName", data.AgentName).Str("hostname", data.Host.Hostname).Msg("failed to generate agent id")
|
||||
return domain.RegisterAgentResponse{}, err
|
||||
}
|
||||
|
||||
data.AgentId = AgentID
|
||||
|
||||
agentStore := toCreateAgentModel(data)
|
||||
|
||||
if err := h.store.NewAgent(ctx, agentStore); err != nil {
|
||||
h.log.Error().Err(err).Str("agentId", AgentID).Str("agentName", data.AgentName).Msg("failed to create new agent in database")
|
||||
return domain.RegisterAgentResponse{}, err
|
||||
}
|
||||
|
||||
h.log.Info().Str("agentId", AgentID).Str("agentName", data.AgentName).Str("hostname", data.Host.Hostname).Msg("agent registered successfully")
|
||||
return domain.RegisterAgentResponse{AgentID: AgentID, Heartbeat: 5}, nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package hub_service
|
||||
|
||||
import (
|
||||
"github.com/lorsanstand/HomeOps-Hub/internal/domain"
|
||||
domainHub "github.com/lorsanstand/HomeOps-Hub/internal/hub/domain"
|
||||
)
|
||||
|
||||
func toCreateAgentModel(agent domain.RegisterAgentRequest) domainHub.CreateAgentModel {
|
||||
return domainHub.CreateAgentModel{
|
||||
AgentID: agent.AgentId,
|
||||
AgentName: agent.AgentName,
|
||||
Architecture: agent.Host.Arch,
|
||||
System: agent.Host.System,
|
||||
Hostname: agent.Host.Hostname,
|
||||
Version: agent.AgentVersion,
|
||||
Capabilities: agent.Capabilities,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user