From 45e9765d403e2e1907e2da4786db852ae1c4cf32 Mon Sep 17 00:00:00 2001 From: ygx Date: Sun, 22 Mar 2026 19:23:34 +0800 Subject: [PATCH] feat --- src/api/ops/report.ts | 210 ++++- src/views/ops/pages/report/device/index.vue | 840 ++++++++++++++++++ src/views/ops/pages/report/fault/index.vue | 724 +++++++++++++++ .../components/MetricsSummaryPanel.vue | 373 -------- .../history/components/MetricsTopNPanel.vue | 341 ------- .../components/NetworkDeviceStatusPanel.vue | 399 --------- .../history/components/ServerStatusPanel.vue | 349 -------- .../components/TrafficSummaryPanel.vue | 416 --------- .../history/components/TrafficTrendPanel.vue | 581 ------------ src/views/ops/pages/report/history/index.vue | 740 +++++++++++++-- src/views/ops/pages/report/host/index.vue | 706 +++++++++++++++ .../ops/pages/report/statistics/index.vue | 771 ++++++++++++++++ src/views/ops/pages/report/topn/index.vue | 725 +++++++++++++++ src/views/ops/pages/report/traffic/index.vue | 840 ++++++++++++++++++ 14 files changed, 5473 insertions(+), 2542 deletions(-) create mode 100644 src/views/ops/pages/report/device/index.vue create mode 100644 src/views/ops/pages/report/fault/index.vue delete mode 100644 src/views/ops/pages/report/history/components/MetricsSummaryPanel.vue delete mode 100644 src/views/ops/pages/report/history/components/MetricsTopNPanel.vue delete mode 100644 src/views/ops/pages/report/history/components/NetworkDeviceStatusPanel.vue delete mode 100644 src/views/ops/pages/report/history/components/ServerStatusPanel.vue delete mode 100644 src/views/ops/pages/report/history/components/TrafficSummaryPanel.vue delete mode 100644 src/views/ops/pages/report/history/components/TrafficTrendPanel.vue create mode 100644 src/views/ops/pages/report/host/index.vue create mode 100644 src/views/ops/pages/report/statistics/index.vue create mode 100644 src/views/ops/pages/report/topn/index.vue create mode 100644 src/views/ops/pages/report/traffic/index.vue diff --git a/src/api/ops/report.ts b/src/api/ops/report.ts index 55b43ef..704a72d 100644 --- a/src/api/ops/report.ts +++ b/src/api/ops/report.ts @@ -1,39 +1,209 @@ -import { request } from "@/api/request"; +import { request } from "@/api/request" -// ============ 监测指标类接口 ============ +// ============ 通用响应类型 ============ + +export interface ApiResponse { + code: number + details: T + message?: string +} + +// ============ 报表类型枚举 ============ + +export enum ReportType { + TOPN = 'topn', + STATISTICS = 'statistics', + TRAFFIC = 'traffic', + FAULT = 'fault', + SERVER = 'server', + NETWORK_DEVICE = 'network_device', + HISTORY = 'history', +} + +export enum ReportStatus { + PENDING = 'pending', + RUNNING = 'running', + SUCCESS = 'success', + FAILED = 'failed', +} + +// ============ 报表记录接口 ============ + +export interface ReportRecord { + id: number + report_type: ReportType + title: string + description?: string + status: ReportStatus + error_message?: string + params_json?: Record + result_summary_json?: Record + file_path?: string + file_size?: number + file_mime?: string + created_at: string + updated_at: string +} + +export interface ReportListParams { + page?: number + size?: number + report_type?: ReportType + status?: ReportStatus + keyword?: string + created_from?: string + created_to?: string +} + +export interface PageResult { + total: number + page: number + page_size: number + data: T[] +} + +// ============ 报表生成参数接口 ============ + +export interface TrafficReportParams { + topology_id: number + link_id?: number + node_id?: string + granularity?: 'minute' | 'hour' | 'day' | 'month' + start_time: string + end_time: string + report_shape: 'summary' | 'detail' | 'trend' | 'top' + detail_limit?: number + trend_granularity?: 'minute' | 'hour' | 'day' | 'month' + top_order_by?: 'total_bytes' | 'total_in_bytes' | 'total_out_bytes' | 'total_packets' | 'avg_latency' | 'avg_packet_loss' | 'total_connections' + top_limit?: number +} + +export interface FaultReportParams { + fault_data_source?: 'collector_log' | 'alert' | 'hybrid' + start_time: string + end_time: string + service_identities?: string[] + status?: 'success' | 'failed' | 'timeout' + keyword?: string + group_by?: 'none' | 'service_identity' | 'day' + alert_severities?: string[] + alert_label_filters?: Record + include_raw_messages?: boolean + detail_limit?: number +} + +export interface ServerReportParams { + server_ids?: number[] + server_identities?: string[] + start_time: string + end_time: string + columns?: ('availability' | 'last_check_time' | 'cpu' | 'memory_phys' | 'memory_virt' | 'disk_io' | 'disk_usage' | 'daily_alerts')[] + availability_rule?: 'metrics_presence' | 'server_status' + include_daily_alerts?: boolean +} + +export interface StatisticsReportParams { + data_source: 'dc-host' | 'dc-network' | 'dc-database' | 'dc-middleware' + metric_name: string + target_identities: string[] + start_time: string + end_time: string + output_mode: 'scalar' | 'timeseries' + scalar_aggregations?: ('avg' | 'max' | 'min' | 'sum' | 'count')[] + interval?: string + bucket_aggregation?: 'avg' | 'max' | 'min' | 'sum' +} + +export interface HistoryReportParams { + data_source: 'dc-host' | 'dc-network' | 'dc-database' | 'dc-middleware' + metric_names: string[] + target_identities: string[] + start_time: string + end_time: string + interval: string + bucket_aggregation: 'avg' | 'max' | 'min' | 'sum' + series_layout?: string +} + +export interface TopNReportParams { + data_source: 'dc-host' | 'dc-network' | 'dc-database' | 'dc-middleware' + metric_name: string + target_identities: string[] + start_time: string + end_time: string + n?: number + rank_aggregate?: 'avg' | 'max' | 'min' | 'last' + order?: 'desc' | 'asc' + metric_type?: 'cpu' | 'disk' | 'io' | 'memory' | 'network' + collector_identity?: string +} + +export interface GenerateReportParams { + report_type: ReportType + title?: string + description?: string + params: TrafficReportParams | FaultReportParams | ServerReportParams | StatisticsReportParams | HistoryReportParams | TopNReportParams | Record +} + +// ============ 报表生成接口(新版) ============ + +/** 获取报表记录列表 */ +export const fetchReportList = (params: ReportListParams) => + request.get>>('/DC-Control/v1/reports', { params }) + +/** 获取报表详情 */ +export const fetchReportDetail = (id: number) => + request.get>(`/DC-Control/v1/reports/${id}`) + +/** 生成报表 */ +export const generateReport = (data: GenerateReportParams) => + request.post>('/DC-Control/v1/reports/generate', data) + +/** 查看报表内容 */ +export const fetchReportContent = (id: number) => + request.get>>(`/DC-Control/v1/reports/${id}/content`) + +/** 导出报表 */ +export const exportReport = (id: number, format: 'csv' | 'xlsx' = 'csv') => + request.get(`/DC-Control/v1/reports/${id}/export`, { + params: { format }, + responseType: 'blob', + }) + +// ============ 监测指标类接口(旧版兼容) ============ /** 监测指标TOPN */ -export const fetchMetricsTopN = (params: any) => - request.get("/DC-Control/v1/reports/metrics/topn", { params }); +export const fetchMetricsTopN = (params: any) => + request.get('/DC-Control/v1/reports/metrics/topn', { params }) /** 监测指标汇总 */ -export const fetchMetricsSummary = (params: any) => - request.get("/DC-Control/v1/reports/metrics/summary", { params }); +export const fetchMetricsSummary = (params: any) => + request.get('/DC-Control/v1/reports/metrics/summary', { params }) /** 监测指标汇总导出 */ -export const exportMetricsSummary = (params: any) => - request.get("/DC-Control/v1/reports/metrics/export", { params, responseType: 'blob' }); +export const exportMetricsSummary = (params: any) => + request.get('/DC-Control/v1/reports/metrics/export', { params, responseType: 'blob' }) -// ============ 流量报表接口 ============ +// ============ 流量报表接口(旧版兼容) ============ /** 流量报表汇总 */ -export const fetchTrafficSummary = (params: any) => - request.get("/DC-Control/v1/reports/traffic/summary", { params }); +export const fetchTrafficSummary = (params: any) => + request.get('/DC-Control/v1/reports/traffic/summary', { params }) /** 流量报表趋势 */ -export const fetchTrafficTrend = (params: any) => - request.get("/DC-Control/v1/reports/traffic/trend", { params }); +export const fetchTrafficTrend = (params: any) => + request.get('/DC-Control/v1/reports/traffic/trend', { params }) /** 流量报表导出 */ -export const exportTrafficReport = (params: any) => - request.get("/DC-Control/v1/reports/traffic/export", { params, responseType: 'blob' }); +export const exportTrafficReport = (params: any) => + request.get('/DC-Control/v1/reports/traffic/export', { params, responseType: 'blob' }) -// ============ 状态报表接口 ============ +// ============ 状态报表接口(旧版兼容) ============ /** 服务器状态报表 */ -export const fetchServerStatus = (params: any) => - request.get("/DC-Control/v1/reports/servers/status", { params }); +export const fetchServerStatus = (params: any) => + request.get('/DC-Control/v1/reports/servers/status', { params }) /** 网络设备状态报表 */ -export const fetchNetworkDeviceStatus = (params: any) => - request.get("/DC-Control/v1/reports/network-devices/status", { params }); +export const fetchNetworkDeviceStatus = (params: any) => + request.get('/DC-Control/v1/reports/network-devices/status', { params }) diff --git a/src/views/ops/pages/report/device/index.vue b/src/views/ops/pages/report/device/index.vue new file mode 100644 index 0000000..523d2a8 --- /dev/null +++ b/src/views/ops/pages/report/device/index.vue @@ -0,0 +1,840 @@ + + + + + + + \ No newline at end of file diff --git a/src/views/ops/pages/report/fault/index.vue b/src/views/ops/pages/report/fault/index.vue new file mode 100644 index 0000000..b122d82 --- /dev/null +++ b/src/views/ops/pages/report/fault/index.vue @@ -0,0 +1,724 @@ + + + + + + + \ No newline at end of file diff --git a/src/views/ops/pages/report/history/components/MetricsSummaryPanel.vue b/src/views/ops/pages/report/history/components/MetricsSummaryPanel.vue deleted file mode 100644 index f6837ee..0000000 --- a/src/views/ops/pages/report/history/components/MetricsSummaryPanel.vue +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - - diff --git a/src/views/ops/pages/report/history/components/MetricsTopNPanel.vue b/src/views/ops/pages/report/history/components/MetricsTopNPanel.vue deleted file mode 100644 index 6d7226f..0000000 --- a/src/views/ops/pages/report/history/components/MetricsTopNPanel.vue +++ /dev/null @@ -1,341 +0,0 @@ - - - - - - - diff --git a/src/views/ops/pages/report/history/components/NetworkDeviceStatusPanel.vue b/src/views/ops/pages/report/history/components/NetworkDeviceStatusPanel.vue deleted file mode 100644 index bc5d2be..0000000 --- a/src/views/ops/pages/report/history/components/NetworkDeviceStatusPanel.vue +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - - diff --git a/src/views/ops/pages/report/history/components/ServerStatusPanel.vue b/src/views/ops/pages/report/history/components/ServerStatusPanel.vue deleted file mode 100644 index 1fea407..0000000 --- a/src/views/ops/pages/report/history/components/ServerStatusPanel.vue +++ /dev/null @@ -1,349 +0,0 @@ - - - - - - - diff --git a/src/views/ops/pages/report/history/components/TrafficSummaryPanel.vue b/src/views/ops/pages/report/history/components/TrafficSummaryPanel.vue deleted file mode 100644 index 23137fc..0000000 --- a/src/views/ops/pages/report/history/components/TrafficSummaryPanel.vue +++ /dev/null @@ -1,416 +0,0 @@ - - - - - - - diff --git a/src/views/ops/pages/report/history/components/TrafficTrendPanel.vue b/src/views/ops/pages/report/history/components/TrafficTrendPanel.vue deleted file mode 100644 index 784eebb..0000000 --- a/src/views/ops/pages/report/history/components/TrafficTrendPanel.vue +++ /dev/null @@ -1,581 +0,0 @@ - - - - - - - diff --git a/src/views/ops/pages/report/history/index.vue b/src/views/ops/pages/report/history/index.vue index 0d5a8f2..67fa955 100644 --- a/src/views/ops/pages/report/history/index.vue +++ b/src/views/ops/pages/report/history/index.vue @@ -1,85 +1,699 @@