Skip to content
alarm-modal.component.ts 12.8 KiB
Newer Older
wangqinghua's avatar
wangqinghua committed
import {Component, EventEmitter, OnInit, Output, ViewChild} from '@angular/core';
wangqinghua's avatar
wangqinghua committed
import {AlarmService} from '../../alarm/alarm.service';
import {FindUserComponent} from '../../alarm/modal/find-user/find-user.component';
wangqinghua's avatar
wangqinghua committed
import {NzFormatEmitEvent, NzMessageService, NzTreeComponent, NzTreeNode} from 'ng-zorro-antd';
import {OverAllService} from '../../overAll/overAll.service';
wangqinghua's avatar
wangqinghua committed
import {SelectPersonComponent} from '../select-person/select-person.component';
import {WorkService} from '../../work/work.service';
wangqinghua's avatar
wangqinghua committed

@Component({
wangqinghua's avatar
wangqinghua committed
    selector: 'smart-alarm-modal',
    templateUrl: './alarm-modal.component.html',
wangqinghua's avatar
wangqinghua committed
    styles: [
            `
            .tree-div {
wangqinghua's avatar
wangqinghua committed
                border: 1px solid #dadada;
                height: 200px;
                overflow: auto;
                margin-top: 10px;
wangqinghua's avatar
wangqinghua committed
            }
        `
    ]
wangqinghua's avatar
wangqinghua committed
})
export class AlarmModalComponent implements OnInit {
wangqinghua's avatar
wangqinghua committed
    @ViewChild('smartFindUser') smartFindUser: FindUserComponent;
wangqinghua's avatar
wangqinghua committed
    @ViewChild('smartSelectPerson') smartSelectPerson: SelectPersonComponent;
wangqinghua's avatar
wangqinghua committed
    @ViewChild('nzTree') nzTree: NzTreeComponent;
wangqinghua's avatar
wangqinghua committed
    @Output() done = new EventEmitter<any>();
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    title;
wangqinghua's avatar
wangqinghua committed
    tabNum = 0;
    isShow = false;
wangqinghua's avatar
wangqinghua committed
    isOkLoading = false;
wangqinghua's avatar
wangqinghua committed
    nodes;
    nodeList;
wangqinghua's avatar
wangqinghua committed
    actionid;  //告警Id
wangqinghua's avatar
wangqinghua committed
    isEvent = '2';
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    groupList;
wangqinghua's avatar
wangqinghua committed
    sendOption = [];
wangqinghua's avatar
wangqinghua committed
    objList;
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    selectTreeList = [];
wangqinghua's avatar
wangqinghua committed
    validateForm;

wangqinghua's avatar
wangqinghua committed
    selectModal = false;
wangqinghua's avatar
wangqinghua committed
    sendInfoList = [];   //发送方式
wangqinghua's avatar
wangqinghua committed
    eventTypeList;  //事件分类列表

    operatorList = [];   //负责人列表
wangqinghua's avatar
wangqinghua committed

    serviceid;   //业务id
wangqinghua's avatar
wangqinghua committed
    constructor(private alarmSer: AlarmService, private message: NzMessageService,
wangqinghua's avatar
wangqinghua committed
                private overAllSer: OverAllService, private workSer: WorkService,) {
wangqinghua's avatar
wangqinghua committed
    }

