From 301ef8dc05a48f0da240d86f7a974282a2171a2f Mon Sep 17 00:00:00 2001 From: mr Date: Mon, 13 Jan 2025 12:25:57 +0100 Subject: [PATCH] add exec --- models/booking/booking.go | 7 ++++--- models/order/order.go | 2 +- models/workflow_execution/workflow_execution.go | 9 +++++---- models/workflow_execution/workflow_scheduler.go | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/models/booking/booking.go b/models/booking/booking.go index b67c1e8..f7111a5 100644 --- a/models/booking/booking.go +++ b/models/booking/booking.go @@ -15,7 +15,8 @@ import ( */ type Booking struct { utils.AbstractObject // AbstractObject contains the basic fields of an object (id, name) - DestPeerID string `json:"dest_peer_id,omitempty"` // DestPeerID is the ID of the destination peer + DestPeerID string `json:"dest_peer_id,omitempty"` // DestPeerID is the ID of the destination peer + WorkflowID string `json:"workflow_id,omitempty" bson:"workflow_id,omitempty"` // WorkflowID is the ID of the workflow ExecutionID string `json:"execution_id,omitempty" bson:"execution_id,omitempty" validate:"required"` State common.ScheduledType `json:"state,omitempty" bson:"state,omitempty" validate:"required"` // State is the state of the booking ExpectedStartDate time.Time `json:"expected_start_date,omitempty" bson:"expected_start_date,omitempty" validate:"required"` // ExpectedStartDate is the expected start date of the booking @@ -24,8 +25,8 @@ type Booking struct { RealStartDate *time.Time `json:"real_start_date,omitempty" bson:"real_start_date,omitempty"` // RealStartDate is the real start date of the booking RealEndDate *time.Time `json:"real_end_date,omitempty" bson:"real_end_date,omitempty"` // RealEndDate is the real end date of the booking - ResourceType tools.DataType `json:"resource_type,omitempty" bson:"resource_type,omitempty" validate:"required"` // ResourceType is the type of the resource - ResourceID string `json:"compute_resource_id,omitempty" bson:"compute_resource_id,omitempty" validate:"required"` // could be a Compute or a Storage + ResourceType tools.DataType `json:"resource_type,omitempty" bson:"resource_type,omitempty" validate:"required"` // ResourceType is the type of the resource + ResourceID string `json:"resource_id,omitempty" bson:"resource_id,omitempty" validate:"required"` // could be a Compute or a Storage } // CheckBooking checks if a booking is possible on a specific compute resource diff --git a/models/order/order.go b/models/order/order.go index 08e539f..b52f948 100644 --- a/models/order/order.go +++ b/models/order/order.go @@ -176,7 +176,7 @@ func (o *Order) draftBookOrder(scheduler *workflow_execution.WorkflowSchedule, r if err != nil { return draftedBookings, errors.New("could not planify the workflow" + fmt.Sprintf("%v", err)) } - bookings := exec.Book(priceds) + bookings := exec.Book(scheduler.Workflow.UUID, priceds) for _, booking := range bookings { _, err := (&peer.Peer{}).LaunchPeerExecution(booking.DestPeerID, "", tools.BOOKING, tools.POST, booking.Serialize(booking), request.Caller) diff --git a/models/workflow_execution/workflow_execution.go b/models/workflow_execution/workflow_execution.go index bb492d4..0eaac87 100644 --- a/models/workflow_execution/workflow_execution.go +++ b/models/workflow_execution/workflow_execution.go @@ -104,13 +104,13 @@ func (d *WorkflowExecutions) VerifyAuth(request *tools.APIRequest) bool { return true } -func (d *WorkflowExecutions) Book(priceds map[tools.DataType][]pricing.PricedItemITF) []*booking.Booking { - booking := d.bookEach(tools.STORAGE_RESOURCE, priceds[tools.STORAGE_RESOURCE]) - booking = append(booking, d.bookEach(tools.PROCESSING_RESOURCE, priceds[tools.PROCESSING_RESOURCE])...) +func (d *WorkflowExecutions) Book(wfID string, priceds map[tools.DataType][]pricing.PricedItemITF) []*booking.Booking { + booking := d.bookEach(wfID, tools.STORAGE_RESOURCE, priceds[tools.STORAGE_RESOURCE]) + booking = append(booking, d.bookEach(wfID, tools.PROCESSING_RESOURCE, priceds[tools.PROCESSING_RESOURCE])...) return booking } -func (d *WorkflowExecutions) bookEach(dt tools.DataType, priceds []pricing.PricedItemITF) []*booking.Booking { +func (d *WorkflowExecutions) bookEach(wfID string, dt tools.DataType, priceds []pricing.PricedItemITF) []*booking.Booking { items := []*booking.Booking{} for _, priced := range priceds { start := d.ExecDate @@ -123,6 +123,7 @@ func (d *WorkflowExecutions) bookEach(dt tools.DataType, priceds []pricing.Price ResourceID: priced.GetID(), ResourceType: dt, DestPeerID: priced.GetCreatorID(), + WorkflowID: wfID, ExecutionID: d.GetID(), ExpectedStartDate: start, ExpectedEndDate: &end, diff --git a/models/workflow_execution/workflow_scheduler.go b/models/workflow_execution/workflow_scheduler.go index a262bce..160dbf1 100644 --- a/models/workflow_execution/workflow_scheduler.go +++ b/models/workflow_execution/workflow_scheduler.go @@ -71,7 +71,7 @@ func (ws *WorkflowSchedule) CheckBooking(wfID string, request *tools.APIRequest) return false, wf, []*WorkflowExecutions{}, err } for _, exec := range execs { - bookings := exec.Book(priceds) + bookings := exec.Book(wfID, priceds) for _, booking := range bookings { _, err := (&peer.Peer{}).LaunchPeerExecution(booking.DestPeerID, "", tools.BOOKING, tools.POSTCHECK, booking.Serialize(booking), request.Caller)