TWaver 3D应用于大型数据中心(续)
在2014年11月份,我们当时发了一篇有关TWaver HTML5 3D应用于大型数据中心的文章,该blog比较详细的描述一些常用的功能的实现方法,比如:动态添加机柜,告警,温度,湿度等相关的功能的具体实现。其实会用这些东西的话基本上可以使用我们的TWaver HTML5 3D来实现相关的应用了,可是在有些客户觉得这还不够“动态”,都是代码一下生成的,少了一些交互,前些天同事说要不再加点功能,让它更加“动”一些,所以今天我抽了个时间再接着来个“续”——动态的添加机柜,主机和告警。
1、动态的添加机柜,输入机柜ID机柜:
基本方法同TWaver HTML5 3D应用于大型数据中心中的机柜创建方法一样(其实是完全一样,我只传了一个机柜id和position):
var loadRack = function(pos,type,isEmp,id){
var empRack = true;
    if(isEmp != undefined && isEmp !=null){
        empRack = isEmp;
    }
    var rackType = "s";
    if(type != null && type != undefined){
        rackType = type;
    }
    var addRack = function(element){
        if(element && pos){
            element.setPosition(pos.clone());
            element.rackType = rackType;
            element.setClient('R_ID',id); //给创建好的机柜添加了一个id,后面检索的话可以根据这个id来找到相应的机柜
            if(rackType == 'emptyRack'){
                element.setClient('bycustom',true);
            }
            if(!empRack){
                element.loaded = true;
                window.setTimeout(function(){
                    showChart(element);
                },500);
            }
        }
    };
    var  = './emptyRack.json';
    mono.Toolkits.loadTemplateUrl(network.getDataBox(), rack, null, null, addRack);
}
由于机柜的也想动态,想摆哪里就摆哪里,为了实现这样功能,我就先这么处理了一下,点你点击“添加”后,给network添加了一个监听,当click时获取一下鼠标所点中的位置,把这个位置作为你想要放机柜的位置(这里主要将这个意思,你也可以通过dblclick,或单独弄个button或什么来管理这个功能):
    var addRack = function(e){
        network.getRootView().removeEventListener('click',addRack); //当执行后就把这个监听去掉
        var objects = network.getElementsByMouseEvent(e);
        if (objects.length) {
            var first = objects[0];
            var object3d = first.element;
            var point=first.point;
            var rack_id = txtRack.value;
            var position = new mono.Vec3(point.x, Size.rack_y, point.z); //5710,0,2546
            loadRack(position,'emptyRack',true,rack_id);
        }
    }
   //创建时:
    if(type == 'rack'){
            network.getRootView().addEventListener('click',addRack);
//            var position = new mono.Vec3(point.x, Size.rack_y, point.y); //5710,0,2546
//            loadRack(position,'emptyRack',true,rack_id);
   }
效果图:
2、动态的添加交换机,根据路由器的id,路由器的位置动态的添加交换机(这里选择交换机是因为交换机有许多的端口,告警可以直接从交换机的端口发出,主要是因为交换机具有代表性):
下面是在上面(第一步)创建的机柜(机柜ID为“rid”)中的20u的地方(不知道是不是换算错了,呵呵)添加了一个交换机:
代码如下:
var createRouter = function(rack_id,host_id,y){
     var addHost = function(element){
         if(element){
             var rack = findFromClient('R_ID',rack_id);//根据机柜的id找到机柜
             if(!rack) return;
             rack.addChild(element);//把新的主机加到该机柜中
             if(host_id){
                 element.setClient('oid',host_id); //设置新增加的交换机的oid(也就是给它贴了个标签),以便于查找
             }
             element.setPositionX(0);
             element.setPositionY(y);//主机在机柜中的位置
             element.setPositionZ(0);
         }
     }
   mono.Toolkits.loadTemplateUrl(network.getDataBox(),"./ciscoroter.json",null,null,addHost);
 }
3、动态的添加告警,可以给路由器中指定的端口添加告警,如下图:
添加方法基本和上次差不多,在之前的基础上做的简单的改进:
var createAlarm = function(alarmid,rid,soid,poid,st){
    var rack = findFromClient('R_ID',rid);
    var alarm;
    var s;
    if(rack) {
        s = findOidfromChildren(rack, soid);
    }else { //当Router没有放到机柜中时,单独再找一下
        s = findFromClient('H_ID',soid);
        if(!s){
            s = findFromClient('oid',soid);
        }
    }
    if (s) {
        var p = findOidfromChildren(s, poid);
        if (p) {
            alarm = new mono.Alarm(alarmid, p.getId(), st);
        } else {
            alarm = new mono.Alarm(alarmid, s.getId(), st);
        }
    }else if(rack){
       alarm = new mono.Alarm(alarmid, rack.getId(), st);
    }
    if(alarm){
        network.getDataBox().getAlarmBox().add(alarm);
    }
}
 var addAlarm = function(rack_id,host_id,port_id,severity_id){
        var severities = mono.AlarmSeverity.severities;
        var severity = severities.get(severity_id);
        createAlarm('c',rack_id,host_id,port_id,severity);
    }
