Files
oc-monitord/workflow_builder/graph.go
T

65 lines
2.0 KiB
Go
Raw Normal View History

2024-08-02 13:34:39 +02:00
package workflow_builder
import (
"errors"
"fmt"
oclib "cloud.o-forge.io/core/oc-lib"
workflow "cloud.o-forge.io/core/oc-lib/models/workflow"
2026-01-14 15:17:37 +01:00
"cloud.o-forge.io/core/oc-lib/models/workflow_execution"
2024-08-02 13:34:39 +02:00
)
type WorflowDB struct {
2024-08-19 11:43:40 +02:00
Workflow *workflow.Workflow
2024-08-02 13:34:39 +02:00
}
// Create the obj!ects from the mxgraphxml stored in the workflow given as a parameter
2026-03-25 11:13:12 +01:00
func (w *WorflowDB) LoadFrom(workflow_id string) error {
2025-04-30 17:51:24 +02:00
logger.Info().Msg("Loading workflow from " + workflow_id)
2024-08-19 11:43:40 +02:00
var err error
2026-03-25 11:13:12 +01:00
if w.Workflow, err = w.getWorkflow(workflow_id); err != nil {
2024-08-02 13:34:39 +02:00
return err
}
return nil
}
// Use oclib to retrieve the graph contained in the workflow referenced
2026-03-25 11:13:12 +01:00
func (w *WorflowDB) getWorkflow(workflow_id string) (workflow *workflow.Workflow, err error) {
2024-08-19 11:43:40 +02:00
logger := oclib.GetLogger()
2024-08-02 13:34:39 +02:00
2026-03-25 11:13:12 +01:00
lib_data := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.WORKFLOW), nil).LoadOne(workflow_id)
2025-04-30 17:51:24 +02:00
logger.Info().Msg(fmt.Sprint("ERR", lib_data.Code, lib_data.Err))
2024-08-02 13:34:39 +02:00
if lib_data.Code != 200 {
2024-08-19 11:43:40 +02:00
logger.Error().Msg("Error loading the graph")
2024-08-02 13:34:39 +02:00
return workflow, errors.New(lib_data.Err)
}
new_wf := lib_data.ToWorkflow()
if new_wf == nil {
2024-08-19 11:43:40 +02:00
logger.Error().Msg("WorflowDB object is empty for " + workflow_id)
2024-08-02 13:34:39 +02:00
return workflow, errors.New("WorflowDB can't be empty")
}
return new_wf, nil
}
2026-01-14 15:17:37 +01:00
func (w *WorflowDB) ExportToArgo(exec *workflow_execution.WorkflowExecution, timeout int) (*ArgoBuilder, int, error) {
2024-08-19 11:43:40 +02:00
logger := oclib.GetLogger()
2025-04-30 17:51:24 +02:00
logger.Info().Msg(fmt.Sprint("Exporting to Argo", w.Workflow))
2024-08-19 11:43:40 +02:00
if len(w.Workflow.Name) == 0 || w.Workflow.Graph == nil {
return nil, 0, fmt.Errorf("can't export a graph that has not been loaded yet")
2024-08-02 13:34:39 +02:00
}
2024-08-19 11:43:40 +02:00
argoBuilder := ArgoBuilder{OriginWorkflow: w.Workflow, Timeout: timeout}
2026-01-14 15:17:37 +01:00
stepMax, _, _, err := argoBuilder.CreateDAG(exec, exec.ExecutionsID, true)
2024-08-02 13:34:39 +02:00
if err != nil {
2024-08-19 11:43:40 +02:00
logger.Error().Msg("Could not create the argo file for " + w.Workflow.Name)
return nil, 0, err
2024-08-02 13:34:39 +02:00
}
return &argoBuilder, stepMax, nil
2024-08-02 13:34:39 +02:00
}
2024-08-19 11:43:40 +02:00
// TODO implement this function
2024-08-02 13:34:39 +02:00
func (w *WorflowDB) ExportToHelm(id string) error {
return nil
}