From 12c506e9a7b12eff0879a053a5345d6fd870ccec Mon Sep 17 00:00:00 2001 From: mr Date: Mon, 23 Feb 2026 10:23:55 +0100 Subject: [PATCH] Native Schedule --- .../workflow_execution/workflow_execution.go | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/models/workflow_execution/workflow_execution.go b/models/workflow_execution/workflow_execution.go index bec36e5..ee38443 100755 --- a/models/workflow_execution/workflow_execution.go +++ b/models/workflow_execution/workflow_execution.go @@ -17,6 +17,46 @@ import ( "go.mongodb.org/mongo-driver/bson/primitive" ) +type WorkflowSchedule struct { + UUID string `json:"id" validate:"required"` // ExecutionsID is the list of the executions id of the workflow + Workflow *workflow.Workflow `json:"workflow,omitempty"` // Workflow is the workflow dependancy of the schedule + WorkflowExecution []*WorkflowExecution `json:"workflow_executions,omitempty"` // WorkflowExecution is the list of executions of the workflow + Message string `json:"message,omitempty"` // Message is the message of the schedule + Warning string `json:"warning,omitempty"` // Warning is the warning message of the schedule + Start time.Time `json:"start" validate:"required,ltfield=End"` // Start is the start time of the schedule, is required and must be less than the End time + End *time.Time `json:"end,omitempty"` // End is the end time of the schedule, is required and must be greater than the Start time + DurationS float64 `json:"duration_s" default:"-1"` // End is the end time of the schedule + Cron string `json:"cron,omitempty"` // here the cron format : ss mm hh dd MM dw task + + BookingMode booking.BookingMode `json:"booking_mode,omitempty"` // BookingMode qualify the preemption order of the scheduling. if no payment allowed with preemption set up When_Possible + SelectedInstances workflow.ConfigItem `json:"selected_instances"` + SelectedPartnerships workflow.ConfigItem `json:"selected_partnerships"` + SelectedBuyings workflow.ConfigItem `json:"selected_buyings"` + SelectedStrategies workflow.ConfigItem `json:"selected_strategies"` + + SelectedBillingStrategy pricing.BillingStrategy `json:"selected_billing_strategy"` +} + +func NewScheduler(mode int, start string, end string, durationInS float64, cron string) *WorkflowSchedule { + ws := &WorkflowSchedule{ + UUID: uuid.New().String(), + Start: time.Now(), + BookingMode: booking.BookingMode(mode), + DurationS: durationInS, + Cron: cron, + } + s, err := time.Parse("2006-01-02T15:04:05", start) + if err == nil && ws.BookingMode == booking.PLANNED { + ws.Start = s // can apply a defined start other than now, if planned + } + + e, err := time.Parse("2006-01-02T15:04:05", end) + if err == nil { + ws.End = &e + } + return ws +} + /* * WorkflowExecution is a struct that represents a list of workflow executions * Warning: No user can write (del, post, put) a workflow execution, it is only used by the system