@adonis-agora/media 0.1.1 → 0.2.1
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/CHANGELOG.md +87 -0
- package/dist/configure.d.ts +2 -2
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +3 -2
- package/dist/configure.js.map +1 -1
- package/dist/providers/media_provider.d.ts +15 -0
- package/dist/providers/media_provider.d.ts.map +1 -1
- package/dist/providers/media_provider.js +224 -12
- package/dist/providers/media_provider.js.map +1 -1
- package/dist/src/attachment.d.ts +1 -0
- package/dist/src/attachment.d.ts.map +1 -1
- package/dist/src/attachment.js +57 -21
- package/dist/src/attachment.js.map +1 -1
- package/dist/src/define_config.d.ts +83 -5
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js +3 -1
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/diagnostics.d.ts +32 -1
- package/dist/src/diagnostics.d.ts.map +1 -1
- package/dist/src/diagnostics.js.map +1 -1
- package/dist/src/disks/factory.d.ts +62 -0
- package/dist/src/disks/factory.d.ts.map +1 -0
- package/dist/src/disks/factory.js +57 -0
- package/dist/src/disks/factory.js.map +1 -0
- package/dist/src/disks/s3.d.ts +76 -0
- package/dist/src/disks/s3.d.ts.map +1 -0
- package/dist/src/disks/s3.js +357 -0
- package/dist/src/disks/s3.js.map +1 -0
- package/dist/src/disks/xml_fallback.d.ts +29 -0
- package/dist/src/disks/xml_fallback.d.ts.map +1 -0
- package/dist/src/disks/xml_fallback.js +68 -0
- package/dist/src/disks/xml_fallback.js.map +1 -0
- package/dist/src/errors.d.ts +34 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +60 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/extended_disk.d.ts +10 -0
- package/dist/src/extended_disk.d.ts.map +1 -0
- package/dist/src/extended_disk.js +19 -0
- package/dist/src/extended_disk.js.map +1 -0
- package/dist/src/index.d.ts +17 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +11 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/media_library.d.ts +4 -2
- package/dist/src/media_library.d.ts.map +1 -1
- package/dist/src/media_library.js +83 -32
- package/dist/src/media_library.js.map +1 -1
- package/dist/src/media_manager.d.ts +48 -0
- package/dist/src/media_manager.d.ts.map +1 -1
- package/dist/src/media_manager.js +68 -0
- package/dist/src/media_manager.js.map +1 -1
- package/dist/src/media_store.d.ts +40 -0
- package/dist/src/media_store.d.ts.map +1 -1
- package/dist/src/media_store.js +28 -1
- package/dist/src/media_store.js.map +1 -1
- package/dist/src/multipart.d.ts +10 -0
- package/dist/src/multipart.d.ts.map +1 -0
- package/dist/src/multipart.js +16 -0
- package/dist/src/multipart.js.map +1 -0
- package/dist/src/resumable_upload.d.ts +131 -0
- package/dist/src/resumable_upload.d.ts.map +1 -0
- package/dist/src/resumable_upload.js +177 -0
- package/dist/src/resumable_upload.js.map +1 -0
- package/dist/src/services/main.d.ts +14 -0
- package/dist/src/services/main.d.ts.map +1 -0
- package/dist/src/services/main.js +18 -0
- package/dist/src/services/main.js.map +1 -0
- package/dist/src/stores/factory.d.ts +12 -4
- package/dist/src/stores/factory.d.ts.map +1 -1
- package/dist/src/stores/factory.js +20 -1
- package/dist/src/stores/factory.js.map +1 -1
- package/dist/src/stores/lucid.d.ts +2 -1
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +42 -7
- package/dist/src/stores/lucid.js.map +1 -1
- package/dist/src/telescope/dashboard.d.ts +19 -0
- package/dist/src/telescope/dashboard.d.ts.map +1 -0
- package/dist/src/telescope/dashboard.js +116 -0
- package/dist/src/telescope/dashboard.js.map +1 -0
- package/dist/src/telescope/data-providers.d.ts +36 -0
- package/dist/src/telescope/data-providers.d.ts.map +1 -0
- package/dist/src/telescope/data-providers.js +286 -0
- package/dist/src/telescope/data-providers.js.map +1 -0
- package/dist/src/telescope/extension.d.ts +26 -0
- package/dist/src/telescope/extension.d.ts.map +1 -0
- package/dist/src/telescope/extension.js +42 -0
- package/dist/src/telescope/extension.js.map +1 -0
- package/dist/src/telescope/index.d.ts +5 -0
- package/dist/src/telescope/index.d.ts.map +1 -0
- package/dist/src/telescope/index.js +4 -0
- package/dist/src/telescope/index.js.map +1 -0
- package/dist/src/telescope/telescope-sdk.d.ts +125 -0
- package/dist/src/telescope/telescope-sdk.d.ts.map +1 -0
- package/dist/src/telescope/telescope-sdk.js +14 -0
- package/dist/src/telescope/telescope-sdk.js.map +1 -0
- package/dist/src/testing/in_memory_disk.d.ts +10 -0
- package/dist/src/testing/in_memory_disk.d.ts.map +1 -1
- package/dist/src/testing/in_memory_disk.js +11 -0
- package/dist/src/testing/in_memory_disk.js.map +1 -1
- package/dist/src/testing/in_memory_media_store.d.ts +2 -1
- package/dist/src/testing/in_memory_media_store.d.ts.map +1 -1
- package/dist/src/testing/in_memory_media_store.js +28 -0
- package/dist/src/testing/in_memory_media_store.js.map +1 -1
- package/dist/src/testing/in_memory_upload_session_store.d.ts +18 -0
- package/dist/src/testing/in_memory_upload_session_store.d.ts.map +1 -0
- package/dist/src/testing/in_memory_upload_session_store.js +40 -0
- package/dist/src/testing/in_memory_upload_session_store.js.map +1 -0
- package/dist/src/testing/index.d.ts +1 -0
- package/dist/src/testing/index.d.ts.map +1 -1
- package/dist/src/testing/index.js +1 -0
- package/dist/src/testing/index.js.map +1 -1
- package/dist/src/tus.d.ts +57 -0
- package/dist/src/tus.d.ts.map +1 -0
- package/dist/src/tus.js +143 -0
- package/dist/src/tus.js.map +1 -0
- package/dist/src/types.d.ts +125 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/upload_manager.d.ts +127 -0
- package/dist/src/upload_manager.d.ts.map +1 -0
- package/dist/src/upload_manager.js +152 -0
- package/dist/src/upload_manager.js.map +1 -0
- package/dist/src/upload_mode.d.ts +27 -0
- package/dist/src/upload_mode.d.ts.map +1 -0
- package/dist/src/upload_mode.js +22 -0
- package/dist/src/upload_mode.js.map +1 -0
- package/dist/src/upload_sessions/factory.d.ts +62 -0
- package/dist/src/upload_sessions/factory.d.ts.map +1 -0
- package/dist/src/upload_sessions/factory.js +60 -0
- package/dist/src/upload_sessions/factory.js.map +1 -0
- package/dist/src/upload_sessions/lucid.d.ts +35 -0
- package/dist/src/upload_sessions/lucid.d.ts.map +1 -0
- package/dist/src/upload_sessions/lucid.js +105 -0
- package/dist/src/upload_sessions/lucid.js.map +1 -0
- package/dist/stubs/config/media.stub +16 -1
- package/dist/stubs/database/migrations/create_media_upload_sessions_table.stub +45 -0
- package/package.json +37 -1
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The "Media" overview dashboard — upload health up top (active / success rate / throughput), then
|
|
3
|
+
* upload activity (over-time + recent completed uploads), then storage operations and conversions.
|
|
4
|
+
* Pure data: panels bind to the `media.*` data providers by name; the `*Href` options add an optional
|
|
5
|
+
* `LinkSpec` on the id column so a host media SPA can deep-link a row.
|
|
6
|
+
*/
|
|
7
|
+
export function mediaDashboard(opts = {}) {
|
|
8
|
+
const uploadId = opts.uploadHref
|
|
9
|
+
? { key: 'id', label: 'Upload', link: { href: opts.uploadHref } }
|
|
10
|
+
: { key: 'id', label: 'Upload' };
|
|
11
|
+
const conversionId = opts.conversionHref
|
|
12
|
+
? { key: 'id', label: 'Media', link: { href: opts.conversionHref } }
|
|
13
|
+
: { key: 'id', label: 'Media' };
|
|
14
|
+
return {
|
|
15
|
+
id: 'media.overview',
|
|
16
|
+
label: 'Media',
|
|
17
|
+
panels: [],
|
|
18
|
+
sections: [
|
|
19
|
+
{
|
|
20
|
+
title: 'Uploads',
|
|
21
|
+
cols: 3,
|
|
22
|
+
panels: [
|
|
23
|
+
{
|
|
24
|
+
kind: 'stat',
|
|
25
|
+
title: 'In-flight uploads',
|
|
26
|
+
data: { provider: 'media.activeUploads' },
|
|
27
|
+
spark: false,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
kind: 'gauge',
|
|
31
|
+
title: 'Upload success rate',
|
|
32
|
+
data: { provider: 'media.uploadSuccessRate' },
|
|
33
|
+
max: 1,
|
|
34
|
+
format: 'percent',
|
|
35
|
+
thresholds: { warn: 0.98, bad: 0.95, direction: 'down-bad' },
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
kind: 'stat',
|
|
39
|
+
title: 'Throughput (completes/h)',
|
|
40
|
+
data: { provider: 'media.uploadThroughput' },
|
|
41
|
+
format: 'rate',
|
|
42
|
+
spark: true,
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
title: 'Upload activity',
|
|
48
|
+
cols: 2,
|
|
49
|
+
panels: [
|
|
50
|
+
{
|
|
51
|
+
kind: 'timeseries',
|
|
52
|
+
title: 'Uploads over time',
|
|
53
|
+
data: { provider: 'media.uploadsOverTime' },
|
|
54
|
+
series: ['started', 'completed', 'aborted'],
|
|
55
|
+
style: 'stacked',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
kind: 'table',
|
|
59
|
+
title: 'Recent completed uploads',
|
|
60
|
+
data: { provider: 'media.recentUploads' },
|
|
61
|
+
columns: [
|
|
62
|
+
{ key: 'time', label: 'Time' },
|
|
63
|
+
uploadId,
|
|
64
|
+
{ key: 'disk', label: 'Disk' },
|
|
65
|
+
{ key: 'key', label: 'Key' },
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
title: 'Storage & conversions',
|
|
72
|
+
cols: 3,
|
|
73
|
+
panels: [
|
|
74
|
+
{
|
|
75
|
+
kind: 'timeseries',
|
|
76
|
+
title: 'Storage operations',
|
|
77
|
+
data: { provider: 'media.storageOpsOverTime' },
|
|
78
|
+
series: ['attached', 'deleted'],
|
|
79
|
+
style: 'stacked',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
kind: 'timeseries',
|
|
83
|
+
title: 'Attachment activity',
|
|
84
|
+
data: { provider: 'media.attachmentActivity' },
|
|
85
|
+
series: ['created', 'deleted'],
|
|
86
|
+
style: 'stacked',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
kind: 'timeseries',
|
|
90
|
+
title: 'Conversions over time',
|
|
91
|
+
data: { provider: 'media.conversionsOverTime' },
|
|
92
|
+
series: ['conversions'],
|
|
93
|
+
style: 'area',
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
title: 'Recent conversions',
|
|
99
|
+
panels: [
|
|
100
|
+
{
|
|
101
|
+
kind: 'table',
|
|
102
|
+
title: 'Recent conversions',
|
|
103
|
+
data: { provider: 'media.recentConversions' },
|
|
104
|
+
columns: [
|
|
105
|
+
{ key: 'time', label: 'Time' },
|
|
106
|
+
conversionId,
|
|
107
|
+
{ key: 'conversion', label: 'Conversion' },
|
|
108
|
+
{ key: 'path', label: 'Path' },
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/telescope/dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { DataProvider } from './telescope-sdk.js';
|
|
2
|
+
/**
|
|
3
|
+
* Net in-flight uploads = `upload.start` − (`upload.complete` + `upload.abort`) over the window
|
|
4
|
+
* (default 24h; `windowMs: 0` = all-time). Floored at 0. A cheap "how busy is the pipeline right now"
|
|
5
|
+
* stat derived purely from the captured event stream — no live upload-session store is consulted.
|
|
6
|
+
*/
|
|
7
|
+
export declare function mediaActiveUploadsProvider(): DataProvider;
|
|
8
|
+
/** Upload success rate = complete / (complete + abort) over the window; 1 when no data. */
|
|
9
|
+
export declare function mediaUploadSuccessRateProvider(): DataProvider;
|
|
10
|
+
/**
|
|
11
|
+
* Upload throughput = completes/hour over the window (default 24h), with `delta` vs the prior window
|
|
12
|
+
* and an 8-point spark.
|
|
13
|
+
*
|
|
14
|
+
* CAVEAT: `upload.progress` is high-frequency and is intentionally rolled up as a rate, not a byte
|
|
15
|
+
* curve — direct (S3 presigned) completions carry no client-PUT byte count, so a bytes/s metric would
|
|
16
|
+
* silently undercount. We report completes/hour (count-based).
|
|
17
|
+
*/
|
|
18
|
+
export declare function mediaUploadThroughputProvider(): DataProvider;
|
|
19
|
+
/** Uploads over time — started/completed/aborted counts per bucket (`query.buckets ?? 24`). */
|
|
20
|
+
export declare function mediaUploadsOverTimeProvider(): DataProvider;
|
|
21
|
+
/** Recent completed uploads (newest first) as table rows: time, id, disk, key. */
|
|
22
|
+
export declare function mediaRecentUploadsProvider(): DataProvider;
|
|
23
|
+
/** Storage operations over time — `attach` (writes) vs `delete` (removes) per bucket. */
|
|
24
|
+
export declare function mediaStorageOpsOverTimeProvider(): DataProvider;
|
|
25
|
+
/**
|
|
26
|
+
* Attachment create/delete activity over time.
|
|
27
|
+
*
|
|
28
|
+
* CAVEAT: column attachments have no inventory table — the events are the ONLY signal — so this shows
|
|
29
|
+
* create/delete RATES, never a current count.
|
|
30
|
+
*/
|
|
31
|
+
export declare function mediaAttachmentActivityProvider(): DataProvider;
|
|
32
|
+
/** Image conversion volume over time (the `conversion` event). */
|
|
33
|
+
export declare function mediaConversionsOverTimeProvider(): DataProvider;
|
|
34
|
+
/** Recent image conversions (newest first) as table rows: time, id, conversion, path. */
|
|
35
|
+
export declare function mediaRecentConversionsProvider(): DataProvider;
|
|
36
|
+
//# sourceMappingURL=data-providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-providers.d.ts","sourceRoot":"","sources":["../../../src/telescope/data-providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAwC,MAAM,oBAAoB,CAAC;AAyG7F;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,YAAY,CAWzD;AAED,2FAA2F;AAC3F,wBAAgB,8BAA8B,IAAI,YAAY,CAY7D;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,IAAI,YAAY,CAuB5D;AAED,+FAA+F;AAC/F,wBAAgB,4BAA4B,IAAI,YAAY,CAwB3D;AAED,kFAAkF;AAClF,wBAAgB,0BAA0B,IAAI,YAAY,CAuBzD;AAID,yFAAyF;AACzF,wBAAgB,+BAA+B,IAAI,YAAY,CAqB9D;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,IAAI,YAAY,CAqB9D;AAID,kEAAkE;AAClE,wBAAgB,gCAAgC,IAAI,YAAY,CAiB/D;AAED,yFAAyF;AACzF,wBAAgB,8BAA8B,IAAI,YAAY,CAuB7D"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The media "Media" dashboard data providers. Every provider here is ENTRY-BACKED: it aggregates the
|
|
3
|
+
* `agora:media:*` lifecycle events that `@adonis-agora/media` emits through `@adonis-agora/diagnostics`
|
|
4
|
+
* (via `src/diagnostics.ts`'s `publishMedia`) and that `@adonis-agora/telescope`'s generic diagnostics
|
|
5
|
+
* watcher records — one entry per publish, stored as `type: 'diagnostic'`, `tag: 'lib:media'`, with the
|
|
6
|
+
* media payload preserved verbatim under `content.payload`.
|
|
7
|
+
*
|
|
8
|
+
* No media-specific watcher is contributed: capture is entirely handled by the generic bridge, so the
|
|
9
|
+
* extension only has to SURFACE the recorded history. This mirrors `@adonis-agora/durable/telescope`'s
|
|
10
|
+
* entry-backed providers, and needs zero coupling to the media container internals.
|
|
11
|
+
*/
|
|
12
|
+
/** Newest-first cap on how many recorded media entries a provider scans. */
|
|
13
|
+
const ENTRY_LIMIT = 5_000;
|
|
14
|
+
/** Default rollup window: 24h. */
|
|
15
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
16
|
+
const contentOf = (e) => (e.content ?? {});
|
|
17
|
+
const atOf = (e) => (e.createdAt ? +new Date(e.createdAt) : 0);
|
|
18
|
+
/** Fetch captured `agora:media:*` entries from Telescope storage (newest-first). */
|
|
19
|
+
async function fetchEntries(ctx, limit = ENTRY_LIMIT) {
|
|
20
|
+
return ctx.store.list({ type: 'diagnostic', tag: 'lib:media', limit });
|
|
21
|
+
}
|
|
22
|
+
function countEvent(entries, event) {
|
|
23
|
+
let n = 0;
|
|
24
|
+
for (const e of entries)
|
|
25
|
+
if (contentOf(e).event === event)
|
|
26
|
+
n += 1;
|
|
27
|
+
return n;
|
|
28
|
+
}
|
|
29
|
+
/** Split entries into current `(now-window, now]` and previous `(now-2window, now-window]`. */
|
|
30
|
+
function splitWindows(entries, windowMs, now) {
|
|
31
|
+
if (windowMs <= 0)
|
|
32
|
+
return { current: entries, previous: [] };
|
|
33
|
+
const start = now - windowMs;
|
|
34
|
+
const prevStart = start - windowMs;
|
|
35
|
+
return {
|
|
36
|
+
current: entries.filter((e) => atOf(e) > start && atOf(e) <= now),
|
|
37
|
+
previous: entries.filter((e) => atOf(e) > prevStart && atOf(e) <= start),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** Build N equal-width time buckets spanning from the oldest entry to now, each starting empty. */
|
|
41
|
+
function timeBuckets(entries, count, emptyRow) {
|
|
42
|
+
const now = Date.now();
|
|
43
|
+
let minTime = now;
|
|
44
|
+
for (const e of entries) {
|
|
45
|
+
const at = atOf(e) || now;
|
|
46
|
+
if (at < minTime)
|
|
47
|
+
minTime = at;
|
|
48
|
+
}
|
|
49
|
+
const span = Math.max(now - minTime, 1);
|
|
50
|
+
const bucketSize = span / count;
|
|
51
|
+
const rows = Array.from({ length: count }, (_, i) => ({
|
|
52
|
+
label: new Date(minTime + i * bucketSize).toISOString().slice(11, 16),
|
|
53
|
+
...emptyRow(),
|
|
54
|
+
}));
|
|
55
|
+
return { rows, minTime, bucketSize };
|
|
56
|
+
}
|
|
57
|
+
function bucketIndexFor(e, minTime, bucketSize, count) {
|
|
58
|
+
const at = atOf(e) || minTime;
|
|
59
|
+
return Math.min(count - 1, Math.max(0, Math.floor((at - minTime) / bucketSize)));
|
|
60
|
+
}
|
|
61
|
+
// ─── Upload activity ────────────────────────────────────────────────────────
|
|
62
|
+
/**
|
|
63
|
+
* Net in-flight uploads = `upload.start` − (`upload.complete` + `upload.abort`) over the window
|
|
64
|
+
* (default 24h; `windowMs: 0` = all-time). Floored at 0. A cheap "how busy is the pipeline right now"
|
|
65
|
+
* stat derived purely from the captured event stream — no live upload-session store is consulted.
|
|
66
|
+
*/
|
|
67
|
+
export function mediaActiveUploadsProvider() {
|
|
68
|
+
return {
|
|
69
|
+
name: 'media.activeUploads',
|
|
70
|
+
async resolve(query, ctx) {
|
|
71
|
+
const windowMs = Number(query?.windowMs ?? DAY_MS);
|
|
72
|
+
const { current } = splitWindows(await fetchEntries(ctx), windowMs, Date.now());
|
|
73
|
+
const started = countEvent(current, 'upload.start');
|
|
74
|
+
const finished = countEvent(current, 'upload.complete') + countEvent(current, 'upload.abort');
|
|
75
|
+
return { value: Math.max(0, started - finished) };
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/** Upload success rate = complete / (complete + abort) over the window; 1 when no data. */
|
|
80
|
+
export function mediaUploadSuccessRateProvider() {
|
|
81
|
+
return {
|
|
82
|
+
name: 'media.uploadSuccessRate',
|
|
83
|
+
async resolve(query, ctx) {
|
|
84
|
+
const windowMs = Number(query?.windowMs ?? DAY_MS);
|
|
85
|
+
const { current } = splitWindows(await fetchEntries(ctx), windowMs, Date.now());
|
|
86
|
+
const completed = countEvent(current, 'upload.complete');
|
|
87
|
+
const aborted = countEvent(current, 'upload.abort');
|
|
88
|
+
const total = completed + aborted;
|
|
89
|
+
return { value: total === 0 ? 1 : completed / total, min: 0, max: 1 };
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Upload throughput = completes/hour over the window (default 24h), with `delta` vs the prior window
|
|
95
|
+
* and an 8-point spark.
|
|
96
|
+
*
|
|
97
|
+
* CAVEAT: `upload.progress` is high-frequency and is intentionally rolled up as a rate, not a byte
|
|
98
|
+
* curve — direct (S3 presigned) completions carry no client-PUT byte count, so a bytes/s metric would
|
|
99
|
+
* silently undercount. We report completes/hour (count-based).
|
|
100
|
+
*/
|
|
101
|
+
export function mediaUploadThroughputProvider() {
|
|
102
|
+
return {
|
|
103
|
+
name: 'media.uploadThroughput',
|
|
104
|
+
async resolve(query, ctx) {
|
|
105
|
+
const windowMs = Number(query?.windowMs ?? DAY_MS);
|
|
106
|
+
const now = Date.now();
|
|
107
|
+
const { current, previous } = splitWindows(await fetchEntries(ctx), windowMs, now);
|
|
108
|
+
const hours = windowMs > 0 ? windowMs / (60 * 60 * 1000) : 1;
|
|
109
|
+
const value = countEvent(current, 'upload.complete') / hours;
|
|
110
|
+
const delta = previous.length > 0 ? value - countEvent(previous, 'upload.complete') / hours : undefined;
|
|
111
|
+
const sparkBuckets = 8;
|
|
112
|
+
const bucketMs = (windowMs > 0 ? windowMs : Math.max(now, 1)) / sparkBuckets;
|
|
113
|
+
const bucketHours = bucketMs / (60 * 60 * 1000);
|
|
114
|
+
const start = now - (windowMs > 0 ? windowMs : now);
|
|
115
|
+
const spark = Array.from({ length: sparkBuckets }, (_, i) => {
|
|
116
|
+
const from = start + i * bucketMs;
|
|
117
|
+
const bucket = current.filter((e) => atOf(e) > from && atOf(e) <= from + bucketMs);
|
|
118
|
+
return countEvent(bucket, 'upload.complete') / (bucketHours || 1);
|
|
119
|
+
});
|
|
120
|
+
return delta === undefined ? { value, spark } : { value, delta, spark };
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/** Uploads over time — started/completed/aborted counts per bucket (`query.buckets ?? 24`). */
|
|
125
|
+
export function mediaUploadsOverTimeProvider() {
|
|
126
|
+
return {
|
|
127
|
+
name: 'media.uploadsOverTime',
|
|
128
|
+
async resolve(query, ctx) {
|
|
129
|
+
const entries = await fetchEntries(ctx);
|
|
130
|
+
const buckets = Math.max(1, Number(query?.buckets ?? 24));
|
|
131
|
+
const { rows, minTime, bucketSize } = timeBuckets(entries, buckets, () => ({
|
|
132
|
+
started: 0,
|
|
133
|
+
completed: 0,
|
|
134
|
+
aborted: 0,
|
|
135
|
+
}));
|
|
136
|
+
for (const e of entries) {
|
|
137
|
+
const event = contentOf(e).event;
|
|
138
|
+
if (event !== 'upload.start' && event !== 'upload.complete' && event !== 'upload.abort')
|
|
139
|
+
continue;
|
|
140
|
+
const row = rows[bucketIndexFor(e, minTime, bucketSize, buckets)];
|
|
141
|
+
if (!row)
|
|
142
|
+
continue;
|
|
143
|
+
if (event === 'upload.start')
|
|
144
|
+
row.started += 1;
|
|
145
|
+
else if (event === 'upload.complete')
|
|
146
|
+
row.completed += 1;
|
|
147
|
+
else
|
|
148
|
+
row.aborted += 1;
|
|
149
|
+
}
|
|
150
|
+
return { rows };
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/** Recent completed uploads (newest first) as table rows: time, id, disk, key. */
|
|
155
|
+
export function mediaRecentUploadsProvider() {
|
|
156
|
+
return {
|
|
157
|
+
name: 'media.recentUploads',
|
|
158
|
+
async resolve(query, ctx) {
|
|
159
|
+
const limit = Math.min(200, Math.max(10, Number(query?.limit ?? 50)));
|
|
160
|
+
const rows = (await fetchEntries(ctx))
|
|
161
|
+
.filter((e) => contentOf(e).event === 'upload.complete')
|
|
162
|
+
.sort((a, b) => atOf(b) - atOf(a))
|
|
163
|
+
.slice(0, limit)
|
|
164
|
+
.map((e) => {
|
|
165
|
+
const p = contentOf(e).payload ?? {};
|
|
166
|
+
return {
|
|
167
|
+
time: atOf(e)
|
|
168
|
+
? `${new Date(atOf(e)).toISOString().replace('T', ' ').slice(0, 19)}Z`
|
|
169
|
+
: '',
|
|
170
|
+
id: p.id ?? '',
|
|
171
|
+
disk: p.disk ?? '',
|
|
172
|
+
key: p.key ?? '',
|
|
173
|
+
};
|
|
174
|
+
});
|
|
175
|
+
return { rows };
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// ─── Storage operations ───────────────────────────────────────────────────────
|
|
180
|
+
/** Storage operations over time — `attach` (writes) vs `delete` (removes) per bucket. */
|
|
181
|
+
export function mediaStorageOpsOverTimeProvider() {
|
|
182
|
+
return {
|
|
183
|
+
name: 'media.storageOpsOverTime',
|
|
184
|
+
async resolve(query, ctx) {
|
|
185
|
+
const entries = await fetchEntries(ctx);
|
|
186
|
+
const buckets = Math.max(1, Number(query?.buckets ?? 24));
|
|
187
|
+
const { rows, minTime, bucketSize } = timeBuckets(entries, buckets, () => ({
|
|
188
|
+
attached: 0,
|
|
189
|
+
deleted: 0,
|
|
190
|
+
}));
|
|
191
|
+
for (const e of entries) {
|
|
192
|
+
const event = contentOf(e).event;
|
|
193
|
+
if (event !== 'attach' && event !== 'delete')
|
|
194
|
+
continue;
|
|
195
|
+
const row = rows[bucketIndexFor(e, minTime, bucketSize, buckets)];
|
|
196
|
+
if (!row)
|
|
197
|
+
continue;
|
|
198
|
+
if (event === 'attach')
|
|
199
|
+
row.attached += 1;
|
|
200
|
+
else
|
|
201
|
+
row.deleted += 1;
|
|
202
|
+
}
|
|
203
|
+
return { rows };
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Attachment create/delete activity over time.
|
|
209
|
+
*
|
|
210
|
+
* CAVEAT: column attachments have no inventory table — the events are the ONLY signal — so this shows
|
|
211
|
+
* create/delete RATES, never a current count.
|
|
212
|
+
*/
|
|
213
|
+
export function mediaAttachmentActivityProvider() {
|
|
214
|
+
return {
|
|
215
|
+
name: 'media.attachmentActivity',
|
|
216
|
+
async resolve(query, ctx) {
|
|
217
|
+
const entries = await fetchEntries(ctx);
|
|
218
|
+
const buckets = Math.max(1, Number(query?.buckets ?? 24));
|
|
219
|
+
const { rows, minTime, bucketSize } = timeBuckets(entries, buckets, () => ({
|
|
220
|
+
created: 0,
|
|
221
|
+
deleted: 0,
|
|
222
|
+
}));
|
|
223
|
+
for (const e of entries) {
|
|
224
|
+
const event = contentOf(e).event;
|
|
225
|
+
if (event !== 'attachment.create' && event !== 'attachment.delete')
|
|
226
|
+
continue;
|
|
227
|
+
const row = rows[bucketIndexFor(e, minTime, bucketSize, buckets)];
|
|
228
|
+
if (!row)
|
|
229
|
+
continue;
|
|
230
|
+
if (event === 'attachment.create')
|
|
231
|
+
row.created += 1;
|
|
232
|
+
else
|
|
233
|
+
row.deleted += 1;
|
|
234
|
+
}
|
|
235
|
+
return { rows };
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
// ─── Conversions ──────────────────────────────────────────────────────────────
|
|
240
|
+
/** Image conversion volume over time (the `conversion` event). */
|
|
241
|
+
export function mediaConversionsOverTimeProvider() {
|
|
242
|
+
return {
|
|
243
|
+
name: 'media.conversionsOverTime',
|
|
244
|
+
async resolve(query, ctx) {
|
|
245
|
+
const entries = await fetchEntries(ctx);
|
|
246
|
+
const buckets = Math.max(1, Number(query?.buckets ?? 24));
|
|
247
|
+
const { rows, minTime, bucketSize } = timeBuckets(entries, buckets, () => ({
|
|
248
|
+
conversions: 0,
|
|
249
|
+
}));
|
|
250
|
+
for (const e of entries) {
|
|
251
|
+
if (contentOf(e).event !== 'conversion')
|
|
252
|
+
continue;
|
|
253
|
+
const row = rows[bucketIndexFor(e, minTime, bucketSize, buckets)];
|
|
254
|
+
if (row)
|
|
255
|
+
row.conversions += 1;
|
|
256
|
+
}
|
|
257
|
+
return { rows };
|
|
258
|
+
},
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/** Recent image conversions (newest first) as table rows: time, id, conversion, path. */
|
|
262
|
+
export function mediaRecentConversionsProvider() {
|
|
263
|
+
return {
|
|
264
|
+
name: 'media.recentConversions',
|
|
265
|
+
async resolve(query, ctx) {
|
|
266
|
+
const limit = Math.min(200, Math.max(10, Number(query?.limit ?? 50)));
|
|
267
|
+
const rows = (await fetchEntries(ctx))
|
|
268
|
+
.filter((e) => contentOf(e).event === 'conversion')
|
|
269
|
+
.sort((a, b) => atOf(b) - atOf(a))
|
|
270
|
+
.slice(0, limit)
|
|
271
|
+
.map((e) => {
|
|
272
|
+
const p = contentOf(e).payload ?? {};
|
|
273
|
+
return {
|
|
274
|
+
time: atOf(e)
|
|
275
|
+
? `${new Date(atOf(e)).toISOString().replace('T', ' ').slice(0, 19)}Z`
|
|
276
|
+
: '',
|
|
277
|
+
id: p.id ?? '',
|
|
278
|
+
conversion: p.conversion ?? '',
|
|
279
|
+
path: p.path ?? '',
|
|
280
|
+
};
|
|
281
|
+
});
|
|
282
|
+
return { rows };
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=data-providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-providers.js","sourceRoot":"","sources":["../../../src/telescope/data-providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type MediaDashboardOptions } from './dashboard.js';
|
|
2
|
+
import type { TelescopeExtension } from './telescope-sdk.js';
|
|
3
|
+
/**
|
|
4
|
+
* The first-class `@adonis-agora/telescope` extension for `@adonis-agora/media` (the "MediaWatcher"): a
|
|
5
|
+
* "Media" overview dashboard surfacing recent uploads, storage operations and image conversions, plus
|
|
6
|
+
* the data providers the panels bind to. Wire it into `config/telescope.ts`:
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { defineConfig } from '@adonis-agora/telescope'
|
|
10
|
+
* import { mediaTelescopeExtension } from '@adonis-agora/media/telescope'
|
|
11
|
+
*
|
|
12
|
+
* export default defineConfig({ extensions: [mediaTelescopeExtension()] })
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* No watcher is contributed — `@adonis-agora/media` already publishes `agora:media:*` lifecycle events
|
|
16
|
+
* onto the diagnostics bus (`src/diagnostics.ts`), and Telescope's generic diagnostics watcher records
|
|
17
|
+
* them as `type: 'diagnostic'`, `tag: 'lib:media'`; the entry-backed providers read those recorded
|
|
18
|
+
* entries. `@adonis-agora/telescope` stays an OPTIONAL, never-imported peer — see `telescope-sdk.ts`
|
|
19
|
+
* for why the returned object structurally (not nominally) satisfies its `TelescopeExtension` contract.
|
|
20
|
+
*
|
|
21
|
+
* No `entryTypes` are contributed: media events are recorded under the generic `diagnostic` entry type
|
|
22
|
+
* (`tag: 'lib:media'`), so there is no dedicated `media` entry type to navigate to — the "Media"
|
|
23
|
+
* dashboard is the entry point. (Same reasoning as `@adonis-agora/durable/telescope`.)
|
|
24
|
+
*/
|
|
25
|
+
export declare function mediaTelescopeExtension(opts?: MediaDashboardOptions): TelescopeExtension;
|
|
26
|
+
//# sourceMappingURL=extension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../src/telescope/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAkB,MAAM,gBAAgB,CAAC;AAY5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,GAAE,qBAA0B,GAAG,kBAAkB,CAgB5F"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { mediaDashboard } from './dashboard.js';
|
|
2
|
+
import { mediaActiveUploadsProvider, mediaAttachmentActivityProvider, mediaConversionsOverTimeProvider, mediaRecentConversionsProvider, mediaRecentUploadsProvider, mediaStorageOpsOverTimeProvider, mediaUploadSuccessRateProvider, mediaUploadThroughputProvider, mediaUploadsOverTimeProvider, } from './data-providers.js';
|
|
3
|
+
/**
|
|
4
|
+
* The first-class `@adonis-agora/telescope` extension for `@adonis-agora/media` (the "MediaWatcher"): a
|
|
5
|
+
* "Media" overview dashboard surfacing recent uploads, storage operations and image conversions, plus
|
|
6
|
+
* the data providers the panels bind to. Wire it into `config/telescope.ts`:
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { defineConfig } from '@adonis-agora/telescope'
|
|
10
|
+
* import { mediaTelescopeExtension } from '@adonis-agora/media/telescope'
|
|
11
|
+
*
|
|
12
|
+
* export default defineConfig({ extensions: [mediaTelescopeExtension()] })
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* No watcher is contributed — `@adonis-agora/media` already publishes `agora:media:*` lifecycle events
|
|
16
|
+
* onto the diagnostics bus (`src/diagnostics.ts`), and Telescope's generic diagnostics watcher records
|
|
17
|
+
* them as `type: 'diagnostic'`, `tag: 'lib:media'`; the entry-backed providers read those recorded
|
|
18
|
+
* entries. `@adonis-agora/telescope` stays an OPTIONAL, never-imported peer — see `telescope-sdk.ts`
|
|
19
|
+
* for why the returned object structurally (not nominally) satisfies its `TelescopeExtension` contract.
|
|
20
|
+
*
|
|
21
|
+
* No `entryTypes` are contributed: media events are recorded under the generic `diagnostic` entry type
|
|
22
|
+
* (`tag: 'lib:media'`), so there is no dedicated `media` entry type to navigate to — the "Media"
|
|
23
|
+
* dashboard is the entry point. (Same reasoning as `@adonis-agora/durable/telescope`.)
|
|
24
|
+
*/
|
|
25
|
+
export function mediaTelescopeExtension(opts = {}) {
|
|
26
|
+
return {
|
|
27
|
+
name: 'media',
|
|
28
|
+
dashboards: () => [mediaDashboard(opts)],
|
|
29
|
+
dataProviders: () => [
|
|
30
|
+
mediaActiveUploadsProvider(),
|
|
31
|
+
mediaUploadSuccessRateProvider(),
|
|
32
|
+
mediaUploadThroughputProvider(),
|
|
33
|
+
mediaUploadsOverTimeProvider(),
|
|
34
|
+
mediaRecentUploadsProvider(),
|
|
35
|
+
mediaStorageOpsOverTimeProvider(),
|
|
36
|
+
mediaAttachmentActivityProvider(),
|
|
37
|
+
mediaConversionsOverTimeProvider(),
|
|
38
|
+
mediaRecentConversionsProvider(),
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../src/telescope/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,gCAAgC,EAChC,8BAA8B,EAC9B,0BAA0B,EAC1B,+BAA+B,EAC/B,8BAA8B,EAC9B,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAG7B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAA8B,EAAE;IACtE,OAAO;QACL,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACxC,aAAa,EAAE,GAAG,EAAE,CAAC;YACnB,0BAA0B,EAAE;YAC5B,8BAA8B,EAAE;YAChC,6BAA6B,EAAE;YAC/B,4BAA4B,EAAE;YAC9B,0BAA0B,EAAE;YAC5B,+BAA+B,EAAE;YACjC,+BAA+B,EAAE;YACjC,gCAAgC,EAAE;YAClC,8BAA8B,EAAE;SACjC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { type MediaDashboardOptions, mediaDashboard } from './dashboard.js';
|
|
2
|
+
export { mediaTelescopeExtension } from './extension.js';
|
|
3
|
+
export { mediaActiveUploadsProvider, mediaAttachmentActivityProvider, mediaConversionsOverTimeProvider, mediaRecentConversionsProvider, mediaRecentUploadsProvider, mediaStorageOpsOverTimeProvider, mediaUploadSuccessRateProvider, mediaUploadThroughputProvider, mediaUploadsOverTimeProvider, } from './data-providers.js';
|
|
4
|
+
export type { ContainerLike, DataProvider, DashboardSpec, ExtensionContext, LinkSpec, TelescopeExtension, TelescopeStoreLike, TelescopeEntryLike, } from './telescope-sdk.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/telescope/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,gCAAgC,EAChC,8BAA8B,EAC9B,0BAA0B,EAC1B,+BAA+B,EAC/B,8BAA8B,EAC9B,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { mediaDashboard } from './dashboard.js';
|
|
2
|
+
export { mediaTelescopeExtension } from './extension.js';
|
|
3
|
+
export { mediaActiveUploadsProvider, mediaAttachmentActivityProvider, mediaConversionsOverTimeProvider, mediaRecentConversionsProvider, mediaRecentUploadsProvider, mediaStorageOpsOverTimeProvider, mediaUploadSuccessRateProvider, mediaUploadThroughputProvider, mediaUploadsOverTimeProvider, } from './data-providers.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/telescope/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,gCAAgC,EAChC,8BAA8B,EAC9B,0BAA0B,EAC1B,+BAA+B,EAC/B,8BAA8B,EAC9B,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC"}
|