@rudderjs/horizon 4.0.0 → 4.1.0
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/boost/guidelines.md +10 -0
- package/dist/api/routes.d.ts +11 -4
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +102 -124
- package/dist/api/routes.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/routes.d.ts +22 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +47 -0
- package/dist/routes.js.map +1 -0
- package/dist/views/vanilla/Dashboard.d.ts +10 -0
- package/dist/views/vanilla/Dashboard.d.ts.map +1 -0
- package/dist/views/vanilla/Dashboard.js +86 -0
- package/dist/views/vanilla/Dashboard.js.map +1 -0
- package/dist/views/vanilla/FailedJobs.d.ts +6 -0
- package/dist/views/vanilla/FailedJobs.d.ts.map +1 -0
- package/dist/views/vanilla/FailedJobs.js +17 -0
- package/dist/views/vanilla/FailedJobs.js.map +1 -0
- package/dist/views/vanilla/Layout.d.ts +20 -0
- package/dist/views/vanilla/Layout.d.ts.map +1 -0
- package/dist/{ui/layout.js → views/vanilla/Layout.js} +11 -15
- package/dist/views/vanilla/Layout.js.map +1 -0
- package/dist/views/vanilla/Queues.d.ts +6 -0
- package/dist/views/vanilla/Queues.d.ts.map +1 -0
- package/dist/views/vanilla/Queues.js +54 -0
- package/dist/views/vanilla/Queues.js.map +1 -0
- package/dist/views/vanilla/RecentJobs.d.ts +6 -0
- package/dist/views/vanilla/RecentJobs.d.ts.map +1 -0
- package/dist/views/vanilla/RecentJobs.js +17 -0
- package/dist/views/vanilla/RecentJobs.js.map +1 -0
- package/dist/views/vanilla/Workers.d.ts +6 -0
- package/dist/views/vanilla/Workers.d.ts.map +1 -0
- package/dist/views/vanilla/Workers.js +60 -0
- package/dist/views/vanilla/Workers.js.map +1 -0
- package/dist/views/vanilla/_html.d.ts +28 -0
- package/dist/views/vanilla/_html.d.ts.map +1 -0
- package/dist/views/vanilla/_html.js +56 -0
- package/dist/views/vanilla/_html.js.map +1 -0
- package/dist/views/vanilla/_jobTable.d.ts +11 -0
- package/dist/views/vanilla/_jobTable.d.ts.map +1 -0
- package/dist/views/vanilla/_jobTable.js +89 -0
- package/dist/views/vanilla/_jobTable.js.map +1 -0
- package/dist/views/vanilla/index.d.ts +8 -0
- package/dist/views/vanilla/index.d.ts.map +1 -0
- package/dist/views/vanilla/index.js +8 -0
- package/dist/views/vanilla/index.js.map +1 -0
- package/package.json +3 -3
- package/dist/ui/layout.d.ts +0 -6
- package/dist/ui/layout.d.ts.map +0 -1
- package/dist/ui/layout.js.map +0 -1
- package/dist/ui/pages.d.ts +0 -6
- package/dist/ui/pages.d.ts.map +0 -1
- package/dist/ui/pages.js +0 -295
- package/dist/ui/pages.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FailedJobs.js","sourceRoot":"","sources":["../../../src/views/vanilla/FailedJobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAOpD,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAErC,MAAM,IAAI,GAAG;;;;;;;QAOP,QAAQ,EAAE;;MAEZ,SAAS,CAAC,SAAS,CAAC,EAAE,CAAA;IAE1B,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAA;AACrF,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared HTML chrome for Horizon dashboard pages.
|
|
3
|
+
*
|
|
4
|
+
* Vanilla mode (raw template literals + Alpine.js + Tailwind via CDN). No
|
|
5
|
+
* client framework dependency, no build step. The package's UI is fully
|
|
6
|
+
* self-contained so horizon can monitor a host app of any framework.
|
|
7
|
+
*/
|
|
8
|
+
export interface NavItem {
|
|
9
|
+
label: string;
|
|
10
|
+
path: string;
|
|
11
|
+
icon: string;
|
|
12
|
+
}
|
|
13
|
+
export interface LayoutProps {
|
|
14
|
+
title: string;
|
|
15
|
+
body: string;
|
|
16
|
+
basePath: string;
|
|
17
|
+
activePath: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function Layout(props: LayoutProps): string;
|
|
20
|
+
//# sourceMappingURL=Layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../../src/views/vanilla/Layout.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAG,MAAM,CAAA;IACb,IAAI,EAAG,MAAM,CAAA;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAO,MAAM,CAAA;IAClB,IAAI,EAAQ,MAAM,CAAA;IAClB,QAAQ,EAAI,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAmDjD"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
export function layout(title, body, basePath, activePath) {
|
|
1
|
+
import { html, raw } from './_html.js';
|
|
2
|
+
export function Layout(props) {
|
|
3
|
+
const { title, body, basePath, activePath } = props;
|
|
6
4
|
const nav = [
|
|
7
5
|
{ label: 'Dashboard', path: '', icon: 'M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6' },
|
|
8
6
|
{ label: 'Recent Jobs', path: '/jobs/recent', icon: 'M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2' },
|
|
@@ -13,12 +11,12 @@ export function layout(title, body, basePath, activePath) {
|
|
|
13
11
|
const navHtml = nav.map(n => {
|
|
14
12
|
const href = `${basePath}${n.path}`;
|
|
15
13
|
const active = activePath === n.path || (n.path === '' && activePath === '/');
|
|
16
|
-
return `<a href="${href}" class="flex items-center gap-3 px-3 py-2 text-sm rounded-lg transition ${active ? 'bg-teal-50 text-teal-700 font-medium' : 'text-gray-600 hover:bg-gray-50 hover:text-gray-900'}">
|
|
17
|
-
|
|
14
|
+
return html `<a href="${href}" class="${raw(`flex items-center gap-3 px-3 py-2 text-sm rounded-lg transition ${active ? 'bg-teal-50 text-teal-700 font-medium' : 'text-gray-600 hover:bg-gray-50 hover:text-gray-900'}`)}">
|
|
15
|
+
${raw(`<svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="${n.icon}"/></svg>`)}
|
|
18
16
|
${n.label}
|
|
19
17
|
</a>`;
|
|
20
|
-
})
|
|
21
|
-
return `<!DOCTYPE html>
|
|
18
|
+
});
|
|
19
|
+
return html `<!DOCTYPE html>
|
|
22
20
|
<html lang="en">
|
|
23
21
|
<head>
|
|
24
22
|
<meta charset="UTF-8">
|
|
@@ -33,9 +31,7 @@ export function layout(title, body, basePath, activePath) {
|
|
|
33
31
|
<aside class="w-56 bg-white border-r border-gray-200 flex flex-col">
|
|
34
32
|
<div class="px-4 py-5 flex items-center gap-2 border-b border-gray-100">
|
|
35
33
|
<div class="w-7 h-7 bg-teal-600 rounded-lg flex items-center justify-center">
|
|
36
|
-
<svg class="w-4 h-4 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
37
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 10h16M4 14h16M4 18h16"/>
|
|
38
|
-
</svg>
|
|
34
|
+
${raw('<svg class="w-4 h-4 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 10h16M4 14h16M4 18h16"/></svg>')}
|
|
39
35
|
</div>
|
|
40
36
|
<span class="font-semibold text-sm">Horizon</span>
|
|
41
37
|
</div>
|
|
@@ -45,11 +41,11 @@ export function layout(title, body, basePath, activePath) {
|
|
|
45
41
|
</aside>
|
|
46
42
|
<main class="flex-1 overflow-auto">
|
|
47
43
|
<div class="max-w-6xl mx-auto px-6 py-8">
|
|
48
|
-
${body}
|
|
44
|
+
${raw(body)}
|
|
49
45
|
</div>
|
|
50
46
|
</main>
|
|
51
47
|
</div>
|
|
52
48
|
</body>
|
|
53
|
-
</html
|
|
49
|
+
</html>`.value;
|
|
54
50
|
}
|
|
55
|
-
//# sourceMappingURL=
|
|
51
|
+
//# sourceMappingURL=Layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../../src/views/vanilla/Layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAuBtC,MAAM,UAAU,MAAM,CAAC,KAAkB;IACvC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;IAEnD,MAAM,GAAG,GAAc;QACrB,EAAE,KAAK,EAAE,WAAW,EAAK,IAAI,EAAE,EAAE,EAAe,IAAI,EAAE,kJAAkJ,EAAE;QAC1M,EAAE,KAAK,EAAE,aAAa,EAAG,IAAI,EAAE,cAAc,EAAG,IAAI,EAAE,iIAAiI,EAAE;QACzL,EAAE,KAAK,EAAE,aAAa,EAAG,IAAI,EAAE,cAAc,EAAG,IAAI,EAAE,sIAAsI,EAAE;QAC9L,EAAE,KAAK,EAAE,QAAQ,EAAQ,IAAI,EAAE,SAAS,EAAQ,IAAI,EAAE,iCAAiC,EAAE;QACzF,EAAE,KAAK,EAAE,SAAS,EAAO,IAAI,EAAE,UAAU,EAAO,IAAI,EAAE,qeAAqe,EAAE;KAC9hB,CAAA;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAC1B,MAAM,IAAI,GAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QACrC,MAAM,MAAM,GAAG,UAAU,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,UAAU,KAAK,GAAG,CAAC,CAAA;QAC7E,OAAO,IAAI,CAAA,YAAY,IAAI,YAAY,GAAG,CAAC,mEAAmE,MAAM,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,oDAAoD,EAAE,CAAC;QACnN,GAAG,CAAC,qKAAqK,CAAC,CAAC,IAAI,WAAW,CAAC;QAC3L,CAAC,CAAC,KAAK;SACN,CAAA;IACP,CAAC,CAAC,CAAA;IAEF,OAAO,IAAI,CAAA;;;;;WAKF,KAAK;;;;;;;;;;YAUJ,GAAG,CAAC,yMAAyM,CAAC;;;;;UAKhN,OAAO;;;;;UAKP,GAAG,CAAC,IAAI,CAAC;;;;;QAKX,CAAC,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Queues.d.ts","sourceRoot":"","sources":["../../../src/views/vanilla/Queues.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAG,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAqDjD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Layout } from './Layout.js';
|
|
2
|
+
export function Queues(props) {
|
|
3
|
+
const { basePath, apiPrefix } = props;
|
|
4
|
+
const body = `
|
|
5
|
+
<div x-data="queues()" x-init="load()" x-cloak>
|
|
6
|
+
<h2 class="text-xl font-bold mb-6">Queues</h2>
|
|
7
|
+
<div class="bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden">
|
|
8
|
+
<table class="w-full text-sm">
|
|
9
|
+
<thead class="bg-gray-50 border-b border-gray-200 text-xs uppercase text-gray-500">
|
|
10
|
+
<tr>
|
|
11
|
+
<th class="px-5 py-3 text-left">Queue</th>
|
|
12
|
+
<th class="px-5 py-3 text-right">Throughput/min</th>
|
|
13
|
+
<th class="px-5 py-3 text-right">Avg Wait</th>
|
|
14
|
+
<th class="px-5 py-3 text-right">Avg Runtime</th>
|
|
15
|
+
<th class="px-5 py-3 text-right">Pending</th>
|
|
16
|
+
<th class="px-5 py-3 text-right">Active</th>
|
|
17
|
+
<th class="px-5 py-3 text-right">Completed</th>
|
|
18
|
+
<th class="px-5 py-3 text-right">Failed</th>
|
|
19
|
+
</tr>
|
|
20
|
+
</thead>
|
|
21
|
+
<tbody class="divide-y divide-gray-100">
|
|
22
|
+
<template x-for="q in data" :key="q.queue">
|
|
23
|
+
<tr class="hover:bg-gray-50">
|
|
24
|
+
<td class="px-5 py-3 font-medium" x-text="q.queue"></td>
|
|
25
|
+
<td class="px-5 py-3 text-right" x-text="q.throughput"></td>
|
|
26
|
+
<td class="px-5 py-3 text-right" x-text="q.waitTime + 'ms'"></td>
|
|
27
|
+
<td class="px-5 py-3 text-right" x-text="q.runtime + 'ms'"></td>
|
|
28
|
+
<td class="px-5 py-3 text-right text-amber-600" x-text="q.pending"></td>
|
|
29
|
+
<td class="px-5 py-3 text-right text-blue-600" x-text="q.active"></td>
|
|
30
|
+
<td class="px-5 py-3 text-right text-green-600" x-text="q.completed"></td>
|
|
31
|
+
<td class="px-5 py-3 text-right text-red-600" x-text="q.failed"></td>
|
|
32
|
+
</tr>
|
|
33
|
+
</template>
|
|
34
|
+
<tr x-show="data.length === 0">
|
|
35
|
+
<td colspan="8" class="px-5 py-12 text-center text-gray-400">No queue data yet.</td>
|
|
36
|
+
</tr>
|
|
37
|
+
</tbody>
|
|
38
|
+
</table>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
<script>
|
|
42
|
+
function queues() {
|
|
43
|
+
return {
|
|
44
|
+
data: [],
|
|
45
|
+
async load() {
|
|
46
|
+
const res = await fetch('${apiPrefix}/queues').then(r => r.json())
|
|
47
|
+
this.data = res.data || []
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
</script>`;
|
|
52
|
+
return Layout({ title: 'Queues', body, basePath, activePath: '/queues' });
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=Queues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Queues.js","sourceRoot":"","sources":["../../../src/views/vanilla/Queues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAOpC,MAAM,UAAU,MAAM,CAAC,KAAkB;IACvC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAErC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCA0CwB,SAAS;;;;;cAKlC,CAAA;IAEZ,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAA;AAC3E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecentJobs.d.ts","sourceRoot":"","sources":["../../../src/views/vanilla/RecentJobs.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAG,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAezD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Layout } from './Layout.js';
|
|
2
|
+
import { jobTable, jobScript } from './_jobTable.js';
|
|
3
|
+
export function RecentJobs(props) {
|
|
4
|
+
const { basePath, apiPrefix } = props;
|
|
5
|
+
const body = `
|
|
6
|
+
<div x-data="jobList('recent')" x-init="load()" x-cloak>
|
|
7
|
+
<div class="flex items-center justify-between mb-6">
|
|
8
|
+
<h2 class="text-xl font-bold">Recent Jobs</h2>
|
|
9
|
+
<input type="text" x-model="search" @input.debounce.300ms="load()"
|
|
10
|
+
placeholder="Search..." class="text-sm border border-gray-300 rounded-lg px-3 py-1.5 focus:ring-2 focus:ring-teal-500 outline-none">
|
|
11
|
+
</div>
|
|
12
|
+
${jobTable()}
|
|
13
|
+
</div>
|
|
14
|
+
${jobScript(apiPrefix)}`;
|
|
15
|
+
return Layout({ title: 'Recent Jobs', body, basePath, activePath: '/jobs/recent' });
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=RecentJobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecentJobs.js","sourceRoot":"","sources":["../../../src/views/vanilla/RecentJobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAOpD,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAErC,MAAM,IAAI,GAAG;;;;;;;QAOP,QAAQ,EAAE;;MAEZ,SAAS,CAAC,SAAS,CAAC,EAAE,CAAA;IAE1B,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAA;AACrF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Workers.d.ts","sourceRoot":"","sources":["../../../src/views/vanilla/Workers.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAG,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CA2DnD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Layout } from './Layout.js';
|
|
2
|
+
export function Workers(props) {
|
|
3
|
+
const { basePath, apiPrefix } = props;
|
|
4
|
+
const body = `
|
|
5
|
+
<div x-data="workers()" x-init="load()" x-cloak>
|
|
6
|
+
<h2 class="text-xl font-bold mb-6">Workers</h2>
|
|
7
|
+
<div class="bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden">
|
|
8
|
+
<table class="w-full text-sm">
|
|
9
|
+
<thead class="bg-gray-50 border-b border-gray-200 text-xs uppercase text-gray-500">
|
|
10
|
+
<tr>
|
|
11
|
+
<th class="px-5 py-3 text-left">ID</th>
|
|
12
|
+
<th class="px-5 py-3 text-left">Queue</th>
|
|
13
|
+
<th class="px-5 py-3 text-left">Status</th>
|
|
14
|
+
<th class="px-5 py-3 text-right">Jobs Run</th>
|
|
15
|
+
<th class="px-5 py-3 text-right">Memory</th>
|
|
16
|
+
<th class="px-5 py-3 text-right">Last Job</th>
|
|
17
|
+
</tr>
|
|
18
|
+
</thead>
|
|
19
|
+
<tbody class="divide-y divide-gray-100">
|
|
20
|
+
<template x-for="w in data" :key="w.id">
|
|
21
|
+
<tr class="hover:bg-gray-50">
|
|
22
|
+
<td class="px-5 py-3 font-mono text-xs" x-text="w.id"></td>
|
|
23
|
+
<td class="px-5 py-3" x-text="w.queue"></td>
|
|
24
|
+
<td class="px-5 py-3">
|
|
25
|
+
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium"
|
|
26
|
+
:class="{active:'bg-green-100 text-green-700',idle:'bg-gray-100 text-gray-600',paused:'bg-amber-100 text-amber-700'}[w.status]"
|
|
27
|
+
x-text="w.status"></span>
|
|
28
|
+
</td>
|
|
29
|
+
<td class="px-5 py-3 text-right" x-text="w.jobsRun"></td>
|
|
30
|
+
<td class="px-5 py-3 text-right" x-text="w.memoryMb + ' MB'"></td>
|
|
31
|
+
<td class="px-5 py-3 text-right text-gray-400 text-xs" x-text="w.lastJobAt ? ago(w.lastJobAt) : '—'"></td>
|
|
32
|
+
</tr>
|
|
33
|
+
</template>
|
|
34
|
+
<tr x-show="data.length === 0">
|
|
35
|
+
<td colspan="6" class="px-5 py-12 text-center text-gray-400">No workers registered.</td>
|
|
36
|
+
</tr>
|
|
37
|
+
</tbody>
|
|
38
|
+
</table>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
<script>
|
|
42
|
+
function workers() {
|
|
43
|
+
return {
|
|
44
|
+
data: [],
|
|
45
|
+
async load() {
|
|
46
|
+
const res = await fetch('${apiPrefix}/workers').then(r => r.json())
|
|
47
|
+
this.data = res.data || []
|
|
48
|
+
},
|
|
49
|
+
ago(dateStr) {
|
|
50
|
+
const s = Math.floor((Date.now() - new Date(dateStr).getTime()) / 1000)
|
|
51
|
+
if (s < 60) return s + 's ago'
|
|
52
|
+
if (s < 3600) return Math.floor(s / 60) + 'm ago'
|
|
53
|
+
return Math.floor(s / 3600) + 'h ago'
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
</script>`;
|
|
58
|
+
return Layout({ title: 'Workers', body, basePath, activePath: '/workers' });
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=Workers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Workers.js","sourceRoot":"","sources":["../../../src/views/vanilla/Workers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAOpC,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAErC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCA0CwB,SAAS;;;;;;;;;;;cAWlC,CAAA;IAEZ,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAA;AAC7E,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny HTML templating helper — inlined from `@rudderjs/view`'s `html\`\``,
|
|
3
|
+
* `escapeHtml`, and `SafeString` so horizon doesn't need to pull
|
|
4
|
+
* `@rudderjs/view` (which has a `vike` peer dep that's unwanted baggage
|
|
5
|
+
* for a self-contained debug tool).
|
|
6
|
+
*
|
|
7
|
+
* Mirrors the same helper used by `@rudderjs/telescope`. If
|
|
8
|
+
* `@rudderjs/view` ever drops the Vike peer or splits the HTML helpers
|
|
9
|
+
* into a separate package, this file can be replaced with a one-line
|
|
10
|
+
* `export ... from '@rudderjs/view'`.
|
|
11
|
+
*
|
|
12
|
+
* Semantics:
|
|
13
|
+
* - Primitives are escaped via `escapeHtml`
|
|
14
|
+
* - `null`/`undefined`/`false` render as empty string
|
|
15
|
+
* - Arrays recursively render and join (no separator)
|
|
16
|
+
* - `SafeString` instances pass through unchanged (escape hatch for
|
|
17
|
+
* composing nested templates or injecting trusted markup)
|
|
18
|
+
*/
|
|
19
|
+
export declare class SafeString {
|
|
20
|
+
readonly value: string;
|
|
21
|
+
constructor(value: string);
|
|
22
|
+
toString(): string;
|
|
23
|
+
}
|
|
24
|
+
export declare function escapeHtml(value: unknown): string;
|
|
25
|
+
export declare function html(strings: TemplateStringsArray, ...values: unknown[]): SafeString;
|
|
26
|
+
/** Wrap pre-rendered, trusted HTML so it passes through `html\`\`` interpolation unchanged. */
|
|
27
|
+
export declare function raw(value: string): SafeString;
|
|
28
|
+
//# sourceMappingURL=_html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_html.d.ts","sourceRoot":"","sources":["../../../src/views/vanilla/_html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,qBAAa,UAAU;aACO,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM;IACzC,QAAQ,IAAI,MAAM;CACnB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQjD;AASD,wBAAgB,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAMpF;AAED,+FAA+F;AAC/F,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAE7C"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny HTML templating helper — inlined from `@rudderjs/view`'s `html\`\``,
|
|
3
|
+
* `escapeHtml`, and `SafeString` so horizon doesn't need to pull
|
|
4
|
+
* `@rudderjs/view` (which has a `vike` peer dep that's unwanted baggage
|
|
5
|
+
* for a self-contained debug tool).
|
|
6
|
+
*
|
|
7
|
+
* Mirrors the same helper used by `@rudderjs/telescope`. If
|
|
8
|
+
* `@rudderjs/view` ever drops the Vike peer or splits the HTML helpers
|
|
9
|
+
* into a separate package, this file can be replaced with a one-line
|
|
10
|
+
* `export ... from '@rudderjs/view'`.
|
|
11
|
+
*
|
|
12
|
+
* Semantics:
|
|
13
|
+
* - Primitives are escaped via `escapeHtml`
|
|
14
|
+
* - `null`/`undefined`/`false` render as empty string
|
|
15
|
+
* - Arrays recursively render and join (no separator)
|
|
16
|
+
* - `SafeString` instances pass through unchanged (escape hatch for
|
|
17
|
+
* composing nested templates or injecting trusted markup)
|
|
18
|
+
*/
|
|
19
|
+
export class SafeString {
|
|
20
|
+
value;
|
|
21
|
+
constructor(value) {
|
|
22
|
+
this.value = value;
|
|
23
|
+
}
|
|
24
|
+
toString() { return this.value; }
|
|
25
|
+
}
|
|
26
|
+
export function escapeHtml(value) {
|
|
27
|
+
if (value === null || value === undefined)
|
|
28
|
+
return '';
|
|
29
|
+
return String(value)
|
|
30
|
+
.replace(/&/g, '&')
|
|
31
|
+
.replace(/</g, '<')
|
|
32
|
+
.replace(/>/g, '>')
|
|
33
|
+
.replace(/"/g, '"')
|
|
34
|
+
.replace(/'/g, ''');
|
|
35
|
+
}
|
|
36
|
+
function renderHtmlValue(value) {
|
|
37
|
+
if (value === null || value === undefined || value === false)
|
|
38
|
+
return '';
|
|
39
|
+
if (value instanceof SafeString)
|
|
40
|
+
return value.value;
|
|
41
|
+
if (Array.isArray(value))
|
|
42
|
+
return value.map(renderHtmlValue).join('');
|
|
43
|
+
return escapeHtml(value);
|
|
44
|
+
}
|
|
45
|
+
export function html(strings, ...values) {
|
|
46
|
+
let out = strings[0] ?? '';
|
|
47
|
+
for (let i = 0; i < values.length; i++) {
|
|
48
|
+
out += renderHtmlValue(values[i]) + (strings[i + 1] ?? '');
|
|
49
|
+
}
|
|
50
|
+
return new SafeString(out);
|
|
51
|
+
}
|
|
52
|
+
/** Wrap pre-rendered, trusted HTML so it passes through `html\`\`` interpolation unchanged. */
|
|
53
|
+
export function raw(value) {
|
|
54
|
+
return new SafeString(value);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=_html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_html.js","sourceRoot":"","sources":["../../../src/views/vanilla/_html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,OAAO,UAAU;IACO;IAA5B,YAA4B,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAC7C,QAAQ,KAAa,OAAO,IAAI,CAAC,KAAK,CAAA,CAAC,CAAC;CACzC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IACpD,OAAO,MAAM,CAAC,KAAK,CAAC;SACjB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAC3B,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,EAAE,CAAA;IACvE,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,KAAK,CAAC,KAAK,CAAA;IACnD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACpE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAA6B,EAAE,GAAG,MAAiB;IACtE,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5D,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,GAAG,CAAC,KAAa;IAC/B,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared job-table partial used by both `RecentJobs` and `FailedJobs`.
|
|
3
|
+
*
|
|
4
|
+
* Both pages render the same table shape and Alpine `jobList()` component;
|
|
5
|
+
* only the `type` argument (`'recent'` vs `'failed'`) and the page title
|
|
6
|
+
* differ. Co-locating the table + script here keeps the two page files
|
|
7
|
+
* thin and prevents drift.
|
|
8
|
+
*/
|
|
9
|
+
export declare function jobTable(): string;
|
|
10
|
+
export declare function jobScript(apiPrefix: string): string;
|
|
11
|
+
//# sourceMappingURL=_jobTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_jobTable.d.ts","sourceRoot":"","sources":["../../../src/views/vanilla/_jobTable.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,wBAAgB,QAAQ,IAAI,MAAM,CA+CjC;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA+BnD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared job-table partial used by both `RecentJobs` and `FailedJobs`.
|
|
3
|
+
*
|
|
4
|
+
* Both pages render the same table shape and Alpine `jobList()` component;
|
|
5
|
+
* only the `type` argument (`'recent'` vs `'failed'`) and the page title
|
|
6
|
+
* differ. Co-locating the table + script here keeps the two page files
|
|
7
|
+
* thin and prevents drift.
|
|
8
|
+
*/
|
|
9
|
+
export function jobTable() {
|
|
10
|
+
return `
|
|
11
|
+
<div class="bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden">
|
|
12
|
+
<table class="w-full text-sm">
|
|
13
|
+
<thead class="bg-gray-50 border-b border-gray-200 text-xs uppercase text-gray-500">
|
|
14
|
+
<tr>
|
|
15
|
+
<th class="px-4 py-3 text-left">Name</th>
|
|
16
|
+
<th class="px-4 py-3 text-left">Queue</th>
|
|
17
|
+
<th class="px-4 py-3 text-left">Status</th>
|
|
18
|
+
<th class="px-4 py-3 text-right">Duration</th>
|
|
19
|
+
<th class="px-4 py-3 text-right">Time</th>
|
|
20
|
+
<th class="px-4 py-3 text-right">Actions</th>
|
|
21
|
+
</tr>
|
|
22
|
+
</thead>
|
|
23
|
+
<tbody class="divide-y divide-gray-100">
|
|
24
|
+
<template x-for="job in jobs" :key="job.id">
|
|
25
|
+
<tr class="hover:bg-gray-50">
|
|
26
|
+
<td class="px-4 py-3 font-mono text-xs" x-text="job.name"></td>
|
|
27
|
+
<td class="px-4 py-3" x-text="job.queue"></td>
|
|
28
|
+
<td class="px-4 py-3">
|
|
29
|
+
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium"
|
|
30
|
+
:class="{pending:'bg-amber-100 text-amber-700',processing:'bg-blue-100 text-blue-700',completed:'bg-green-100 text-green-700',failed:'bg-red-100 text-red-700'}[job.status]"
|
|
31
|
+
x-text="job.status"></span>
|
|
32
|
+
</td>
|
|
33
|
+
<td class="px-4 py-3 text-right" x-text="job.duration ? job.duration + 'ms' : '—'"></td>
|
|
34
|
+
<td class="px-4 py-3 text-right text-gray-400 text-xs" x-text="ago(job.dispatchedAt)"></td>
|
|
35
|
+
<td class="px-4 py-3 text-right">
|
|
36
|
+
<button x-show="job.status === 'failed'" @click="retry(job.id)"
|
|
37
|
+
class="text-xs text-teal-600 hover:text-teal-800 mr-2">Retry</button>
|
|
38
|
+
<button @click="remove(job.id)"
|
|
39
|
+
class="text-xs text-red-500 hover:text-red-700">Delete</button>
|
|
40
|
+
</td>
|
|
41
|
+
</tr>
|
|
42
|
+
</template>
|
|
43
|
+
<tr x-show="jobs.length === 0">
|
|
44
|
+
<td colspan="6" class="px-4 py-12 text-center text-gray-400">No jobs found.</td>
|
|
45
|
+
</tr>
|
|
46
|
+
</tbody>
|
|
47
|
+
</table>
|
|
48
|
+
<div class="flex items-center justify-between px-4 py-3 border-t border-gray-200 bg-gray-50 text-sm">
|
|
49
|
+
<span class="text-gray-500">Total: <span x-text="meta.total"></span></span>
|
|
50
|
+
<div class="flex gap-1">
|
|
51
|
+
<button @click="page > 1 && (page--, load())" :disabled="page <= 1" class="px-3 py-1 border rounded text-xs disabled:opacity-30">Prev</button>
|
|
52
|
+
<button @click="page++; load()" class="px-3 py-1 border rounded text-xs">Next</button>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</div>`;
|
|
56
|
+
}
|
|
57
|
+
export function jobScript(apiPrefix) {
|
|
58
|
+
return `
|
|
59
|
+
<script>
|
|
60
|
+
function jobList(type) {
|
|
61
|
+
return {
|
|
62
|
+
jobs: [], meta: { total: 0 }, page: 1, search: '',
|
|
63
|
+
async load() {
|
|
64
|
+
const params = new URLSearchParams({ page: this.page, per_page: 50 })
|
|
65
|
+
if (this.search) params.set('search', this.search)
|
|
66
|
+
const data = await fetch('${apiPrefix}/jobs/' + type + '?' + params).then(r => r.json())
|
|
67
|
+
this.jobs = data.data || []
|
|
68
|
+
this.meta = data.meta || { total: 0 }
|
|
69
|
+
},
|
|
70
|
+
async retry(id) {
|
|
71
|
+
await fetch('${apiPrefix}/jobs/' + id + '/retry', { method: 'POST' })
|
|
72
|
+
this.load()
|
|
73
|
+
},
|
|
74
|
+
async remove(id) {
|
|
75
|
+
await fetch('${apiPrefix}/jobs/' + id, { method: 'DELETE' })
|
|
76
|
+
this.load()
|
|
77
|
+
},
|
|
78
|
+
ago(dateStr) {
|
|
79
|
+
const s = Math.floor((Date.now() - new Date(dateStr).getTime()) / 1000)
|
|
80
|
+
if (s < 60) return s + 's ago'
|
|
81
|
+
if (s < 3600) return Math.floor(s / 60) + 'm ago'
|
|
82
|
+
if (s < 86400) return Math.floor(s / 3600) + 'h ago'
|
|
83
|
+
return Math.floor(s / 86400) + 'd ago'
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
</script>`;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=_jobTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_jobTable.js","sourceRoot":"","sources":["../../../src/views/vanilla/_jobTable.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,UAAU,QAAQ;IACtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA6CI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,SAAiB;IACzC,OAAO;;;;;;;;wCAQ+B,SAAS;;;;;2BAKtB,SAAS;;;;2BAIT,SAAS;;;;;;;;;;;;cAYtB,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { Layout, type LayoutProps, type NavItem } from './Layout.js';
|
|
2
|
+
export { Dashboard, type DashboardProps } from './Dashboard.js';
|
|
3
|
+
export { RecentJobs, type RecentJobsProps } from './RecentJobs.js';
|
|
4
|
+
export { FailedJobs, type FailedJobsProps } from './FailedJobs.js';
|
|
5
|
+
export { Queues, type QueuesProps } from './Queues.js';
|
|
6
|
+
export { Workers, type WorkersProps } from './Workers.js';
|
|
7
|
+
export { html, raw, escapeHtml, SafeString } from './_html.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/vanilla/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { Layout } from './Layout.js';
|
|
2
|
+
export { Dashboard } from './Dashboard.js';
|
|
3
|
+
export { RecentJobs } from './RecentJobs.js';
|
|
4
|
+
export { FailedJobs } from './FailedJobs.js';
|
|
5
|
+
export { Queues } from './Queues.js';
|
|
6
|
+
export { Workers } from './Workers.js';
|
|
7
|
+
export { html, raw, escapeHtml, SafeString } from './_html.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/views/vanilla/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkC,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,OAAO,EAAqB,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rudderjs/horizon",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.1.0",
|
|
4
4
|
"rudderjs": {
|
|
5
5
|
"provider": "HorizonProvider",
|
|
6
6
|
"stage": "monitoring"
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@rudderjs/core": "^1.0.0",
|
|
29
|
-
"@rudderjs/
|
|
30
|
-
"@rudderjs/
|
|
29
|
+
"@rudderjs/contracts": "^1.1.0",
|
|
30
|
+
"@rudderjs/queue": "^4.0.0"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"@rudderjs/router": "^1.0.0",
|
package/dist/ui/layout.d.ts
DELETED
package/dist/ui/layout.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/ui/layout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAmDhG"}
|
package/dist/ui/layout.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/ui/layout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,MAAM,CAAC,KAAa,EAAE,IAAY,EAAE,QAAgB,EAAE,UAAkB;IACtF,MAAM,GAAG,GAAG;QACV,EAAE,KAAK,EAAE,WAAW,EAAK,IAAI,EAAE,EAAE,EAAe,IAAI,EAAE,kJAAkJ,EAAE;QAC1M,EAAE,KAAK,EAAE,aAAa,EAAG,IAAI,EAAE,cAAc,EAAG,IAAI,EAAE,iIAAiI,EAAE;QACzL,EAAE,KAAK,EAAE,aAAa,EAAG,IAAI,EAAE,cAAc,EAAG,IAAI,EAAE,sIAAsI,EAAE;QAC9L,EAAE,KAAK,EAAE,QAAQ,EAAQ,IAAI,EAAE,SAAS,EAAQ,IAAI,EAAE,iCAAiC,EAAE;QACzF,EAAE,KAAK,EAAE,SAAS,EAAO,IAAI,EAAE,UAAU,EAAO,IAAI,EAAE,qeAAqe,EAAE;KAC9hB,CAAA;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAC1B,MAAM,IAAI,GAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QACrC,MAAM,MAAM,GAAG,UAAU,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,UAAU,KAAK,GAAG,CAAC,CAAA;QAC7E,OAAO,YAAY,IAAI,4EAA4E,MAAM,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,oDAAoD;0KACnC,CAAC,CAAC,IAAI;QACxK,CAAC,CAAC,KAAK;SACN,CAAA;IACP,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAErB,OAAO;;;;;WAKE,KAAK;;;;;;;;;;;;;;;;;UAiBN,OAAO;;;;;UAKP,IAAI;;;;;QAKN,CAAA;AACR,CAAC"}
|
package/dist/ui/pages.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export declare function dashboardPage(basePath: string, apiPrefix: string): string;
|
|
2
|
-
export declare function recentJobsPage(basePath: string, apiPrefix: string): string;
|
|
3
|
-
export declare function failedJobsPage(basePath: string, apiPrefix: string): string;
|
|
4
|
-
export declare function queuesPage(basePath: string, apiPrefix: string): string;
|
|
5
|
-
export declare function workersPage(basePath: string, apiPrefix: string): string;
|
|
6
|
-
//# sourceMappingURL=pages.d.ts.map
|
package/dist/ui/pages.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/ui/pages.ts"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CA6EzE;AAID,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAW1E;AAID,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAW1E;AAsFD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAiDtE;AAID,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAuDvE"}
|