diff --git a/controllers/workflow_execution.go b/controllers/workflow_execution.go
index 70c333b..ccee668 100644
--- a/controllers/workflow_execution.go
+++ b/controllers/workflow_execution.go
@@ -1,13 +1,10 @@
package controllers
import (
- "encoding/json"
"time"
oclib "cloud.o-forge.io/core/oc-lib"
dbs "cloud.o-forge.io/core/oc-lib/dbs"
- "cloud.o-forge.io/core/oc-lib/models/workflow_execution"
- "cloud.o-forge.io/core/oc-lib/tools"
beego "github.com/beego/beego/v2/server/web"
"go.mongodb.org/mongo-driver/bson/primitive"
)
@@ -89,37 +86,3 @@ func (o *WorkflowExecutionController) Search() {
o.Data["json"] = oclib.NewRequest(collection, user, peerID, groups, nil).Search(nil, search, isDraft == "true")
o.ServeJSON()
}
-
-// @Title ScheduleWorkflow
-// @Description schedule workflow
-// @Param id path string true "id execution"
-// @Param body body models.compute true "The compute content"
-// @Success 200 {workspace} models.workspace
-// @router /workflow/:id [post]
-func (o *WorkflowExecutionController) ScheduleWorkflow() {
- user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
- id := o.Ctx.Input.Param(":id")
- var resp *workflow_execution.WorkflowSchedule
- json.Unmarshal(o.Ctx.Input.CopyBody(100000), &resp)
- caller := tools.NewHTTPCaller(map[tools.DataType]map[tools.METHOD]string{ // paths to call other OC services
- tools.PEER: {
- tools.POST: "/status/",
- },
- tools.BOOKING: {
- tools.GET: "/booking/check/:id/:start_date/:end_date",
- },
- })
- sch, err := oclib.NewRequest(collection, user, peerID, groups, caller).Schedule(id, resp)
- code := 200
- e := ""
- if err != nil {
- code = 409
- e = err.Error()
- }
- o.Data["json"] = map[string]interface{}{
- "data": sch,
- "code": code,
- "error": e,
- }
- o.ServeJSON()
-}
diff --git a/controllers/workflow_sheduler.go b/controllers/workflow_sheduler.go
new file mode 100644
index 0000000..5e46076
--- /dev/null
+++ b/controllers/workflow_sheduler.go
@@ -0,0 +1,122 @@
+package controllers
+
+import (
+ "encoding/json"
+ "fmt"
+
+ oclib "cloud.o-forge.io/core/oc-lib"
+ "cloud.o-forge.io/core/oc-lib/dbs"
+ "cloud.o-forge.io/core/oc-lib/models/workflow_execution"
+ "cloud.o-forge.io/core/oc-lib/tools"
+ beego "github.com/beego/beego/v2/server/web"
+)
+
+var orderCollection = oclib.LibDataEnum(oclib.ORDER)
+
+// Operations about workflow
+type WorkflowSchedulerController struct {
+ beego.Controller
+}
+
+// @Title Schedule
+// @Description schedule workflow
+// @Param id path string true "id execution"
+// @Param body body models.compute true "The compute content"
+// @Success 200 {workspace} models.workspace
+// @router /:id [post]
+func (o *WorkflowSchedulerController) Schedule() {
+ code := 200
+ e := ""
+ user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
+ id := o.Ctx.Input.Param(":id")
+ var resp *workflow_execution.WorkflowSchedule
+ json.Unmarshal(o.Ctx.Input.CopyBody(100000), &resp)
+ caller := tools.NewHTTPCaller(map[tools.DataType]map[tools.METHOD]string{ // paths to call other OC services
+ tools.PEER: {
+ tools.POST: "/status/",
+ },
+ tools.BOOKING: {
+ tools.GET: "/booking/check/:id/:start_date/:end_date",
+ },
+ })
+ req := oclib.NewRequest(collection, user, peerID, groups, caller)
+ sch, err := req.Schedule(id, resp)
+ if err != nil {
+ filter := &dbs.Filters{
+ And: map[string][]dbs.Filter{
+ "workflow_id": {{Operator: dbs.EQUAL.String(), Value: id}},
+ },
+ }
+ d := req.Search(filter, "", true)
+ if d.Data != nil {
+ for _, w := range d.Data {
+ req.DeleteOne(w.GetID())
+ }
+ }
+ o.Data["json"] = map[string]interface{}{
+ "data": nil,
+ "code": 409,
+ "error": err.Error(),
+ }
+ o.ServeJSON()
+ return
+ }
+ order, err := req.DraftOrder(sch)
+ fmt.Println("SCHEDULED", order, err)
+
+ if err != nil {
+ for _, w := range sch.WorkflowExecutions {
+ oclib.NewRequest(collection, user, peerID, groups, nil).DeleteOne(w.GetID())
+ }
+ o.Data["json"] = map[string]interface{}{
+ "data": nil,
+ "code": 409,
+ "error": err.Error(),
+ }
+ o.ServeJSON()
+ return
+ }
+ o.Data["json"] = map[string]interface{}{
+ "data": order,
+ "code": code,
+ "error": e,
+ }
+ o.ServeJSON()
+}
+
+// @Title UnSchedule
+// @Description schedule workflow
+// @Param id path string true "id execution"
+// @Param body body models.compute true "The compute content"
+// @Success 200 {workspace} models.workspace
+// @router /:id [delete]
+func (o *WorkflowSchedulerController) UnSchedule() {
+ user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
+ id := o.Ctx.Input.Param(":id")
+ // TODO UNSCHEDULER
+ filter := &dbs.Filters{
+ And: map[string][]dbs.Filter{
+ "workflow_id": {{Operator: dbs.EQUAL.String(), Value: id}},
+ },
+ }
+ o.Data["json"] = oclib.NewRequest(collection, user, peerID, groups, nil).Search(filter, "", true)
+ o.ServeJSON()
+}
+
+// @Title SearchScheduledDraftOrder
+// @Description schedule workflow
+// @Param id path string true "id execution"
+// @Success 200 {workspace} models.workspace
+// @router /:id/order [get]
+func (o *WorkflowSchedulerController) SearchScheduledDraftOrder() {
+ user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
+ id := o.Ctx.Input.Param(":id")
+ filter := &dbs.Filters{
+ And: map[string][]dbs.Filter{
+ "workflow_id": {{Operator: dbs.EQUAL.String(), Value: id}},
+ "order_by": {{Operator: dbs.EQUAL.String(), Value: peerID}},
+ },
+ }
+ o.Data["json"] = oclib.NewRequest(orderCollection, user, peerID, groups, nil).Search(filter, "", true)
+ o.ServeJSON()
+}
diff --git a/go.mod b/go.mod
index 942d23c..400cbdb 100644
--- a/go.mod
+++ b/go.mod
@@ -5,7 +5,7 @@ go 1.22.0
toolchain go1.22.4
require (
- cloud.o-forge.io/core/oc-lib v0.0.0-20250205160221-88b7cfe2fd0f
+ cloud.o-forge.io/core/oc-lib v0.0.0-20250211081618-d82ae166a1e5
github.com/beego/beego/v2 v2.3.1
github.com/smartystreets/goconvey v1.7.2
go.mongodb.org/mongo-driver v1.17.1
diff --git a/go.sum b/go.sum
index ff00443..4e1a2a5 100644
--- a/go.sum
+++ b/go.sum
@@ -230,6 +230,32 @@ cloud.o-forge.io/core/oc-lib v0.0.0-20250205154116-7201cabb438a h1:DAEI00i+r2MAl
cloud.o-forge.io/core/oc-lib v0.0.0-20250205154116-7201cabb438a/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
cloud.o-forge.io/core/oc-lib v0.0.0-20250205160221-88b7cfe2fd0f h1:6V+Z81ywYoDYSVMnM4PVaJYXFgCN3xSG3ddiUPn4jL8=
cloud.o-forge.io/core/oc-lib v0.0.0-20250205160221-88b7cfe2fd0f/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250206080835-e646cfef0b46 h1:YnM9WwcijS+/OrpgML7y1O5c8hJ3Wt5iIPSSZYai+zw=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250206080835-e646cfef0b46/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250206085600-3ffff7d32cf1 h1:PZ6Z3PdgjmiXQlNA64rhZgPyuZugs/jJROEVDHZs9yg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250206085600-3ffff7d32cf1/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250206101306-ad3293da9dbc h1:3X2bDl/ErUp+ahzROiscJTF6XyF81Swv4JXY2xqI6/o=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250206101306-ad3293da9dbc/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250206115651-940ef17f7b0c h1:T4NE8PQY0opcYREioh4V2eVvJkagn52jytg4S1ZtpGE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250206115651-940ef17f7b0c/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250207072957-31ec352b57b9 h1:lmzktnKiGDo6f1+a8kRAeXvbu/+CEPe/PLsqIOt8hsc=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250207072957-31ec352b57b9/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250207104112-3d1383357252 h1:zLU294Mc2bcxdeihG2K+wK2Zr2B/lTm+dJCMIEMUOKU=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250207104112-3d1383357252/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250210085846-4a178d01e3ee h1:SwWTxlaRAX5p24XwOTBVbAeTLiLFNlSqDZpU0yICrWc=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250210085846-4a178d01e3ee/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250210094237-e55727d9e273 h1:flQk8D7BAQNolfMRXehxZ5QcWuR3ytUvwJWt5GyFSbw=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250210094237-e55727d9e273/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250210103255-f663ec80f5dd h1:myQN5EugL+AvIy4Ugw+jlHEfzcVaQ1bZ+RbwTioaZqs=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250210103255-f663ec80f5dd/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250210121042-52d5a1fbf9b8 h1:LQpmqcx6b+RjfvYzyrgquLSIWdRqcJi2UXybB9wk9Vk=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250210121042-52d5a1fbf9b8/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250211065515-a573a4ce715e h1:00SdIMSwwSJpKVfdwplehHpFULrVvAoc0HxKQD06KEs=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250211065515-a573a4ce715e/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250211073038-ffaa67fb5dca h1:mZBcicJezYO7gY5SHMzyUusyLxYKwFptliiysqaGwD0=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250211073038-ffaa67fb5dca/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250211081618-d82ae166a1e5 h1:S+vFupQoyTwa2QrtxmSChxzAYCrh6mLf7GXRNKU475g=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250211081618-d82ae166a1e5/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beego/beego/v2 v2.3.0 h1:iECVwzm6egw6iw6tkWrEDqXG4NQtKLQ6QBSYqlM6T/I=
github.com/beego/beego/v2 v2.3.0/go.mod h1:Ob/5BJ9fIKZLd4s9ZV3o9J6odkkIyL83et+p98gyYXo=
diff --git a/oc-scheduler b/oc-scheduler
index ab674d9..f7cc8b3 100755
Binary files a/oc-scheduler and b/oc-scheduler differ
diff --git a/routers/commentsRouter.go b/routers/commentsRouter.go
index 4a23c72..f1b69dd 100644
--- a/routers/commentsRouter.go
+++ b/routers/commentsRouter.go
@@ -61,13 +61,22 @@ func init() {
Filters: nil,
Params: nil})
- beego.GlobalControllerRouter["oc-scheduler/controllers:WorkflowExecutionController"] = append(beego.GlobalControllerRouter["oc-scheduler/controllers:WorkflowExecutionController"],
+ beego.GlobalControllerRouter["oc-scheduler/controllers:WorkflowSchedulerController"] = append(beego.GlobalControllerRouter["oc-scheduler/controllers:WorkflowSchedulerController"],
beego.ControllerComments{
- Method: "ScheduleWorkflow",
- Router: `/workflow/:id`,
+ Method: "Schedule",
+ Router: `/:id`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
+ beego.GlobalControllerRouter["oc-scheduler/controllers:WorkflowSchedulerController"] = append(beego.GlobalControllerRouter["oc-scheduler/controllers:WorkflowSchedulerController"],
+ beego.ControllerComments{
+ Method: "UnSchedule",
+ Router: `/:id`,
+ AllowHTTPMethods: []string{"delete"},
+ MethodParams: param.Make(),
+ Filters: nil,
+ Params: nil})
+
}
diff --git a/routers/router.go b/routers/router.go
index b908054..06a6588 100644
--- a/routers/router.go
+++ b/routers/router.go
@@ -18,6 +18,11 @@ func init() {
beego.NSInclude(
&controllers.WorkflowExecutionController{},
),
+ beego.NSNamespace("/workflow",
+ beego.NSInclude(
+ &controllers.WorkflowSchedulerController{},
+ ),
+ ),
beego.NSNamespace("/version",
beego.NSInclude(
&controllers.VersionController{},
diff --git a/swagger/swagger.json b/swagger/swagger.json
index 832a909..79a07ad 100644
--- a/swagger/swagger.json
+++ b/swagger/swagger.json
@@ -133,10 +133,40 @@
"/workflow/{id}": {
"post": {
"tags": [
- "oc-scheduler/controllersWorkflowExecutionController"
+ "workflow"
],
"description": "schedule workflow\n\u003cbr\u003e",
- "operationId": "WorkflowExecutionController.ScheduleWorkflow",
+ "operationId": "WorkflowSchedulerController.Schedule",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "id",
+ "description": "id execution",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "body",
+ "name": "body",
+ "description": "The compute content",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/models.compute"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "{workspace} models.workspace"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "workflow"
+ ],
+ "description": "schedule workflow\n\u003cbr\u003e",
+ "operationId": "WorkflowSchedulerController.UnSchedule",
"parameters": [
{
"in": "path",
@@ -197,6 +227,10 @@
"name": "oc-scheduler/controllersWorkflowExecutionController",
"description": "Operations about workflow\n"
},
+ {
+ "name": "workflow",
+ "description": "Operations about workflow\n"
+ },
{
"name": "version",
"description": "VersionController operations for Version\n"
diff --git a/swagger/swagger.yml b/swagger/swagger.yml
index e2a5acf..545730d 100644
--- a/swagger/swagger.yml
+++ b/swagger/swagger.yml
@@ -117,11 +117,33 @@ paths:
/workflow/{id}:
post:
tags:
- - oc-scheduler/controllersWorkflowExecutionController
+ - workflow
description: |-
schedule workflow
- operationId: WorkflowExecutionController.ScheduleWorkflow
+ operationId: WorkflowSchedulerController.Schedule
+ parameters:
+ - in: path
+ name: id
+ description: id execution
+ required: true
+ type: string
+ - in: body
+ name: body
+ description: The compute content
+ required: true
+ schema:
+ $ref: '#/definitions/models.compute'
+ responses:
+ "200":
+ description: '{workspace} models.workspace'
+ delete:
+ tags:
+ - workflow
+ description: |-
+ schedule workflow
+
+ operationId: WorkflowSchedulerController.UnSchedule
parameters:
- in: path
name: id
@@ -145,6 +167,9 @@ tags:
- name: oc-scheduler/controllersWorkflowExecutionController
description: |
Operations about workflow
+- name: workflow
+ description: |
+ Operations about workflow
- name: version
description: |
VersionController operations for Version