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))
}