158 lines
3.0 KiB
Go
158 lines
3.0 KiB
Go
// Copyright 2022 Listware
|
|
|
|
package agent
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
"git.fg-tech.ru/listware/go-core/pkg/executor"
|
|
"git.fg-tech.ru/listware/go-core/pkg/module"
|
|
"git.fg-tech.ru/listware/inventory-app/pkg/agent/types"
|
|
"git.fg-tech.ru/listware/inventory-app/pkg/agent/types/baseboard"
|
|
"git.fg-tech.ru/listware/inventory-app/pkg/agent/types/bios"
|
|
"git.fg-tech.ru/listware/inventory-app/pkg/agent/types/cpu"
|
|
"git.fg-tech.ru/listware/inventory-app/pkg/agent/types/mem"
|
|
"git.fg-tech.ru/listware/inventory-app/pkg/agent/types/netlink"
|
|
"git.fg-tech.ru/listware/inventory-app/pkg/agent/types/node"
|
|
"git.fg-tech.ru/listware/inventory-app/pkg/agent/types/os"
|
|
proxy "git.fg-tech.ru/listware/proxy/pkg/module"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var (
|
|
log = logrus.New()
|
|
)
|
|
|
|
type Agent struct {
|
|
ctx context.Context
|
|
cancel context.CancelFunc
|
|
|
|
// init values
|
|
baseboard baseboard.Baseboard
|
|
bios bios.BIOS
|
|
cpu cpu.CPU
|
|
node node.Node
|
|
os os.OS
|
|
|
|
dimmDevs map[string]mem.MemoryDevice
|
|
links map[string]netlink.Netlink
|
|
|
|
executor executor.Executor
|
|
|
|
m module.Module
|
|
}
|
|
|
|
// Run agent
|
|
func Run() (err error) {
|
|
a := &Agent{}
|
|
a.ctx, a.cancel = context.WithCancel(context.Background())
|
|
|
|
if a.executor, err = executor.New(); err != nil {
|
|
return
|
|
}
|
|
|
|
if a.baseboard, err = baseboard.New(); err != nil {
|
|
return
|
|
}
|
|
|
|
if a.bios, err = bios.New(); err != nil {
|
|
return
|
|
}
|
|
|
|
if a.cpu, err = cpu.New(); err != nil {
|
|
return
|
|
}
|
|
|
|
if a.node, err = node.New(); err != nil {
|
|
return
|
|
}
|
|
|
|
if a.os, err = os.New(); err != nil {
|
|
return
|
|
}
|
|
|
|
if a.dimmDevs, err = mem.Inventory(); err != nil {
|
|
return
|
|
}
|
|
|
|
if a.links, err = netlink.New(); err != nil {
|
|
return
|
|
}
|
|
|
|
return a.run()
|
|
}
|
|
|
|
func appendPath(paths ...string) string {
|
|
return strings.Join(paths, ".")
|
|
}
|
|
|
|
func (a *Agent) hostname() string {
|
|
return a.node.Hostname
|
|
}
|
|
|
|
func (a *Agent) nodepath() string {
|
|
return appendPath(a.hostname(), types.NodeContainerPath)
|
|
}
|
|
|
|
func (a *Agent) baseboardpath() string {
|
|
return appendPath(types.BaseboardLink, a.nodepath())
|
|
}
|
|
|
|
func (a *Agent) biospath() string {
|
|
return appendPath(types.BiosLink, a.nodepath())
|
|
}
|
|
|
|
func (a *Agent) cpupath() string {
|
|
return appendPath(types.CpuLink, a.nodepath())
|
|
}
|
|
|
|
func (a *Agent) ospath() string {
|
|
return appendPath(types.OsLink, a.nodepath())
|
|
}
|
|
|
|
func (a *Agent) dimmpath(dev string) string {
|
|
return appendPath(dev, a.nodepath())
|
|
}
|
|
|
|
func (a *Agent) dimmspath() string {
|
|
return appendPath(memMask, a.nodepath())
|
|
}
|
|
|
|
func (a *Agent) netlinkpath(os string) string {
|
|
return appendPath(os, a.nodepath())
|
|
}
|
|
|
|
func (a *Agent) netlinkspath() string {
|
|
return appendPath(netlinkMask, a.nodepath())
|
|
}
|
|
|
|
func (a *Agent) run() (err error) {
|
|
defer a.executor.Close()
|
|
|
|
log.Infof("run system agent")
|
|
|
|
a.osSignalCtrl()
|
|
|
|
a.m = proxy.New(namespace, module.WithPort(8181))
|
|
|
|
if err = a.m.Bind(types.FunctionPath, a.workerFunction); err != nil {
|
|
return
|
|
}
|
|
|
|
// // TODO move to another app
|
|
// if err = a.m.Bind("monit", monit.Monit); err != nil {
|
|
// return
|
|
// }
|
|
|
|
go a.m.RegisterAndListen(a.ctx)
|
|
|
|
if err = a.entrypoint(); err != nil {
|
|
return
|
|
}
|
|
|
|
<-a.ctx.Done()
|
|
|
|
return nil
|
|
}
|