@marinoscar/platform-web 0.1.0-next.18 → 0.1.0-next.20
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 +32 -0
- package/README.md +5 -3
- package/dist/ai/headless/errors.d.ts +7 -0
- package/dist/ai/headless/errors.d.ts.map +1 -1
- package/dist/ai/headless/errors.js +2 -0
- package/dist/ai/headless/errors.js.map +1 -1
- package/dist/ai/headless/types.d.ts +30 -5
- package/dist/ai/headless/types.d.ts.map +1 -1
- package/dist/ai/headless/types.js +22 -10
- package/dist/ai/headless/types.js.map +1 -1
- package/dist/ai/headless/use-ai-usage.d.ts +5 -2
- package/dist/ai/headless/use-ai-usage.d.ts.map +1 -1
- package/dist/ai/headless/use-ai-usage.js +15 -5
- package/dist/ai/headless/use-ai-usage.js.map +1 -1
- package/dist/ai/ui/AiUsagePage.d.ts.map +1 -1
- package/dist/ai/ui/AiUsagePage.js +7 -5
- package/dist/ai/ui/AiUsagePage.js.map +1 -1
- package/dist/ai/ui/shared/AiErrorAlert.d.ts.map +1 -1
- package/dist/ai/ui/shared/AiErrorAlert.js +5 -1
- package/dist/ai/ui/shared/AiErrorAlert.js.map +1 -1
- package/dist/ai/ui/usage/aiUsageFormat.d.ts +9 -6
- package/dist/ai/ui/usage/aiUsageFormat.d.ts.map +1 -1
- package/dist/ai/ui/usage/aiUsageFormat.js +28 -12
- package/dist/ai/ui/usage/aiUsageFormat.js.map +1 -1
- package/dist/ai/ui/user/MyAiUsageSection.d.ts.map +1 -1
- package/dist/ai/ui/user/MyAiUsageSection.js +5 -2
- package/dist/ai/ui/user/MyAiUsageSection.js.map +1 -1
- package/dist/ai/ui/user/aiErrorText.d.ts +4 -1
- package/dist/ai/ui/user/aiErrorText.d.ts.map +1 -1
- package/dist/ai/ui/user/aiErrorText.js +10 -2
- package/dist/ai/ui/user/aiErrorText.js.map +1 -1
- package/dist/alerts/headless/client.d.ts +134 -0
- package/dist/alerts/headless/client.d.ts.map +1 -0
- package/dist/alerts/headless/client.js +105 -0
- package/dist/alerts/headless/client.js.map +1 -0
- package/dist/alerts/headless/format.d.ts +95 -0
- package/dist/alerts/headless/format.d.ts.map +1 -0
- package/dist/alerts/headless/format.js +164 -0
- package/dist/alerts/headless/format.js.map +1 -0
- package/dist/alerts/headless/hooks.d.ts +245 -0
- package/dist/alerts/headless/hooks.d.ts.map +1 -0
- package/dist/alerts/headless/hooks.js +315 -0
- package/dist/alerts/headless/hooks.js.map +1 -0
- package/dist/alerts/headless/index.d.ts +9 -0
- package/dist/alerts/headless/index.d.ts.map +1 -0
- package/dist/alerts/headless/index.js +9 -0
- package/dist/alerts/headless/index.js.map +1 -0
- package/dist/alerts/headless/rule-draft.d.ts +175 -0
- package/dist/alerts/headless/rule-draft.d.ts.map +1 -0
- package/dist/alerts/headless/rule-draft.js +261 -0
- package/dist/alerts/headless/rule-draft.js.map +1 -0
- package/dist/alerts/ui/AlertIncidentDrawer.d.ts +30 -0
- package/dist/alerts/ui/AlertIncidentDrawer.d.ts.map +1 -0
- package/dist/alerts/ui/AlertIncidentDrawer.js +33 -0
- package/dist/alerts/ui/AlertIncidentDrawer.js.map +1 -0
- package/dist/alerts/ui/AlertRuleDialog.d.ts +47 -0
- package/dist/alerts/ui/AlertRuleDialog.d.ts.map +1 -0
- package/dist/alerts/ui/AlertRuleDialog.js +124 -0
- package/dist/alerts/ui/AlertRuleDialog.js.map +1 -0
- package/dist/alerts/ui/AlertRuleTestResult.d.ts +23 -0
- package/dist/alerts/ui/AlertRuleTestResult.d.ts.map +1 -0
- package/dist/alerts/ui/AlertRuleTestResult.js +30 -0
- package/dist/alerts/ui/AlertRuleTestResult.js.map +1 -0
- package/dist/alerts/ui/AlertsPage.d.ts +41 -0
- package/dist/alerts/ui/AlertsPage.d.ts.map +1 -0
- package/dist/alerts/ui/AlertsPage.js +238 -0
- package/dist/alerts/ui/AlertsPage.js.map +1 -0
- package/dist/alerts/ui/FiringAlertsBanner.d.ts +28 -0
- package/dist/alerts/ui/FiringAlertsBanner.d.ts.map +1 -0
- package/dist/alerts/ui/FiringAlertsBanner.js +45 -0
- package/dist/alerts/ui/FiringAlertsBanner.js.map +1 -0
- package/dist/alerts/ui/copy.d.ts +15 -0
- package/dist/alerts/ui/copy.d.ts.map +1 -0
- package/dist/alerts/ui/copy.js +14 -0
- package/dist/alerts/ui/copy.js.map +1 -0
- package/dist/alerts/ui/index.d.ts +14 -0
- package/dist/alerts/ui/index.d.ts.map +1 -0
- package/dist/alerts/ui/index.js +12 -0
- package/dist/alerts/ui/index.js.map +1 -0
- package/dist/alerts/ui/parts.d.ts +26 -0
- package/dist/alerts/ui/parts.d.ts.map +1 -0
- package/dist/alerts/ui/parts.js +27 -0
- package/dist/alerts/ui/parts.js.map +1 -0
- package/dist/alerts/ui/settings.d.ts +27 -0
- package/dist/alerts/ui/settings.d.ts.map +1 -0
- package/dist/alerts/ui/settings.js +37 -0
- package/dist/alerts/ui/settings.js.map +1 -0
- package/dist/core/http/client.d.ts.map +1 -1
- package/dist/core/http/client.js +7 -0
- package/dist/core/http/client.js.map +1 -1
- package/dist/core/http/sse.d.ts.map +1 -1
- package/dist/core/http/sse.js +3 -1
- package/dist/core/http/sse.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/time-zone/format.d.ts +6 -2
- package/dist/core/time-zone/format.d.ts.map +1 -1
- package/dist/core/time-zone/format.js +27 -25
- package/dist/core/time-zone/format.js.map +1 -1
- package/dist/core/time-zone/request.d.ts +17 -0
- package/dist/core/time-zone/request.d.ts.map +1 -0
- package/dist/core/time-zone/request.js +26 -0
- package/dist/core/time-zone/request.js.map +1 -0
- package/dist/datatable/headless/export/exportModel.d.ts +7 -1
- package/dist/datatable/headless/export/exportModel.d.ts.map +1 -1
- package/dist/datatable/headless/export/exportModel.js +10 -2
- package/dist/datatable/headless/export/exportModel.js.map +1 -1
- package/dist/datatable/headless/filter/dateRange.d.ts +40 -0
- package/dist/datatable/headless/filter/dateRange.d.ts.map +1 -0
- package/dist/datatable/headless/filter/dateRange.js +53 -0
- package/dist/datatable/headless/filter/dateRange.js.map +1 -0
- package/dist/datatable/headless/filter/filterTypes.d.ts.map +1 -1
- package/dist/datatable/headless/filter/filterTypes.js +24 -4
- package/dist/datatable/headless/filter/filterTypes.js.map +1 -1
- package/dist/datatable/headless/index.d.ts +2 -0
- package/dist/datatable/headless/index.d.ts.map +1 -1
- package/dist/datatable/headless/index.js +1 -0
- package/dist/datatable/headless/index.js.map +1 -1
- package/dist/db-backup/internal/time-zones.d.ts +3 -0
- package/dist/db-backup/internal/time-zones.d.ts.map +1 -0
- package/dist/db-backup/internal/time-zones.js +24 -0
- package/dist/db-backup/internal/time-zones.js.map +1 -0
- package/dist/db-backup/ui/DbBackupConfigPanel.d.ts +11 -6
- package/dist/db-backup/ui/DbBackupConfigPanel.d.ts.map +1 -1
- package/dist/db-backup/ui/DbBackupConfigPanel.js +18 -11
- package/dist/db-backup/ui/DbBackupConfigPanel.js.map +1 -1
- package/dist/identity/ui/tokens/CreatePatDialog.d.ts +17 -0
- package/dist/identity/ui/tokens/CreatePatDialog.d.ts.map +1 -1
- package/dist/identity/ui/tokens/CreatePatDialog.js +34 -11
- package/dist/identity/ui/tokens/CreatePatDialog.js.map +1 -1
- package/dist/nodes/headless/api.d.ts +3 -1
- package/dist/nodes/headless/api.d.ts.map +1 -1
- package/dist/nodes/headless/api.js +22 -0
- package/dist/nodes/headless/api.js.map +1 -1
- package/dist/nodes/headless/index.d.ts +7 -2
- package/dist/nodes/headless/index.d.ts.map +1 -1
- package/dist/nodes/headless/index.js +4 -1
- package/dist/nodes/headless/index.js.map +1 -1
- package/dist/nodes/headless/node-events.d.ts +43 -0
- package/dist/nodes/headless/node-events.d.ts.map +1 -0
- package/dist/nodes/headless/node-events.js +150 -0
- package/dist/nodes/headless/node-events.js.map +1 -0
- package/dist/nodes/headless/power.d.ts +43 -0
- package/dist/nodes/headless/power.d.ts.map +1 -0
- package/dist/nodes/headless/power.js +74 -0
- package/dist/nodes/headless/power.js.map +1 -0
- package/dist/nodes/headless/types.d.ts +40 -3
- package/dist/nodes/headless/types.d.ts.map +1 -1
- package/dist/nodes/headless/types.js +1 -1
- package/dist/nodes/headless/types.js.map +1 -1
- package/dist/nodes/headless/use-node-events.d.ts +59 -0
- package/dist/nodes/headless/use-node-events.d.ts.map +1 -0
- package/dist/nodes/headless/use-node-events.js +159 -0
- package/dist/nodes/headless/use-node-events.js.map +1 -0
- package/dist/nodes/ui/NodeEventsTimeline.d.ts +39 -0
- package/dist/nodes/ui/NodeEventsTimeline.d.ts.map +1 -0
- package/dist/nodes/ui/NodeEventsTimeline.js +63 -0
- package/dist/nodes/ui/NodeEventsTimeline.js.map +1 -0
- package/dist/nodes/ui/NodePowerBadge.d.ts +27 -0
- package/dist/nodes/ui/NodePowerBadge.d.ts.map +1 -0
- package/dist/nodes/ui/NodePowerBadge.js +48 -0
- package/dist/nodes/ui/NodePowerBadge.js.map +1 -0
- package/dist/nodes/ui/NodeVitalsDialog.d.ts +11 -1
- package/dist/nodes/ui/NodeVitalsDialog.d.ts.map +1 -1
- package/dist/nodes/ui/NodeVitalsDialog.js +14 -5
- package/dist/nodes/ui/NodeVitalsDialog.js.map +1 -1
- package/dist/nodes/ui/WorkersPage.d.ts.map +1 -1
- package/dist/nodes/ui/WorkersPage.js +2 -1
- package/dist/nodes/ui/WorkersPage.js.map +1 -1
- package/dist/nodes/ui/workerVitals.d.ts +17 -1
- package/dist/nodes/ui/workerVitals.d.ts.map +1 -1
- package/dist/nodes/ui/workerVitals.js +43 -0
- package/dist/nodes/ui/workerVitals.js.map +1 -1
- package/dist/nodes/ui/workersTable.d.ts.map +1 -1
- package/dist/nodes/ui/workersTable.js +2 -1
- package/dist/nodes/ui/workersTable.js.map +1 -1
- package/dist/settings/ui/ProfileSettings.d.ts +1 -1
- package/dist/settings/ui/ProfileSettings.d.ts.map +1 -1
- package/dist/settings/ui/UserSettingsSection.d.ts +1 -1
- package/dist/settings/ui/UserSettingsSection.d.ts.map +1 -1
- package/dist/sharing/internal/format.d.ts +10 -1
- package/dist/sharing/internal/format.d.ts.map +1 -1
- package/dist/sharing/internal/format.js +10 -1
- package/dist/sharing/internal/format.js.map +1 -1
- package/dist/telemetry/headless/hooks/useTelemetryDashboard.d.ts +1 -1
- package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.d.ts +11 -0
- package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.d.ts.map +1 -1
- package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.js +17 -2
- package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.js.map +1 -1
- package/dist/webhooks/headless/client.d.ts +101 -0
- package/dist/webhooks/headless/client.d.ts.map +1 -0
- package/dist/webhooks/headless/client.js +105 -0
- package/dist/webhooks/headless/client.js.map +1 -0
- package/dist/webhooks/headless/event-selection.d.ts +119 -0
- package/dist/webhooks/headless/event-selection.d.ts.map +1 -0
- package/dist/webhooks/headless/event-selection.js +225 -0
- package/dist/webhooks/headless/event-selection.js.map +1 -0
- package/dist/webhooks/headless/format.d.ts +84 -0
- package/dist/webhooks/headless/format.d.ts.map +1 -0
- package/dist/webhooks/headless/format.js +142 -0
- package/dist/webhooks/headless/format.js.map +1 -0
- package/dist/webhooks/headless/hooks.d.ts +199 -0
- package/dist/webhooks/headless/hooks.d.ts.map +1 -0
- package/dist/webhooks/headless/hooks.js +249 -0
- package/dist/webhooks/headless/hooks.js.map +1 -0
- package/dist/webhooks/headless/index.d.ts +9 -0
- package/dist/webhooks/headless/index.d.ts.map +1 -0
- package/dist/webhooks/headless/index.js +9 -0
- package/dist/webhooks/headless/index.js.map +1 -0
- package/dist/webhooks/ui/WebhookDeliveryDrawer.d.ts +32 -0
- package/dist/webhooks/ui/WebhookDeliveryDrawer.d.ts.map +1 -0
- package/dist/webhooks/ui/WebhookDeliveryDrawer.js +64 -0
- package/dist/webhooks/ui/WebhookDeliveryDrawer.js.map +1 -0
- package/dist/webhooks/ui/WebhookEndpointDetail.d.ts +21 -0
- package/dist/webhooks/ui/WebhookEndpointDetail.d.ts.map +1 -0
- package/dist/webhooks/ui/WebhookEndpointDetail.js +96 -0
- package/dist/webhooks/ui/WebhookEndpointDetail.js.map +1 -0
- package/dist/webhooks/ui/WebhookEndpointDialog.d.ts +39 -0
- package/dist/webhooks/ui/WebhookEndpointDialog.d.ts.map +1 -0
- package/dist/webhooks/ui/WebhookEndpointDialog.js +79 -0
- package/dist/webhooks/ui/WebhookEndpointDialog.js.map +1 -0
- package/dist/webhooks/ui/WebhookEventPicker.d.ts +30 -0
- package/dist/webhooks/ui/WebhookEventPicker.d.ts.map +1 -0
- package/dist/webhooks/ui/WebhookEventPicker.js +33 -0
- package/dist/webhooks/ui/WebhookEventPicker.js.map +1 -0
- package/dist/webhooks/ui/WebhookSecretDialog.d.ts +27 -0
- package/dist/webhooks/ui/WebhookSecretDialog.d.ts.map +1 -0
- package/dist/webhooks/ui/WebhookSecretDialog.js +52 -0
- package/dist/webhooks/ui/WebhookSecretDialog.js.map +1 -0
- package/dist/webhooks/ui/WebhookSignatureHelp.d.ts +18 -0
- package/dist/webhooks/ui/WebhookSignatureHelp.d.ts.map +1 -0
- package/dist/webhooks/ui/WebhookSignatureHelp.js +40 -0
- package/dist/webhooks/ui/WebhookSignatureHelp.js.map +1 -0
- package/dist/webhooks/ui/WebhooksPage.d.ts +47 -0
- package/dist/webhooks/ui/WebhooksPage.d.ts.map +1 -0
- package/dist/webhooks/ui/WebhooksPage.js +172 -0
- package/dist/webhooks/ui/WebhooksPage.js.map +1 -0
- package/dist/webhooks/ui/copy.d.ts +24 -0
- package/dist/webhooks/ui/copy.d.ts.map +1 -0
- package/dist/webhooks/ui/copy.js +34 -0
- package/dist/webhooks/ui/copy.js.map +1 -0
- package/dist/webhooks/ui/index.d.ts +15 -0
- package/dist/webhooks/ui/index.d.ts.map +1 -0
- package/dist/webhooks/ui/index.js +12 -0
- package/dist/webhooks/ui/index.js.map +1 -0
- package/dist/webhooks/ui/parts.d.ts +25 -0
- package/dist/webhooks/ui/parts.d.ts.map +1 -0
- package/dist/webhooks/ui/parts.js +28 -0
- package/dist/webhooks/ui/parts.js.map +1 -0
- package/dist/webhooks/ui/settings.d.ts +58 -0
- package/dist/webhooks/ui/settings.d.ts.map +1 -0
- package/dist/webhooks/ui/settings.js +79 -0
- package/dist/webhooks/ui/settings.js.map +1 -0
- package/package.json +18 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiErrorAlert.js","sourceRoot":"","sources":["../../../../src/ai/ui/shared/AiErrorAlert.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"AiErrorAlert.js","sourceRoot":"","sources":["../../../../src/ai/ui/shared/AiErrorAlert.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure helpers shared by the admin AI Usage page and the user's "Usage"
|
|
3
|
-
* section (issue #444, epic #420).
|
|
4
|
-
*/
|
|
5
1
|
import type { AiUsageCost, AiUsageCounters, AiUsageReport, AiUsageSeriesEntry } from '../../headless/types.js';
|
|
6
2
|
/** `48000` → `48,000`. */
|
|
7
3
|
export declare function formatCount(value: number): string;
|
|
@@ -10,7 +6,13 @@ export declare function formatCount(value: number): string;
|
|
|
10
6
|
* nothing was requested — 0% would claim a success rate nobody measured.
|
|
11
7
|
*/
|
|
12
8
|
export declare function formatFailureRate(counters: Pick<AiUsageCounters, 'failed' | 'requests'>): string;
|
|
13
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* `2026-09-24` → `Sep 24`. The key is a calendar day already cut in the
|
|
11
|
+
* report's zone (`report.timeZone`), not an instant, so it is formatted as the
|
|
12
|
+
* day it names and never shifted by the viewer's zone (the key's own midnight
|
|
13
|
+
* read in UTC is the same calendar day). Anything but a `YYYY-MM-DD` key is
|
|
14
|
+
* returned as is.
|
|
15
|
+
*/
|
|
14
16
|
export declare function formatUsageDay(isoDate: string): string;
|
|
15
17
|
/**
|
|
16
18
|
* A cost the deployment's pricing port reported (PP-14.17), as money: `$12.50`
|
|
@@ -23,7 +25,8 @@ export declare function formatUnits(units: Record<string, number>): string | nul
|
|
|
23
25
|
/**
|
|
24
26
|
* The `day` series, one entry per calendar day of the report's range.
|
|
25
27
|
*
|
|
26
|
-
* The
|
|
28
|
+
* The keys are calendar days in the report's zone (`report.timeZone`). The
|
|
29
|
+
* API may omit days with no activity; a time axis that skips them draws
|
|
27
30
|
* two busy days as neighbours and hides the quiet stretch between them, so
|
|
28
31
|
* the gaps are filled with zero entries here. Entries outside the range (a
|
|
29
32
|
* backend that answers more than asked) are kept, in date order.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiUsageFormat.d.ts","sourceRoot":"","sources":["../../../../src/ai/ui/usage/aiUsageFormat.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aiUsageFormat.d.ts","sourceRoot":"","sources":["../../../../src/ai/ui/usage/aiUsageFormat.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAI/G,0BAA0B;AAC1B,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG,MAAM,CAGhG;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAItD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAcvE;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAIxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,kBAAkB,EAAE,CA4BnF"}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers shared by the admin AI Usage page and the user's "Usage"
|
|
3
|
+
* section (issue #444, epic #420).
|
|
4
|
+
*/
|
|
5
|
+
import { addDaysToDateKey, isDateKey } from '@marinoscar/platform-contract/timezone';
|
|
6
|
+
import { formatDate } from '../../../core/index.js';
|
|
1
7
|
const numberFormat = new Intl.NumberFormat('en-US');
|
|
2
8
|
/** `48000` → `48,000`. */
|
|
3
9
|
export function formatCount(value) {
|
|
@@ -12,12 +18,18 @@ export function formatFailureRate(counters) {
|
|
|
12
18
|
return '—';
|
|
13
19
|
return `${((counters.failed / counters.requests) * 100).toFixed(1)}%`;
|
|
14
20
|
}
|
|
15
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* `2026-09-24` → `Sep 24`. The key is a calendar day already cut in the
|
|
23
|
+
* report's zone (`report.timeZone`), not an instant, so it is formatted as the
|
|
24
|
+
* day it names and never shifted by the viewer's zone (the key's own midnight
|
|
25
|
+
* read in UTC is the same calendar day). Anything but a `YYYY-MM-DD` key is
|
|
26
|
+
* returned as is.
|
|
27
|
+
*/
|
|
16
28
|
export function formatUsageDay(isoDate) {
|
|
17
|
-
const
|
|
18
|
-
if (
|
|
29
|
+
const key = isoDate.slice(0, 10);
|
|
30
|
+
if (!isDateKey(key))
|
|
19
31
|
return isoDate;
|
|
20
|
-
return
|
|
32
|
+
return formatDate(`${key}T00:00:00Z`, { locale: 'en-US', month: 'short', day: 'numeric', timeZone: 'UTC' });
|
|
21
33
|
}
|
|
22
34
|
/**
|
|
23
35
|
* A cost the deployment's pricing port reported (PP-14.17), as money: `$12.50`
|
|
@@ -51,21 +63,25 @@ export function formatUnits(units) {
|
|
|
51
63
|
/**
|
|
52
64
|
* The `day` series, one entry per calendar day of the report's range.
|
|
53
65
|
*
|
|
54
|
-
* The
|
|
66
|
+
* The keys are calendar days in the report's zone (`report.timeZone`). The
|
|
67
|
+
* API may omit days with no activity; a time axis that skips them draws
|
|
55
68
|
* two busy days as neighbours and hides the quiet stretch between them, so
|
|
56
69
|
* the gaps are filled with zero entries here. Entries outside the range (a
|
|
57
70
|
* backend that answers more than asked) are kept, in date order.
|
|
58
71
|
*/
|
|
59
72
|
export function fillDailySeries(report) {
|
|
60
73
|
const byKey = new Map(report.series.map((entry) => [entry.key, entry]));
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
74
|
+
const sorted = () => [...report.series].sort((a, b) => a.key.localeCompare(b.key));
|
|
75
|
+
// Calendar days of the report's zone: stepped as day keys, never as 24-hour
|
|
76
|
+
// instants, so a 23- or 25-hour DST day cannot skip or repeat a key.
|
|
77
|
+
const from = report.range.from.slice(0, 10);
|
|
78
|
+
const to = report.range.to.slice(0, 10);
|
|
79
|
+
if (!isDateKey(from) || !isDateKey(to) || to < from)
|
|
80
|
+
return sorted();
|
|
66
81
|
const days = [];
|
|
67
|
-
for (let
|
|
68
|
-
|
|
82
|
+
for (let key = from, n = 0; key <= to; key = addDaysToDateKey(key, 1), n += 1) {
|
|
83
|
+
if (n > 366)
|
|
84
|
+
return sorted();
|
|
69
85
|
days.push(byKey.get(key) ?? {
|
|
70
86
|
key,
|
|
71
87
|
label: key,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiUsageFormat.js","sourceRoot":"","sources":["../../../../src/ai/ui/usage/aiUsageFormat.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aiUsageFormat.js","sourceRoot":"","sources":["../../../../src/ai/ui/usage/aiUsageFormat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MyAiUsageSection.d.ts","sourceRoot":"","sources":["../../../../src/ai/ui/user/MyAiUsageSection.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MyAiUsageSection.d.ts","sourceRoot":"","sources":["../../../../src/ai/ui/user/MyAiUsageSection.tsx"],"names":[],"mappings":"AAmBA,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,2BAA2B,CAAC;AAE1D,wBAAgB,gBAAgB,gCAqD/B"}
|
|
@@ -14,13 +14,16 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
14
14
|
import { useMemo } from 'react';
|
|
15
15
|
import { Alert, Box, Card, CardContent, CircularProgress, Typography } from '@mui/material';
|
|
16
16
|
import { AiUsageTable, AiUsageTotals, formatCount } from '../usage/index.js';
|
|
17
|
+
import { useDisplayTimeZone } from '../../../core/index.js';
|
|
17
18
|
import { useMyAiUsage } from '../../headless/use-ai-usage.js';
|
|
18
19
|
import { AI_USAGE_DEFAULT_RANGE_DAYS, aiUsageRangeForDays } from '../../headless/types.js';
|
|
19
20
|
/** Persistence key for `user_settings.dataTables`. */
|
|
20
21
|
export const MY_USAGE_TABLE_ID = 'user-ai-usage-by-model';
|
|
21
22
|
export function MyAiUsageSection() {
|
|
22
|
-
|
|
23
|
-
const
|
|
23
|
+
// The window and the report are cut in the same zone: the display zone.
|
|
24
|
+
const zone = useDisplayTimeZone();
|
|
25
|
+
const range = useMemo(() => aiUsageRangeForDays(AI_USAGE_DEFAULT_RANGE_DAYS, new Date(), zone), [zone]);
|
|
26
|
+
const { report, isLoading, error } = useMyAiUsage({ groupBy: 'model', ...range, tz: zone });
|
|
24
27
|
return (_jsx(Card, { component: "section", "aria-labelledby": "my-ai-usage-title", children: _jsxs(CardContent, { children: [_jsx(Typography, { id: "my-ai-usage-title", variant: "h6", component: "h2", gutterBottom: true, children: "Usage" }), _jsxs(Typography, { variant: "body2", color: "text.secondary", sx: { mb: 2 }, children: ["Your requests over the last ", AI_USAGE_DEFAULT_RANGE_DAYS, " days, by model. Calls made with your own key are billed to your provider account."] }), error && (_jsx(Alert, { severity: "error", sx: { mb: 2 }, children: error })), isLoading && !report ? (_jsx(Box, { sx: { display: 'flex', justifyContent: 'center', py: 2 }, children: _jsx(CircularProgress, { size: 24, "aria-label": "Loading your AI usage" }) })) : report && report.totals.requests === 0 ? (_jsxs(Typography, { variant: "body2", color: "text.secondary", children: ["You haven't made any AI requests in the last ", AI_USAGE_DEFAULT_RANGE_DAYS, " days."] })) : report ? (_jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 2, minWidth: 0 }, children: [_jsx(AiUsageTotals, { totals: report.totals, label: "Your AI usage totals" }), report.totals.orgKeyRequests > 0 && (_jsxs(Typography, { variant: "body2", color: "text.secondary", children: [formatCount(report.totals.orgKeyRequests), " of these requests used your organization's key."] })), _jsx(AiUsageTable, { rows: report.series, keyLabel: "Model", tableId: MY_USAGE_TABLE_ID, ariaLabel: "Your usage by model", emptyText: "No usage in this range.", "data-testid": "my-ai-usage-table" })] })) : null] }) }));
|
|
25
28
|
}
|
|
26
29
|
//# sourceMappingURL=MyAiUsageSection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MyAiUsageSection.js","sourceRoot":"","sources":["../../../../src/ai/ui/user/MyAiUsageSection.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE3F,sDAAsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAE1D,MAAM,UAAU,gBAAgB;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,2BAA2B,
|
|
1
|
+
{"version":3,"file":"MyAiUsageSection.js","sourceRoot":"","sources":["../../../../src/ai/ui/user/MyAiUsageSection.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export declare function aiCodeText(code: string | null | undefined): string;
|
|
7
7
|
/**
|
|
8
|
-
* A friendly sentence for a thrown error from an AI call.
|
|
8
|
+
* A friendly sentence for a thrown error from an AI call. An `AI_RATE_LIMITED`
|
|
9
|
+
* that carries `details.resetsAt` (one of the deployment's own limits) says
|
|
10
|
+
* when it resets, in the viewer's display zone:
|
|
11
|
+
* `A usage limit was reached; it resets at Oct 28, 2026, 6:00 PM`.
|
|
9
12
|
*
|
|
10
13
|
* @stability stable
|
|
11
14
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiErrorText.d.ts","sourceRoot":"","sources":["../../../../src/ai/ui/user/aiErrorText.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aiErrorText.d.ts","sourceRoot":"","sources":["../../../../src/ai/ui/user/aiErrorText.ts"],"names":[],"mappings":"AAoBA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGlE;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CASlE"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* it is `toAiErrorInfo`'s job (`services/aiErrors.ts`, the one helper every
|
|
7
7
|
* AI surface uses); this module only words the code for the AI Keys page.
|
|
8
8
|
*/
|
|
9
|
+
import { formatDateTime } from '../../../core/index.js';
|
|
9
10
|
import { toAiErrorInfo } from '../../headless/errors.js';
|
|
10
11
|
const FRIENDLY = {
|
|
11
12
|
AI_KEY_INVALID: 'The provider rejected this key',
|
|
@@ -26,12 +27,19 @@ export function aiCodeText(code) {
|
|
|
26
27
|
return FRIENDLY[code] ?? `The provider reported an error (${code})`;
|
|
27
28
|
}
|
|
28
29
|
/**
|
|
29
|
-
* A friendly sentence for a thrown error from an AI call.
|
|
30
|
+
* A friendly sentence for a thrown error from an AI call. An `AI_RATE_LIMITED`
|
|
31
|
+
* that carries `details.resetsAt` (one of the deployment's own limits) says
|
|
32
|
+
* when it resets, in the viewer's display zone:
|
|
33
|
+
* `A usage limit was reached; it resets at Oct 28, 2026, 6:00 PM`.
|
|
30
34
|
*
|
|
31
35
|
* @stability stable
|
|
32
36
|
*/
|
|
33
37
|
export function aiErrorText(err, fallback) {
|
|
34
|
-
const
|
|
38
|
+
const info = toAiErrorInfo(err);
|
|
39
|
+
const reason = info.code;
|
|
40
|
+
if (reason === 'AI_RATE_LIMITED' && info.resetsAt) {
|
|
41
|
+
return `A usage limit was reached; it resets at ${formatDateTime(info.resetsAt)}`;
|
|
42
|
+
}
|
|
35
43
|
if (reason && FRIENDLY[reason])
|
|
36
44
|
return FRIENDLY[reason];
|
|
37
45
|
if (err instanceof Error && err.message)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiErrorText.js","sourceRoot":"","sources":["../../../../src/ai/ui/user/aiErrorText.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,QAAQ,GAA2B;IACvC,cAAc,EAAE,gCAAgC;IAChD,eAAe,EAAE,qCAAqC;IACtD,WAAW,EAAE,gDAAgD;IAC7D,oBAAoB,EAAE,+CAA+C;IACrE,uBAAuB,EAAE,oDAAoD;IAC7E,eAAe,EAAE,2DAA2D;CAC7E,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAA+B;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO,sBAAsB,CAAC;IACzC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,mCAAmC,IAAI,GAAG,CAAC;AACtE,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"aiErrorText.js","sourceRoot":"","sources":["../../../../src/ai/ui/user/aiErrorText.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,QAAQ,GAA2B;IACvC,cAAc,EAAE,gCAAgC;IAChD,eAAe,EAAE,qCAAqC;IACtD,WAAW,EAAE,gDAAgD;IAC7D,oBAAoB,EAAE,+CAA+C;IACrE,uBAAuB,EAAE,oDAAoD;IAC7E,eAAe,EAAE,2DAA2D;CAC7E,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAA+B;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO,sBAAsB,CAAC;IACzC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,mCAAmC,IAAI,GAAG,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY,EAAE,QAAgB;IACxD,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;IACzB,IAAI,MAAM,KAAK,iBAAiB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClD,OAAO,2CAA2C,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IACpF,CAAC;IACD,IAAI,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxD,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC5D,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { AlertIncident, AlertIncidentState, AlertKind, AlertRule, AlertRuleTestResponse, AlertSeverity, AlertSummary, CreateAlertRule, UpdateAlertRule } from '@marinoscar/platform-contract/alerts';
|
|
2
|
+
import type { TelemetrySchema } from '@marinoscar/platform-contract/telemetry';
|
|
3
|
+
import type { PlatformApiClient } from '../../core/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* The route base of the alerts slice, relative to the API root (`/api`).
|
|
6
|
+
*
|
|
7
|
+
* @stability experimental
|
|
8
|
+
*/
|
|
9
|
+
export declare const ALERTS_BASE_PATH = "/admin/alerts";
|
|
10
|
+
/**
|
|
11
|
+
* The telemetry route the metric picker reads (relative to `/api`).
|
|
12
|
+
*
|
|
13
|
+
* @stability experimental
|
|
14
|
+
*/
|
|
15
|
+
export declare const ALERTS_METRIC_CATALOG_PATH = "/admin/telemetry/schema";
|
|
16
|
+
/**
|
|
17
|
+
* The filters of a rule list request.
|
|
18
|
+
*
|
|
19
|
+
* @stability experimental
|
|
20
|
+
*/
|
|
21
|
+
export interface AlertRulesQuery {
|
|
22
|
+
/** Only rules of this kind. */
|
|
23
|
+
kind?: string;
|
|
24
|
+
/** Only rules of this severity. */
|
|
25
|
+
severity?: AlertSeverity;
|
|
26
|
+
/** Only enabled (`true`) or disabled (`false`) rules. */
|
|
27
|
+
enabled?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The filters and page of an incident list request. `page` is one-based, as
|
|
31
|
+
* on the wire.
|
|
32
|
+
*
|
|
33
|
+
* @stability experimental
|
|
34
|
+
*/
|
|
35
|
+
export interface AlertIncidentsQuery {
|
|
36
|
+
/** Only incidents in this state. */
|
|
37
|
+
state?: AlertIncidentState;
|
|
38
|
+
/** Only incidents of this severity. */
|
|
39
|
+
severity?: AlertSeverity;
|
|
40
|
+
/** Only incidents of this rule. */
|
|
41
|
+
ruleId?: string;
|
|
42
|
+
/** One-based page; default 1. */
|
|
43
|
+
page?: number;
|
|
44
|
+
/** Rows per page; default the API's (20). */
|
|
45
|
+
pageSize?: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* One page of incidents as `GET /admin/alerts/incidents` returns it.
|
|
49
|
+
*
|
|
50
|
+
* @stability experimental
|
|
51
|
+
*/
|
|
52
|
+
export interface AlertIncidentPage {
|
|
53
|
+
/** The incidents of the page. */
|
|
54
|
+
items: AlertIncident[];
|
|
55
|
+
/** Incidents matching the filters, across every page. */
|
|
56
|
+
total: number;
|
|
57
|
+
/** The one-based page. */
|
|
58
|
+
page: number;
|
|
59
|
+
/** Rows per page. */
|
|
60
|
+
pageSize: number;
|
|
61
|
+
/** Pages at this page size. */
|
|
62
|
+
totalPages: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* One metric the rule editor can pick: a telemetry store table and its
|
|
66
|
+
* attribute columns (the `groupBy` and filter candidates).
|
|
67
|
+
*
|
|
68
|
+
* @stability experimental
|
|
69
|
+
*/
|
|
70
|
+
export interface AlertMetricCatalogEntry {
|
|
71
|
+
/** The table name, accepted as `metric` by `metric_threshold` (`app_jobs_settled`). */
|
|
72
|
+
name: string;
|
|
73
|
+
/** The columns other than the value and the timestamp. */
|
|
74
|
+
attributes: string[];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The alerts API calls.
|
|
78
|
+
*
|
|
79
|
+
* @stability experimental
|
|
80
|
+
*/
|
|
81
|
+
export interface AlertsApi {
|
|
82
|
+
/** `GET /admin/alerts/rules`. */
|
|
83
|
+
listRules(query?: AlertRulesQuery): Promise<AlertRule[]>;
|
|
84
|
+
/** `GET /admin/alerts/rules/:id`. */
|
|
85
|
+
getRule(id: string): Promise<AlertRule>;
|
|
86
|
+
/** `POST /admin/alerts/rules`. */
|
|
87
|
+
createRule(input: CreateAlertRule): Promise<AlertRule>;
|
|
88
|
+
/** `PATCH /admin/alerts/rules/:id` (the kind cannot change). */
|
|
89
|
+
updateRule(id: string, patch: UpdateAlertRule): Promise<AlertRule>;
|
|
90
|
+
/** `DELETE /admin/alerts/rules/:id` (a starter rule answers 409). */
|
|
91
|
+
deleteRule(id: string): Promise<void>;
|
|
92
|
+
/** `POST /admin/alerts/rules/:id/test`: a dry run, nothing stored or sent. */
|
|
93
|
+
testRule(id: string): Promise<AlertRuleTestResponse>;
|
|
94
|
+
/** `GET /admin/alerts/kinds`. */
|
|
95
|
+
listKinds(): Promise<AlertKind[]>;
|
|
96
|
+
/** `GET /admin/alerts/incidents?state&severity&ruleId&page&pageSize`. */
|
|
97
|
+
listIncidents(query?: AlertIncidentsQuery): Promise<AlertIncidentPage>;
|
|
98
|
+
/** `GET /admin/alerts/incidents/:id`. */
|
|
99
|
+
getIncident(id: string): Promise<AlertIncident>;
|
|
100
|
+
/** `POST /admin/alerts/incidents/:id/acknowledge`. */
|
|
101
|
+
acknowledge(id: string): Promise<AlertIncident>;
|
|
102
|
+
/** `GET /admin/alerts/summary`: firing counts by severity. */
|
|
103
|
+
summary(): Promise<AlertSummary>;
|
|
104
|
+
/** `GET /admin/telemetry/schema`, reduced to the metric tables and their attributes. */
|
|
105
|
+
metricCatalog(): Promise<AlertMetricCatalogEntry[]>;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The store's table list as the metric picker's entries: the metric tables
|
|
109
|
+
* (not the trace and log tables), each with its attribute columns, sorted by
|
|
110
|
+
* name.
|
|
111
|
+
*
|
|
112
|
+
* @param schema - what `GET /admin/telemetry/schema` returned.
|
|
113
|
+
* @returns the entries.
|
|
114
|
+
*
|
|
115
|
+
* @stability experimental
|
|
116
|
+
*/
|
|
117
|
+
export declare function metricCatalogFromSchema(schema: Pick<TelemetrySchema, 'tables'>): AlertMetricCatalogEntry[];
|
|
118
|
+
/**
|
|
119
|
+
* The alerts client over the app's transport.
|
|
120
|
+
*
|
|
121
|
+
* @param api - the app's transport (`usePlatformApi()`).
|
|
122
|
+
* @returns the client.
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```ts
|
|
126
|
+
* const alerts = createAlertsApi(usePlatformApi());
|
|
127
|
+
* const { firing } = await alerts.summary();
|
|
128
|
+
* ```
|
|
129
|
+
*
|
|
130
|
+
* @extensionPoint hook
|
|
131
|
+
* @stability experimental
|
|
132
|
+
*/
|
|
133
|
+
export declare function createAlertsApi(api: PlatformApiClient): AlertsApi;
|
|
134
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/alerts/headless/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// The alerts client (issue #1047): the `/api/admin/alerts` routes
|
|
3
|
+
// =============================================================================
|
|
4
|
+
//
|
|
5
|
+
// Every route is a SYSTEM route: reads need `alerts:read`, writes (create,
|
|
6
|
+
// edit, delete, test, acknowledge) need `alerts:write` (`ALERT_PERMISSIONS` of
|
|
7
|
+
// `@marinoscar/platform-contract/alerts`). The transport (`PlatformApiClient`)
|
|
8
|
+
// prefixes `/api` and unwraps the `{ data }` envelope. The API decides who may
|
|
9
|
+
// do what; the client only builds paths.
|
|
10
|
+
//
|
|
11
|
+
// One route here is not the alerts slice's: the metric picker of the rule
|
|
12
|
+
// editor reads the telemetry store's table list (`GET /admin/telemetry/schema`,
|
|
13
|
+
// `telemetry:query`), the same list the telemetry explorer's schema panel
|
|
14
|
+
// reads. It is read through the contract's wire type only, so the alerts web
|
|
15
|
+
// slice does not depend on the telemetry web slice.
|
|
16
|
+
// =============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* The route base of the alerts slice, relative to the API root (`/api`).
|
|
19
|
+
*
|
|
20
|
+
* @stability experimental
|
|
21
|
+
*/
|
|
22
|
+
export const ALERTS_BASE_PATH = '/admin/alerts';
|
|
23
|
+
/**
|
|
24
|
+
* The telemetry route the metric picker reads (relative to `/api`).
|
|
25
|
+
*
|
|
26
|
+
* @stability experimental
|
|
27
|
+
*/
|
|
28
|
+
export const ALERTS_METRIC_CATALOG_PATH = '/admin/telemetry/schema';
|
|
29
|
+
/** Columns of a metric table that are never a `groupBy` or filter candidate. */
|
|
30
|
+
const NON_ATTRIBUTE_COLUMNS = new Set(['greptime_value', 'greptime_timestamp', 'val', 'ts', 'timestamp']);
|
|
31
|
+
/** Tables of the store that are traces or logs, not metrics. */
|
|
32
|
+
function isMetricTable(name) {
|
|
33
|
+
return !name.startsWith('opentelemetry_') && !name.startsWith('information_schema');
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The store's table list as the metric picker's entries: the metric tables
|
|
37
|
+
* (not the trace and log tables), each with its attribute columns, sorted by
|
|
38
|
+
* name.
|
|
39
|
+
*
|
|
40
|
+
* @param schema - what `GET /admin/telemetry/schema` returned.
|
|
41
|
+
* @returns the entries.
|
|
42
|
+
*
|
|
43
|
+
* @stability experimental
|
|
44
|
+
*/
|
|
45
|
+
export function metricCatalogFromSchema(schema) {
|
|
46
|
+
return schema.tables
|
|
47
|
+
.filter((table) => isMetricTable(table.name))
|
|
48
|
+
.map((table) => ({
|
|
49
|
+
name: table.name,
|
|
50
|
+
attributes: table.columns.map((column) => column.name).filter((name) => !NON_ATTRIBUTE_COLUMNS.has(name)),
|
|
51
|
+
}))
|
|
52
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
53
|
+
}
|
|
54
|
+
function queryString(params) {
|
|
55
|
+
const search = new URLSearchParams();
|
|
56
|
+
for (const [key, value] of Object.entries(params)) {
|
|
57
|
+
if (value === undefined || value === '')
|
|
58
|
+
continue;
|
|
59
|
+
search.set(key, String(value));
|
|
60
|
+
}
|
|
61
|
+
const text = search.toString();
|
|
62
|
+
return text === '' ? '' : `?${text}`;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The alerts client over the app's transport.
|
|
66
|
+
*
|
|
67
|
+
* @param api - the app's transport (`usePlatformApi()`).
|
|
68
|
+
* @returns the client.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* const alerts = createAlertsApi(usePlatformApi());
|
|
73
|
+
* const { firing } = await alerts.summary();
|
|
74
|
+
* ```
|
|
75
|
+
*
|
|
76
|
+
* @extensionPoint hook
|
|
77
|
+
* @stability experimental
|
|
78
|
+
*/
|
|
79
|
+
export function createAlertsApi(api) {
|
|
80
|
+
const rule = (id) => `${ALERTS_BASE_PATH}/rules/${encodeURIComponent(id)}`;
|
|
81
|
+
const incident = (id) => `${ALERTS_BASE_PATH}/incidents/${encodeURIComponent(id)}`;
|
|
82
|
+
return {
|
|
83
|
+
listRules: (query = {}) => api.get(`${ALERTS_BASE_PATH}/rules${queryString({ kind: query.kind, severity: query.severity, enabled: query.enabled })}`),
|
|
84
|
+
getRule: (id) => api.get(rule(id)),
|
|
85
|
+
createRule: (input) => api.post(`${ALERTS_BASE_PATH}/rules`, input),
|
|
86
|
+
updateRule: (id, patch) => api.patch(rule(id), patch),
|
|
87
|
+
deleteRule: async (id) => {
|
|
88
|
+
await api.delete(rule(id));
|
|
89
|
+
},
|
|
90
|
+
testRule: (id) => api.post(`${rule(id)}/test`),
|
|
91
|
+
listKinds: () => api.get(`${ALERTS_BASE_PATH}/kinds`),
|
|
92
|
+
listIncidents: (query = {}) => api.get(`${ALERTS_BASE_PATH}/incidents${queryString({
|
|
93
|
+
state: query.state,
|
|
94
|
+
severity: query.severity,
|
|
95
|
+
ruleId: query.ruleId,
|
|
96
|
+
page: query.page,
|
|
97
|
+
pageSize: query.pageSize,
|
|
98
|
+
})}`),
|
|
99
|
+
getIncident: (id) => api.get(incident(id)),
|
|
100
|
+
acknowledge: (id) => api.post(`${incident(id)}/acknowledge`),
|
|
101
|
+
summary: () => api.get(`${ALERTS_BASE_PATH}/summary`),
|
|
102
|
+
metricCatalog: async () => metricCatalogFromSchema(await api.get(ALERTS_METRIC_CATALOG_PATH)),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/alerts/headless/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { AlertAggregation, AlertComparator, AlertIncidentState, AlertSeverity, AlertSummary } from '@marinoscar/platform-contract/alerts';
|
|
2
|
+
/**
|
|
3
|
+
* A status tone, mapped to an MUI colour by the UI. The words carry the
|
|
4
|
+
* meaning; the tone only reinforces it.
|
|
5
|
+
*
|
|
6
|
+
* @stability experimental
|
|
7
|
+
*/
|
|
8
|
+
export type AlertTone = 'error' | 'warning' | 'info' | 'success' | 'default';
|
|
9
|
+
/**
|
|
10
|
+
* Each severity in words.
|
|
11
|
+
*
|
|
12
|
+
* @stability experimental
|
|
13
|
+
*/
|
|
14
|
+
export declare const ALERT_SEVERITY_LABELS: Readonly<Record<AlertSeverity, string>>;
|
|
15
|
+
/**
|
|
16
|
+
* The tone of each severity.
|
|
17
|
+
*
|
|
18
|
+
* @stability experimental
|
|
19
|
+
*/
|
|
20
|
+
export declare const ALERT_SEVERITY_TONES: Readonly<Record<AlertSeverity, AlertTone>>;
|
|
21
|
+
/**
|
|
22
|
+
* Each incident state in words.
|
|
23
|
+
*
|
|
24
|
+
* @stability experimental
|
|
25
|
+
*/
|
|
26
|
+
export declare const ALERT_STATE_LABELS: Readonly<Record<AlertIncidentState, string>>;
|
|
27
|
+
/**
|
|
28
|
+
* The tone of each incident state.
|
|
29
|
+
*
|
|
30
|
+
* @stability experimental
|
|
31
|
+
*/
|
|
32
|
+
export declare const ALERT_STATE_TONES: Readonly<Record<AlertIncidentState, AlertTone>>;
|
|
33
|
+
/**
|
|
34
|
+
* Each comparator in words and as a symbol.
|
|
35
|
+
*
|
|
36
|
+
* @stability experimental
|
|
37
|
+
*/
|
|
38
|
+
export declare const ALERT_COMPARATOR_LABELS: Readonly<Record<AlertComparator, string>>;
|
|
39
|
+
/**
|
|
40
|
+
* Each aggregation in words.
|
|
41
|
+
*
|
|
42
|
+
* @stability experimental
|
|
43
|
+
*/
|
|
44
|
+
export declare const ALERT_AGGREGATION_LABELS: Readonly<Record<AlertAggregation, string>>;
|
|
45
|
+
/**
|
|
46
|
+
* A kind id in words: the label `GET /kinds` gave, else the built-in label,
|
|
47
|
+
* else the id itself.
|
|
48
|
+
*
|
|
49
|
+
* @param kind - the kind id.
|
|
50
|
+
* @param kinds - the registered kinds, when loaded.
|
|
51
|
+
* @returns the label.
|
|
52
|
+
*
|
|
53
|
+
* @stability experimental
|
|
54
|
+
*/
|
|
55
|
+
export declare function alertKindLabel(kind: string, kinds?: ReadonlyArray<{
|
|
56
|
+
id: string;
|
|
57
|
+
label: string;
|
|
58
|
+
}>): string;
|
|
59
|
+
/**
|
|
60
|
+
* The firing count of a summary, in total.
|
|
61
|
+
*
|
|
62
|
+
* @param summary - `GET /admin/alerts/summary`.
|
|
63
|
+
* @returns critical + warning + info.
|
|
64
|
+
*
|
|
65
|
+
* @stability experimental
|
|
66
|
+
*/
|
|
67
|
+
export declare function alertFiringTotal(summary: Pick<AlertSummary, 'firing'> | null | undefined): number;
|
|
68
|
+
/**
|
|
69
|
+
* The most serious severity that has a firing incident, or `null`.
|
|
70
|
+
*
|
|
71
|
+
* @param summary - `GET /admin/alerts/summary`.
|
|
72
|
+
* @returns the severity.
|
|
73
|
+
*
|
|
74
|
+
* @stability experimental
|
|
75
|
+
*/
|
|
76
|
+
export declare function alertTopSeverity(summary: Pick<AlertSummary, 'firing'> | null | undefined): AlertSeverity | null;
|
|
77
|
+
/**
|
|
78
|
+
* An incident's labels as `key=value` text, in key order; `''` for none.
|
|
79
|
+
*
|
|
80
|
+
* @param labels - the labels.
|
|
81
|
+
* @returns the text.
|
|
82
|
+
*
|
|
83
|
+
* @stability experimental
|
|
84
|
+
*/
|
|
85
|
+
export declare function formatAlertLabels(labels: Readonly<Record<string, string>>): string;
|
|
86
|
+
/**
|
|
87
|
+
* A duration in seconds as short words (`90` is `1 min 30 s`, `3600` is `1 h`).
|
|
88
|
+
*
|
|
89
|
+
* @param seconds - whole seconds.
|
|
90
|
+
* @returns the text.
|
|
91
|
+
*
|
|
92
|
+
* @stability experimental
|
|
93
|
+
*/
|
|
94
|
+
export declare function formatAlertSeconds(seconds: number): string;
|
|
95
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/alerts/headless/format.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,YAAY,EACb,MAAM,sCAAsC,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAE7E;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAIxE,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,CAI1E,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAI1E,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAI5E,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAO5E,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAO9E,CAAC;AAUH;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAM,GAAG,MAAM,CAE7G;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGjG;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,aAAa,GAAG,IAAI,CAM/G;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAKlF;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAY1D"}
|