bunqueue-dashboard 0.0.17 → 0.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +135 -60
- package/dist/assets/AddJob-pXSBfCte.js +3 -0
- package/dist/assets/Alerts-DdXuzRJe.js +1 -0
- package/dist/assets/Benchmark-DFdrF54C.js +1 -0
- package/dist/assets/BulkAddJobs-BrCaYvgB.js +5 -0
- package/dist/assets/{CopilotPanel-C9ojQ_8d.js → CopilotPanel-BQrRrGXD.js} +1 -1
- package/dist/assets/{CopyButton-BC6QECSJ.js → CopyButton-D39F1wIH.js} +1 -1
- package/dist/assets/Cron-Ctas3GOV.js +1 -0
- package/dist/assets/CronManager-tK96LeNt.js +1 -0
- package/dist/assets/{Database--bK9pYZF.js → Database-CLUujevy.js} +3 -3
- package/dist/assets/Diagnostics-Wbdmc5hx.js +1 -0
- package/dist/assets/{Dlq-Bs1pupY2.js → Dlq-B2QZSDU6.js} +1 -1
- package/dist/assets/DlqControl-D9xzve29.js +1 -0
- package/dist/assets/DlqPro-ByRwkv1s.js +1 -0
- package/dist/assets/Flows-Bb2WdFa0.js +1 -0
- package/dist/assets/JobInspector-BTZS6pI-.js +2 -0
- package/dist/assets/Jobs-CUWqc7-2.js +1 -0
- package/dist/assets/JobsPro-BWweJCnr.js +1 -0
- package/dist/assets/{Logs-yn92V_T8.js → Logs-D5EqmgBR.js} +1 -1
- package/dist/assets/LogsPro-C14Lju7q.js +1 -0
- package/dist/assets/{McpServer-CNt7kssG.js → McpServer-CQh8KRNo.js} +1 -1
- package/dist/assets/{Metrics-CbscCpvx.js → Metrics-BjNcCmTp.js} +1 -1
- package/dist/assets/MetricsPro-CcK7hYQf.js +1 -0
- package/dist/assets/{Overview-BOuOPWsb.js → Overview-CkMHyr1F.js} +1 -1
- package/dist/assets/{Pagination-Bj1z6OlD.js → Pagination-DYMlK0Hm.js} +1 -1
- package/dist/assets/QueueActions-Cg2hdDsu.js +1 -0
- package/dist/assets/QueueControl-BY9w4OuO.js +1 -0
- package/dist/assets/{QueueDetail-BSUH0Nl6.js → QueueDetail-BbtTrGuU.js} +1 -1
- package/dist/assets/QueueDetailPro-25QnEp1Q.js +1 -0
- package/dist/assets/{Queues-BEQlaWVc.js → Queues-MXia1p1i.js} +1 -1
- package/dist/assets/QueuesOverview-Rai_zPUB.js +1 -0
- package/dist/assets/{S3Backup-BmRt-Z8V.js → S3Backup-ChWVmznV.js} +1 -1
- package/dist/assets/S3BackupPro-JU_hxhXm.js +1 -0
- package/dist/assets/{ServerControl-Bhr9FEXF.js → ServerControl-Dirs9r5Q.js} +3 -3
- package/dist/assets/{Settings-46jsrfhd.js → Settings-D0XEFZj5.js} +1 -1
- package/dist/assets/{Usage-BFLZC7pV.js → Usage-vvNehwcX.js} +1 -1
- package/dist/assets/UsagePro-D_-jHCJY.js +1 -0
- package/dist/assets/Webhooks-B4DugS-x.js +1 -0
- package/dist/assets/{Workers-DBXrLvfS.js → Workers-CvV7eZrD.js} +1 -1
- package/dist/assets/WorkersPro-t5SD6hbP.js +1 -0
- package/dist/assets/exportFile-tdUeW5m5.js +2 -0
- package/dist/assets/index-C3t3ByS-.css +1 -0
- package/dist/assets/index-C5VVVkqi.js +8 -0
- package/dist/assets/promisePool-Daxkc1OB.js +1 -0
- package/dist/assets/useThroughputSeries-B6m-M93j.js +1 -0
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/scripts/embedded.gen.ts +112 -98
- package/dist/assets/AddJob-vk3jh1Zk.js +0 -3
- package/dist/assets/Benchmark-CpViF2ZC.js +0 -1
- package/dist/assets/Cron-Bbf7mRaK.js +0 -1
- package/dist/assets/CronManager-CeNUeoOc.js +0 -1
- package/dist/assets/Diagnostics-CGJPsWZQ.js +0 -1
- package/dist/assets/DlqControl-BLKVzYQC.js +0 -1
- package/dist/assets/DlqPro-D8SmIQUs.js +0 -1
- package/dist/assets/Flows-BOogljnP.js +0 -1
- package/dist/assets/JobInspector-Cp4ZuQGI.js +0 -2
- package/dist/assets/Jobs-C2HYkZXi.js +0 -1
- package/dist/assets/JobsPro-D0uclU0B.js +0 -1
- package/dist/assets/LogsPro-DSiV8Ajj.js +0 -1
- package/dist/assets/MetricsPro-CBiFDVne.js +0 -1
- package/dist/assets/QueueControl-Bl4l9dT6.js +0 -1
- package/dist/assets/QueuesOverview-BBjcyzz2.js +0 -1
- package/dist/assets/S3BackupPro-Dsq0erDm.js +0 -1
- package/dist/assets/UsagePro-D0k-82eG.js +0 -1
- package/dist/assets/Webhooks-DChTcBSv.js +0 -1
- package/dist/assets/WorkersPro-B6I9Ilbq.js +0 -1
- package/dist/assets/index-BFjeS9FG.js +0 -8
- package/dist/assets/index-BWY8Yofc.css +0 -1
package/dist/.vite/manifest.json
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
"_react-vendor-CHIHtdAC.js"
|
|
8
8
|
]
|
|
9
9
|
},
|
|
10
|
-
"_CopyButton-
|
|
11
|
-
"file": "assets/CopyButton-
|
|
10
|
+
"_CopyButton-D39F1wIH.js": {
|
|
11
|
+
"file": "assets/CopyButton-D39F1wIH.js",
|
|
12
12
|
"name": "CopyButton",
|
|
13
13
|
"imports": [
|
|
14
14
|
"_cn-CMFYpumL.js",
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
"index.html"
|
|
17
17
|
]
|
|
18
18
|
},
|
|
19
|
-
"_Pagination-
|
|
20
|
-
"file": "assets/Pagination-
|
|
19
|
+
"_Pagination-DYMlK0Hm.js": {
|
|
20
|
+
"file": "assets/Pagination-DYMlK0Hm.js",
|
|
21
21
|
"name": "Pagination",
|
|
22
22
|
"imports": [
|
|
23
23
|
"_cn-CMFYpumL.js",
|
|
@@ -25,6 +25,16 @@
|
|
|
25
25
|
"index.html"
|
|
26
26
|
]
|
|
27
27
|
},
|
|
28
|
+
"_QueueActions-Cg2hdDsu.js": {
|
|
29
|
+
"file": "assets/QueueActions-Cg2hdDsu.js",
|
|
30
|
+
"name": "QueueActions",
|
|
31
|
+
"imports": [
|
|
32
|
+
"_cn-CMFYpumL.js",
|
|
33
|
+
"_react-vendor-CHIHtdAC.js",
|
|
34
|
+
"index.html",
|
|
35
|
+
"_form-PtDLk33Z.js"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
28
38
|
"_cn-CMFYpumL.js": {
|
|
29
39
|
"file": "assets/cn-CMFYpumL.js",
|
|
30
40
|
"name": "cn"
|
|
@@ -37,6 +47,10 @@
|
|
|
37
47
|
"_react-vendor-CHIHtdAC.js"
|
|
38
48
|
]
|
|
39
49
|
},
|
|
50
|
+
"_exportFile-tdUeW5m5.js": {
|
|
51
|
+
"file": "assets/exportFile-tdUeW5m5.js",
|
|
52
|
+
"name": "exportFile"
|
|
53
|
+
},
|
|
40
54
|
"_form-PtDLk33Z.js": {
|
|
41
55
|
"file": "assets/form-PtDLk33Z.js",
|
|
42
56
|
"name": "form",
|
|
@@ -49,6 +63,10 @@
|
|
|
49
63
|
"file": "assets/jobActions-CuOdMglt.js",
|
|
50
64
|
"name": "jobActions"
|
|
51
65
|
},
|
|
66
|
+
"_promisePool-Daxkc1OB.js": {
|
|
67
|
+
"file": "assets/promisePool-Daxkc1OB.js",
|
|
68
|
+
"name": "promisePool"
|
|
69
|
+
},
|
|
52
70
|
"_react-vendor-CHIHtdAC.js": {
|
|
53
71
|
"file": "assets/react-vendor-CHIHtdAC.js",
|
|
54
72
|
"name": "react-vendor",
|
|
@@ -56,8 +74,17 @@
|
|
|
56
74
|
"_cn-CMFYpumL.js"
|
|
57
75
|
]
|
|
58
76
|
},
|
|
77
|
+
"_useThroughputSeries-B6m-M93j.js": {
|
|
78
|
+
"file": "assets/useThroughputSeries-B6m-M93j.js",
|
|
79
|
+
"name": "useThroughputSeries",
|
|
80
|
+
"imports": [
|
|
81
|
+
"_cn-CMFYpumL.js",
|
|
82
|
+
"_react-vendor-CHIHtdAC.js",
|
|
83
|
+
"index.html"
|
|
84
|
+
]
|
|
85
|
+
},
|
|
59
86
|
"index.html": {
|
|
60
|
-
"file": "assets/index-
|
|
87
|
+
"file": "assets/index-C5VVVkqi.js",
|
|
61
88
|
"name": "index",
|
|
62
89
|
"src": "index.html",
|
|
63
90
|
"isEntry": true,
|
|
@@ -70,6 +97,7 @@
|
|
|
70
97
|
"src/components/copilot/CopilotPanel.tsx",
|
|
71
98
|
"src/pages/control/AddJob.tsx",
|
|
72
99
|
"src/pages/control/Benchmark.tsx",
|
|
100
|
+
"src/pages/control/BulkAddJobs.tsx",
|
|
73
101
|
"src/pages/control/CronManager.tsx",
|
|
74
102
|
"src/pages/control/Database.tsx",
|
|
75
103
|
"src/pages/control/Diagnostics.tsx",
|
|
@@ -82,12 +110,14 @@
|
|
|
82
110
|
"src/pages/control/McpServer.tsx",
|
|
83
111
|
"src/pages/control/MetricsPro.tsx",
|
|
84
112
|
"src/pages/control/QueueControl.tsx",
|
|
113
|
+
"src/pages/control/QueueDetailPro.tsx",
|
|
85
114
|
"src/pages/control/QueuesOverview.tsx",
|
|
86
115
|
"src/pages/control/S3BackupPro.tsx",
|
|
87
116
|
"src/pages/control/ServerControl.tsx",
|
|
88
117
|
"src/pages/control/UsagePro.tsx",
|
|
89
118
|
"src/pages/control/Webhooks.tsx",
|
|
90
119
|
"src/pages/control/WorkersPro.tsx",
|
|
120
|
+
"src/pages/Alerts.tsx",
|
|
91
121
|
"src/pages/Cron.tsx",
|
|
92
122
|
"src/pages/Dlq.tsx",
|
|
93
123
|
"src/pages/Jobs.tsx",
|
|
@@ -103,7 +133,7 @@
|
|
|
103
133
|
"src/lib/demo/install.ts"
|
|
104
134
|
],
|
|
105
135
|
"css": [
|
|
106
|
-
"assets/index-
|
|
136
|
+
"assets/index-C3t3ByS-.css"
|
|
107
137
|
],
|
|
108
138
|
"assets": [
|
|
109
139
|
"assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2",
|
|
@@ -129,7 +159,7 @@
|
|
|
129
159
|
"src": "node_modules/@fontsource-variable/jetbrains-mono/files/jetbrains-mono-latin-wght-normal.woff2"
|
|
130
160
|
},
|
|
131
161
|
"src/components/copilot/CopilotPanel.tsx": {
|
|
132
|
-
"file": "assets/CopilotPanel-
|
|
162
|
+
"file": "assets/CopilotPanel-BQrRrGXD.js",
|
|
133
163
|
"name": "CopilotPanel",
|
|
134
164
|
"src": "src/components/copilot/CopilotPanel.tsx",
|
|
135
165
|
"isDynamicEntry": true,
|
|
@@ -146,8 +176,20 @@
|
|
|
146
176
|
"src": "src/lib/demo/install.ts",
|
|
147
177
|
"isDynamicEntry": true
|
|
148
178
|
},
|
|
179
|
+
"src/pages/Alerts.tsx": {
|
|
180
|
+
"file": "assets/Alerts-DdXuzRJe.js",
|
|
181
|
+
"name": "Alerts",
|
|
182
|
+
"src": "src/pages/Alerts.tsx",
|
|
183
|
+
"isDynamicEntry": true,
|
|
184
|
+
"imports": [
|
|
185
|
+
"_cn-CMFYpumL.js",
|
|
186
|
+
"_react-vendor-CHIHtdAC.js",
|
|
187
|
+
"index.html",
|
|
188
|
+
"_form-PtDLk33Z.js"
|
|
189
|
+
]
|
|
190
|
+
},
|
|
149
191
|
"src/pages/Cron.tsx": {
|
|
150
|
-
"file": "assets/Cron-
|
|
192
|
+
"file": "assets/Cron-Ctas3GOV.js",
|
|
151
193
|
"name": "Cron",
|
|
152
194
|
"src": "src/pages/Cron.tsx",
|
|
153
195
|
"isDynamicEntry": true,
|
|
@@ -155,11 +197,11 @@
|
|
|
155
197
|
"_cn-CMFYpumL.js",
|
|
156
198
|
"_react-vendor-CHIHtdAC.js",
|
|
157
199
|
"index.html",
|
|
158
|
-
"_Pagination-
|
|
200
|
+
"_Pagination-DYMlK0Hm.js"
|
|
159
201
|
]
|
|
160
202
|
},
|
|
161
203
|
"src/pages/Dlq.tsx": {
|
|
162
|
-
"file": "assets/Dlq-
|
|
204
|
+
"file": "assets/Dlq-B2QZSDU6.js",
|
|
163
205
|
"name": "Dlq",
|
|
164
206
|
"src": "src/pages/Dlq.tsx",
|
|
165
207
|
"isDynamicEntry": true,
|
|
@@ -168,11 +210,11 @@
|
|
|
168
210
|
"_react-vendor-CHIHtdAC.js",
|
|
169
211
|
"index.html",
|
|
170
212
|
"_form-PtDLk33Z.js",
|
|
171
|
-
"_Pagination-
|
|
213
|
+
"_Pagination-DYMlK0Hm.js"
|
|
172
214
|
]
|
|
173
215
|
},
|
|
174
216
|
"src/pages/Jobs.tsx": {
|
|
175
|
-
"file": "assets/Jobs-
|
|
217
|
+
"file": "assets/Jobs-CUWqc7-2.js",
|
|
176
218
|
"name": "Jobs",
|
|
177
219
|
"src": "src/pages/Jobs.tsx",
|
|
178
220
|
"isDynamicEntry": true,
|
|
@@ -184,7 +226,7 @@
|
|
|
184
226
|
]
|
|
185
227
|
},
|
|
186
228
|
"src/pages/Logs.tsx": {
|
|
187
|
-
"file": "assets/Logs-
|
|
229
|
+
"file": "assets/Logs-D5EqmgBR.js",
|
|
188
230
|
"name": "Logs",
|
|
189
231
|
"src": "src/pages/Logs.tsx",
|
|
190
232
|
"isDynamicEntry": true,
|
|
@@ -193,11 +235,11 @@
|
|
|
193
235
|
"_react-vendor-CHIHtdAC.js",
|
|
194
236
|
"index.html",
|
|
195
237
|
"_form-PtDLk33Z.js",
|
|
196
|
-
"_Pagination-
|
|
238
|
+
"_Pagination-DYMlK0Hm.js"
|
|
197
239
|
]
|
|
198
240
|
},
|
|
199
241
|
"src/pages/Metrics.tsx": {
|
|
200
|
-
"file": "assets/Metrics-
|
|
242
|
+
"file": "assets/Metrics-BjNcCmTp.js",
|
|
201
243
|
"name": "Metrics",
|
|
202
244
|
"src": "src/pages/Metrics.tsx",
|
|
203
245
|
"isDynamicEntry": true,
|
|
@@ -207,7 +249,7 @@
|
|
|
207
249
|
]
|
|
208
250
|
},
|
|
209
251
|
"src/pages/Overview.tsx": {
|
|
210
|
-
"file": "assets/Overview-
|
|
252
|
+
"file": "assets/Overview-CkMHyr1F.js",
|
|
211
253
|
"name": "Overview",
|
|
212
254
|
"src": "src/pages/Overview.tsx",
|
|
213
255
|
"isDynamicEntry": true,
|
|
@@ -217,7 +259,7 @@
|
|
|
217
259
|
]
|
|
218
260
|
},
|
|
219
261
|
"src/pages/QueueDetail.tsx": {
|
|
220
|
-
"file": "assets/QueueDetail-
|
|
262
|
+
"file": "assets/QueueDetail-BbtTrGuU.js",
|
|
221
263
|
"name": "QueueDetail",
|
|
222
264
|
"src": "src/pages/QueueDetail.tsx",
|
|
223
265
|
"isDynamicEntry": true,
|
|
@@ -229,7 +271,7 @@
|
|
|
229
271
|
]
|
|
230
272
|
},
|
|
231
273
|
"src/pages/Queues.tsx": {
|
|
232
|
-
"file": "assets/Queues-
|
|
274
|
+
"file": "assets/Queues-MXia1p1i.js",
|
|
233
275
|
"name": "Queues",
|
|
234
276
|
"src": "src/pages/Queues.tsx",
|
|
235
277
|
"isDynamicEntry": true,
|
|
@@ -237,11 +279,11 @@
|
|
|
237
279
|
"_cn-CMFYpumL.js",
|
|
238
280
|
"_react-vendor-CHIHtdAC.js",
|
|
239
281
|
"index.html",
|
|
240
|
-
"_Pagination-
|
|
282
|
+
"_Pagination-DYMlK0Hm.js"
|
|
241
283
|
]
|
|
242
284
|
},
|
|
243
285
|
"src/pages/S3Backup.tsx": {
|
|
244
|
-
"file": "assets/S3Backup-
|
|
286
|
+
"file": "assets/S3Backup-ChWVmznV.js",
|
|
245
287
|
"name": "S3Backup",
|
|
246
288
|
"src": "src/pages/S3Backup.tsx",
|
|
247
289
|
"isDynamicEntry": true,
|
|
@@ -251,7 +293,7 @@
|
|
|
251
293
|
]
|
|
252
294
|
},
|
|
253
295
|
"src/pages/Settings.tsx": {
|
|
254
|
-
"file": "assets/Settings-
|
|
296
|
+
"file": "assets/Settings-D0XEFZj5.js",
|
|
255
297
|
"name": "Settings",
|
|
256
298
|
"src": "src/pages/Settings.tsx",
|
|
257
299
|
"isDynamicEntry": true,
|
|
@@ -264,7 +306,7 @@
|
|
|
264
306
|
]
|
|
265
307
|
},
|
|
266
308
|
"src/pages/Usage.tsx": {
|
|
267
|
-
"file": "assets/Usage-
|
|
309
|
+
"file": "assets/Usage-vvNehwcX.js",
|
|
268
310
|
"name": "Usage",
|
|
269
311
|
"src": "src/pages/Usage.tsx",
|
|
270
312
|
"isDynamicEntry": true,
|
|
@@ -274,7 +316,7 @@
|
|
|
274
316
|
]
|
|
275
317
|
},
|
|
276
318
|
"src/pages/Workers.tsx": {
|
|
277
|
-
"file": "assets/Workers-
|
|
319
|
+
"file": "assets/Workers-CvV7eZrD.js",
|
|
278
320
|
"name": "Workers",
|
|
279
321
|
"src": "src/pages/Workers.tsx",
|
|
280
322
|
"isDynamicEntry": true,
|
|
@@ -282,11 +324,11 @@
|
|
|
282
324
|
"_cn-CMFYpumL.js",
|
|
283
325
|
"_react-vendor-CHIHtdAC.js",
|
|
284
326
|
"index.html",
|
|
285
|
-
"_Pagination-
|
|
327
|
+
"_Pagination-DYMlK0Hm.js"
|
|
286
328
|
]
|
|
287
329
|
},
|
|
288
330
|
"src/pages/control/AddJob.tsx": {
|
|
289
|
-
"file": "assets/AddJob-
|
|
331
|
+
"file": "assets/AddJob-pXSBfCte.js",
|
|
290
332
|
"name": "AddJob",
|
|
291
333
|
"src": "src/pages/control/AddJob.tsx",
|
|
292
334
|
"isDynamicEntry": true,
|
|
@@ -298,7 +340,7 @@
|
|
|
298
340
|
]
|
|
299
341
|
},
|
|
300
342
|
"src/pages/control/Benchmark.tsx": {
|
|
301
|
-
"file": "assets/Benchmark-
|
|
343
|
+
"file": "assets/Benchmark-DFdrF54C.js",
|
|
302
344
|
"name": "Benchmark",
|
|
303
345
|
"src": "src/pages/control/Benchmark.tsx",
|
|
304
346
|
"isDynamicEntry": true,
|
|
@@ -308,11 +350,23 @@
|
|
|
308
350
|
"index.html",
|
|
309
351
|
"_form-PtDLk33Z.js",
|
|
310
352
|
"_AreaChart-DzUXW8u3.js",
|
|
311
|
-
"_CopyButton-
|
|
353
|
+
"_CopyButton-D39F1wIH.js"
|
|
354
|
+
]
|
|
355
|
+
},
|
|
356
|
+
"src/pages/control/BulkAddJobs.tsx": {
|
|
357
|
+
"file": "assets/BulkAddJobs-BrCaYvgB.js",
|
|
358
|
+
"name": "BulkAddJobs",
|
|
359
|
+
"src": "src/pages/control/BulkAddJobs.tsx",
|
|
360
|
+
"isDynamicEntry": true,
|
|
361
|
+
"imports": [
|
|
362
|
+
"_cn-CMFYpumL.js",
|
|
363
|
+
"_react-vendor-CHIHtdAC.js",
|
|
364
|
+
"index.html",
|
|
365
|
+
"_form-PtDLk33Z.js"
|
|
312
366
|
]
|
|
313
367
|
},
|
|
314
368
|
"src/pages/control/CronManager.tsx": {
|
|
315
|
-
"file": "assets/CronManager-
|
|
369
|
+
"file": "assets/CronManager-tK96LeNt.js",
|
|
316
370
|
"name": "CronManager",
|
|
317
371
|
"src": "src/pages/control/CronManager.tsx",
|
|
318
372
|
"isDynamicEntry": true,
|
|
@@ -321,11 +375,11 @@
|
|
|
321
375
|
"_react-vendor-CHIHtdAC.js",
|
|
322
376
|
"index.html",
|
|
323
377
|
"_form-PtDLk33Z.js",
|
|
324
|
-
"_Pagination-
|
|
378
|
+
"_Pagination-DYMlK0Hm.js"
|
|
325
379
|
]
|
|
326
380
|
},
|
|
327
381
|
"src/pages/control/Database.tsx": {
|
|
328
|
-
"file": "assets/Database
|
|
382
|
+
"file": "assets/Database-CLUujevy.js",
|
|
329
383
|
"name": "Database",
|
|
330
384
|
"src": "src/pages/control/Database.tsx",
|
|
331
385
|
"isDynamicEntry": true,
|
|
@@ -334,12 +388,12 @@
|
|
|
334
388
|
"_react-vendor-CHIHtdAC.js",
|
|
335
389
|
"index.html",
|
|
336
390
|
"_form-PtDLk33Z.js",
|
|
337
|
-
"_Pagination-
|
|
338
|
-
"_CopyButton-
|
|
391
|
+
"_Pagination-DYMlK0Hm.js",
|
|
392
|
+
"_CopyButton-D39F1wIH.js"
|
|
339
393
|
]
|
|
340
394
|
},
|
|
341
395
|
"src/pages/control/Diagnostics.tsx": {
|
|
342
|
-
"file": "assets/Diagnostics-
|
|
396
|
+
"file": "assets/Diagnostics-Wbdmc5hx.js",
|
|
343
397
|
"name": "Diagnostics",
|
|
344
398
|
"src": "src/pages/control/Diagnostics.tsx",
|
|
345
399
|
"isDynamicEntry": true,
|
|
@@ -350,7 +404,7 @@
|
|
|
350
404
|
]
|
|
351
405
|
},
|
|
352
406
|
"src/pages/control/DlqControl.tsx": {
|
|
353
|
-
"file": "assets/DlqControl-
|
|
407
|
+
"file": "assets/DlqControl-D9xzve29.js",
|
|
354
408
|
"name": "DlqControl",
|
|
355
409
|
"src": "src/pages/control/DlqControl.tsx",
|
|
356
410
|
"isDynamicEntry": true,
|
|
@@ -359,11 +413,11 @@
|
|
|
359
413
|
"_react-vendor-CHIHtdAC.js",
|
|
360
414
|
"index.html",
|
|
361
415
|
"_form-PtDLk33Z.js",
|
|
362
|
-
"_Pagination-
|
|
416
|
+
"_Pagination-DYMlK0Hm.js"
|
|
363
417
|
]
|
|
364
418
|
},
|
|
365
419
|
"src/pages/control/DlqPro.tsx": {
|
|
366
|
-
"file": "assets/DlqPro-
|
|
420
|
+
"file": "assets/DlqPro-ByRwkv1s.js",
|
|
367
421
|
"name": "DlqPro",
|
|
368
422
|
"src": "src/pages/control/DlqPro.tsx",
|
|
369
423
|
"isDynamicEntry": true,
|
|
@@ -372,11 +426,13 @@
|
|
|
372
426
|
"_react-vendor-CHIHtdAC.js",
|
|
373
427
|
"index.html",
|
|
374
428
|
"_form-PtDLk33Z.js",
|
|
375
|
-
"_Pagination-
|
|
429
|
+
"_Pagination-DYMlK0Hm.js",
|
|
430
|
+
"_exportFile-tdUeW5m5.js",
|
|
431
|
+
"_promisePool-Daxkc1OB.js"
|
|
376
432
|
]
|
|
377
433
|
},
|
|
378
434
|
"src/pages/control/Flows.tsx": {
|
|
379
|
-
"file": "assets/Flows-
|
|
435
|
+
"file": "assets/Flows-Bb2WdFa0.js",
|
|
380
436
|
"name": "Flows",
|
|
381
437
|
"src": "src/pages/control/Flows.tsx",
|
|
382
438
|
"isDynamicEntry": true,
|
|
@@ -387,7 +443,7 @@
|
|
|
387
443
|
]
|
|
388
444
|
},
|
|
389
445
|
"src/pages/control/JobInspector.tsx": {
|
|
390
|
-
"file": "assets/JobInspector-
|
|
446
|
+
"file": "assets/JobInspector-BTZS6pI-.js",
|
|
391
447
|
"name": "JobInspector",
|
|
392
448
|
"src": "src/pages/control/JobInspector.tsx",
|
|
393
449
|
"isDynamicEntry": true,
|
|
@@ -396,12 +452,13 @@
|
|
|
396
452
|
"_react-vendor-CHIHtdAC.js",
|
|
397
453
|
"index.html",
|
|
398
454
|
"_form-PtDLk33Z.js",
|
|
399
|
-
"_CopyButton-
|
|
455
|
+
"_CopyButton-D39F1wIH.js",
|
|
456
|
+
"_exportFile-tdUeW5m5.js",
|
|
400
457
|
"_jobActions-CuOdMglt.js"
|
|
401
458
|
]
|
|
402
459
|
},
|
|
403
460
|
"src/pages/control/JobsPro.tsx": {
|
|
404
|
-
"file": "assets/JobsPro-
|
|
461
|
+
"file": "assets/JobsPro-BWweJCnr.js",
|
|
405
462
|
"name": "JobsPro",
|
|
406
463
|
"src": "src/pages/control/JobsPro.tsx",
|
|
407
464
|
"isDynamicEntry": true,
|
|
@@ -410,12 +467,13 @@
|
|
|
410
467
|
"_react-vendor-CHIHtdAC.js",
|
|
411
468
|
"index.html",
|
|
412
469
|
"_form-PtDLk33Z.js",
|
|
413
|
-
"_Pagination-
|
|
470
|
+
"_Pagination-DYMlK0Hm.js",
|
|
471
|
+
"_exportFile-tdUeW5m5.js",
|
|
414
472
|
"_jobActions-CuOdMglt.js"
|
|
415
473
|
]
|
|
416
474
|
},
|
|
417
475
|
"src/pages/control/LogsPro.tsx": {
|
|
418
|
-
"file": "assets/LogsPro-
|
|
476
|
+
"file": "assets/LogsPro-C14Lju7q.js",
|
|
419
477
|
"name": "LogsPro",
|
|
420
478
|
"src": "src/pages/control/LogsPro.tsx",
|
|
421
479
|
"isDynamicEntry": true,
|
|
@@ -424,22 +482,22 @@
|
|
|
424
482
|
"_react-vendor-CHIHtdAC.js",
|
|
425
483
|
"index.html",
|
|
426
484
|
"_form-PtDLk33Z.js",
|
|
427
|
-
"_Pagination-
|
|
485
|
+
"_Pagination-DYMlK0Hm.js"
|
|
428
486
|
]
|
|
429
487
|
},
|
|
430
488
|
"src/pages/control/McpServer.tsx": {
|
|
431
|
-
"file": "assets/McpServer-
|
|
489
|
+
"file": "assets/McpServer-CQh8KRNo.js",
|
|
432
490
|
"name": "McpServer",
|
|
433
491
|
"src": "src/pages/control/McpServer.tsx",
|
|
434
492
|
"isDynamicEntry": true,
|
|
435
493
|
"imports": [
|
|
436
494
|
"_react-vendor-CHIHtdAC.js",
|
|
437
495
|
"index.html",
|
|
438
|
-
"_CopyButton-
|
|
496
|
+
"_CopyButton-D39F1wIH.js"
|
|
439
497
|
]
|
|
440
498
|
},
|
|
441
499
|
"src/pages/control/MetricsPro.tsx": {
|
|
442
|
-
"file": "assets/MetricsPro-
|
|
500
|
+
"file": "assets/MetricsPro-CcK7hYQf.js",
|
|
443
501
|
"name": "MetricsPro",
|
|
444
502
|
"src": "src/pages/control/MetricsPro.tsx",
|
|
445
503
|
"isDynamicEntry": true,
|
|
@@ -447,12 +505,13 @@
|
|
|
447
505
|
"_cn-CMFYpumL.js",
|
|
448
506
|
"_react-vendor-CHIHtdAC.js",
|
|
449
507
|
"index.html",
|
|
450
|
-
"_Pagination-
|
|
451
|
-
"_AreaChart-DzUXW8u3.js"
|
|
508
|
+
"_Pagination-DYMlK0Hm.js",
|
|
509
|
+
"_AreaChart-DzUXW8u3.js",
|
|
510
|
+
"_useThroughputSeries-B6m-M93j.js"
|
|
452
511
|
]
|
|
453
512
|
},
|
|
454
513
|
"src/pages/control/QueueControl.tsx": {
|
|
455
|
-
"file": "assets/QueueControl-
|
|
514
|
+
"file": "assets/QueueControl-BY9w4OuO.js",
|
|
456
515
|
"name": "QueueControl",
|
|
457
516
|
"src": "src/pages/control/QueueControl.tsx",
|
|
458
517
|
"isDynamicEntry": true,
|
|
@@ -460,11 +519,26 @@
|
|
|
460
519
|
"_cn-CMFYpumL.js",
|
|
461
520
|
"_react-vendor-CHIHtdAC.js",
|
|
462
521
|
"index.html",
|
|
463
|
-
"_form-PtDLk33Z.js"
|
|
522
|
+
"_form-PtDLk33Z.js",
|
|
523
|
+
"_QueueActions-Cg2hdDsu.js"
|
|
524
|
+
]
|
|
525
|
+
},
|
|
526
|
+
"src/pages/control/QueueDetailPro.tsx": {
|
|
527
|
+
"file": "assets/QueueDetailPro-25QnEp1Q.js",
|
|
528
|
+
"name": "QueueDetailPro",
|
|
529
|
+
"src": "src/pages/control/QueueDetailPro.tsx",
|
|
530
|
+
"isDynamicEntry": true,
|
|
531
|
+
"imports": [
|
|
532
|
+
"_cn-CMFYpumL.js",
|
|
533
|
+
"_react-vendor-CHIHtdAC.js",
|
|
534
|
+
"index.html",
|
|
535
|
+
"_AreaChart-DzUXW8u3.js",
|
|
536
|
+
"_useThroughputSeries-B6m-M93j.js",
|
|
537
|
+
"_QueueActions-Cg2hdDsu.js"
|
|
464
538
|
]
|
|
465
539
|
},
|
|
466
540
|
"src/pages/control/QueuesOverview.tsx": {
|
|
467
|
-
"file": "assets/QueuesOverview-
|
|
541
|
+
"file": "assets/QueuesOverview-Rai_zPUB.js",
|
|
468
542
|
"name": "QueuesOverview",
|
|
469
543
|
"src": "src/pages/control/QueuesOverview.tsx",
|
|
470
544
|
"isDynamicEntry": true,
|
|
@@ -472,11 +546,12 @@
|
|
|
472
546
|
"_cn-CMFYpumL.js",
|
|
473
547
|
"_react-vendor-CHIHtdAC.js",
|
|
474
548
|
"index.html",
|
|
475
|
-
"_Pagination-
|
|
549
|
+
"_Pagination-DYMlK0Hm.js",
|
|
550
|
+
"_promisePool-Daxkc1OB.js"
|
|
476
551
|
]
|
|
477
552
|
},
|
|
478
553
|
"src/pages/control/S3BackupPro.tsx": {
|
|
479
|
-
"file": "assets/S3BackupPro-
|
|
554
|
+
"file": "assets/S3BackupPro-JU_hxhXm.js",
|
|
480
555
|
"name": "S3BackupPro",
|
|
481
556
|
"src": "src/pages/control/S3BackupPro.tsx",
|
|
482
557
|
"isDynamicEntry": true,
|
|
@@ -489,7 +564,7 @@
|
|
|
489
564
|
]
|
|
490
565
|
},
|
|
491
566
|
"src/pages/control/ServerControl.tsx": {
|
|
492
|
-
"file": "assets/ServerControl-
|
|
567
|
+
"file": "assets/ServerControl-Dirs9r5Q.js",
|
|
493
568
|
"name": "ServerControl",
|
|
494
569
|
"src": "src/pages/control/ServerControl.tsx",
|
|
495
570
|
"isDynamicEntry": true,
|
|
@@ -498,11 +573,11 @@
|
|
|
498
573
|
"_react-vendor-CHIHtdAC.js",
|
|
499
574
|
"index.html",
|
|
500
575
|
"_form-PtDLk33Z.js",
|
|
501
|
-
"_CopyButton-
|
|
576
|
+
"_CopyButton-D39F1wIH.js"
|
|
502
577
|
]
|
|
503
578
|
},
|
|
504
579
|
"src/pages/control/UsagePro.tsx": {
|
|
505
|
-
"file": "assets/UsagePro-
|
|
580
|
+
"file": "assets/UsagePro-D_-jHCJY.js",
|
|
506
581
|
"name": "UsagePro",
|
|
507
582
|
"src": "src/pages/control/UsagePro.tsx",
|
|
508
583
|
"isDynamicEntry": true,
|
|
@@ -512,7 +587,7 @@
|
|
|
512
587
|
]
|
|
513
588
|
},
|
|
514
589
|
"src/pages/control/Webhooks.tsx": {
|
|
515
|
-
"file": "assets/Webhooks-
|
|
590
|
+
"file": "assets/Webhooks-B4DugS-x.js",
|
|
516
591
|
"name": "Webhooks",
|
|
517
592
|
"src": "src/pages/control/Webhooks.tsx",
|
|
518
593
|
"isDynamicEntry": true,
|
|
@@ -521,11 +596,11 @@
|
|
|
521
596
|
"_react-vendor-CHIHtdAC.js",
|
|
522
597
|
"index.html",
|
|
523
598
|
"_form-PtDLk33Z.js",
|
|
524
|
-
"_Pagination-
|
|
599
|
+
"_Pagination-DYMlK0Hm.js"
|
|
525
600
|
]
|
|
526
601
|
},
|
|
527
602
|
"src/pages/control/WorkersPro.tsx": {
|
|
528
|
-
"file": "assets/WorkersPro-
|
|
603
|
+
"file": "assets/WorkersPro-t5SD6hbP.js",
|
|
529
604
|
"name": "WorkersPro",
|
|
530
605
|
"src": "src/pages/control/WorkersPro.tsx",
|
|
531
606
|
"isDynamicEntry": true,
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{r as e}from"./cn-CMFYpumL.js";import{c as t,m as n,r,t as i}from"./react-vendor-CHIHtdAC.js";import{C as a,O as o,S as s,et as c,h as l,tt as u,w as d}from"./index-C5VVVkqi.js";import{n as f,o as p,t as m}from"./form-PtDLk33Z.js";var h=e(n(),1),g=i(),_=e=>e==null?``:String(e);function v(){let{data:e}=o(()=>c.queues(),[],{intervalMs:3e4}),n=t().state?.clone,i=n?.options??{},[p,v]=(0,h.useState)(n?.queue??``),[b,x]=(0,h.useState)(n?.dataText??`{
|
|
2
|
+
"hello": "world"
|
|
3
|
+
}`),[S,C]=(0,h.useState)(`1`),[w,T]=(0,h.useState)(_(i.priority)),[E,D]=(0,h.useState)(``),[O,k]=(0,h.useState)(``),[A,j]=(0,h.useState)(_(i.maxAttempts)),[M,N]=(0,h.useState)(_(i.backoff)),[P,F]=(0,h.useState)(_(i.timeout)),[I,L]=(0,h.useState)(``),[R,z]=(0,h.useState)(i.removeOnComplete??!1),[B,V]=(0,h.useState)(i.removeOnFail??!1),[H,U]=(0,h.useState)(!1),[W,G]=(0,h.useState)(!1),[K,q]=(0,h.useState)(!1),[J,Y]=(0,h.useState)(null),[X,Z]=(0,h.useState)(null),Q=e=>{let t=Number(e);return e.trim()!==``&&Number.isFinite(t)?t:void 0},$=async()=>{if(Y(null),Z(null),!p.trim()){Y({ok:!1,msg:`Choose a queue`});return}let e;try{e=JSON.parse(b)}catch(e){Z(`Invalid JSON: ${e.message}`);return}let t=Q(E);if(O.trim()){let e=new Date(O).getTime();if(!Number.isFinite(e)){Y({ok:!1,msg:`Run at is not a valid date/time`});return}t=Math.max(0,e-Date.now())}let n={data:e,priority:Q(w),delay:t,maxAttempts:Q(A),backoff:Q(M),timeout:Q(P),jobId:I.trim()||void 0,removeOnComplete:R||void 0,removeOnFail:B||void 0,durable:H||void 0,lifo:W||void 0},r=Q(S)??1;if(!Number.isInteger(r)||r<1){Y({ok:!1,msg:`Count must be an integer of at least 1`});return}if(r>1e4){Y({ok:!1,msg:`Count must be 10000 or fewer`});return}q(!0);try{if(r===1){let e=await c.addJob(p,n);Y({ok:!0,msg:`Created job ${e.id}`}),u.success(`Job created`,`${p} · ${e.id}`)}else{let e=await c.addJobsBulk(p,Array.from({length:r},()=>n)),t=new Set(e.ids).size;Y({ok:!0,msg:`Created ${t} job${t===1?``:`s`}`}),u.success(`Created ${t} job${t===1?``:`s`}`,`in ${p}`)}}catch(e){Y({ok:!1,msg:e.message}),u.error(`Add job failed`,e.message)}finally{q(!1)}};return(0,g.jsxs)(`div`,{children:[(0,g.jsx)(l,{title:`Add Job`,description:`Enqueue a job with full options.`,actions:(0,g.jsx)(r,{to:`/jobs/bulk-add`,className:`rounded-lg border border-line px-3 py-1.5 text-sm text-muted hover:bg-surface-2 hover:text-fg`,children:`Bulk import`})}),n&&(0,g.jsx)(`div`,{className:`mb-4 flex items-center gap-2 rounded-lg border border-accent/30 bg-accent/[0.06] px-4 py-2 text-sm text-accent`,children:`Pre-filled from an existing job. Review the data and options, then enqueue a fresh job.`}),(0,g.jsxs)(`form`,{className:`grid grid-cols-1 gap-6 lg:grid-cols-2`,onSubmit:e=>{e.preventDefault(),$()},children:[(0,g.jsxs)(s,{children:[(0,g.jsx)(a,{title:`Job`}),(0,g.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,g.jsxs)(m,{label:`Queue`,children:[(0,g.jsx)(f,{list:`queue-options`,value:p,onChange:e=>v(e.target.value),placeholder:`queue name (existing or new)`}),(0,g.jsx)(`datalist`,{id:`queue-options`,children:(e?.queues??[]).map(e=>(0,g.jsx)(`option`,{value:e.name},e.name))})]}),(0,g.jsxs)(`div`,{children:[(0,g.jsx)(m,{label:`Data (JSON)`,children:(0,g.jsx)(`textarea`,{value:b,onChange:e=>x(e.target.value),spellCheck:!1,rows:7,className:`w-full rounded-lg border border-line bg-surface-2 p-3 font-mono text-sm text-fg focus:border-accent/60 focus:outline-none focus:ring-2 focus:ring-accent/30`})}),X&&(0,g.jsx)(`p`,{className:`mt-2 text-xs text-danger`,children:X})]})]})]}),(0,g.jsxs)(s,{children:[(0,g.jsx)(a,{title:`Options`}),(0,g.jsxs)(`div`,{className:`grid grid-cols-2 gap-4 md:grid-cols-3`,children:[(0,g.jsx)(m,{label:`Priority`,children:(0,g.jsx)(f,{type:`number`,value:w,onChange:e=>T(e.target.value),placeholder:`0`})}),(0,g.jsx)(m,{label:`Delay (ms)`,children:(0,g.jsx)(f,{type:`number`,min:0,value:E,onChange:e=>D(e.target.value),placeholder:`0`,disabled:O.trim()!==``})}),(0,g.jsx)(m,{label:`Run at`,hint:O.trim()?`Overrides Delay — derived from this time.`:void 0,children:(0,g.jsx)(f,{type:`datetime-local`,value:O,onChange:e=>k(e.target.value)})}),(0,g.jsx)(m,{label:`Max attempts`,children:(0,g.jsx)(f,{type:`number`,min:1,value:A,onChange:e=>j(e.target.value),placeholder:`3`})}),(0,g.jsx)(m,{label:`Backoff (ms)`,children:(0,g.jsx)(f,{type:`number`,min:0,value:M,onChange:e=>N(e.target.value),placeholder:`1000`})}),(0,g.jsx)(m,{label:`Timeout (ms)`,children:(0,g.jsx)(f,{type:`number`,min:0,value:P,onChange:e=>F(e.target.value),placeholder:`—`})}),(0,g.jsx)(m,{label:`Custom job ID`,children:(0,g.jsx)(f,{value:I,onChange:e=>L(e.target.value),placeholder:`idempotency key`})})]}),(0,g.jsxs)(`div`,{className:`mt-4 flex flex-wrap gap-6`,children:[(0,g.jsx)(y,{label:`removeOnComplete`,checked:R,onChange:z}),(0,g.jsx)(y,{label:`removeOnFail`,checked:B,onChange:V}),(0,g.jsx)(y,{label:`durable`,checked:H,onChange:U}),(0,g.jsx)(y,{label:`lifo`,checked:W,onChange:G})]})]}),(0,g.jsxs)(`div`,{className:`flex flex-wrap items-end gap-3 lg:col-span-2`,children:[(0,g.jsx)(`div`,{className:`w-28`,children:(0,g.jsx)(m,{label:`Count`,children:(0,g.jsx)(f,{type:`number`,min:1,value:S,onChange:e=>C(e.target.value)})})}),(0,g.jsx)(d,{type:`submit`,variant:`accent`,disabled:K,children:K?`Adding…`:`Add job`}),J&&(0,g.jsx)(`span`,{className:J.ok?`text-sm text-success`:`text-sm text-danger`,children:J.msg})]})]})]})}function y({label:e,checked:t,onChange:n}){return(0,g.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,g.jsx)(p,{checked:t,onChange:n,label:e}),(0,g.jsx)(`span`,{className:`font-mono text-xs text-muted`,children:e})]})}export{v as AddJob};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./cn-CMFYpumL.js";import{m as t,t as n}from"./react-vendor-CHIHtdAC.js";import{S as r,T as i,X as a,Z as o,h as s,j as c,nt as l,q as u,rt as d,u as f,w as p,y as m}from"./index-C5VVVkqi.js";import{a as h,n as g,o as _,t as v}from"./form-PtDLk33Z.js";var y=e(t(),1),b=n(),x=[`email`,`webhook`,`slack`],S=Object.keys(l),C=[`>=`,`>`,`<=`,`<`];function w(){return typeof Notification>`u`?`unsupported`:Notification.permission}function T(){let{channels:e,rules:t,addChannel:n,removeChannel:h,addRule:g,removeRule:v,toggleRule:x}=d(),S=o(e=>e.breaching),[C,T]=(0,y.useState)(!1),[O,k]=(0,y.useState)(w);return(0,b.jsxs)(`div`,{children:[(0,b.jsx)(s,{title:`Alerts`,description:`Threshold rules evaluated live in your browser.`,live:!0,actions:(0,b.jsxs)(b.Fragment,{children:[O===`granted`?(0,b.jsxs)(`span`,{className:`flex items-center gap-1.5 text-sm text-success`,children:[(0,b.jsx)(c,{className:`size-4`}),` Desktop alerts on`]}):O===`unsupported`?(0,b.jsx)(`span`,{className:`text-sm text-faint`,children:`Notifications unsupported`}):(0,b.jsx)(p,{size:`sm`,onClick:async()=>{k(await a())},children:`Enable desktop notifications`}),(0,b.jsx)(p,{variant:`accent`,size:`sm`,onClick:()=>T(e=>!e),children:`+ Create Alert Rule`})]})}),(0,b.jsx)(`div`,{className:`mb-6 rounded-lg border border-amber-500/20 bg-amber-500/5 px-4 py-3 text-sm text-amber-400/90`,children:`Rules are evaluated in this browser while a tab is open (even backgrounded), raising an in-app toast and — if enabled — a desktop notification. bunqueue OSS has no alerting backend, so email/webhook/slack delivery still needs your own monitoring or hosted bunqueue Cloud.`}),(0,b.jsxs)(`section`,{className:`mb-8`,children:[(0,b.jsx)(`h2`,{className:`mb-3 text-lg font-semibold text-fg`,children:`Triggered Alerts`}),S.length===0?(0,b.jsx)(m,{icon:(0,b.jsx)(c,{}),title:`No triggered alerts`,hint:t.some(e=>e.enabled)?`All enabled rules are within their thresholds.`:`No enabled rules yet. Create one below.`}):(0,b.jsx)(`div`,{className:`overflow-x-auto rounded-xl border border-danger/30 bg-red-500/5`,children:(0,b.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,b.jsx)(`thead`,{children:(0,b.jsxs)(`tr`,{className:`border-b border-line text-left text-[11px] uppercase tracking-wider text-faint`,children:[(0,b.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Rule`}),(0,b.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Condition`}),(0,b.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Queue`}),(0,b.jsx)(`th`,{className:`px-5 py-3 text-right font-medium`,children:`Current`}),(0,b.jsx)(`th`,{className:`px-5 py-3 text-right font-medium`,children:`Since`})]})}),(0,b.jsx)(`tbody`,{children:S.map(e=>(0,b.jsxs)(`tr`,{className:`border-b border-line last:border-0`,children:[(0,b.jsx)(`td`,{className:`px-5 py-3 font-medium text-danger`,children:e.ruleName}),(0,b.jsxs)(`td`,{className:`px-5 py-3 text-muted`,children:[e.metricLabel,` `,e.operator,` `,(0,b.jsx)(`span`,{className:`font-semibold text-fg`,children:e.threshold})]}),(0,b.jsx)(`td`,{className:`px-5 py-3 text-muted`,children:e.queue||`All queues`}),(0,b.jsx)(`td`,{className:`px-5 py-3 text-right tnum font-semibold text-danger`,children:Math.round(e.value*100)/100}),(0,b.jsx)(`td`,{className:`px-5 py-3 text-right text-faint`,children:f(e.at)})]},e.ruleId))})]})})]}),(0,b.jsxs)(`section`,{className:`mb-8`,children:[(0,b.jsx)(`h2`,{className:`mb-3 text-lg font-semibold text-fg`,children:`Notification Channels`}),(0,b.jsxs)(r,{children:[e.length===0?(0,b.jsx)(`p`,{className:`mb-4 text-sm text-faint`,children:`No channels yet. Add one below.`}):(0,b.jsx)(`ul`,{className:`mb-4 divide-y divide-line`,children:e.map(e=>(0,b.jsxs)(`li`,{className:`flex items-center justify-between py-2.5`,children:[(0,b.jsxs)(`div`,{children:[(0,b.jsx)(`div`,{className:`text-sm font-medium capitalize text-fg`,children:e.type}),(0,b.jsx)(`div`,{className:`font-mono text-xs text-faint`,children:e.target})]}),(0,b.jsx)(i,{"aria-label":`Remove channel`,onClick:()=>h(e.id),children:(0,b.jsx)(u,{className:`size-3.5`})})]},e.id))}),(0,b.jsx)(E,{onAdd:n})]})]}),(0,b.jsxs)(`section`,{children:[(0,b.jsx)(`h2`,{className:`mb-3 text-lg font-semibold text-fg`,children:`Alert Rules`}),C&&(0,b.jsx)(r,{className:`mb-4`,children:(0,b.jsx)(D,{onAdd:e=>{g(e),T(!1)}})}),t.length===0?(0,b.jsx)(m,{title:`No alert rules`,hint:`Create a rule to be notified when a threshold is crossed.`}):(0,b.jsx)(`div`,{className:`overflow-x-auto rounded-xl border border-line bg-surface`,children:(0,b.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,b.jsx)(`thead`,{children:(0,b.jsxs)(`tr`,{className:`border-b border-line text-left text-[11px] uppercase tracking-wider text-faint`,children:[(0,b.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Rule`}),(0,b.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Condition`}),(0,b.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Queue`}),(0,b.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Channel`}),(0,b.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Status`}),(0,b.jsx)(`th`,{className:`w-12 px-5 py-3`})]})}),(0,b.jsx)(`tbody`,{children:t.map(e=>(0,b.jsxs)(`tr`,{className:`border-b border-line last:border-0`,children:[(0,b.jsx)(`td`,{className:`px-5 py-3 font-medium text-fg`,children:e.name}),(0,b.jsxs)(`td`,{className:`px-5 py-3 text-muted`,children:[l[e.metric],` `,e.operator,` `,(0,b.jsx)(`span`,{className:`font-semibold text-accent`,children:e.threshold})]}),(0,b.jsx)(`td`,{className:`px-5 py-3 text-muted`,children:e.queue||`All queues`}),(0,b.jsx)(`td`,{className:`px-5 py-3`,children:(0,b.jsx)(`span`,{className:`rounded-md bg-surface-2 px-2 py-0.5 text-xs capitalize text-muted`,children:e.channel})}),(0,b.jsx)(`td`,{className:`px-5 py-3`,children:(0,b.jsx)(_,{checked:e.enabled,onChange:()=>x(e.id),label:`Enabled`})}),(0,b.jsx)(`td`,{className:`px-5 py-3 text-right`,children:(0,b.jsx)(i,{"aria-label":`Delete rule`,onClick:()=>v(e.id),children:(0,b.jsx)(u,{className:`size-3.5`})})})]},e.id))})]})})]})]})}function E({onAdd:e}){let[t,n]=(0,y.useState)(`email`),[r,i]=(0,y.useState)(``);return(0,b.jsxs)(`div`,{className:`flex flex-wrap items-end gap-3`,children:[(0,b.jsx)(`div`,{className:`w-36`,children:(0,b.jsx)(v,{label:`Type`,children:(0,b.jsx)(h,{value:t,onChange:e=>n(e.target.value),children:x.map(e=>(0,b.jsx)(`option`,{value:e,children:e},e))})})}),(0,b.jsx)(`div`,{className:`min-w-56 flex-1`,children:(0,b.jsx)(v,{label:t===`email`?`Email address`:`URL`,children:(0,b.jsx)(g,{value:r,onChange:e=>i(e.target.value),placeholder:t===`email`?`ops@example.com`:`https://hooks…`})})}),(0,b.jsx)(p,{variant:`accent`,disabled:!r,onClick:()=>{e(t,r),i(``)},children:`Add channel`})]})}function D({onAdd:e}){let[t,n]=(0,y.useState)(``),[r,i]=(0,y.useState)(`error_rate`),[a,o]=(0,y.useState)(`>=`),[s,c]=(0,y.useState)(``),[u,d]=(0,y.useState)(``),[f,m]=(0,y.useState)(`email`);return(0,b.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 md:grid-cols-3 lg:grid-cols-6`,children:[(0,b.jsx)(v,{label:`Name`,children:(0,b.jsx)(g,{value:t,onChange:e=>n(e.target.value),placeholder:`High error rate`})}),(0,b.jsx)(v,{label:`Metric`,children:(0,b.jsx)(h,{value:r,onChange:e=>i(e.target.value),children:S.map(e=>(0,b.jsx)(`option`,{value:e,children:l[e]},e))})}),(0,b.jsx)(v,{label:`Operator`,children:(0,b.jsx)(h,{value:a,onChange:e=>o(e.target.value),children:C.map(e=>(0,b.jsx)(`option`,{value:e,children:e},e))})}),(0,b.jsx)(v,{label:`Threshold`,children:(0,b.jsx)(g,{type:`number`,value:s,onChange:e=>c(e.target.value),placeholder:`55`})}),(0,b.jsx)(v,{label:`Queue (optional)`,children:(0,b.jsx)(g,{value:u,onChange:e=>d(e.target.value),placeholder:`All queues`})}),(0,b.jsx)(v,{label:`Channel`,children:(0,b.jsx)(h,{value:f,onChange:e=>m(e.target.value),children:x.map(e=>(0,b.jsx)(`option`,{value:e,children:e},e))})}),(0,b.jsx)(`div`,{className:`col-span-full`,children:(0,b.jsx)(p,{variant:`accent`,disabled:!t||!s,onClick:()=>e({name:t,metric:r,operator:a,threshold:Number(s),queue:u,channel:f,enabled:!0}),children:`Save rule`})})]})}export{T as Alerts};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e,t}from"./cn-CMFYpumL.js";import{m as n,t as r}from"./react-vendor-CHIHtdAC.js";import{C as i,H as a,O as o,S as s,V as c,c as l,et as u,h as d,m as f,r as p,s as m,w as h}from"./index-C5VVVkqi.js";import{i as g,n as _,o as v,t as y}from"./form-PtDLk33Z.js";import{t as b}from"./AreaChart-DzUXW8u3.js";import{t as x}from"./CopyButton-D39F1wIH.js";var S=e(n(),1),C={total:1e6,batch:5e3,producers:64,payload:65536,workers:64,workerBatch:1e3,processMs:6e4,durationS:600},w={queue:`benchmark`,mode:`count`,total:5e3,durationS:30,batch:100,producers:4,payload:128,workers:4,workerBatch:100,processMs:5,durable:!1,removeOnComplete:!0},T={Smoke:{mode:`count`,total:200,batch:50,producers:2,workers:1,workerBatch:50,processMs:0},Standard:{mode:`count`,total:5e3,batch:100,producers:4,workers:4,workerBatch:100,processMs:5},Stress:{mode:`count`,total:5e4,batch:500,producers:16,workers:16,workerBatch:200,processMs:0},Soak:{mode:`duration`,durationS:30,batch:100,producers:4,workers:8,workerBatch:100,processMs:10}},E=(e,t,n)=>Number.isFinite(e)?Math.max(t,Math.min(n,Math.floor(e))):t,D=(e,t)=>e.length?e[Math.min(e.length-1,Math.floor(t/100*e.length))]:0,O=(e,t,n,r,i)=>Array.from({length:t},(t,a)=>({data:{i:e+a,blob:n},durable:r,removeOnComplete:i})),k=e=>new Promise(t=>setTimeout(t,e)),A=async(e,t)=>{let n=performance.now()+e;for(;t()&&performance.now()<n;)await k(Math.min(100,Math.max(0,n-performance.now())))},j=e=>e instanceof Error?e.message:String(e),M=e=>e>=1e6?`${(e/1e6).toFixed(2)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:`${Math.round(e)}`,N=r();function P({history:e,onClear:t}){if(!e.length)return null;let n=JSON.stringify(e,null,2);return(0,N.jsxs)(s,{padded:!1,className:`mt-6 overflow-hidden`,children:[(0,N.jsxs)(`div`,{className:`flex items-center justify-between border-b border-line px-5 py-3`,children:[(0,N.jsx)(`h3`,{className:`text-base font-semibold text-fg`,children:`Run history`}),(0,N.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,N.jsx)(x,{value:n}),(0,N.jsx)(h,{size:`sm`,variant:`ghost`,onClick:()=>{let e=new Blob([n],{type:`application/json`}),t=URL.createObjectURL(e),r=document.createElement(`a`);r.href=t,r.download=`benchmark-history-${Date.now()}.json`,r.click(),URL.revokeObjectURL(t)},children:`Export JSON`}),(0,N.jsx)(h,{size:`sm`,variant:`ghost`,onClick:t,children:`Clear`})]})]}),(0,N.jsx)(`div`,{className:`overflow-x-auto`,children:(0,N.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,N.jsx)(`thead`,{children:(0,N.jsxs)(`tr`,{className:`border-b border-line text-left text-[11px] uppercase tracking-wider text-faint`,children:[(0,N.jsx)(`th`,{className:`px-5 py-2 font-medium`,children:`Mode`}),(0,N.jsx)(`th`,{className:`px-5 py-2 text-right font-medium`,children:`Prod`}),(0,N.jsx)(`th`,{className:`px-5 py-2 text-right font-medium`,children:`Wkr`}),(0,N.jsx)(`th`,{className:`px-5 py-2 text-right font-medium`,children:`Pushed`}),(0,N.jsx)(`th`,{className:`px-5 py-2 text-right font-medium`,children:`Done`}),(0,N.jsx)(`th`,{className:`px-5 py-2 text-right font-medium`,children:`Push/s`}),(0,N.jsx)(`th`,{className:`px-5 py-2 text-right font-medium`,children:`Done/s`}),(0,N.jsx)(`th`,{className:`px-5 py-2 text-right font-medium`,children:`p95`}),(0,N.jsx)(`th`,{className:`px-5 py-2 text-right font-medium`,children:`Dur`})]})}),(0,N.jsx)(`tbody`,{children:e.map(e=>(0,N.jsxs)(`tr`,{className:`border-b border-line last:border-0 hover:bg-surface-2/40`,children:[(0,N.jsx)(`td`,{className:`px-5 py-2 capitalize text-muted`,children:e.mode}),(0,N.jsx)(`td`,{className:`px-5 py-2 text-right tnum text-muted`,children:e.producers}),(0,N.jsx)(`td`,{className:`px-5 py-2 text-right tnum text-muted`,children:e.workers}),(0,N.jsx)(`td`,{className:`px-5 py-2 text-right tnum text-fg`,children:l(e.pushed)}),(0,N.jsx)(`td`,{className:`px-5 py-2 text-right tnum text-success`,children:l(e.completed)}),(0,N.jsxs)(`td`,{className:`px-5 py-2 text-right tnum text-accent`,children:[M(e.pushPerSec),`/s`]}),(0,N.jsxs)(`td`,{className:`px-5 py-2 text-right tnum text-success`,children:[M(e.donePerSec),`/s`]}),(0,N.jsx)(`td`,{className:`px-5 py-2 text-right tnum text-muted`,children:m(e.p95)}),(0,N.jsx)(`td`,{className:`px-5 py-2 text-right tnum text-muted`,children:m(e.durationMs)})]},e.id))})]})})]})}var F={pushed:0,completed:0,pushFailed:0,ackFailed:0,bytes:0,elapsedMs:0,pushPerSec:0,donePerSec:0,activeWorkers:0,pushSeries:[],doneSeries:[],etaMs:null,error:null},I=()=>({pushed:0,completed:0,pushFailed:0,ackFailed:0,bytes:0,assigned:0,startedAt:0,pushLat:[],activeWorkers:0,error:null,lastAt:0,lastPushed:0,lastDone:0,pushSeries:[],doneSeries:[]}),L=0;function R(){let[e,t]=(0,S.useState)(`idle`),[n,r]=(0,S.useState)(F),[i,a]=(0,S.useState)(null),[o,s]=(0,S.useState)([]),[c,l]=(0,S.useState)(null),d=(0,S.useRef)(!1),f=(0,S.useRef)(!1),p=(0,S.useRef)(!1),m=(0,S.useRef)(null),h=(0,S.useRef)(`idle`);h.current=e;let g=(0,S.useRef)(I());return(0,S.useEffect)(()=>()=>{d.current=!0},[]),(0,S.useEffect)(()=>{if(e!==`running`&&e!==`draining`)return;let t=setInterval(()=>{let e=g.current,t=performance.now(),n=t-e.startedAt,i=(t-e.lastAt)/1e3,a=i>0?Math.max(0,(e.pushed-e.lastPushed)/i):0,o=i>0?Math.max(0,(e.completed-e.lastDone)/i):0;e.lastAt=t,e.lastPushed=e.pushed,e.lastDone=e.completed,e.pushSeries=[...e.pushSeries,a].slice(-60),e.doneSeries=[...e.doneSeries,o].slice(-60);let s=null,c=m.current;if(c&&c.mode===`count`){let t=E(c.total,1,C.total);if(h.current===`draining`){let r=e.doneSeries.slice(-10),i=r.length?r.reduce((e,t)=>e+t,0)/r.length:0;i<=0&&n>0&&(i=e.completed/(n/1e3)),i>0&&(s=Math.max(0,t-e.completed)/i*1e3)}else a>0&&(s=Math.max(0,t-e.pushed)/a*1e3)}else c&&c.mode===`duration`&&(s=Math.max(0,E(c.durationS,1,C.durationS)*1e3-n));r({pushed:e.pushed,completed:e.completed,pushFailed:e.pushFailed,ackFailed:e.ackFailed,bytes:e.bytes,elapsedMs:n,pushPerSec:a,donePerSec:o,activeWorkers:e.activeWorkers,pushSeries:e.pushSeries,doneSeries:e.doneSeries,etaMs:s,error:e.error})},200);return()=>clearInterval(t)},[e]),{phase:e,live:n,summary:i,history:o,runCfg:c,run:async e=>{if(!f.current){f.current=!0;try{a(null);let n=e.queue.trim();if(!n){r({...F,error:`Queue name is required.`}),t(`error`);return}try{await u.overview()}catch(e){r({...F,error:`Server unreachable — start it on the Server page first. (${j(e)})`}),t(`error`);return}let i=E(e.total,1,C.total),o=E(e.durationS,1,C.durationS)*1e3,c=E(e.batch,1,C.batch),f=E(e.producers,e.mode===`duration`?0:1,C.producers),_=E(e.payload,0,C.payload),v=E(e.workers,0,C.workers),y=E(e.workerBatch,1,C.workerBatch),b=E(e.processMs,0,C.processMs);d.current=!1,p.current=!1,m.current=e,l(e),g.current=I(),g.current.startedAt=performance.now(),g.current.lastAt=performance.now(),r({...F}),t(`running`);let x=`x`.repeat(_),S=performance.now()+o,w=async()=>{for(;!d.current;){let t;if(e.mode===`count`){if(g.current.assigned>=i)break;t=Math.min(c,i-g.current.assigned)}else{if(performance.now()>=S)break;t=c}let r=g.current.assigned;g.current.assigned+=t;let a=O(r,t,x,e.durable,e.removeOnComplete),o=performance.now();try{await u.addJobsBulk(n,a),g.current.pushed+=t,g.current.bytes+=t*_}catch(e){g.current.pushFailed+=t,g.current.error??=j(e)}g.current.pushLat.push(performance.now()-o)}},T=async()=>{for(;!d.current&&!(e.mode===`duration`&&performance.now()>=S||e.mode===`count`&&g.current.completed>=i);){g.current.activeWorkers++;let t=[];try{try{t=(await u.pullBatch(n,y)).jobs??[]}catch(e){g.current.error??=j(e)}if(t.length>0){b>0&&await A(b,()=>!d.current);try{await u.ackBatch(t.map(e=>e.id)),g.current.completed+=t.length}catch(e){g.current.ackFailed+=t.length,g.current.error??=j(e)}}}finally{g.current.activeWorkers--}if(t.length===0){if(e.mode===`count`&&p.current)break;await k(50)}}},M=Array.from({length:f},w),N=Array.from({length:v},T),P=Promise.all(M).then(()=>{p.current=!0,!d.current&&e.mode===`count`&&v>0&&h.current===`running`&&t(`draining`)});await Promise.all([P,...N]);let R=g.current,z=performance.now()-R.startedAt,B=z/1e3||1,V=[...R.pushLat].sort((e,t)=>e-t),H={pushed:R.pushed,completed:R.completed,pushFailed:R.pushFailed,ackFailed:R.ackFailed,bytes:R.bytes,durationMs:z,pushPerSec:R.pushed/B,donePerSec:R.completed/B,mbPerSec:R.bytes/B,avg:V.length?V.reduce((e,t)=>e+t,0)/V.length:0,p50:D(V,50),p95:D(V,95),p99:D(V,99),max:V.length?V[V.length-1]:0,error:R.error};a(H),r(e=>({...e,pushed:R.pushed,completed:R.completed,elapsedMs:z,pushPerSec:0,donePerSec:0,activeWorkers:0,etaMs:0})),s(t=>[{...H,id:++L,at:Date.now(),mode:e.mode,producers:f,workers:v},...t].slice(0,12)),t(d.current?`stopped`:`done`)}finally{f.current=!1}}},stop:()=>{d.current=!0,(h.current===`running`||h.current===`draining`)&&t(`stopping`)},reset:()=>{d.current=!0,a(null),r(F),t(`idle`)},clearHistory:()=>s([])}}var z=[`count`,`duration`],B=[`total`,`durationS`,`batch`,`producers`,`payload`,`workers`,`workerBatch`,`processMs`],V=e=>({...e,total:String(e.total),durationS:String(e.durationS),batch:String(e.batch),producers:String(e.producers),payload:String(e.payload),workers:String(e.workers),workerBatch:String(e.workerBatch),processMs:String(e.processMs)}),H=e=>({...e,total:Number(e.total),durationS:Number(e.durationS),batch:Number(e.batch),producers:Number(e.producers),payload:Number(e.payload),workers:Number(e.workers),workerBatch:Number(e.workerBatch),processMs:Number(e.processMs)});function U(){let[e,n]=(0,S.useState)(()=>V(w)),r=R(),{phase:x,live:D,summary:O,history:k}=r,A=x===`running`||x===`draining`||x===`stopping`,j=(e,t)=>n(n=>({...n,[e]:t})),F=e=>t=>j(e,t.target.value),I=e=>n(t=>{let n={...t};for(let[t,r]of Object.entries(e))n[t]=B.includes(t)?String(r):r;return n}),[L,U]=(0,S.useState)(w.queue);(0,S.useEffect)(()=>{let t=setTimeout(()=>U(e.queue.trim()||w.queue),400);return()=>clearTimeout(t)},[e.queue]);let{data:ee,error:te}=o(()=>u.counts(L),[L],{intervalMs:1e3}),K=ee?.counts??null,[q,J]=(0,S.useState)(!1),[Y,X]=(0,S.useState)(null),ne=async()=>{let t=e.queue.trim();if(!(q||!t||!window.confirm(`Remove benchmark jobs from "${t}"?`))){J(!0),X(null);try{let e=null;for(let n of[`waiting`,`completed`,`failed`,`delayed`])try{await u.clean(t,{state:n,limit:C.total})}catch(t){e=t.message}let n=await u.counts(t).catch(t=>(e=t.message,null));X(n==null?{error:e??`server unreachable — could not verify`}:{remaining:n.counts?.active??0})}finally{J(!1)}}},Z=r.runCfg??H(e),Q=E(Z.total,1,C.total),$=E(Z.workers,0,C.workers),re=Z.mode===`count`&&(A||O)?Math.min(100,D.pushed/Q*100):0,ie=Z.mode===`count`&&(A||O)?Math.min(100,D.completed/Q*100):0,ae=Z.mode===`duration`?Math.min(100,D.elapsedMs/(E(Z.durationS,1,C.durationS)*1e3)*100):0,oe=x===`running`?Z.mode===`duration`?`Running…`:`Producing…`:x===`draining`?`Draining…`:x===`stopping`?`Stopping…`:x===`error`?`Error`:O?`Result`:`Ready`,se=(x===`running`||x===`draining`)&&D.etaMs!=null?D.etaMs>0?`ETA ${m(D.etaMs)}`:`finishing…`:x===`stopped`?`stopped early`:x===`done`?`complete`:``;return(0,N.jsxs)(`div`,{children:[(0,N.jsx)(d,{title:`Benchmark`,description:`Drive real load against the server — producers bulk-enqueue jobs while simulated workers pull, process and ack them. Throughput is measured client-side; the queue genuinely fills and drains.`,actions:x===`stopping`?(0,N.jsxs)(h,{variant:`warning`,size:`sm`,disabled:!0,children:[(0,N.jsx)(c,{className:`size-3.5`}),` Stopping…`]}):A?(0,N.jsxs)(h,{variant:`warning`,size:`sm`,onClick:r.stop,children:[(0,N.jsx)(c,{className:`size-3.5`}),` Stop`]}):(0,N.jsxs)(h,{variant:`success`,size:`sm`,onClick:()=>r.run(H(e)),children:[(0,N.jsx)(a,{className:`size-3.5`}),` Run benchmark`]})}),D.error&&(0,N.jsx)(`div`,{className:`mb-4 rounded-lg border border-red-500/20 bg-red-500/5 px-4 py-2 text-sm text-danger`,children:D.error}),(0,N.jsxs)(`div`,{className:`mb-4 flex flex-wrap items-center gap-2`,children:[(0,N.jsx)(`span`,{className:`text-xs font-medium uppercase tracking-wider text-faint`,children:`Presets`}),Object.keys(T).map(e=>(0,N.jsx)(`button`,{type:`button`,disabled:A,onClick:()=>I(T[e]),className:`rounded-md border border-line bg-surface-2 px-2.5 py-1 text-xs text-muted transition-colors hover:border-line-strong hover:text-fg disabled:opacity-40`,children:e},e))]}),(0,N.jsxs)(`div`,{className:`grid grid-cols-1 gap-6 lg:grid-cols-3`,children:[(0,N.jsxs)(s,{className:`lg:col-span-1`,children:[(0,N.jsx)(i,{title:`Configuration`}),(0,N.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,N.jsx)(y,{label:`Queue`,hint:`Jobs are enqueued here (created on first push).`,children:(0,N.jsx)(_,{value:e.queue,disabled:A,onChange:e=>j(`queue`,e.target.value)})}),(0,N.jsx)(y,{label:`Mode`,hint:e.mode===`count`?`Push a fixed number of jobs.`:`Run producers + workers for a fixed time.`,children:(0,N.jsx)(g,{options:z,value:e.mode,onChange:e=>j(`mode`,e),disabled:A})}),e.mode===`count`?(0,N.jsx)(y,{label:`Total jobs`,hint:`max ${l(C.total)}`,children:(0,N.jsx)(_,{type:`number`,min:1,max:C.total,value:e.total,disabled:A,onChange:F(`total`)})}):(0,N.jsx)(y,{label:`Duration (s)`,hint:`max ${C.durationS}s`,children:(0,N.jsx)(_,{type:`number`,min:1,max:C.durationS,value:e.durationS,disabled:A,onChange:F(`durationS`)})}),(0,N.jsx)(`div`,{className:`mt-1 text-[11px] font-semibold uppercase tracking-wider text-faint`,children:`Producers`}),(0,N.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,N.jsx)(y,{label:`Producers`,hint:`parallel, max ${C.producers}`,children:(0,N.jsx)(_,{type:`number`,min:e.mode===`duration`?0:1,max:C.producers,value:e.producers,disabled:A,onChange:F(`producers`)})}),(0,N.jsx)(y,{label:`Push batch`,hint:`jobs/req, max ${C.batch}`,children:(0,N.jsx)(_,{type:`number`,min:1,max:C.batch,value:e.batch,disabled:A,onChange:F(`batch`)})}),(0,N.jsx)(y,{label:`Payload`,hint:`bytes/job, max ${l(C.payload)}`,children:(0,N.jsx)(_,{type:`number`,min:0,max:C.payload,value:e.payload,disabled:A,onChange:F(`payload`)})})]}),(0,N.jsx)(`div`,{className:`mt-1 text-[11px] font-semibold uppercase tracking-wider text-faint`,children:`Workers (simulated)`}),(0,N.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,N.jsx)(y,{label:`Workers`,hint:`0 = produce only, max ${C.workers}`,children:(0,N.jsx)(_,{type:`number`,min:0,max:C.workers,value:e.workers,disabled:A,onChange:F(`workers`)})}),(0,N.jsx)(y,{label:`Pull batch`,hint:`jobs/pull, max ${C.workerBatch}`,children:(0,N.jsx)(_,{type:`number`,min:1,max:C.workerBatch,value:e.workerBatch,disabled:A,onChange:F(`workerBatch`)})}),(0,N.jsx)(y,{label:`Process (ms)`,hint:`simulated work per pull`,children:(0,N.jsx)(_,{type:`number`,min:0,max:C.processMs,value:e.processMs,disabled:A,onChange:F(`processMs`)})})]}),(0,N.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2`,children:[(0,N.jsx)(v,{checked:e.durable,onChange:e=>j(`durable`,e),disabled:A}),(0,N.jsx)(`span`,{className:`text-sm text-muted`,children:`Durable (fsync each job)`})]}),(0,N.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2`,children:[(0,N.jsx)(v,{checked:e.removeOnComplete,onChange:e=>j(`removeOnComplete`,e),disabled:A}),(0,N.jsx)(`span`,{className:`text-sm text-muted`,children:`Remove on complete`})]}),(0,N.jsxs)(`div`,{className:`flex items-center gap-3 pt-1`,children:[(0,N.jsx)(h,{variant:`ghost`,size:`sm`,disabled:A||q,onClick:ne,children:q?`Cleaning…`:`Clean queue`}),Y&&(`error`in Y?(0,N.jsxs)(`span`,{className:`text-xs text-danger`,children:[`Clean unverified — `,Y.error]}):(0,N.jsx)(`span`,{className:t(`text-xs`,Y.remaining>0?`text-warning`:`text-success`),children:Y.remaining>0?`Cleaned — ${l(Y.remaining)} active job(s) remain (requeued after the stall timeout)`:`Cleaned — 0 jobs remain`}))]})]})]}),(0,N.jsxs)(`div`,{className:`flex flex-col gap-6 lg:col-span-2`,children:[(0,N.jsxs)(s,{children:[(0,N.jsxs)(`div`,{className:`mb-3 flex items-center justify-between`,children:[(0,N.jsx)(`h3`,{className:`text-base font-semibold text-fg`,children:oe}),(0,N.jsx)(`span`,{className:`text-xs text-faint`,children:se})]}),(0,N.jsx)(W,{label:Z.mode===`duration`?`Elapsed`:`Produced`,pct:Z.mode===`duration`?ae:re,tone:`accent`}),$>0&&Z.mode===`count`&&(0,N.jsx)(W,{label:`Completed`,pct:ie,tone:`emerald`}),(0,N.jsxs)(`div`,{className:`mt-4 grid grid-cols-2 gap-4 md:grid-cols-4`,children:[(0,N.jsx)(f,{label:`Pushed`,value:l(D.pushed),tone:`accent`,compact:!0}),(0,N.jsx)(f,{label:`Completed`,value:l(D.completed),tone:`green`,compact:!0}),(0,N.jsx)(f,{label:`Push/sec`,value:M(D.pushPerSec),compact:!0}),(0,N.jsx)(f,{label:`Done/sec`,value:M(D.donePerSec),tone:`green`,compact:!0}),(0,N.jsx)(f,{label:`Elapsed`,value:m(D.elapsedMs),compact:!0}),(0,N.jsx)(f,{label:`Active workers`,value:`${D.activeWorkers}/${$}`,tone:`blue`,compact:!0}),(0,N.jsx)(f,{label:`Data`,value:p(O?.bytes??D.bytes),compact:!0}),(0,N.jsx)(f,{label:`Errors`,value:l((O?.pushFailed??D.pushFailed)+(O?.ackFailed??D.ackFailed)),tone:D.pushFailed+D.ackFailed?`red`:`default`,compact:!0})]})]}),(0,N.jsxs)(s,{children:[(0,N.jsx)(i,{title:`Throughput`}),(0,N.jsx)(`p`,{className:`-mt-3 mb-4 text-xs text-faint`,children:`Enqueue (client → server) vs completion (workers) per second`}),(0,N.jsx)(b,{series:[{label:`Push/sec`,color:`#38bdf8`,points:D.pushSeries,area:!0},{label:`Done/sec`,color:`#34d399`,points:D.doneSeries,area:!0}]}),(0,N.jsxs)(`div`,{className:`mt-2 flex items-center gap-4 font-mono text-[11px] text-faint`,children:[(0,N.jsx)(G,{color:`#38bdf8`,label:`Push/sec`,value:D.pushPerSec}),(0,N.jsx)(G,{color:`#34d399`,label:`Done/sec`,value:D.donePerSec})]})]})]})]}),O&&(0,N.jsxs)(s,{className:`mt-6`,children:[(0,N.jsx)(i,{title:`Summary`}),(0,N.jsxs)(`div`,{className:`grid grid-cols-2 gap-4 md:grid-cols-4 xl:grid-cols-8`,children:[(0,N.jsx)(f,{label:`Pushed`,value:l(O.pushed),tone:`accent`,compact:!0}),(0,N.jsx)(f,{label:`Completed`,value:l(O.completed),tone:`green`,compact:!0}),(0,N.jsx)(f,{label:`Duration`,value:m(O.durationMs),compact:!0}),(0,N.jsx)(f,{label:`Avg push/s`,value:M(O.pushPerSec),tone:`accent`,compact:!0}),(0,N.jsx)(f,{label:`Avg done/s`,value:M(O.donePerSec),tone:`green`,compact:!0}),(0,N.jsx)(f,{label:`Data rate`,value:`${p(O.mbPerSec)}/s`,compact:!0}),(0,N.jsx)(f,{label:`Push p95`,value:m(O.p95),compact:!0}),(0,N.jsx)(f,{label:`Push p99`,value:m(O.p99),compact:!0})]}),(0,N.jsxs)(`p`,{className:`mt-3 text-xs text-faint`,children:[`Push-batch latency avg `,m(O.avg),` · p50 `,m(O.p50),` · p95`,` `,m(O.p95),` · p99 `,m(O.p99),` · max `,m(O.max),`.`,O.error?` First error: ${O.error}`:``]})]}),(0,N.jsxs)(s,{className:`mt-6`,children:[(0,N.jsx)(i,{title:`Server queue: ${L}`,action:te?(0,N.jsx)(`span`,{className:`text-xs font-medium text-warning`,children:`stale — server unreachable`}):void 0}),(0,N.jsx)(`p`,{className:`-mt-3 mb-4 text-xs text-faint`,children:`Live counts from the server (poll 1s).`}),K?(0,N.jsxs)(`div`,{className:`grid grid-cols-2 gap-4 md:grid-cols-5`,children:[(0,N.jsx)(f,{label:`Waiting`,value:l(K.waiting??0),tone:`amber`,compact:!0}),(0,N.jsx)(f,{label:`Active`,value:l(K.active??0),tone:`blue`,compact:!0}),(0,N.jsx)(f,{label:`Completed`,value:l(K.completed??0),tone:`green`,compact:!0}),(0,N.jsx)(f,{label:`Failed`,value:l(K.failed??0),tone:K.failed?`red`:`default`,compact:!0}),(0,N.jsx)(f,{label:`Delayed`,value:l(K.delayed??0),compact:!0})]}):(0,N.jsx)(`p`,{className:`text-sm text-faint`,children:`No counts yet — waiting for the server to answer for this queue.`})]}),(0,N.jsx)(P,{history:k,onClear:r.clearHistory})]})}function W({label:e,pct:n,tone:r}){return(0,N.jsxs)(`div`,{className:`mb-2`,children:[(0,N.jsxs)(`div`,{className:`mb-1 flex items-center justify-between text-[11px] text-faint`,children:[(0,N.jsx)(`span`,{children:e}),(0,N.jsxs)(`span`,{className:`tnum`,children:[n.toFixed(0),`%`]})]}),(0,N.jsx)(`div`,{className:`h-1.5 overflow-hidden rounded-full bg-surface-2`,children:(0,N.jsx)(`div`,{className:t(`h-full rounded-full transition-all`,r===`accent`?`bg-accent`:`bg-emerald-500`),style:{width:`${n}%`}})})]})}function G({color:e,label:t,value:n}){return(0,N.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,N.jsx)(`span`,{className:`size-2 rounded-full`,style:{background:e}}),t,` `,(0,N.jsxs)(`span`,{className:`text-fg`,children:[M(n),`/s`]})]})}export{U as Benchmark};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{r as e}from"./cn-CMFYpumL.js";import{m as t,t as n}from"./react-vendor-CHIHtdAC.js";import{C as r,O as i,S as a,et as o,h as s,tt as c,w as l}from"./index-C5VVVkqi.js";import{i as u,n as d,t as f}from"./form-PtDLk33Z.js";var p=e(t(),1),m=n(),h=1e4,g=`[
|
|
2
|
+
{ "data": { "to": "a@example.com", "template": "welcome" }, "priority": 1 },
|
|
3
|
+
{ "data": { "to": "b@example.com", "template": "welcome" } }
|
|
4
|
+
]`,_=e=>{let t=Number(e);return e.trim()!==``&&Number.isFinite(t)?t:void 0},v=e=>typeof e==`number`&&Number.isFinite(e)?e:void 0,y=e=>typeof e==`boolean`?e:void 0,b=e=>typeof e==`string`&&e!==``?e:void 0;function x(e,t,n){if(n===`spec`&&e&&typeof e==`object`&&!Array.isArray(e)&&`data`in e){let n=e;return{data:n.data,priority:v(n.priority)??t.priority,delay:v(n.delay),maxAttempts:v(n.maxAttempts)??t.maxAttempts,backoff:v(n.backoff)??t.backoff,timeout:v(n.timeout)??t.timeout,jobId:b(n.jobId),removeOnComplete:y(n.removeOnComplete),removeOnFail:y(n.removeOnFail),durable:y(n.durable),lifo:y(n.lifo),ttl:v(n.ttl),uniqueKey:b(n.uniqueKey)}}return{data:e,...t}}var S=new Set([`data`,`priority`,`delay`,`maxAttempts`,`backoff`,`timeout`,`jobId`,`removeOnComplete`,`removeOnFail`,`durable`,`lifo`,`ttl`,`uniqueKey`]);function C(e){return e.some(e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&`data`in e&&Object.keys(e).some(e=>!S.has(e)))}function w(e){let t=e.trim();if(!t)return{items:[],error:null};try{let e=JSON.parse(t);return Array.isArray(e)?{items:e,error:null}:{items:[e],error:null}}catch{}let n=[],r=t.split(`
|
|
5
|
+
`);for(let e=0;e<r.length;e++){let t=r[e].trim();if(t)try{n.push(JSON.parse(t))}catch(t){return{items:[],error:`Line ${e+1}: ${t.message}`}}}return{items:n,error:null}}function T(){let{data:e}=i(()=>o.queues(),[],{intervalMs:3e4}),[t,n]=(0,p.useState)(``),[v,y]=(0,p.useState)(``),[b,S]=(0,p.useState)(`spec`),[T,E]=(0,p.useState)(``),[D,O]=(0,p.useState)(``),[k,A]=(0,p.useState)(``),[j,M]=(0,p.useState)(``),[N,P]=(0,p.useState)(!1),[F,I]=(0,p.useState)(null),{items:L,error:R}=(0,p.useMemo)(()=>w(v),[v]),z=b===`spec`&&!R&&C(L);return(0,m.jsxs)(`div`,{children:[(0,m.jsx)(s,{title:`Bulk Add Jobs`,description:`Import many distinct jobs at once from a JSON array, NDJSON, or a file.`}),(0,m.jsxs)(`div`,{className:`grid grid-cols-1 gap-6 lg:grid-cols-3`,children:[(0,m.jsxs)(a,{className:`lg:col-span-2`,children:[(0,m.jsx)(r,{title:`Jobs`,action:(0,m.jsxs)(`label`,{className:`cursor-pointer rounded-lg border border-line px-3 py-1.5 text-xs text-muted hover:bg-surface-2 hover:text-fg`,children:[`Upload file`,(0,m.jsx)(`input`,{type:`file`,accept:`.json,.ndjson,.txt,application/json`,onChange:e=>{let t=e.target.files?.[0];if(!t)return;let n=new FileReader;n.onload=()=>y(String(n.result??``)),n.onerror=()=>I({ok:!1,msg:`Could not read file`}),n.readAsText(t),e.target.value=``},className:`hidden`})]})}),(0,m.jsx)(`textarea`,{value:v,onChange:e=>y(e.target.value),spellCheck:!1,rows:16,placeholder:g,"aria-label":`Jobs JSON`,className:`w-full rounded-lg border border-line bg-surface-2 p-3 font-mono text-xs text-fg placeholder:text-faint focus:border-accent/60 focus:outline-none focus:ring-2 focus:ring-accent/30`}),(0,m.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-3`,children:[(0,m.jsx)(`span`,{className:`text-xs font-medium text-faint`,children:`Interpret each item as`}),(0,m.jsx)(u,{options:[`spec`,`raw`],value:b,onChange:S}),(0,m.jsx)(`span`,{className:`text-xs text-faint`,children:b===`spec`?`job spec: an object with a "data" key sets options from its sibling fields.`:`raw data: the whole item becomes the job payload, untouched.`})]}),(0,m.jsx)(`p`,{className:`mt-2 text-xs text-faint`,children:`Accepts a JSON array, a single object, or newline-delimited JSON.`}),(0,m.jsx)(`div`,{className:`mt-2 text-sm`,children:R?(0,m.jsx)(`span`,{className:`text-danger`,children:R}):L.length>0?(0,m.jsxs)(`span`,{className:`text-success`,children:[L.length,` job(s) parsed ✓`]}):(0,m.jsx)(`span`,{className:`text-faint`,children:`Nothing parsed yet.`})}),z&&(0,m.jsx)(`p`,{className:`mt-2 text-xs text-warning`,children:`Some items carry keys beyond the known job options — in “spec” mode those keys are dropped. Switch to “raw” to keep every field as the job's data.`})]}),(0,m.jsxs)(a,{children:[(0,m.jsx)(r,{title:`Target & defaults`}),(0,m.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,m.jsxs)(f,{label:`Queue`,children:[(0,m.jsx)(d,{list:`bulk-queue-options`,value:t,onChange:e=>n(e.target.value),placeholder:`queue name (existing or new)`}),(0,m.jsx)(`datalist`,{id:`bulk-queue-options`,children:(e?.queues??[]).map(e=>(0,m.jsx)(`option`,{value:e.name},e.name))})]}),(0,m.jsx)(`p`,{className:`-mt-2 text-xs text-faint`,children:`Defaults below fill any field an item omits.`}),(0,m.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,m.jsx)(f,{label:`Priority`,children:(0,m.jsx)(d,{type:`number`,value:T,onChange:e=>E(e.target.value),placeholder:`0`})}),(0,m.jsx)(f,{label:`Max attempts`,children:(0,m.jsx)(d,{type:`number`,value:D,onChange:e=>O(e.target.value),placeholder:`3`})}),(0,m.jsx)(f,{label:`Backoff (ms)`,children:(0,m.jsx)(d,{type:`number`,value:k,onChange:e=>A(e.target.value),placeholder:`1000`})}),(0,m.jsx)(f,{label:`Timeout (ms)`,children:(0,m.jsx)(d,{type:`number`,value:j,onChange:e=>M(e.target.value),placeholder:`—`})})]}),(0,m.jsx)(`div`,{className:`flex items-center gap-3`,children:(0,m.jsx)(l,{variant:`accent`,disabled:N||L.length===0||R!=null,onClick:async()=>{if(I(null),!t.trim()){I({ok:!1,msg:`Choose a queue`});return}if(R){I({ok:!1,msg:R});return}if(L.length===0){I({ok:!1,msg:`Nothing to enqueue — paste a JSON array or NDJSON.`});return}if(L.length>h){I({ok:!1,msg:`Too many jobs (${L.length}). Limit is ${h}.`});return}let e={priority:_(T),maxAttempts:_(D),backoff:_(k),timeout:_(j)},n=L.map(t=>x(t,e,b));P(!0);try{let e=await o.addJobsBulk(t,n),r=new Set(e.ids).size,i=`Created ${r} job${r===1?``:`s`} in ${t}`;I({ok:!0,msg:i}),c.success(i)}catch(e){let t=e.message;I({ok:!1,msg:t}),c.error(`Bulk import failed`,t)}finally{P(!1)}},children:N?`Importing…`:`Import ${L.length||``}`})}),F&&(0,m.jsx)(`span`,{className:F.ok?`text-sm text-success`:`text-sm text-danger`,children:F.msg})]})]})]})]})}export{T as BulkAddJobs};
|