54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package agent
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"git.mziesel.nl/mans/zadmin/internal/config"
|
|
"git.mziesel.nl/mans/zadmin/internal/logger"
|
|
"git.mziesel.nl/mans/zadmin/internal/models"
|
|
"github.com/nats-io/nats.go"
|
|
)
|
|
|
|
type AgentConfig struct {
|
|
}
|
|
|
|
type Agent struct {
|
|
Logger *logger.ConsoleLogger
|
|
Config *config.AgentConfig
|
|
NATS *nats.Conn
|
|
}
|
|
|
|
func NewAgent(cfg *config.AgentConfig, logger *logger.ConsoleLogger, nc *nats.Conn) *Agent {
|
|
a := &Agent{Logger: logger, Config: cfg, NATS: nc}
|
|
|
|
a.registerNatsHandlers()
|
|
|
|
return a
|
|
}
|
|
|
|
func (a *Agent) Stop(ctx context.Context) error {
|
|
a.Logger.Info("Stopping agent")
|
|
// TODO: dynamic id
|
|
topic := fmt.Sprintf("c.%d.event", a.Config.ZadminID)
|
|
a.NATS.Publish(topic, []byte("agent_stop"))
|
|
return nil
|
|
}
|
|
|
|
func (a *Agent) registerNatsHandlers() {
|
|
a.Logger.Info("Setting up nats handlers")
|
|
// a.NATS.Subscribe("c.*.stats", func(msg *nats.Msg) {
|
|
// a.ProcessHostStats(msg)
|
|
// })
|
|
}
|
|
|
|
func (a *Agent) PublishHostStats(stats *models.HostStatistics) error {
|
|
json, err := json.Marshal(stats)
|
|
if err != nil {
|
|
a.Logger.Error(err)
|
|
}
|
|
topic := fmt.Sprintf("c.%d.stats", a.Config.ZadminID)
|
|
return a.NATS.Publish(topic, []byte(json))
|
|
}
|