Skip to content
alarm-modal.component.ts 9.86 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
    nodes;
    nodeList;
wangqinghua's avatar
wangqinghua committed
    actionid;  //告警Id
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
    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.tabNum = 0;
wangqinghua's avatar
wangqinghua committed
        this.selectTreeList = [];
wangqinghua's avatar
wangqinghua committed
        this.validateForm = {
            name: null,
            alertGroupId: null,
wangqinghua's avatar
wangqinghua committed
            warn:0,
            serious:0,
            mediaTypeIds:[],
            def_longdata:null,
            r_longdata:null,
            r_shortdata:null,
wangqinghua's avatar
wangqinghua committed
            sendInfos:null,
wangqinghua's avatar
wangqinghua committed
            event:{
                eventTypeId:null,   //事件分类id
                operators:null,   //事件负责人
                description:null,  //事件描述
            }
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
    //获取告警分组
    getGroup(){
        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){
            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;
                    dataSet.forEach(res => {
                        res.title = res.name;
                        res.key = res.groupid;
                        res.isLeaf = true;
                    });
                    event.node.addChildren(dataSet);
                } else {
                    event.node.addChildren([]);
                    this.message.info('该分组下无资源');
                }

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

    //选择树节点
    selectCheckTree(event: NzFormatEmitEvent) {
        if (event.node.isChecked) {
            this.selectTreeList.push(event.node.origin.hostid);
        } else {
            const index = this.selectTreeList.indexOf(event.node.origin.hostid);
            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
    //添加发送方式
    addOption(){
        const data = {
            mediaType:null,
            receiver:""
        };
        this.sendInfoList.push(data);
    }

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

    //新增告警
wangqinghua's avatar
wangqinghua committed
    showAddModal(title) {
        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) {
        this.title = title;
        this.isShow = true;
wangqinghua's avatar
wangqinghua committed
        this.actionid = id;
        this.alarmSer.getAction(id).subscribe(
            (res)=>{
                this.validateForm = res.data;
            }
        )
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) {
wangqinghua's avatar
wangqinghua committed
        console.log(this.tabNum);
wangqinghua's avatar
wangqinghua committed
        this.tabNum = index;
wangqinghua's avatar
wangqinghua committed
    }

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

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

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

wangqinghua's avatar
wangqinghua committed
        if(!this.check()){
            return false;
        }

wangqinghua's avatar
wangqinghua committed
        const optionArr = [];
        this.sendOption.forEach(res=>{
            if(res.checked){
                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,
            warn:this.validateForm.warn,
            serious:this.validateForm.serious,
            mediaTypeIds:optionArr,
wangqinghua's avatar
wangqinghua committed
            sendInfos:this.sendInfoList,
wangqinghua's avatar
wangqinghua committed
            def_longdata:this.validateForm.def_longdata,
            r_longdata:this.validateForm.r_longdata,
            r_shortdata:this.validateForm.r_shortdata,
wangqinghua's avatar
wangqinghua committed
            event:{
                eventTypeId:this.validateForm.event.eventTypeId,   //事件分类id
                operators:this.operatorList,   //事件负责人
                description:this.validateForm.event.description,  //事件描述
            }
wangqinghua's avatar
wangqinghua committed
        };
wangqinghua's avatar
wangqinghua committed

       if(this.title == '添加告警'){
           this.create(data)
       }
       if(this.title == "编辑告警"){
           this.update(data);
       }
    }

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

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

        if(!this.validateForm.def_longdata ){
            this.message.error("请输入发送信息");
            return false;
        }

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

        if(!number){
            this.message.error("请输入发送对象");
            return false;
        }

        return true;
    }

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

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

wangqinghua's avatar
wangqinghua committed
}