inventory-app/pkg/agent/netlink.go

92 lines
1.9 KiB
Go
Raw Normal View History

2023-01-25 14:25:58 +03:00
// Copyright 2022 Listware
package agent
import (
"git.fg-tech.ru/listware/go-core/pkg/client/system"
"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/netlink"
)
func (a *Agent) netlink(uuid string) {
updateChan, deleteChan := netlink.Subscribe(a.ctx)
for {
select {
case link := <-updateChan:
netlinkFunc, err := genNetlinkFunction(uuid, a.netlinkpath(link.LinkName()), link, updateEvent)
if err != nil {
log.Error(err)
continue
}
if err = a.executor.ExecAsync(a.ctx, netlinkFunc); err != nil {
log.Error(err)
continue
}
case link := <-deleteChan:
netlinkFunc, err := genNetlinkFunction(uuid, a.netlinkpath(link.LinkName()), link, deleteEvent)
if err != nil {
log.Error(err)
continue
}
if err = a.executor.ExecAsync(a.ctx, netlinkFunc); err != nil {
log.Error(err)
continue
}
case <-a.ctx.Done():
return
}
}
}
func (a *Agent) createNetlinks(ctx module.Context) (err error) {
for _, link := range a.links {
netlinkFunc, err := genNetlinkFunction(ctx.Self().Id, a.netlinkpath(link.LinkName()), link, updateEvent)
if err != nil {
return err
}
msg, err := module.ToMessage(netlinkFunc)
if err != nil {
return err
}
ctx.Send(msg)
}
go a.netlink(ctx.Self().Id)
return
}
func (a *Agent) createNetlink(ctx module.Context, link *netlink.Netlink) (err error) {
create, err := system.CreateChild(ctx.Self().Id, types.NetlinkID, link.LinkName(), link)
if err != nil {
return
}
msg, err := module.ToMessage(create)
if err != nil {
return
}
ctx.Send(msg)
return
}
func (a *Agent) updateNetlink(ctx module.Context, uuid string, link netlink.Netlink) (err error) {
update, err := system.UpdateObject(uuid, link)
if err != nil {
return
}
msg, err := module.ToMessage(update)
if err != nil {
return
}
ctx.Send(msg)
return
}