create system register agent id

This commit is contained in:
2026-04-13 20:53:40 +03:00
parent 648c2d0a99
commit 76fe95400c
6 changed files with 100 additions and 13 deletions
+4 -1
View File
@@ -3,6 +3,9 @@ package main
import "github.com/lorsanstand/HomeOps-Hub/internal/agent/app"
func main() {
start := app.NewApp()
start, err := app.NewApp()
if err != nil {
return
}
start.Run()
}
+17 -7
View File
@@ -10,6 +10,7 @@ import (
"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/settings"
log2 "github.com/lorsanstand/HomeOps-Hub/internal/shared/log"
"github.com/rs/zerolog"
"google.golang.org/grpc"
@@ -17,21 +18,30 @@ import (
)
type App struct {
log zerolog.Logger
cfg *config_yaml.AgentConfig
hubConn *rpc.Connection
log zerolog.Logger
cfg *config_yaml.AgentConfig
settings *settings.Settings
hubConn *rpc.Connection
}
func NewApp() *App {
func NewApp() (*App, error) {
cfg, err := config_yaml.NewConfig()
if err != nil {
standartlog.Fatalf("failed get config: %v", err)
standartlog.Fatalf("failed to get config: %v", err)
return nil, err
}
log := log2.NewLogger(cfg)
log = log.With().Str("component", "agent.app").Logger()
return &App{cfg: cfg, log: log}
sett, err := settings.ReadSettings(cfg.SettingsPath)
if err != nil {
log.Error().Err(err).Msg("failed to get settings")
return nil, err
}
return &App{cfg: cfg, log: log, settings: sett}, nil
}
func (a *App) Run() {
@@ -58,6 +68,6 @@ func (a *App) Run() {
collect := collector.NewCollector(DockerService, a.log)
agent := agent_service.NewAgentService(collect, conn, "", a.cfg, a.log)
agent := agent_service.NewAgentService(collect, conn, a.settings, a.cfg, a.log)
agent.RegisterAgentConn(ctx)
}
@@ -6,6 +6,7 @@ import (
"github.com/lorsanstand/HomeOps-Hub/internal/agent/domain"
"github.com/lorsanstand/HomeOps-Hub/internal/agent/utils/config_yaml"
"github.com/lorsanstand/HomeOps-Hub/internal/agent/utils/settings"
"github.com/rs/zerolog"
)
@@ -23,24 +24,24 @@ type AgentService struct {
log zerolog.Logger
cfg *config_yaml.AgentConfig
heartBeat int
agentID string
settings *settings.Settings
}
func NewAgentService(
collector Collector,
conn HubConnection,
AgentID string,
settings *settings.Settings,
cfg *config_yaml.AgentConfig,
logger zerolog.Logger,
) *AgentService {
logger = logger.With().Str("component", "agent.service.agent_serivce").Logger()
return &AgentService{collect: collector, conn: conn, cfg: cfg, log: logger, agentID: AgentID}
return &AgentService{collect: collector, conn: conn, cfg: cfg, log: logger, settings: settings}
}
func (a *AgentService) RegisterAgentConn(ctx context.Context) {
info, caps := a.collect.GatherInfoSystem()
AgentID := a.agentID
AgentID := a.settings.AgentID
AgentName := a.cfg.AppName
AgentData := domain.RegisterAgentData{AgentId: AgentID, AgentName: AgentName, Host: info, Capabilities: caps}
@@ -49,5 +50,9 @@ func (a *AgentService) RegisterAgentConn(ctx context.Context) {
a.log.Error().Err(err).Msg("failed register agent")
return
}
if err = a.settings.Insert(settings.Settings{AgentID: data.AgentID}); err != nil {
a.log.Warn().Err(err).Msg("failed to save agent id")
}
fmt.Println(data)
}
+2 -1
View File
@@ -14,7 +14,8 @@ type AgentConfig struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
} `yaml:"hub"`
LogLevel string `yaml:"log_level"`
LogLevel string `yaml:"log_level"`
SettingsPath string `yaml:"settings_path"`
}
func NewConfig() (*AgentConfig, error) {
+68
View File
@@ -0,0 +1,68 @@
package settings
import (
"encoding/json"
"errors"
"io"
"os"
"path/filepath"
)
type Settings struct {
AgentID string `json:"agent_id"`
path string
}
func ReadSettings(path string) (*Settings, error) {
if path == "" {
homeDir, err := os.UserHomeDir()
if err != nil {
return nil, err
}
path = filepath.Join(homeDir, ".config", "homeops")
}
err := os.Mkdir(path, 0755)
if err != nil {
if !errors.Is(err, os.ErrExist) {
return nil, err
}
err = nil
}
file, err := os.Create(path + "/settings.json")
if err != nil {
if !errors.Is(err, os.ErrExist) {
return nil, err
}
err = nil
}
defer file.Close()
var settings Settings
err = json.NewDecoder(file).Decode(&settings)
if err != nil {
if !errors.Is(err, io.EOF) {
return nil, err
}
}
settings.path = path + "/settings.json"
return &settings, nil
}
func (s *Settings) Insert(sett Settings) error {
file, err := os.OpenFile(s.path, os.O_RDWR, 0755)
if err != nil {
return err
}
defer file.Close()
if err = json.NewEncoder(file).Encode(sett); err != nil {
return err
}
return nil
}