switch_app.js 6.85 KB
$(document).ready(function () {
    sendAjax("post", "getNgixnStatus", null, "json", drawData, errorFunc);
});

/**
 * 展示画布 和 数据
 * @param resp
 */
function drawData(resp) {
    var data = resp.data;

    var canvas = document.getElementById('canvas');
    var stage = new JTopo.Stage(canvas);

    var scene = new JTopo.Scene();
    stage.add(scene);
    scene.background = contextPath + "img/bg.jpg";

    var appNodeX = 100;
    var appNodeY = 50;
    var appNodeW = 30;
    var appNodeH = 26;
    var appNode =  newNode(scene,appNodeX,appNodeY,appNodeW,appNodeH,'APP');

    var askServer = newNode(scene,appNodeX+600,appNodeY+100,appNodeW,appNodeH,'问询服务器');
    var link = newFoldLink(scene,appNode, askServer, '问询');
    link.arrowsRadius = 10;

    var awsElb = newNode(scene,appNodeX+200,appNodeY+200,appNodeW,appNodeH,'awsElb');

    var awsNginx = newNode(scene,appNodeX+200,appNodeY+300,appNodeW,appNodeH,'awsNginx');
    var link = newLink(scene,awsElb, awsNginx);
    link.arrowsRadius = 10;

    var awsGateway1 = newNode(scene,appNodeX+150,appNodeY+400,appNodeW,appNodeH,'awsGateway');
    var awsGateway2 = newNode(scene,appNodeX+250,appNodeY+400,appNodeW,appNodeH,'awsGateway');

    var qqElb = newNode(scene,appNodeX+400,appNodeY+200,appNodeW,appNodeH,'qqElb');
    //var link = newFoldLink(scene,appNode, qqElb, '域名');
    //link.arrowsRadius = 10;

    var qqNginx = newNode(scene,appNodeX+400,appNodeY+300,appNodeW,appNodeH,'qqNginx');
    var link = newLink(scene,qqElb, qqNginx);
    link.arrowsRadius = 10;

    var qqGateway1 = newNode(scene,appNodeX+350,appNodeY+400,appNodeW,appNodeH,'qqGateway');
    var qqGateway2 = newNode(scene,appNodeX+450,appNodeY+400,appNodeW,appNodeH,'qqGateway');

    var appServerSe1 = newNode(scene,appNodeX+100,appNodeY-100,1,1);
    var appServerSe2 = newNode(scene,appNodeX+100,appNodeY+500,1,1);
    newLink(scene,appServerSe1, appServerSe2,"",10);

    var awsQqSe1 = newNode(scene,appNodeX+300,appNodeY-100,1,1);
    var awsQqSe2 = newNode(scene,appNodeX+300,appNodeY+500,1,1);
    newLink(scene,awsQqSe1, awsQqSe2,"",10);

    var app = newNode(scene,appNodeX,appNodeY-50,1,1,'app');
    var aws = newNode(scene,appNodeX+200,appNodeY-50,1,1,'aws');
    var qq = newNode(scene,appNodeX+400,appNodeY-50,1,1,'qq');


    if('aws' == data.luaType){//app全部直连到aws
        var link = newLink(scene,appNode, awsElb, '直连');
        link.arrowsRadius = 10;
    }else if('qq' == data.luaType){//app全部直连到qq
        var link = newLink(scene,appNode, qqElb, '直连');
        link.arrowsRadius = 10;
    }else{//app分散直连
        var link = newLink(scene,appNode, awsElb, '直连');
        link.arrowsRadius = 10;
        var link = newLink(scene,appNode, qqElb, '直连');
        link.arrowsRadius = 10;
    }

    if('aws' == data.awsApiNginx){//aws nginx 指向aws gateway
        var link = newLink(scene,awsNginx, awsGateway1,"online");
        link.arrowsRadius = 10;
    }else{//aws nginx 指向qq gateway
        var link = newLink(scene,awsNginx, qqGateway1,"online");
        link.arrowsRadius = 10;
    }

    if('aws' == data.awsGrayNginx){//aws nginx gray 指向aws gateway
        var link = newLink(scene,awsNginx, awsGateway2,"gray");
        link.arrowsRadius = 10;
    }else{//aws nginx 指向qq gateway
        var link = newLink(scene,awsNginx, qqGateway2,"gray");
        link.arrowsRadius = 10;
    }

    if('aws' == data.qqApiNginx){//qq nginx 指向aws gateway
        var link = newLink(scene,qqNginx, awsGateway1,"online");
        link.arrowsRadius = 10;
    }else{//qq nginx 指向qq gateway
        var link = newLink(scene,qqNginx, qqGateway1,"online");
        link.arrowsRadius = 10;
    }

    if('aws' == data.qqGrayNginx){//qq nginx gray 指向aws gateway
        var link = newLink(scene,qqNginx, awsGateway2,"gray");
        link.arrowsRadius = 10;
    }else{//aws nginx 指向qq gateway
        var link = newLink(scene,qqNginx, qqGateway2,"gray");
        link.arrowsRadius = 10;
    }

    if('aws' == data.defaultDns){
        var link = newFoldLink(scene,appNode, awsElb, 'dns','',5);
        link.arrowsRadius = 10;
    }else{
        var link = newFoldLink(scene,appNode, qqElb, 'dns','',5);
        link.arrowsRadius = 10;
    }

}

