Skip to content
flow-trend.component.ts 10 KiB
Newer Older
wangqinghua's avatar
wangqinghua committed
import {Component, ElementRef, OnInit, ViewChild} from '@angular/core';
wangqinghua's avatar
wangqinghua committed
import {TopologyService} from '../topology.service';
import {OverAllService} from '../../overAll/overAll.service';
import {NzMessageService} from 'ng-zorro-antd';
import {pageSize} from '../../app.constants';
import {DatePipe} from '@angular/common';

declare var vis: any;
wangqinghua's avatar
wangqinghua committed

@Component({
wangqinghua's avatar
wangqinghua committed
    selector: 'smart-flow-trend',
    templateUrl: './flow-trend.component.html',
    styles: []
wangqinghua's avatar
wangqinghua committed
})
export class FlowTrendComponent implements OnInit {
wangqinghua's avatar
wangqinghua committed
    groupList;
    hostList;
wangqinghua's avatar
wangqinghua committed
    isLoading;
wangqinghua's avatar
wangqinghua committed
    obj = {
        groupid:null,
        hostid: null,
        startTime: '',
        endTime: ''
    };

    //in
    inList = [];
    inPageNum = 1;
wangqinghua's avatar
wangqinghua committed
    inPageCount = '5';
wangqinghua's avatar
wangqinghua committed
    inTotalNum;
wangqinghua's avatar
wangqinghua committed
    inLoading;
wangqinghua's avatar
wangqinghua committed

    //out
    outList = [];
    outPageNum = 1;
wangqinghua's avatar
wangqinghua committed
    outPageCount = '5';
wangqinghua's avatar
wangqinghua committed
    outTotalNum;
wangqinghua's avatar
wangqinghua committed
    outLoading;

    timeType = "1";
    timeBegin;
    timeEnd;
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    //图表
    chartOption;
wangqinghua's avatar
wangqinghua committed
    inEchartData;
    outEchartData;
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    constructor(private topologySer: TopologyService, private overAllSer: OverAllService,
wangqinghua's avatar
wangqinghua committed
                private message: NzMessageService,private datePipe:DatePipe) {
wangqinghua's avatar
wangqinghua committed
    }

    ngOnInit() {
        const today = new Date().getTime();
wangqinghua's avatar
wangqinghua committed
        this.obj.startTime = this.datePipe.transform(today,"yyyy-MM-dd") + " 00:00:00";
        this.obj.endTime = this.datePipe.transform(today,"yyyy-MM-dd") + " 23:59:59";
wangqinghua's avatar
wangqinghua committed
        this.getGroup();
wangqinghua's avatar
wangqinghua committed
    }

