mirror of
https://github.com/lorsanstand/HomeOps-Hub.git
synced 2026-06-19 17:45:17 +03:00
create system register agent id
This commit is contained in:
+4
-1
@@ -3,6 +3,9 @@ package main
|
|||||||
import "github.com/lorsanstand/HomeOps-Hub/internal/agent/app"
|
import "github.com/lorsanstand/HomeOps-Hub/internal/agent/app"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
start := app.NewApp()
|
start, err := app.NewApp()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
start.Run()
|
start.Run()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/lorsanstand/HomeOps-Hub/internal/agent/service/collector"
|
"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/service/docker_service"
|
||||||
"github.com/lorsanstand/HomeOps-Hub/internal/agent/utils/config_yaml"
|
"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"
|
log2 "github.com/lorsanstand/HomeOps-Hub/internal/shared/log"
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
@@ -17,21 +18,30 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type App struct {
|
type App struct {
|
||||||
log zerolog.Logger
|
log zerolog.Logger
|
||||||
cfg *config_yaml.AgentConfig
|
cfg *config_yaml.AgentConfig
|
||||||
hubConn *rpc.Connection
|
settings *settings.Settings
|
||||||
|
hubConn *rpc.Connection
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewApp() *App {
|
func NewApp() (*App, error) {
|
||||||
|
|
||||||
cfg, err := config_yaml.NewConfig()
|
cfg, err := config_yaml.NewConfig()
|
||||||
if err != nil {
|
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 := 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() {
|
func (a *App) Run() {
|
||||||
@@ -58,6 +68,6 @@ func (a *App) Run() {
|
|||||||
|
|
||||||
collect := collector.NewCollector(DockerService, a.log)
|
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)
|
agent.RegisterAgentConn(ctx)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
|
|
||||||
"github.com/lorsanstand/HomeOps-Hub/internal/agent/domain"
|
"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/config_yaml"
|
||||||
|
"github.com/lorsanstand/HomeOps-Hub/internal/agent/utils/settings"
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -23,24 +24,24 @@ type AgentService struct {
|
|||||||
log zerolog.Logger
|
log zerolog.Logger
|
||||||
cfg *config_yaml.AgentConfig
|
cfg *config_yaml.AgentConfig
|
||||||
heartBeat int
|
heartBeat int
|
||||||
agentID string
|
settings *settings.Settings
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAgentService(
|
func NewAgentService(
|
||||||
collector Collector,
|
collector Collector,
|
||||||
conn HubConnection,
|
conn HubConnection,
|
||||||
AgentID string,
|
settings *settings.Settings,
|
||||||
cfg *config_yaml.AgentConfig,
|
cfg *config_yaml.AgentConfig,
|
||||||
logger zerolog.Logger,
|
logger zerolog.Logger,
|
||||||
) *AgentService {
|
) *AgentService {
|
||||||
logger = logger.With().Str("component", "agent.service.agent_serivce").Logger()
|
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) {
|
func (a *AgentService) RegisterAgentConn(ctx context.Context) {
|
||||||
info, caps := a.collect.GatherInfoSystem()
|
info, caps := a.collect.GatherInfoSystem()
|
||||||
AgentID := a.agentID
|
AgentID := a.settings.AgentID
|
||||||
AgentName := a.cfg.AppName
|
AgentName := a.cfg.AppName
|
||||||
AgentData := domain.RegisterAgentData{AgentId: AgentID, AgentName: AgentName, Host: info, Capabilities: caps}
|
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")
|
a.log.Error().Err(err).Msg("failed register agent")
|
||||||
return
|
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)
|
fmt.Println(data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ type AgentConfig struct {
|
|||||||
Host string `yaml:"host"`
|
Host string `yaml:"host"`
|
||||||
Port int `yaml:"port"`
|
Port int `yaml:"port"`
|
||||||
} `yaml:"hub"`
|
} `yaml:"hub"`
|
||||||
LogLevel string `yaml:"log_level"`
|
LogLevel string `yaml:"log_level"`
|
||||||
|
SettingsPath string `yaml:"settings_path"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewConfig() (*AgentConfig, error) {
|
func NewConfig() (*AgentConfig, error) {
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user