mirror of
https://github.com/dromara/hertzbeat.git
synced 2026-10-08 17:40:03 +00:00
Refine entity, monitor, alert, settings, observability, and shared operator workflows; add scale guards, route compatibility, release validation, and Product Design coverage. AI assistance: used for draft implementation and test iteration.\nHuman validation: Node 22 production build; 426 frontend files and 3,398 tests; 59-route matrix; release budget 7.84 MiB / 8.00 MiB; focused backend tests and Browser QA.\nRisk notes: local scale proof covers 2,005 entities; sustained concurrent-ingestion SLA remains deployment-specific.
90 lines
5.4 KiB
TypeScript
90 lines
5.4 KiB
TypeScript
import { apiDownload, apiMessageDelete, apiMessageGet, apiMessagePost, apiMessagePut } from './api-client';
|
|
import {
|
|
buildMonitorDetailUrl,
|
|
buildMonitorFavoriteUrl,
|
|
buildMonitorGrafanaUrl,
|
|
buildMonitorHistoryCatalogUrl,
|
|
buildMonitorHistoryMetricDataUrl,
|
|
buildMonitorRealtimeMetricUrl,
|
|
type MonitorHistoryCatalogDefineResponse,
|
|
type MonitorHistoryMetricCatalogItem
|
|
} from './monitor-detail/controller';
|
|
import {
|
|
buildMonitorEditorCollectorsUrl,
|
|
buildMonitorEditorMonitorUrl,
|
|
buildMonitorEditorParamDefinesUrl,
|
|
type MonitorDetailResponse
|
|
} from './monitor-editor/controller';
|
|
import {
|
|
buildCopyMonitorUrl,
|
|
buildDeleteMonitorsUrl,
|
|
buildEnableMonitorsUrl,
|
|
buildExportAllMonitorsUrl,
|
|
buildExportMonitorsUrl,
|
|
buildImportMonitorsUrl,
|
|
buildPauseMonitorsUrl
|
|
} from './monitor-manage/controller';
|
|
import { buildMonitorSelectionUrl, buildMonitorUrl, type MonitorQueryState } from './monitor-manage/query-state';
|
|
import type { CollectorSummary, EntityMonitorBindingCandidate, Monitor, MonitorHistoryData, PageResult, ParamDefine } from './types';
|
|
|
|
type MonitorListQuery = string | URLSearchParams | Record<string, string | number | boolean | undefined | null>;
|
|
|
|
function appendQuery(path: string, query?: MonitorListQuery) {
|
|
if (!query) return path;
|
|
const params =
|
|
typeof query === 'string'
|
|
? new URLSearchParams(query.startsWith('?') ? query.slice(1) : query)
|
|
: query instanceof URLSearchParams
|
|
? query
|
|
: new URLSearchParams(
|
|
Object.entries(query).flatMap(([key, value]) => (value == null || value === '' ? [] : [[key, String(value)]]))
|
|
);
|
|
const queryString = params.toString();
|
|
return queryString ? `${path}?${queryString}` : path;
|
|
}
|
|
|
|
export const api = {
|
|
monitors: {
|
|
list: <T = PageResult<Monitor>>(query?: MonitorListQuery) => apiMessageGet<T>(appendQuery('/monitors/manage', query)),
|
|
page: <T = PageResult<Monitor>>(query: MonitorQueryState) => apiMessageGet<T>(buildMonitorUrl(query)),
|
|
selectionPage: <T = PageResult<Monitor>>(query: MonitorQueryState) => apiMessageGet<T>(buildMonitorSelectionUrl(query)),
|
|
detail: <T = Monitor>(monitorId: string | number) => apiMessageGet<T>(buildMonitorDetailUrl(String(monitorId))),
|
|
editorDetail: <T = MonitorDetailResponse>(monitorId: string | number) =>
|
|
apiMessageGet<T>(buildMonitorEditorMonitorUrl(String(monitorId))),
|
|
editorCollectors: <T = { content?: CollectorSummary[] }>() => apiMessageGet<T>(buildMonitorEditorCollectorsUrl()),
|
|
editorParamDefines: (app: string) => apiMessageGet<ParamDefine[]>(buildMonitorEditorParamDefinesUrl(app)),
|
|
favoriteMetrics: (monitorId: string | number) => apiMessageGet<string[]>(buildMonitorFavoriteUrl(String(monitorId))),
|
|
addFavoriteMetric: (monitorId: string | number, metricName: string) =>
|
|
apiMessagePost<unknown>(buildMonitorFavoriteUrl(String(monitorId), metricName), null),
|
|
removeFavoriteMetric: (monitorId: string | number, metricName: string) =>
|
|
apiMessageDelete<unknown>(buildMonitorFavoriteUrl(String(monitorId), metricName)),
|
|
grafanaDashboard: <T = unknown>(monitorId: string | number) => apiMessageGet<T>(buildMonitorGrafanaUrl(String(monitorId))),
|
|
deleteGrafanaDashboard: (monitorId: string | number) => apiMessageDelete<unknown>(buildMonitorGrafanaUrl(String(monitorId))),
|
|
realtimeMetric: <T = unknown>(monitorId: string | number, metricName: string) =>
|
|
apiMessageGet<T>(buildMonitorRealtimeMetricUrl(String(monitorId), metricName)),
|
|
warehouseStorageStatus: <T = unknown>() => apiMessageGet<T>('/warehouse/storage/status'),
|
|
historyMetricCatalogDefine: (monitor: Monitor) =>
|
|
apiMessageGet<MonitorHistoryCatalogDefineResponse>(buildMonitorHistoryCatalogUrl(monitor)),
|
|
historyMetric: (monitor: Monitor, item: MonitorHistoryMetricCatalogItem, query?: Parameters<typeof buildMonitorHistoryMetricDataUrl>[2]) =>
|
|
apiMessageGet<MonitorHistoryData>(buildMonitorHistoryMetricDataUrl(monitor, item, query)),
|
|
copy: (monitorId: string | number) => apiMessagePost<unknown>(buildCopyMonitorUrl(monitorId), null),
|
|
enable: (ids: Array<string | number>) => apiMessageGet<unknown>(buildEnableMonitorsUrl(ids)),
|
|
pause: (ids: Array<string | number>) => apiMessageDelete<unknown>(buildPauseMonitorsUrl(ids)),
|
|
delete: (ids: Array<string | number>) => apiMessageDelete<unknown>(buildDeleteMonitorsUrl(ids)),
|
|
appHierarchy: <T = unknown>(locale?: string | null) =>
|
|
apiMessageGet<T>(`/apps/hierarchy${locale ? `?lang=${encodeURIComponent(locale)}` : ''}`),
|
|
create: <T = unknown>(payload: unknown) => apiMessagePost<T>('/monitor', payload),
|
|
update: <T = unknown>(payload: unknown) => apiMessagePut<T>('/monitor', payload),
|
|
detect: <T = unknown>(payload: unknown) => apiMessagePost<T>('/monitor/detect', payload),
|
|
import: <T = unknown>(body: FormData) => apiMessagePost<T>(buildImportMonitorsUrl(), body),
|
|
export: (ids: Array<string | number>, type: 'JSON' | 'EXCEL') => apiMessageGet<Blob>(buildExportMonitorsUrl(ids, type)),
|
|
exportAll: (type: 'JSON' | 'EXCEL') => apiMessageGet<Blob>(buildExportAllMonitorsUrl(type)),
|
|
exportResponse: (ids: Array<string | number>, type: 'JSON' | 'EXCEL') => apiDownload(buildExportMonitorsUrl(ids, type)),
|
|
exportAllResponse: (type: 'JSON' | 'EXCEL') => apiDownload(buildExportAllMonitorsUrl(type))
|
|
},
|
|
entities: {
|
|
monitorCandidates: <T = EntityMonitorBindingCandidate[]>(monitorId: string | number) =>
|
|
apiMessageGet<T>(`/entities/monitor/${encodeURIComponent(String(monitorId))}/candidates`)
|
|
}
|
|
};
|