    //获取分组
    getGroup() {
        this.overAllSer.getgroups({}).subscribe(
            (res) => {
                if (res.errCode == 10000) {
                    this.groupList = res.data;
wangqinghua's avatar
wangqinghua committed
                    this.obj.groupid = this.groupList[0].groupid +"";
                    this.onchange();
wangqinghua's avatar
wangqinghua committed
                }
            }
        );
    }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    //查询主机
wangqinghua's avatar
wangqinghua committed
    onchange() {
wangqinghua's avatar
wangqinghua committed
        const data = {
wangqinghua's avatar
wangqinghua committed
            'groupids': [this.obj.groupid],
wangqinghua's avatar
wangqinghua committed
            'hostExtend': {
                'superiorHostid': null
            }
        };
        this.overAllSer.findDetail(data).subscribe(
            (res) => {
                if (res.errCode == 10000) {
                    this.hostList = res.data;
wangqinghua's avatar
wangqinghua committed
                    this.obj.hostid = this.hostList[0].hostid +"";
wangqinghua's avatar
wangqinghua committed
                    this.getEcharts(null);
wangqinghua's avatar
wangqinghua committed
                }
            }
        );
    }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    //获取图标数据
wangqinghua's avatar
wangqinghua committed
    getEcharts(itemid) {
wangqinghua's avatar
wangqinghua committed
        this.isLoading = true;
wangqinghua's avatar
wangqinghua committed
        const  data= {
wangqinghua's avatar
wangqinghua committed
            itemid: itemid,
wangqinghua's avatar
wangqinghua committed
            endTime: this.obj.endTime,
wangqinghua's avatar
wangqinghua committed
            startTime: this.obj.startTime,
            hostid:this.obj.hostid,
            groupid:this.obj.groupid,
            type:'in',
wangqinghua's avatar
wangqinghua committed
            limit:'1000'
wangqinghua's avatar
wangqinghua committed
        };
        this.topologySer.findTrendData(data).subscribe(
            (res) => {
wangqinghua's avatar
wangqinghua committed
                if(res.errCode == 10000){
wangqinghua's avatar
wangqinghua committed
                    if(res.data.length > 0){
wangqinghua's avatar
wangqinghua committed
                        this.inEchartData = res.data;
                    }else{
                        this.message.info("图表暂无数据");
wangqinghua's avatar
wangqinghua committed
                        this.isLoading = false;
wangqinghua's avatar
wangqinghua committed
                    }
wangqinghua's avatar
wangqinghua committed
                    data.type = "out";
                    this.topologySer.findTrendData(data).subscribe(
                        (res)=>{
wangqinghua's avatar
wangqinghua committed
                            if(res.data.length > 0){
wangqinghua's avatar
wangqinghua committed
                                this.outEchartData = res.data;
wangqinghua's avatar
wangqinghua committed
                                this.setEacharts();
wangqinghua's avatar
wangqinghua committed
                            }else{
                                this.message.info("图表暂无数据");
wangqinghua's avatar
wangqinghua committed
                                this.isLoading = false;
wangqinghua's avatar
wangqinghua committed
                            }
wangqinghua's avatar
wangqinghua committed
                        }
                    )
wangqinghua's avatar
wangqinghua committed
                }else{
                    this.message.warning(res.errMsg);
                }
wangqinghua's avatar
wangqinghua committed
            }
        );
    }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    setEacharts(){
        let itemStyle = {
            normal: {
            },
            emphasis: {
                barBorderWidth: 1,
                shadowBlur: 10,
                shadowOffsetX: 0,
                shadowOffsetY: 0,
                shadowColor: 'rgba(0,0,0,0.5)'
            }
        };

wangqinghua's avatar
wangqinghua committed
        this.chartOption = {
wangqinghua's avatar
wangqinghua committed
            backgroundColor: '#eee',
wangqinghua's avatar
wangqinghua committed
            tooltip: {
                // trigger: 'axis',
                formatter: (params)=> {
                    console.log(params);
                    let res = params.seriesName;
                    res += '<br/>时间:'  + params.name;
                    let Mbps = 1000*1000;
                    let kbps = 1000;
                    let size = Math.abs(params.data);
                    if(size/Mbps > 1){
                        res += '<br/>流量:' + (size/Mbps).toFixed(2) + 'Mbps';
                    }else if(size/kbps >1){
                        res += '<br/>流量:' +(size/kbps).toFixed(2) + 'kbps';
                    }else{
                        res += '<br/>流量:' + (size)+ 'bbps';
                    }

                    return res;
                }
            },
wangqinghua's avatar
wangqinghua committed
            xAxis: {
wangqinghua's avatar
wangqinghua committed
                data: this.inEchartData.map(e=>{
wangqinghua's avatar
wangqinghua committed
                    return e.clock;
                }),
wangqinghua's avatar
wangqinghua committed
                name: '时间',
wangqinghua's avatar
wangqinghua committed
            },
wangqinghua's avatar
wangqinghua committed
            dataZoom: [{
                startValue: this.obj.startTime
            }, {
                type: 'inside'
            }],
wangqinghua's avatar
wangqinghua committed
            yAxis: {
                inverse: true,
wangqinghua's avatar
wangqinghua committed
                splitArea: {show: false},
                type : 'value',
                axisLabel:{   //Y轴数据
                    formatter:function(value){
                        return Math.abs(value)/10000;   //负数取绝对值变正数
                    },
                    textStyle: {
                        color: '#666'
                    }
                },
wangqinghua's avatar
wangqinghua committed
            },
            grid: {
                left: 100
            },
            series: [
                {
wangqinghua's avatar
wangqinghua committed
                    name: '进口流量',
wangqinghua's avatar
wangqinghua committed
                    type: 'bar',
                    stack: 'one',
                    itemStyle: itemStyle,
wangqinghua's avatar
wangqinghua committed
                    data: this.inEchartData.map(e=>{
wangqinghua's avatar
wangqinghua committed
                        return e.avg;
wangqinghua's avatar
wangqinghua committed
                    })
wangqinghua's avatar
wangqinghua committed
                },
                {
wangqinghua's avatar
wangqinghua committed
                    name: '出口流量',
wangqinghua's avatar
wangqinghua committed
                    type: 'bar',
wangqinghua's avatar
wangqinghua committed
                    stack: 'one',
wangqinghua's avatar
wangqinghua committed
                    itemStyle: itemStyle,
wangqinghua's avatar
wangqinghua committed
                    data: this.outEchartData.map(e=>{
wangqinghua's avatar
wangqinghua committed
                        return -e.avg;
wangqinghua's avatar
wangqinghua committed
                    })
wangqinghua's avatar
wangqinghua committed
                }
            ]
        };
wangqinghua's avatar
wangqinghua committed
        this.isLoading = false;
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //获取流量
wangqinghua's avatar
wangqinghua committed
    getList() {
wangqinghua's avatar
wangqinghua committed
        this.obj.hostid = null;
wangqinghua's avatar
wangqinghua committed
        this.onchange();
wangqinghua's avatar
wangqinghua committed
        this.getInList();
        this.getOutList();
    }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    getListIO(){
        this.getInList();
        this.getOutList();
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //in改变页数
    inChnagePage(e){
        this.inPageNum = e;
        this.getInList();
    }

    //out改变页数
    outChnagePage(e){
        this.outPageNum = e;
        this.getOutList();
    }

wangqinghua's avatar
wangqinghua committed
    //进口流量
    getInList() {
wangqinghua's avatar
wangqinghua committed
        this.inLoading = true;
wangqinghua's avatar
wangqinghua committed
        const data = {
wangqinghua's avatar
wangqinghua committed
            obj:{
                type: 'in',
                hostid: this.obj.hostid,
                startTime: this.obj.startTime,
                endTime: this.obj.endTime,
                groupid:this.obj.groupid
            },
wangqinghua's avatar
wangqinghua committed
            pageNum: this.inPageNum,
            pageCount: this.inPageCount,
wangqinghua's avatar
wangqinghua committed
        };
        this.topologySer.findTrend(data).subscribe(
            (res) => {
                if (res.errCode == 10000) {
wangqinghua's avatar
wangqinghua committed
                    this.inList = res.data.data;
                    this.inTotalNum = res.data.totalNum;
wangqinghua's avatar
wangqinghua committed
                } else {
                    this.message.warning(res.errMsg);
                }
wangqinghua's avatar
wangqinghua committed
                this.inLoading = false;
wangqinghua's avatar
wangqinghua committed
            }
        );
    }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    //出口流量
    getOutList() {
wangqinghua's avatar
wangqinghua committed
        this.outLoading = true;
wangqinghua's avatar
wangqinghua committed
        const data = {
wangqinghua's avatar
wangqinghua committed
            obj: {
                type:'out',
                hostid: this.obj.hostid,
                startTime: this.obj.startTime,
                endTime: this.obj.endTime,
                groupid:this.obj.groupid
            },
wangqinghua's avatar
wangqinghua committed
            pageNum: this.outPageNum,
            pageCount: this.outPageCount,
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
        };
wangqinghua's avatar
wangqinghua committed
        this.topologySer.findTrend(data).subscribe(
            (res) => {
                if (res.errCode == 10000) {
wangqinghua's avatar
wangqinghua committed
                    this.outList = res.data.data;
                    this.outTotalNum = res.data.totalNum;
wangqinghua's avatar
wangqinghua committed
                } else {
                    this.message.warning(res.errMsg);
                }
wangqinghua's avatar
wangqinghua committed
                this.outLoading = false;
wangqinghua's avatar
wangqinghua committed
            }
        );
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
    //时间改变
    changeType(){
        const nowDate = new Date().getTime();
        let day1,day2;
        switch (this.timeType){
            case'1':{
                this.obj.startTime = this.datePipe.transform(nowDate,'yyyy-MM-dd') +' 00:00:00';
                this.obj.endTime = this.datePipe.transform(nowDate,'yyyy-MM-dd') +' 23:59:59';
                break;
            }
            case'2':{
                day1 = nowDate - 1*24*60*60*1000;
                this.obj.startTime = this.datePipe.transform(day1,'yyyy-MM-dd') + ' 00:00:00';
                this.obj.endTime = this.datePipe.transform(day1,'yyyy-MM-dd') + ' 23:59:59';
                break;
            }
            case'3':{
                day1 = nowDate - 3*24*60*60*1000;
                day2 = nowDate - 1*24*60*60*1000;
                this.obj.startTime = this.datePipe.transform(day1,'yyyy-MM-dd') + ' 00:00:00';
                this.obj.endTime = this.datePipe.transform(day2,'yyyy-MM-dd') + ' 23:59:59';
                break;
            }
            case'4':{
                day1 = nowDate - 7*24*60*60*1000;
                day2 = nowDate - 1*24*60*60*1000;
                this.obj.startTime = this.datePipe.transform(day1,'yyyy-MM-dd') + ' 00:00:00';
                this.obj.endTime = this.datePipe.transform(day2,'yyyy-MM-dd') + ' 23:59:59';
                break;
            }
            case'5':{
                break;
            }
        }
    }

    //搜索
    search(){
wangqinghua's avatar
wangqinghua committed
        if(this.timeType == '5'){
            this.obj.startTime = this.datePipe.transform(this.timeBegin,'yyyy-MM-dd HH:mm:ss');
            this.obj.endTime = this.datePipe.transform(this.timeEnd,'yyyy-MM-dd HH:mm:ss');
        }
        this.getEcharts(null);
        this.getInList();
        this.getOutList();
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
}