inventory-app/pkg/agent/entrypoint.go

83 lines
1.7 KiB
Go
Raw Normal View History

2023-01-25 14:25:58 +03:00
// Copyright 2022 Listware
package agent
import (
"fmt"
"git.fg-tech.ru/listware/cmdb/pkg/cmdb/qdsl"
"git.fg-tech.ru/listware/go-core/pkg/client/system"
"git.fg-tech.ru/listware/inventory-app/pkg/agent/types"
"git.fg-tech.ru/listware/proto/sdk/pbtypes"
)
func (a *Agent) createLink(route *pbtypes.FunctionRoute) (err error) {
function, err := a.getFunction()
if err != nil {
return
}
node, err := a.getNode()
if err != nil {
return
}
// create init link, will trigger 'init'
createLink, err := system.CreateLink(function.Id.String(), node.Id.String(), node.Key, function.Type, route)
if err != nil {
return err
}
return a.executor.ExecSync(a.ctx, createLink)
}
func (a *Agent) entrypoint() (err error) {
route := &pbtypes.FunctionRoute{
Url: a.m.Addr(),
}
// exists node or create
node, err := a.getNode()
if err == nil {
// search function
documents, err := qdsl.Qdsl(a.ctx, fmt.Sprintf("%s.%s", node.Key, types.FunctionPath), qdsl.WithLinkId())
if err != nil {
return err
}
// func on node: exists
for _, document := range documents {
updateLink, err := system.UpdateAdvancedLink(document.LinkId.String(), route)
if err != nil {
return err
}
return a.executor.ExecSync(a.ctx, updateLink)
}
return a.createLink(route)
}
// TODO move to register
nodes, err := a.getNodes()
if err != nil {
return
}
message := &pbtypes.FunctionMessage{
Type: types.FunctionPath,
Route: route,
}
createNode, err := system.CreateChild(nodes.Id.String(), types.NodeID, a.hostname(), a.node, message)
if err != nil {
return
}
if err = a.executor.ExecSync(a.ctx, createNode); err != nil {
return err
}
return a.createLink(route)
}