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 }