diff --git a/alerter/src/main/java/com/usthe/alert/pojo/entity/Alert.java b/alerter/src/main/java/com/usthe/alert/pojo/entity/Alert.java index 9621948..1f1042f 100644 --- a/alerter/src/main/java/com/usthe/alert/pojo/entity/Alert.java +++ b/alerter/src/main/java/com/usthe/alert/pojo/entity/Alert.java @@ -67,7 +67,7 @@ public class Alert { @Length(max = 1024) private String content; - @ApiModelProperty(value = "告警状态: 0-正常告警(未读) 1-阈值触发但未达到告警次数 2-恢复告警 3-已读已知", + @ApiModelProperty(value = "告警状态: 0-正常告警(待处理) 1-阈值触发但未达到告警次数 2-恢复告警 3-已处理", example = "1", accessMode = READ_WRITE, position = 7) @Min(0) @Max(2) diff --git a/manager/src/main/resources/db/schema.sql b/manager/src/main/resources/db/schema.sql index 34bd205..b9ce7ba 100644 --- a/manager/src/main/resources/db/schema.sql +++ b/manager/src/main/resources/db/schema.sql @@ -116,7 +116,7 @@ CREATE TABLE alert alert_define_id bigint not null comment '告警关联的告警定义ID', priority tinyint not null default 0 comment '告警级别 0:高-emergency-紧急告警-红色 1:中-critical-严重告警-橙色 2:低-warning-警告告警-黄色', content varchar(255) not null comment '告警通知实际内容', - status tinyint not null default 0 comment '告警状态: 0-正常告警(未读) 1-阈值触发但未达到告警次数 2-恢复告警 3-已读已知', + status tinyint not null default 0 comment '告警状态: 0-正常告警(待处理) 1-阈值触发但未达到告警次数 2-恢复告警 3-已处理', times int not null comment '触发次数,即达到告警定义的触发阈值次数要求后才会发告警', gmt_create timestamp default current_timestamp comment 'create time', primary key (id) diff --git a/web-app/src/app/layout/basic/widgets/notify.component.ts b/web-app/src/app/layout/basic/widgets/notify.component.ts index f17f986..5de4e2e 100644 --- a/web-app/src/app/layout/basic/widgets/notify.component.ts +++ b/web-app/src/app/layout/basic/widgets/notify.component.ts @@ -1,8 +1,11 @@ -import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core'; -import { NoticeIconList, NoticeIconSelect, NoticeItem } from '@delon/abc/notice-icon'; -import { add, formatDistanceToNow, parse } from 'date-fns'; +import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit} from '@angular/core'; +import {NoticeIconSelect, NoticeItem } from '@delon/abc/notice-icon'; import { NzI18nService } from 'ng-zorro-antd/i18n'; import { NzMessageService } from 'ng-zorro-antd/message'; +import {AlertService} from "../../../service/alert.service"; +import {ALAIN_I18N_TOKEN} from "@delon/theme"; +import {I18NService} from "@core"; +import {Router} from "@angular/router"; @Component({ selector: 'header-notify', @@ -13,53 +16,35 @@ import { NzMessageService } from 'ng-zorro-antd/message'; [loading]="loading" btnClass="alain-default__nav-item" btnIconClass="alain-default__nav-item-icon" - (select)="select($event)" - (clear)="clear($event)" + (clear)="gotoAlertCenter($event)" (popoverVisibleChange)="loadData()" > `, changeDetection: ChangeDetectionStrategy.OnPush }) -export class HeaderNotifyComponent { +export class HeaderNotifyComponent implements OnInit{ + data: NoticeItem[] = [ { - title: '告警通知', + title: '近期未处理告警', list: [], - emptyText: '暂无告警通知', + emptyText: '暂无未处理告警', emptyImage: 'https://gw.alipayobjects.com/zos/rmsportal/wAhyIChODzsoKIOBHcBk.svg', - clearText: '清空告警' + clearText: '进入告警中心' } ]; - count = 5; + count = 0; loading = false; - constructor(private msg: NzMessageService, private nzI18n: NzI18nService, private cdr: ChangeDetectorRef) {} + constructor(private msg: NzMessageService, + private nzI18n: NzI18nService, + private router: Router, + @Inject(ALAIN_I18N_TOKEN) private i18nSvc: I18NService, + private alertSvc: AlertService, + private cdr: ChangeDetectorRef) {} - private updateNoticeData(notices: NoticeIconList[]): NoticeItem[] { - const data = this.data.slice(); - data.forEach(i => (i.list = [])); - - notices.forEach(item => { - const newItem = { ...item } as NoticeIconList; - if (typeof newItem.datetime === 'string') { - newItem.datetime = parse(newItem.datetime, 'yyyy-MM-dd', new Date()); - } - if (newItem.datetime) { - newItem.datetime = formatDistanceToNow(newItem.datetime as Date, { locale: this.nzI18n.getDateLocale() }); - } - if (newItem.extra && newItem.status) { - newItem.color = ( - { - todo: undefined, - processing: 'blue', - urgent: 'red', - doing: 'gold' - } as { [key: string]: string | undefined } - )[newItem.status]; - } - data.find(w => w.title === newItem.type)!.list.push(newItem); - }); - return data; + ngOnInit(): void { + this.loadData(); } loadData(): void { @@ -67,60 +52,39 @@ export class HeaderNotifyComponent { return; } this.loading = true; - setTimeout(() => { - const now = new Date(); - this.data = this.updateNoticeData([ - { - id: '000000001', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png', - title: '监控-MYSQL_192.135.34.2-发出2级告警', - datetime: add(now, { days: 10 }), - type: '告警通知' - }, - { - id: '000000002', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png', - title: '监控-MYSQL_192.135.44.2-发出1级告警', - datetime: add(now, { days: -3 }), - type: '告警通知' - }, - { - id: '000000003', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png', - title: '监控-WEBSITE_www.baidu.com-发出4级告警', - datetime: add(now, { months: -3 }), - read: true, - type: '告警通知' - }, - { - id: '000000004', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png', - title: '监控-REDIS_192.34.55.3-发出4级告警', - datetime: add(now, { years: -1 }), - type: '告警通知' - }, - { - id: '000000005', - avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png', - title: '监控-REDIS_192.34.55.6-发出4级告警', - datetime: '2020-08-07', - type: '告警通知' + let loadAlerts$ = this.alertSvc.searchAlerts(0, undefined,undefined, 0, 5) + .subscribe(message => { + loadAlerts$.unsubscribe(); + if (message.code === 0) { + let page = message.data; + let alerts = page.content; + this.data[0].list = []; + alerts.forEach(alert => { + let item = { + id: alert.id, + avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png', + title: '监控-' + alert.monitorName +'-发出' + this.i18nSvc.fanyi(`alert.priority.${alert.priority}`), + datetime: alert.gmtCreate, + color: 'blue', + type: '近期未处理告警' + } + this.data[0].list.push(item); + }) + this.count = page.totalElements; + } else { + console.warn(message.msg); } - ]); - - this.loading = false; - this.cdr.detectChanges(); - }, 500); + this.loading = false; + this.cdr.detectChanges(); + }, error => { + loadAlerts$.unsubscribe(); + console.error(error.msg); + this.loading = false; + }) } - clear(type: string): void { - this.loading = true; - setTimeout(() => { - this.data = this.updateNoticeData([]); - this.loading = false; - this.cdr.detectChanges(); - }, 500); - this.msg.success(`已清空 ${type}`); + gotoAlertCenter(type: string): void { + this.router.navigateByUrl(`/alert/center`); } select(res: NoticeIconSelect): void { diff --git a/web-app/src/app/layout/basic/widgets/user.component.ts b/web-app/src/app/layout/basic/widgets/user.component.ts index 4a4c93f..b66bcd5 100644 --- a/web-app/src/app/layout/basic/widgets/user.component.ts +++ b/web-app/src/app/layout/basic/widgets/user.component.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, Inject } from '@angular/core'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; import { Router } from '@angular/router'; -import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth'; import { SettingsService, User } from '@delon/theme'; +import {LocalStorageService} from "../../../service/local-storage.service"; @Component({ selector: 'header-user', @@ -20,10 +20,6 @@ import { SettingsService, User } from '@delon/theme'; {{ 'menu.account.settings' | i18n }} -