Skip to content

Commit 6f5e12f

Browse files
authored
Merge pull request #54 from aice030/feat/46
Feat(View&Controller): 将告警变更记录的变量从死数据改为了可调用api接口获取数据的变量
2 parents 945bc4f + fc9a3c7 commit 6f5e12f

File tree

5 files changed

+240
-100
lines changed

5 files changed

+240
-100
lines changed

client/src/api/index.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,14 @@ export const apiService = {
9898
if (start) params.start = start
9999
if (limit) params.limit = limit
100100
return api.get('/v1/changelog/deployment', { params })
101+
},
102+
103+
// 获取告警规则变更记录
104+
getAlertRuleChangelog: (start?: string, limit?: number) => {
105+
const params: { start?: string; limit?: number } = {}
106+
if (start) params.start = start
107+
if (limit) params.limit = limit
108+
return api.get('/v1/changelog/alertrules', { params })
101109
}
102110
}
103111

client/src/mock/api.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// Mock API服务
2-
import { mockServicesData, mockServiceDetails, mockVersionOptions, mockScheduledReleases, mockServiceActiveVersions, mockServiceMetrics, mockAvailableVersions, mockDeploymentPlans, mockMetricsData, mockDeploymentChangelog, type ServicesResponse, type ServiceDetail, type ServiceActiveVersionsResponse, type ServiceMetricsResponse, type AvailableVersionsResponse, type DeploymentPlansResponse, type MetricsResponse, type DeploymentChangelogResponse } from './services'
2+
import { mockServicesData, mockServiceDetails, mockVersionOptions, mockScheduledReleases, mockServiceActiveVersions, mockServiceMetrics, mockAvailableVersions, mockDeploymentPlans, mockMetricsData, mockDeploymentChangelog, mockAlertRuleChangelog, type ServicesResponse, type ServiceDetail, type ServiceActiveVersionsResponse, type ServiceMetricsResponse, type AvailableVersionsResponse, type DeploymentPlansResponse, type MetricsResponse, type DeploymentChangelogResponse, type AlertRuleChangelogResponse } from './services'
33

44
// 模拟网络延迟
55
const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms))
@@ -151,6 +151,31 @@ export class MockApiService {
151151
next: items.length > 0 ? items[items.length - 1].startTime : undefined
152152
}
153153
}
154+
155+
// 获取告警规则变更记录 - 新的API接口
156+
static async getAlertRuleChangelog(start?: string, limit?: number): Promise<AlertRuleChangelogResponse> {
157+
await delay(300)
158+
console.log(`Mock API: 获取告警规则变更记录 - start: ${start}, limit: ${limit}`)
159+
160+
// 模拟分页逻辑
161+
let items = [...mockAlertRuleChangelog.items]
162+
163+
// 如果有start参数,模拟从该时间点开始的数据
164+
if (start) {
165+
const startTime = new Date(start)
166+
items = items.filter(item => new Date(item.editTime) <= startTime)
167+
}
168+
169+
// 如果有limit参数,限制返回数量
170+
if (limit && limit > 0) {
171+
items = items.slice(0, limit)
172+
}
173+
174+
return {
175+
items,
176+
next: items.length > 0 ? items[items.length - 1].editTime : undefined
177+
}
178+
}
154179
}
155180

156181
// 导出Mock API实例

client/src/mock/services.ts

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,26 @@ export interface DeploymentPlansResponse {
216216
items: DeploymentPlan[]
217217
}
218218

