92 lines
1.9 KiB
Go
92 lines
1.9 KiB
Go
// 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
|
|
}
|