    ngOnInit() {
        this.initForm();
        this.getSendFun();
wangqinghua's avatar
wangqinghua committed
        this.getACtion();
wangqinghua's avatar
wangqinghua committed
        this.getGroup();
wangqinghua's avatar
wangqinghua committed
        this.getZabbixObj();
wangqinghua's avatar
wangqinghua committed
        this.getEventType();
wangqinghua's avatar
wangqinghua committed
    }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    //初始化
    initForm() {
wangqinghua's avatar
wangqinghua committed
        this.selectModal = false;
wangqinghua's avatar
wangqinghua committed
        this.tabNum = 0;
wangqinghua's avatar
wangqinghua committed
        this.isEvent = '2';
wangqinghua's avatar
wangqinghua committed
        this.selectTreeList = [];
wangqinghua's avatar
wangqinghua committed
        this.sendInfoList = [];
        this.operatorList = [];   //负责人列表
wangqinghua's avatar
wangqinghua committed
        this.validateForm = {
            name: null,
            alertGroupId: null,
wangqinghua's avatar
wangqinghua committed
            warn: 0,
            serious: 0,
            mediaTypeIds: [],
            def_longdata: '问题 {TRIGGER.NAME} 开始于: {EVENT.TIME} {EVENT.DATE}\n' +
            '主机: {HOST.NAME}\n' +
wangqinghua's avatar
wangqinghua committed
            '严重程度: {TRIGGER.SEVERITY}\n',
wangqinghua's avatar
wangqinghua committed
            r_longdata: '' +
wangqinghua's avatar
wangqinghua committed
            '问题 {TRIGGER.NAME} 恢复于: {EVENT.TIME} {EVENT.DATE} \n' +
            '主机: {HOST.NAME}\n' +
wangqinghua's avatar
wangqinghua committed
            '严重程度: {TRIGGER.SEVERITY}',
wangqinghua's avatar
wangqinghua committed
            sendInfos: null,
            event: {
                eventTypeId: null,   //事件分类id
                operators: null,   //事件负责人
                title: null,  //事件标题
wangqinghua's avatar
wangqinghua committed
            }
wangqinghua's avatar
wangqinghua committed
        };
    }

wangqinghua's avatar
wangqinghua committed
    //获取事件分类
    getEventType() {
        const data = {
            type: 0
        };
        this.workSer.findParamsByType(data).subscribe(
            (res) => {
                this.eventTypeList = res.data;
            }
        );
    }

wangqinghua's avatar
wangqinghua committed
    //获取告警目标
wangqinghua's avatar
wangqinghua committed
    getACtion() {
wangqinghua's avatar
wangqinghua committed
        this.overAllSer.findGroup().subscribe(
            (res) => {
                if (res.errCode == 10000) {
                    const dataSet = res.data;
                    dataSet.forEach(res => {
                        res.title = res.name;
                        res.key = res.groupid;
                    });
                    this.nodeList = dataSet;
                    this.toNode(dataSet);
                } else {
                    this.message.info(res.errMsg);
                }
            }
        );
    }

wangqinghua's avatar
wangqinghua committed
    //获取告警分组
wangqinghua's avatar
wangqinghua committed
    getGroup() {
wangqinghua's avatar
wangqinghua committed
        this.alarmSer.alertGroupFind().subscribe(
            (res) => {
                if (res.errCode == 10000) {
                    this.groupList = res.data;
                }
            }
        );
    }

wangqinghua's avatar
wangqinghua committed
    toNode(data) {
        this.nodes = data.map(res => {
            return new NzTreeNode(res);
        });
    }

    //下级
    mouseAction(name: string, event: NzFormatEmitEvent) {
wangqinghua's avatar
wangqinghua committed
        if (event.node.children.length > 0) {
wangqinghua's avatar
wangqinghua committed
            return false;
        }
wangqinghua's avatar
wangqinghua committed
        const index = <any>event.node.key - 1;
        const data = {
            'groupids': [event.node.origin.groupid],
            'hostExtend': {
                'superiorHostid': null
            }
        };
        this.overAllSer.findDetail(data).subscribe(
            (res) => {
                if (res.data) {
                    const dataSet = res.data;
wangqinghua's avatar
wangqinghua committed
                    dataSet.forEach(e => {
                        e.title = e.name;
                        e.key = e.hostid;
                        e.isLeaf = true;
wangqinghua's avatar
wangqinghua committed
                        if (this.selectTreeList.includes(e.key)) {
wangqinghua's avatar
wangqinghua committed
                            e.checked = true;
                        }
wangqinghua's avatar
wangqinghua committed
                    });
                    event.node.addChildren(dataSet);
                } else {
                    event.node.addChildren([]);
                    this.message.info('该分组下无资源');
                }

            }
        );
        setTimeout(_ => {
        }, 1000);
    }

