diff --git a/oc-monitord b/oc-monitord index a75bb34..1ae54fe 100755 Binary files a/oc-monitord and b/oc-monitord differ diff --git a/workflow_builder/argo_builder.go b/workflow_builder/argo_builder.go index 8abf13e..553a0ed 100644 --- a/workflow_builder/argo_builder.go +++ b/workflow_builder/argo_builder.go @@ -7,20 +7,22 @@ package workflow_builder import ( . "oc-monitord/models" "os" + "slices" "strings" "time" oclib "cloud.o-forge.io/core/oc-lib" "cloud.o-forge.io/core/oc-lib/models/resource_model" "cloud.o-forge.io/core/oc-lib/models/resources/workflow/graph" + w "cloud.o-forge.io/core/oc-lib/models/workflow" "github.com/nwtgck/go-fakelish" "gopkg.in/yaml.v3" ) type ArgoBuilder struct { - graph graph.Graph - Workflow Workflow - Timeout int + OriginWorkflow w.Workflow + Workflow Workflow + Timeout int } type Workflow struct { @@ -137,11 +139,11 @@ func (b *ArgoBuilder) createVolumes() { } func (b *ArgoBuilder) getDependency(current_computing_id string) (dependencies []string) { - for _, link := range b.graph.Links { - if !b.IsProcessing(link.Source.ID) || !b.IsProcessing(link.Destination.ID) { + for _, link := range b.OriginWorkflow.Graph.Links { + if !b.IsProcessing(link.Source.ID) { continue } - source := b.graph.Items[link.Source.ID].Processing + source := b.OriginWorkflow.Graph.Items[link.Source.ID].Processing if current_computing_id == link.Destination.ID && source != nil { dependency_name := getArgoName(source.GetName(), link.Source.ID) dependencies = append(dependencies, dependency_name) @@ -239,7 +241,7 @@ func removeImageName(user_input string) string { // Return the graphItem containing a Processing resource, so that we have access to the ID of the graphItem in order to identify it in the links func (b *ArgoBuilder) getProcessings() (list_computings []graph.GraphItem) { - for _, item := range b.graph.Items { + for _, item := range b.OriginWorkflow.Graph.Items { if item.Processing != nil { list_computings = append(list_computings, item) } @@ -248,12 +250,7 @@ func (b *ArgoBuilder) getProcessings() (list_computings []graph.GraphItem) { } func (b *ArgoBuilder) IsProcessing(id string) bool { - for _, item := range b.graph.Items { - if item.Processing != nil && item.Processing.GetID() == id { - return true - } - } - return false + return slices.Contains(b.OriginWorkflow.Processings, id) } func getStringValue(comp resource_model.AbstractResource, key string) string { diff --git a/workflow_builder/graph.go b/workflow_builder/graph.go index 0beb9e2..07327cf 100644 --- a/workflow_builder/graph.go +++ b/workflow_builder/graph.go @@ -46,7 +46,7 @@ func (w *WorflowDB) ExportToArgo(timeout int) (string, error) { return "", fmt.Errorf("can't export a graph that has not been loaded yet") } - argo_builder := ArgoBuilder{graph: *w.Workflow.Graph, Timeout: timeout} + argo_builder := ArgoBuilder{OriginWorkflow: *w.Workflow, Timeout: timeout} filename, err := argo_builder.CreateDAG() if err != nil { logger.Error().Msg("Could not create the argo file for " + w.Workflow.Name)