219+
// 告警规则变更记录数据结构
220+
export interface AlertRuleChangeValue {
221+
name: string
222+
old: string
223+
new: string
224+
}
225+
226+
export interface AlertRuleChangeItem {
227+
name: string
228+
editTime: string
229+
scope: string
230+
values: AlertRuleChangeValue[]
231+
reason: string
232+
}
233+
234+
export interface AlertRuleChangelogResponse {
235+
items: AlertRuleChangeItem[]
236+
next?: string
237+
}
238+
219239
// Mock数据 - 发布计划(按服务分组)
220240
export const mockDeploymentPlans: Record<string, DeploymentPlansResponse> = {
221241
"s3": {
@@ -1225,3 +1245,67 @@ export const mockServiceMetrics: Record<string, ServiceMetricsResponse> = {
12251245
]
12261246
}
12271247
}
1248+
1249+
// Mock数据 - 告警规则变更记录
1250+
export const mockAlertRuleChangelog: AlertRuleChangelogResponse = {
1251+
items: [
1252+
{
1253+
name: "p98_latency_too_high",
1254+
editTime: "2024-01-04T12:00:00Z",
1255+
scope: "service:stg",
1256+
values: [
1257+
{
1258+
name: "threshold",
1259+
old: "10",
1260+
new: "15"
1261+
},
1262+
{
1263+
name: "watchTimeDuration",
1264+
old: "3min",
1265+
new: "5min"
1266+
}
1267+
],
1268+
reason: "由于业务增长,系统负载增加,原有10ms的延时阈值过于严格,导致频繁告警。经过AI分析历史数据,建议将阈值调整为15ms,既能及时发现性能问题,又避免误报。"
1269+
},
1270+
{
1271+
name: "saturation_too_high",
1272+
editTime: "2024-01-03T15:00:00Z",
1273+
scope: "service:stg",
1274+
values: [
1275+
{
1276+
name: "threshold",
1277+
old: "50",
1278+
new: "45"
1279+
}
1280+
],
1281+
reason: "监控发现系统在50%饱和度时已出现性能下降,提前预警有助于避免系统过载。调整后可以更早发现资源瓶颈,确保服务稳定性。"
1282+
},
1283+
{
1284+
name: "p98_latency_too_high",
1285+
editTime: "2024-01-03T10:00:00Z",
1286+
scope: "service:mongo",
1287+
values: [
1288+
{
1289+
name: "threshold",
1290+
old: "10",
1291+
new: "5"
1292+
}
1293+
],
1294+
reason: "MongoDB服务经过优化后性能显著提升,原有10ms阈值已不适用。调整为5ms可以更精确地监控数据库性能,及时发现潜在问题。"
1295+
},
1296+
{
1297+
name: "error_rate_too_high",
1298+
editTime: "2024-01-01T15:00:00Z",
1299+
scope: "service:meta",
1300+
values: [
1301+
{
1302+
name: "threshold",
1303+
old: "10",
1304+
new: "5"
1305+
}
1306+
],
1307+
reason: "Meta服务作为核心服务,对错误率要求更加严格。将错误告警阈值从10降低到5,可以更敏感地发现服务异常,确保数据一致性。"
1308+
}
1309+
],
1310+
next: "2024-01-01T15:00:00Z"
1311+
}

client/src/stores/app.ts

Lines changed: 10 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,15 @@ export interface ModuleRecord {
6262
eventData?: any
6363
}
6464

65+
// 告警变更记录类型定义
66+
export interface AlarmChangeItem {
67+
id: string
68+
service: string
69+
change: string
70+
timestamp: string
71+
details: string
72+
}
73+
6574
export const useAppStore = defineStore('app', () => {
6675
// 状态
6776
const currentView = ref<'home' | 'changelog'>('home')
@@ -197,52 +206,6 @@ export const useAppStore = defineStore('app', () => {
197206
scheduledStart.value = time
198207
}
199208

200-
const createReleasePlan = async (planData: any) => {
201-
try {
202-
loading.value = true
203-
error.value = null
204-
const response = await apiService.createReleasePlan(planData)
205-
scheduledReleases.value.push(response.data)
206-
return response.data
207-
} catch (err: any) {
208-
error.value = err.message || '创建发布计划失败'
209-
throw err
210-
} finally {
211-
loading.value = false
212-
}
213-
}
214-
215-
const updateReleasePlan = async (id: string, planData: any) => {
216-
try {
217-
loading.value = true
218-
error.value = null
219-
const response = await apiService.updateReleasePlan(id, planData)
220-
const index = scheduledReleases.value.findIndex(r => r.id === id)
221-
if (index !== -1) {
222-
scheduledReleases.value[index] = response.data
223-
}
224-
return response.data
225-
} catch (err: any) {
226-
error.value = err.message || '更新发布计划失败'
227-
throw err
228-
} finally {
229-
loading.value = false
230-
}
231-
}
232-
233-
const cancelReleasePlan = async (id: string) => {
234-
try {
235-
loading.value = true
236-
error.value = null
237-
await apiService.cancelReleasePlan(id)
238-
scheduledReleases.value = scheduledReleases.value.filter(r => r.id !== id)
239-
} catch (err: any) {
240-
error.value = err.message || '取消发布计划失败'
241-
throw err
242-
} finally {
243-
loading.value = false
244-
}
245-
}
246209

247210
return {
248211
// 状态
@@ -272,9 +235,6 @@ export const useAppStore = defineStore('app', () => {
272235
setSelectedSlice,
273236
setMetricsOpen,
274237
setSelectedVersion,
275-
setScheduledStart,
276-
createReleasePlan,
277-
updateReleasePlan,
278-
cancelReleasePlan
238+
setScheduledStart
279239
}
280240
})

0 commit comments

Comments
 (0)