    //选择树节点
wangqinghua's avatar
wangqinghua committed
    selectCheckTree(node) {
        if (node.isChecked) {
            this.selectTreeList.push(node.origin.hostid);
wangqinghua's avatar
wangqinghua committed
        } else {
wangqinghua's avatar
wangqinghua committed
            const index = this.selectTreeList.indexOf(node.origin.hostid);
wangqinghua's avatar
wangqinghua committed
            this.selectTreeList.splice(index, 1);
        }
    }

wangqinghua's avatar
wangqinghua committed
    //获取发送方式
    getSendFun() {
        this.alarmSer.mediaTypeFind({}).subscribe(
            (res) => {
                if (res.errCode == 10000) {
                    this.sendOption = res.data;
                }
            }
        );
    }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    //获取发送对象 zabbix
    getZabbixObj() {
        this.alarmSer.zUserFind({}).subscribe(
            (res) => {
                if (res.errCode == 10000) {
                    this.objList = res.data;
                }
            }
        );
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //添加发送方式
wangqinghua's avatar
wangqinghua committed
    addOption() {
wangqinghua's avatar
wangqinghua committed
        const data = {
wangqinghua's avatar
wangqinghua committed
            mediaType: null,
            receiver: ''
wangqinghua's avatar
wangqinghua committed
        };
        this.sendInfoList.push(data);
    }

    //删除发送方式
wangqinghua's avatar
wangqinghua committed
    deleteOption(index) {
        this.sendInfoList.splice(index, 1);
wangqinghua's avatar
wangqinghua committed
    }

    //新增告警
wangqinghua's avatar
wangqinghua committed
    showAddModal(title,serviceid) {
        this.serviceid = serviceid;
wangqinghua's avatar
wangqinghua committed
        this.title = title;
wangqinghua's avatar
wangqinghua committed
        this.isShow = true;
    }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    //编辑告警
wangqinghua's avatar
wangqinghua committed
    showEditModal(title, id) {
wangqinghua's avatar
wangqinghua committed
        this.title = title;
        this.isShow = true;
wangqinghua's avatar
wangqinghua committed
        this.actionid = id;
        this.alarmSer.getAction(id).subscribe(
wangqinghua's avatar
wangqinghua committed
            (res) => {
                this.viewData(res.data);
            }
        );
    }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    //回显数据
    viewData(data) {
wangqinghua's avatar
wangqinghua committed
        this.validateForm.name = data.name;
        this.validateForm.alertGroupId = data.alertGroupId;
        this.validateForm.serious = data.serious;
        this.validateForm.warn = data.warn;
wangqinghua's avatar
wangqinghua committed
        //事件负责人回显
        if (data.event) {
            this.isEvent = '1';
wangqinghua's avatar
wangqinghua committed
            this.validateForm.event.title = data.event.title;
            this.validateForm.event.eventTypeId = data.event.eventTypeId;
wangqinghua's avatar
wangqinghua committed
            this.operatorList = data.event.operators.map(e => {
                const d = {
                    username: e.username,
                    userId: e.userId
                };
                return d;
            });
        }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
        //发送方式回显
        if (data.sendInfos && data.sendInfos.length > 0) {
            this.sendInfoList = data.sendInfos.map(e => {
                const d = {
                    mediaType: e.mediaType,
                    receiver: e.receiver
                };
                return d;
            });
        }

        //恢复信息
        if (data.r_longdata) {
            this.selectModal = true;
        }

        //
        this.selectTreeList = data.hostIds;
        this.nodeList.forEach(e => {
            if (data.hostIds.includes(e.key)) {
                e.checked = true;
wangqinghua's avatar
wangqinghua committed
            }
wangqinghua's avatar
wangqinghua committed
        });
        this.toNode(this.nodeList);
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //取消
wangqinghua's avatar
wangqinghua committed
    handleEditCancel() {
wangqinghua's avatar
wangqinghua committed
        this.initForm();
wangqinghua's avatar
wangqinghua committed
        this.isShow = false;
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //tab切换
wangqinghua's avatar
wangqinghua committed
    tabsChange(index) {
        this.tabNum = index;
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //选择处理人弹窗
wangqinghua's avatar
wangqinghua committed
    selectPerson() {
        this.smartSelectPerson.showModal('选择事件负责人', null);
wangqinghua's avatar
wangqinghua committed
    }

    //选择事件负责人done
wangqinghua's avatar
wangqinghua committed
    getUser(e) {
wangqinghua's avatar
wangqinghua committed
        const arr = [];
        e.forEach(res => {
            const data = {
                username: res.name,
                userId: res.id
            };
            arr.push(data);
        });
        this.operatorList = arr;
    }

wangqinghua's avatar
wangqinghua committed
    deleteOperator(index) {
        this.operatorList.splice(index, 1);
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //保存
wangqinghua's avatar
wangqinghua committed
    handEditleOk() {
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
        if (!this.check()) {
wangqinghua's avatar
wangqinghua committed
            return false;
        }
wangqinghua's avatar
wangqinghua committed
        this.isOkLoading = true;
wangqinghua's avatar
wangqinghua committed
        const optionArr = [];
wangqinghua's avatar
wangqinghua committed
        this.sendOption.forEach(res => {
            if (res.checked) {
wangqinghua's avatar
wangqinghua committed
                optionArr.push(res.value);
            }
        });

wangqinghua's avatar
wangqinghua committed
        this.validateForm.warn = this.validateForm.warn == true ? 1 : 0;
        this.validateForm.serious = this.validateForm.serious == true ? 1 : 0;
wangqinghua's avatar
wangqinghua committed
        const data = {
            name: this.validateForm.name,
wangqinghua's avatar
wangqinghua committed
            alertGroupId: this.validateForm.alertGroupId,
wangqinghua's avatar
wangqinghua committed
            warn: this.validateForm.warn,
            serious: this.validateForm.serious,
            mediaTypeIds: optionArr,
            sendInfos: this.sendInfoList,
            def_longdata: this.validateForm.def_longdata,
            r_longdata: this.validateForm.r_longdata,
            r_shortdata: this.validateForm.r_shortdata,
            hostIds: this.selectTreeList,
wangqinghua's avatar
wangqinghua committed
            event: null,
            serviceid:this.serviceid,
wangqinghua's avatar
wangqinghua committed
        };
wangqinghua's avatar
wangqinghua committed
        if(this.isEvent == "1"){
            data.event = {
                    eventTypeId: this.validateForm.event.eventTypeId,   //事件分类id
                    operators: this.operatorList,   //事件负责人
                    title: this.validateForm.event.title,  //事件标题
            }
        }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
        if (this.title == '添加告警' || this.title == "添加告警推送") {
wangqinghua's avatar
wangqinghua committed
            this.create(data);
        }
        if (this.title == '编辑告警') {
            this.update(data);
        }
wangqinghua's avatar
wangqinghua committed
    }

    //校验
wangqinghua's avatar
wangqinghua committed
    check() {
        if (!this.validateForm.name) {
            this.message.error('请输入告警名称');
wangqinghua's avatar
wangqinghua committed
            return false;
        }
wangqinghua's avatar
wangqinghua committed
        if (this.sendInfoList.length == 0) {
            this.message.error('请选择发送对象');
wangqinghua's avatar
wangqinghua committed
            return false;
        }
wangqinghua's avatar
wangqinghua committed
        if (this.title != "添加告警推送" && this.selectTreeList.length == 0) {
wangqinghua's avatar
wangqinghua committed
            this.message.error('请选择告警目标');
wangqinghua's avatar
wangqinghua committed
            return false;
        }

wangqinghua's avatar
wangqinghua committed
        if (!this.validateForm.alertGroupId) {
            this.message.error('请选择告警分组');
wangqinghua's avatar
wangqinghua committed
            return false;
        }

wangqinghua's avatar
wangqinghua committed
        if (!this.validateForm.def_longdata) {
            this.message.error('请输入发送信息');
wangqinghua's avatar
wangqinghua committed
            return false;
        }
wangqinghua's avatar
wangqinghua committed
        if (this.isEvent == '1') {
            if (!this.validateForm.event.title) {
                this.message.error('请输入事件标题');
wangqinghua's avatar
wangqinghua committed
                return false;
            }
wangqinghua's avatar
wangqinghua committed
            if (!this.validateForm.event.eventTypeId) {
                this.message.error('请选择事件分类');
wangqinghua's avatar
wangqinghua committed
                return false;
            }
wangqinghua's avatar
wangqinghua committed
            if (this.operatorList.length == 0) {
                this.message.error('请选择事件负责人');
wangqinghua's avatar
wangqinghua committed
                return false;
            }
        }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
        let number = true;
wangqinghua's avatar
wangqinghua committed
        this.sendInfoList.map(e => {
            if (!e.mediaType) {
wangqinghua's avatar
wangqinghua committed
                number = false;
            }
wangqinghua's avatar
wangqinghua committed
            if (!e.receiver) {
wangqinghua's avatar
wangqinghua committed
                number = false;
            }
        });

wangqinghua's avatar
wangqinghua committed
        if (!number) {
            this.message.error('请输入发送对象');
wangqinghua's avatar
wangqinghua committed
            return false;
        }

        return true;
    }

    //创建
wangqinghua's avatar
wangqinghua committed
    create(data) {
wangqinghua's avatar
wangqinghua committed
        this.alarmSer.actionCreate(data).subscribe(
            (res) => {
wangqinghua's avatar
wangqinghua committed
                if (res.errCode == 10000) {
wangqinghua's avatar
wangqinghua committed
                    this.isShow = false;
                    this.initForm();
                    this.done.emit();
wangqinghua's avatar
wangqinghua committed
                    this.message.success('创建告警成功');
                } else {
wangqinghua's avatar
wangqinghua committed
                    this.message.error(res.errMsg);
wangqinghua's avatar
wangqinghua committed
                }
wangqinghua's avatar
wangqinghua committed
                this.isOkLoading = false;
wangqinghua's avatar
wangqinghua committed
            }
        );
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //修改
wangqinghua's avatar
wangqinghua committed
    update(data) {
wangqinghua's avatar
wangqinghua committed
        data.actionid = this.actionid;
        this.alarmSer.actionUpdate(data).subscribe(
            (res) => {
wangqinghua's avatar
wangqinghua committed
                if (res.errCode == 10000) {
wangqinghua's avatar
wangqinghua committed
                    this.isShow = false;
                    this.initForm();
                    this.done.emit();
wangqinghua's avatar
wangqinghua committed
                    this.message.success('编辑告警成功');
                } else {
wangqinghua's avatar
wangqinghua committed
                    this.message.error(res.errMsg);
                }
wangqinghua's avatar
wangqinghua committed
                this.isOkLoading = false;
wangqinghua's avatar
wangqinghua committed
            }
        );
    }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
}