/**
 * ajax请求异常回调函数
 */
function errorFunc() {
    layer.msg("Token异常", {icon: 2});
}

/**
 * 打开等待对话框
 */
function toWait() {
    $("<div>").appendTo($("body")).dialog({
        title: "提示",
        backdrop: "static",
        content: "正在切换,请稍后..."
    });
}

/**
* 发送ajax请求
* @param type 请求方法post/get
* @param url 请求url
* @param data 请求参数数据
* @param dataType 请求参数类型
* @param success 请求成功回调函数
* @param error 请求异常回调函数
*/
function sendAjax(type, url, data, dataType, success, error) {
    $.ajax({
        type: type,
        url: url,
        data: data,
        dataType: dataType,
        success: success,
        error: error
    });
}

// 节点
function newNode(scene,x, y, w, h, text) {
    var node = new JTopo.Node(text);
    node.setLocation(x, y);
    node.setSize(w, h);
    scene.add(node);
    return node;
}

// 简单连线
function newLink(scene,nodeA, nodeZ, text, dashedPattern) {
    var link = new JTopo.Link(nodeA, nodeZ, text);
    link.lineWidth = 3; // 线宽
    link.dashedPattern = dashedPattern; // 虚线
    link.bundleOffset = 60; // 折线拐角处的长度
    link.bundleGap = 20; // 线条之间的间隔
    link.textOffsetY = 3; // 文本偏移量(向下3个像素)
    link.strokeColor = '0,200,255';
    scene.add(link);
    return link;
}

// 折线
function newFoldLink(scene,nodeA, nodeZ, text, direction, dashedPattern) {
    var link = new JTopo.FoldLink(nodeA, nodeZ, text);
    link.direction = direction || 'horizontal';
    link.arrowsRadius = 15; //箭头大小
    link.lineWidth = 3; // 线宽
    link.bundleOffset = 60; // 折线拐角处的长度
    link.bundleGap = 20; // 线条之间的间隔
    link.textOffsetY = 3; // 文本偏移量(向下3个像素)
    link.strokeColor = JTopo.util.randomColor(); // 线条颜色随机
    link.dashedPattern = dashedPattern;
    scene.add(link);
    return link;
}

// 二次折线
function newFlexionalLink(scene,nodeA, nodeZ, text, direction, dashedPattern) {
    var link = new JTopo.FlexionalLink(nodeA, nodeZ, text);
    link.direction = direction || 'horizontal';
    link.arrowsRadius = 10;
    link.lineWidth = 3; // 线宽
    link.offsetGap = 35;
    link.bundleGap = 15; // 线条之间的间隔
    link.textOffsetY = 10; // 文本偏移量(向下15个像素)
    link.strokeColor = '0,250,0';
    link.dashedPattern = dashedPattern;
    scene.add(link);
    return link;
}

// 曲线
function newCurveLink(scene,nodeA, nodeZ, text) {
    var link = new JTopo.CurveLink(nodeA, nodeZ, text);
    link.lineWidth = 3; // 线宽
    scene.add(link);
    return link;
}