75 lines
2.1 KiB
Go
75 lines
2.1 KiB
Go
package utils
|
|
|
|
import (
|
|
"encoding/json"
|
|
"oc-monitord/conf"
|
|
"sync"
|
|
|
|
oclib "cloud.o-forge.io/core/oc-lib"
|
|
"cloud.o-forge.io/core/oc-lib/logs"
|
|
"cloud.o-forge.io/core/oc-lib/models/common/enum"
|
|
"cloud.o-forge.io/core/oc-lib/models/workflow_execution"
|
|
"cloud.o-forge.io/core/oc-lib/tools"
|
|
"github.com/rs/zerolog"
|
|
)
|
|
|
|
var (
|
|
logger zerolog.Logger
|
|
wf_logger zerolog.Logger
|
|
pods_logger zerolog.Logger
|
|
onceLogger sync.Once
|
|
onceWF sync.Once
|
|
)
|
|
|
|
func GetExecution(exec_id string) *workflow_execution.WorkflowExecution {
|
|
res := oclib.NewRequest(oclib.LibDataEnum(oclib.WORKFLOW_EXECUTION), "", conf.GetConfig().PeerID, []string{}, nil).LoadOne(exec_id)
|
|
if res.Code != 200 {
|
|
logger := oclib.GetLogger()
|
|
logger.Error().Msg("Error retrieving execution " + exec_id)
|
|
logger.Error().Msg(res.Err)
|
|
return nil
|
|
}
|
|
return res.ToWorkflowExecution()
|
|
}
|
|
|
|
func GetLogger() zerolog.Logger {
|
|
onceLogger.Do(func(){
|
|
logger = logs.CreateLogger("oc-monitord")
|
|
})
|
|
return logger
|
|
}
|
|
|
|
// EmitExecStateUpdate loads the execution, sets its state and emits a
|
|
// CREATE_RESOURCE NATS event so oc-scheduler applies the change and fires
|
|
// NotifyChange for the WebSocket streams.
|
|
// Direct UpdateOne calls are replaced by this function so oc-scheduler remains
|
|
// the single writer for WorkflowExecution.
|
|
func EmitExecStateUpdate(execID string, state enum.BookingStatus) {
|
|
adminReq := &tools.APIRequest{Admin: true}
|
|
res, _, err := workflow_execution.NewAccessor(adminReq).LoadOne(execID)
|
|
if err != nil || res == nil {
|
|
return
|
|
}
|
|
exec := res.(*workflow_execution.WorkflowExecution)
|
|
exec.State = state
|
|
payload, marshalErr := json.Marshal(exec)
|
|
if marshalErr != nil {
|
|
return
|
|
}
|
|
tools.NewNATSCaller().SetNATSPub(tools.CREATE_RESOURCE, tools.NATSResponse{
|
|
FromApp: "oc-monitord",
|
|
Datatype: tools.WORKFLOW_EXECUTION,
|
|
Method: int(tools.CREATE_RESOURCE),
|
|
Payload: payload,
|
|
})
|
|
}
|
|
|
|
func GetWFLogger(workflowName string) zerolog.Logger {
|
|
onceWF.Do(func(){
|
|
wf_logger = logger.With().
|
|
Str("argo_name", workflowName).
|
|
Str("workflow_id", conf.GetConfig().
|
|
WorkflowID).Str("workflow_execution_id", conf.GetConfig().ExecutionID).Logger()
|
|
})
|
|
return wf_logger
|
|
} |