Files
oc-scheduler/infrastructure/nats.go

76 lines
2.5 KiB
Go
Raw Normal View History

2026-02-23 18:10:47 +01:00
package infrastructure
import (
"encoding/json"
"fmt"
"cloud.o-forge.io/core/oc-lib/models/booking"
"cloud.o-forge.io/core/oc-lib/models/resources/purchase_resource"
"cloud.o-forge.io/core/oc-lib/models/utils"
"cloud.o-forge.io/core/oc-lib/tools"
)
// ---------------------------------------------------------------------------
// NATS emission
// ---------------------------------------------------------------------------
func EmitNATS(peerID string, message tools.PropalgationMessage) {
2026-03-12 12:05:52 +01:00
// PB_CLOSE_PLANNER: notify local watchers so streams re-evaluate.
// Cache mutations (eviction or ownership reset) are the caller's
// responsibility — see evictAfter and ReleaseRefreshOwnership.
2026-02-23 18:10:47 +01:00
if message.Action == tools.PB_CLOSE_PLANNER {
2026-03-12 12:05:52 +01:00
notifyPlannerWatchers(peerID)
2026-02-23 18:10:47 +01:00
}
b, _ := json.Marshal(message)
tools.NewNATSCaller().SetNATSPub(tools.PROPALGATION_EVENT, tools.NATSResponse{
FromApp: "oc-scheduler",
Datatype: -1,
Method: int(tools.PROPALGATION_EVENT),
Payload: b,
})
}
// ---------------------------------------------------------------------------
// NATS listeners
// ---------------------------------------------------------------------------
func ListenNATS() {
tools.NewNATSCaller().ListenNats(map[tools.NATSMethod]func(tools.NATSResponse){
2026-03-18 16:44:20 +01:00
tools.PLANNER_EXECUTION: handlePlannerExecution,
tools.CONSIDERS_EVENT: handleConsidersEvent,
tools.REMOVE_RESOURCE: handleRemoveResource,
tools.CREATE_RESOURCE: handleCreateResource,
tools.CONFIRM_EVENT: handleConfirm,
2026-02-23 18:10:47 +01:00
})
}
// ---------------------------------------------------------------------------
2026-03-17 11:58:27 +01:00
// Draft timeout
2026-02-23 18:10:47 +01:00
// ---------------------------------------------------------------------------
2026-03-17 11:58:27 +01:00
// draftTimeout deletes a booking or purchase resource if it is still a draft
// after the 10-minute confirmation window has elapsed.
func draftTimeout(id string, dt tools.DataType) {
adminReq := &tools.APIRequest{Admin: true}
var res utils.DBObject
var loadErr error
switch dt {
case tools.BOOKING:
res, _, loadErr = booking.NewAccessor(adminReq).LoadOne(id)
case tools.PURCHASE_RESOURCE:
res, _, loadErr = purchase_resource.NewAccessor(adminReq).LoadOne(id)
default:
2026-02-23 18:10:47 +01:00
return
}
2026-03-17 11:58:27 +01:00
if loadErr != nil || res == nil || !res.IsDrafted() {
2026-02-23 18:10:47 +01:00
return
}
2026-03-17 11:58:27 +01:00
switch dt {
case tools.BOOKING:
booking.NewAccessor(adminReq).DeleteOne(id)
case tools.PURCHASE_RESOURCE:
purchase_resource.NewAccessor(adminReq).DeleteOne(id)
2026-02-23 18:10:47 +01:00
}
2026-03-17 11:58:27 +01:00
fmt.Printf("draftTimeout: %s %s deleted (still draft after 10 min)\n", dt.String(), id)
2026-02-23 18:10:47 +01:00
}