-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathevent-handlers.ts
More file actions
178 lines (149 loc) · 6.04 KB
/
event-handlers.ts
File metadata and controls
178 lines (149 loc) · 6.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/**
* Event Handlers API Journey — Full lifecycle of event handlers and queue management
*
* Demonstrates all EventClient APIs:
* - Event handler CRUD (add, get, update, list, delete)
* - Event handler filtering (by event, active only)
* - Tag management (add, get, delete)
* - Queue configuration (list queue names)
* - Event execution views
*
* Run:
* CONDUCTOR_SERVER_URL=http://localhost:8080 npx ts-node examples/api-journeys/event-handlers.ts
*/
import { OrkesClients } from "../../src/sdk";
import type { EventHandler } from "../../src/open-api";
async function main() {
const clients = await OrkesClients.from();
const eventClient = clients.getEventClient();
const handlerName = `example_handler_${Date.now()}`;
const eventName = "conductor:example_event";
try {
// ── 1. Event Handler CRUD ─────────────────────────────────────────
console.log("=== Event Handler CRUD ===\n");
// Create an event handler that starts a workflow on event
const handler: EventHandler = {
name: handlerName,
event: eventName,
active: true,
actions: [
{
action: "start_workflow",
start_workflow: {
name: "example_event_workflow",
version: 1,
},
},
],
};
await eventClient.addEventHandler(handler);
console.log(`1. Created event handler: ${handlerName}`);
// Get event handler by name
const fetched = await eventClient.getEventHandlerByName(handlerName);
console.log(`2. Fetched handler: ${fetched.name}, active: ${fetched.active}`);
// Update event handler (deactivate)
await eventClient.updateEventHandler({
...fetched,
active: false,
});
console.log("3. Updated handler (deactivated)");
// Verify update
const updated = await eventClient.getEventHandlerByName(handlerName);
console.log(`4. Handler active: ${updated.active}`);
// Re-activate
await eventClient.updateEventHandler({
...updated,
active: true,
});
console.log("5. Re-activated handler");
// ── 2. Event Handler Queries ──────────────────────────────────────
console.log("\n=== Event Handler Queries ===\n");
// List all event handlers
const allHandlers = await eventClient.getAllEventHandlers();
console.log(`6. Total event handlers: ${allHandlers.length}`);
// Get handlers for a specific event
const handlersForEvent = await eventClient.getEventHandlersForEvent(
eventName
);
console.log(
`7. Handlers for '${eventName}': ${handlersForEvent.length}`
);
// Get only active handlers for the event
const activeHandlers = await eventClient.getEventHandlersForEvent(
eventName,
true
);
console.log(`8. Active handlers for event: ${activeHandlers.length}`);
// ── 3. Tag Management ─────────────────────────────────────────────
console.log("\n=== Tag Management ===\n");
// Add tags
await eventClient.putTagForEventHandler(handlerName, [
{ key: "environment", value: "production" },
{ key: "team", value: "platform" },
]);
console.log("9. Added tags to handler");
// Get tags
const tags = await eventClient.getTagsForEventHandler(handlerName);
console.log(`10. Tags: ${JSON.stringify(tags)}`);
// Delete a single tag
await eventClient.deleteTagForEventHandler(handlerName, {
key: "team",
value: "platform",
});
console.log("11. Deleted 'team' tag");
// Verify
const remainingTags = await eventClient.getTagsForEventHandler(handlerName);
console.log(`12. Remaining tags: ${JSON.stringify(remainingTags)}`);
// Delete remaining tags
await eventClient.deleteTagsForEventHandler(handlerName, remainingTags);
console.log("13. Deleted remaining tags");
// ── 4. Queue Configuration ────────────────────────────────────────
console.log("\n=== Queue Configuration ===\n");
// List all queue names/configs
const queueConfigs = await eventClient.getAllQueueConfigs();
const queueCount = Object.keys(queueConfigs).length;
console.log(`14. Queue configs available: ${queueCount}`);
if (queueCount > 0) {
const firstKey = Object.keys(queueConfigs)[0];
console.log(` First queue: ${firstKey}`);
}
// ── 5. Event Execution Views ──────────────────────────────────────
console.log("\n=== Event Execution Views ===\n");
// Get all active event handlers (execution view)
try {
const activeView = await eventClient.getAllActiveEventHandlers();
console.log(
`15. Active handlers (execution view): ${activeView?.results?.length ?? 0} results`
);
} catch {
console.log("15. Active handlers view: not available on this server");
}
// Get event handlers with statistics
try {
const stats = await eventClient.getEventHandlersWithStats();
console.log(
`16. Handlers with stats: ${stats?.results?.length ?? 0} results`
);
} catch {
console.log("16. Handler stats: not available on this server");
}
// ── 6. Cleanup ──────────────────────────────────────────────────
console.log("\n=== Cleanup ===\n");
await eventClient.removeEventHandler(handlerName);
console.log(`17. Deleted event handler: ${handlerName}`);
} catch (err) {
console.error("Error:", err);
// Best-effort cleanup
try {
await eventClient.removeEventHandler(handlerName);
} catch {
/* ignore */
}
}
console.log("\nDone.");
process.exit(0);
}
main().catch((err) => {
console.error(err);
process.exit(1);
});