再给这个路由器和机柜添加东西:
TWaver 3D应用于大型数据中心(续)的更多相关文章
- VXLAN大数据中心组网
		目录: 一.什么是vxlan 二.为什么要用vxlan,解决了什么痛点 三.vxlan与vlan之间有什么不同 四.如何建立vxlan隧道 五.vxlan的网关有哪些种类 六.vxlan在报文中如何转 ... 
- TWaver可视化编辑器的前世今生(四)电力 云计算 数据中心
		插播一则广告(长期有效) TWaver需要在武汉招JavaScript工程师若干 要求:对前端技术(JavasScript.HTML.CSS),对可视化技术(Canvas.WebGL)有浓厚的兴趣基础 ... 
- VR技术在数据中心3D机房中的应用 (下)
		VR技术在数据中心3D机房中的应用 (下) 前面给大家简单科普了一下VR的硬件设备以及VR在各个领域的应用,是不是觉得非常高大上?千言万语概括成一句话,VR能给用户带来前所未有的沉浸感和交互方式,让人 ... 
- VR技术在数据中心3D机房中的应用(上)
		VR技术在数据中心3D机房中的应用(上) 前两天跟朋友A吃饭,吃着吃着就说到了VR.近几年来,VR技术越来越火,感觉能跟VR沾点边的都特别高大上,朋友A也是,一提到VR,就怎么都掩盖不住他发自肺腑 ... 
- 基于 HTML5 的 WebGL 和 VR 技术的 3D 机房数据中心可视化
		前言 在 3D 机房数据中心可视化应用中,随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的 ... 
- B/S 端基于 HTML5 + WebGL 的 VR 3D 机房数据中心可视化
		前言 在 3D 机房数据中心可视化应用中,随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的 ... 
- 基于 HTML5 WebGL 和 VR 技术的 3D 机房数据中心可视化
		前言 在 3D 机房数据中心可视化应用中,随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的 ... 
- 基于 HTML5 WebGL + VR 的 3D 机房数据中心可视化
		前言 在 3D 机房数据中心可视化应用中,随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的 ... 
- 工业互联网可视化系统风格的抉择:线框模式之 3D 数据中心机房的实现
		前言 3D 可视化,就是把复杂抽象的数据信息,以合适的视觉元素及视角去呈现,方便系统的展示.维护和管理.而在可视化系统的搭建选择上,所呈现的风格样式效果多种多样,各自所突出的适用场合也不尽相同.对于科 ... 
随机推荐
- 【bzoj3208】花神的秒题计划Ⅰ
			记忆化搜索 #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib ... 
- UIColor与十六进制字符串互转
			UIColor转十六进制字符串 方法一:经过测试发现部分颜色会转化为#fffff(五个f),转化残缺导致最后颜色无法还原,不推荐使用. // UIColor转#ffffff格式的字符串 + (NSSt ... 
- Glide 图片形状裁剪 ,滤镜等
			Glide . Picasso . Fresco 已逐渐成为Android主流的图片加载工具(个人见解,使用Volley.ImageLoader.xUtils的大佬们请勿喷~),在多数Android程 ... 
- [Codeforces 339D] Xenia and Bit Operations
			[题目链接] https://codeforces.com/problemset/problem/339/D [算法] 线段树模拟即可 时间复杂度 :O(MN) [代码] #include<bi ... 
- [noip模拟赛]算算数
			https://www.zybuluo.com/ysner/note/1298755 题面 有一天小胡同学看到了一种表达式.这个表达式有四个变量\(A,B,C,D\).这四 个变量都只有\(0\)和\ ... 
- MIPI接口
			接口 分辨率 说明 RGB 800*480以下 大部分AP均支持RGB接口,此类LCD在低端平板广泛使用 LVDS 1024*768及以上 主要通过转换芯片将RGB等专程LVDS来支持:少量AP直接集 ... 
- Eclipse 使用Anaconda python 解释器
			问题: ubuntu16.04 Anaconda 安装成功 Eclispe 写Python代码 无法使用 (pandas库等) 原因: Eclispe 此时的python解释器==>用的并不是A ... 
- C++中正确使用PRId64 (转载)
			转自:http://blog.csdn.net/win_lin/article/details/7912693 例子参考高性能流媒体服务器SRS:https://github.com/winlinvi ... 
- PCB拼板之多款矩形排样算法实现--学习
			参考资料:<一种新型pcb合拼求解过程> 拼版合拼问题描述和求解过程 合拼问题描述 Pcb合拼问题是通过二维矩形组合排样而演化与扩展而形成的一种新拼版问题,把每个零件都看成一个规则的矩形进 ... 
- 10.11NOIP模拟题(3)
			/* 可以看出,对于一段区间[L,R]如果统计了答案 若a[L]<a[R],那么当右端点往左移时答案不会更优,a[R]>a[L]同理 所以两个指针分别从头尾往中间扫那边小移哪边即可. */ ... 
