|
1 | 1 | package dev.dbos.transact.conductor; |
2 | 2 |
|
3 | | -import dev.dbos.transact.conductor.protocol.*; |
| 3 | +import dev.dbos.transact.conductor.protocol.AlertRequest; |
| 4 | +import dev.dbos.transact.conductor.protocol.BaseMessage; |
| 5 | +import dev.dbos.transact.conductor.protocol.BaseResponse; |
| 6 | +import dev.dbos.transact.conductor.protocol.CancelRequest; |
| 7 | +import dev.dbos.transact.conductor.protocol.DeleteRequest; |
| 8 | +import dev.dbos.transact.conductor.protocol.ExecutorInfoResponse; |
| 9 | +import dev.dbos.transact.conductor.protocol.ExistPendingWorkflowsRequest; |
| 10 | +import dev.dbos.transact.conductor.protocol.ExistPendingWorkflowsResponse; |
| 11 | +import dev.dbos.transact.conductor.protocol.ExportWorkflowRequest; |
| 12 | +import dev.dbos.transact.conductor.protocol.ExportWorkflowResponse; |
| 13 | +import dev.dbos.transact.conductor.protocol.ForkWorkflowRequest; |
| 14 | +import dev.dbos.transact.conductor.protocol.ForkWorkflowResponse; |
| 15 | +import dev.dbos.transact.conductor.protocol.GetMetricsRequest; |
| 16 | +import dev.dbos.transact.conductor.protocol.GetMetricsResponse; |
| 17 | +import dev.dbos.transact.conductor.protocol.GetWorkflowRequest; |
| 18 | +import dev.dbos.transact.conductor.protocol.GetWorkflowResponse; |
| 19 | +import dev.dbos.transact.conductor.protocol.ImportWorkflowRequest; |
| 20 | +import dev.dbos.transact.conductor.protocol.ListQueuedWorkflowsRequest; |
| 21 | +import dev.dbos.transact.conductor.protocol.ListStepsRequest; |
| 22 | +import dev.dbos.transact.conductor.protocol.ListStepsResponse; |
| 23 | +import dev.dbos.transact.conductor.protocol.ListWorkflowsRequest; |
| 24 | +import dev.dbos.transact.conductor.protocol.MessageType; |
| 25 | +import dev.dbos.transact.conductor.protocol.RecoveryRequest; |
| 26 | +import dev.dbos.transact.conductor.protocol.RestartRequest; |
| 27 | +import dev.dbos.transact.conductor.protocol.ResumeRequest; |
| 28 | +import dev.dbos.transact.conductor.protocol.RetentionRequest; |
| 29 | +import dev.dbos.transact.conductor.protocol.SuccessResponse; |
| 30 | +import dev.dbos.transact.conductor.protocol.WorkflowOutputsResponse; |
| 31 | +import dev.dbos.transact.conductor.protocol.WorkflowsOutput; |
4 | 32 | import dev.dbos.transact.database.SystemDatabase; |
5 | 33 | import dev.dbos.transact.execution.DBOSExecutor; |
6 | 34 | import dev.dbos.transact.json.JSONUtil; |
@@ -78,22 +106,23 @@ public class Conductor implements AutoCloseable { |
78 | 106 | static { |
79 | 107 | Map<MessageType, BiFunction<Conductor, BaseMessage, CompletableFuture<BaseResponse>>> map = |
80 | 108 | new java.util.EnumMap<>(MessageType.class); |
81 | | - map.put(MessageType.EXECUTOR_INFO, Conductor::handleExecutorInfo); |
82 | | - map.put(MessageType.RECOVERY, Conductor::handleRecovery); |
| 109 | + map.put(MessageType.ALERT, Conductor::handleAlert); |
83 | 110 | map.put(MessageType.CANCEL, Conductor::handleCancel); |
84 | 111 | map.put(MessageType.DELETE, Conductor::handleDelete); |
85 | | - map.put(MessageType.RESUME, Conductor::handleResume); |
86 | | - map.put(MessageType.RESTART, Conductor::handleRestart); |
| 112 | + map.put(MessageType.EXECUTOR_INFO, Conductor::handleExecutorInfo); |
| 113 | + map.put(MessageType.EXIST_PENDING_WORKFLOWS, Conductor::handleExistPendingWorkflows); |
| 114 | + map.put(MessageType.EXPORT_WORKFLOW, Conductor::handleExportWorkflow); |
87 | 115 | map.put(MessageType.FORK_WORKFLOW, Conductor::handleFork); |
88 | | - map.put(MessageType.LIST_WORKFLOWS, Conductor::handleListWorkflows); |
| 116 | + map.put(MessageType.GET_METRICS, Conductor::handleGetMetrics); |
| 117 | + map.put(MessageType.GET_WORKFLOW, Conductor::handleGetWorkflow); |
| 118 | + map.put(MessageType.IMPORT_WORKFLOW, Conductor::handleImportWorkflow); |
89 | 119 | map.put(MessageType.LIST_QUEUED_WORKFLOWS, Conductor::handleListQueuedWorkflows); |
90 | 120 | map.put(MessageType.LIST_STEPS, Conductor::handleListSteps); |
91 | | - map.put(MessageType.EXIST_PENDING_WORKFLOWS, Conductor::handleExistPendingWorkflows); |
92 | | - map.put(MessageType.GET_WORKFLOW, Conductor::handleGetWorkflow); |
| 121 | + map.put(MessageType.LIST_WORKFLOWS, Conductor::handleListWorkflows); |
| 122 | + map.put(MessageType.RECOVERY, Conductor::handleRecovery); |
| 123 | + map.put(MessageType.RESTART, Conductor::handleRestart); |
| 124 | + map.put(MessageType.RESUME, Conductor::handleResume); |
93 | 125 | map.put(MessageType.RETENTION, Conductor::handleRetention); |
94 | | - map.put(MessageType.GET_METRICS, Conductor::handleGetMetrics); |
95 | | - map.put(MessageType.IMPORT_WORKFLOW, Conductor::handleImportWorkflow); |
96 | | - map.put(MessageType.EXPORT_WORKFLOW, Conductor::handleExportWorkflow); |
97 | 126 |
|
98 | 127 | dispatchMap = Collections.unmodifiableMap(map); |
99 | 128 | } |
@@ -1008,4 +1037,18 @@ static String serializeExportedWorkflows(List<ExportedWorkflow> workflows) throw |
1008 | 1037 |
|
1009 | 1038 | return Base64.getEncoder().encodeToString(out.toByteArray()); |
1010 | 1039 | } |
| 1040 | + |
| 1041 | + static CompletableFuture<BaseResponse> handleAlert(Conductor conductor, BaseMessage message) { |
| 1042 | + return CompletableFuture.supplyAsync( |
| 1043 | + () -> { |
| 1044 | + AlertRequest request = (AlertRequest) message; |
| 1045 | + try { |
| 1046 | + conductor.dbosExecutor.fireAlertHandler( |
| 1047 | + request.name, request.message, request.metadata); |
| 1048 | + return new SuccessResponse(request, true); |
| 1049 | + } catch (Exception e) { |
| 1050 | + return new SuccessResponse(request, e); |
| 1051 | + } |
| 1052 | + }); |
| 1053 | + } |
1011 | 1054 | } |
0 commit comments