CLIENT GUI Framework
[vnfsdk/refrepo.git] / openo-portal / portal-performance / src / main / webapp / performance / js / pmUtil.js
1 /*\r
2  * Copyright 2016-2017, CMCC Technologies Co., Ltd.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *         http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 var pmUtil = {};\r
17 function html_encode(str) {\r
18     vars = "";\r
19     if (str.length == 0)return "";\r
20     s = str.replace(/&/g, "&");  //1\r
21     s = s.replace(/</g, "&lt;");\r
22     s = s.replace(/>/g, "&gt;");\r
23     s = s.replace(/ /g, "&nbsp;");\r
24     s = s.replace(/\'/g, "&#39;");\r
25     s = s.replace(/\"/g, "&quot;");\r
26     s = s.replace(/\n/g, "<br>");\r
27     return s;\r
28 };\r
29 pmUtil.indexOperate = function (obj) {\r
30     \r
31         var aIndex={};\r
32         aIndex.id=obj.aData.id;\r
33         aIndex.name=obj.aData.indexName;\r
34         aIndex.dataType=obj.aData.indexDataType;\r
35         aIndex.indexDes=obj.aData.indexDes;\r
36         aIndex.strExpression=obj.aData.strExpression;\r
37         aIndex.resourceType=obj.aData.resourceType;\r
38         aIndex.moType=obj.aData.moType;\r
39         var index = html_encode(JSON.stringify(aIndex));\r
40     var indexId = obj.aData.id;\r
41     var innerHtml =  "<div class='table-btn'><span class='modify_user'><a class=\"btn-xs grey btn-editable\" href='#' onclick=\"pmUtil.modifyIndex('"+index+"')\"><i class=\"ict-modify\"></i>" + $.i18n.prop('com_zte_ums_ict_pm_action_modify') +\r
42         "</a></span><span><a href='#' class=\"btn-xs grey btn-editable\" onclick=\"pmUtil.deleteIndex('" +\r
43         indexId + "','"+obj.aData.moType.id+"')\"><i class=\"ict-delete\"></i>" + $.i18n.prop('com_zte_ums_ict_pm_action_delete') + "</a></span></div>";        \r
44 \r
45     return innerHtml;\r
46 };\r
47 pmUtil.dataTypeRender = function (obj) {\r
48     var record = obj.aData;\r
49         obj.aData.indexDataType=obj.aData.dataType;\r
50     var innerHtml = "<span>"+$.i18n.prop(record.dataType)+"</span>"\r
51     return innerHtml;\r
52 };\r
53 pmUtil.indexNameLink = function (obj) {\r
54         var index = html_encode(JSON.stringify(obj.aData));\r
55         obj.aData.indexName=obj.aData.name;\r
56         return "<a  id='indexName' href='#' onclick=\"pmUtil.queryIndex('"+index+"')\">" + obj.aData.name + "</a>";\r
57 };\r
58 pmUtil.queryIndex=function(index){\r
59     \r
60        newIndexWizard(commonUtil.strToJson(index),"query");\r
61            pm.index.vm.title="查看指标";\r
62            $(".form-group").attr("disabled",true);\r
63            pm.index.vm.viewVisible=false;\r
64            pm.index.vm.rtnVisible=true;\r
65        pm.index.vm.indexVisible=true;\r
66 };\r
67 pmUtil.addIndex=function(){\r
68     \r
69        newIndexWizard();\r
70            pm.index.vm.title="新建指标";\r
71            pm.index.vm.viewVisible=false;\r
72        pm.index.vm. indexVisible=true;\r
73 };\r
74 pmUtil.modifyIndex=function(index){\r
75     \r
76        newIndexWizard(commonUtil.strToJson(index));\r
77            pm.index.vm.title="修改指标";\r
78            pm.index.vm.viewVisible=false;\r
79        pm.index.vm.indexVisible=true;\r
80 };\r
81 pmUtil.deleteIndex=function(indexId,moTypeId){\r
82         bootbox.confirm($.i18n.prop('com_zte_ums_ict_sm_confirmToDeleteIndex'), function (result) { \r
83                 if (result) {\r
84                     var ids=[];\r
85                         var del={};\r
86                         ids.push(indexId);\r
87                         del.ids=ids;\r
88                         $.ajax({                        \r
89                         "dataType": 'json',\r
90                         "type": "DELETE",\r
91                         "url": "/api/umcpm/v1/motype/"+moTypeId+"/indexes",\r
92                         "data" : JSON.stringify(del),\r
93                         "contentType": 'application/json; charset=utf-8',\r
94                         "success": function (res, textStatus, jqXHR) {\r
95                                 window.location.href="./indexView.html";\r
96                         },\r
97                         "error": function () {\r
98                         }\r
99                 });\r
100                 }\r
101         });\r
102 }\r
103 \r
104 pmUtil.idLink = function (obj) {\r
105         var record = obj.aData;\r
106     var thresholdId = new String(record.id);\r
107         return "<a href='#' onclick=\"pm.threshold.vm.queryThreshold('" + thresholdId + "')\">" + thresholdId + "</a>";\r
108 }\r
109 \r
110 pmUtil.congfirmDel = function (obj) {\r
111         bootbox.confirm($.i18n.prop('com_zte_ums_ict_sm_confirmToDeleteThreshold'), function (result) { \r
112                 if (result) {\r
113                         pm.threshold.vm.deleteThreshold(obj);\r
114                 }\r
115         });\r
116 }\r
117 \r
118 pmUtil.allOperate = function (obj) {\r
119         \r
120     var record = obj.aData;\r
121     var thresholdId = record.id;\r
122         //此时的id字段已经被渲染成html片段,如<a href="#" onclick="pm.threshold.vm.queryThreshold('10001')">10001</a>需要提取id\r
123         thresholdId = thresholdId.substring(thresholdId.indexOf("('") + 2, thresholdId.indexOf("')"));\r
124         \r
125     var innerHtml = "";\r
126         \r
127         innerHtml = "<div class='table-btn'><span class='modify_user'><a class=\"btn-xs grey btn-editable\" href='#' onclick=\"pm.threshold.vm.modifyThreshold('" +\r
128         thresholdId + "')\"><i class=\"ict-modify\"></i>" + $.i18n.prop('com_zte_ums_ict_pm_action_modify') +\r
129         "</a></span><span><a href='#' class=\"btn-xs grey btn-editable\" onclick=\"pmUtil.congfirmDel('" +\r
130         thresholdId + "')\"><i class=\"ict-delete\"></i>" + $.i18n.prop('com_zte_ums_ict_pm_action_delete') + "</a></span></div>";      \r
131 \r
132     return innerHtml;\r
133 }\r
134 \r
135 //获取QueryId\r
136 pmUtil.getUrlParam=function(name){\r
137                 var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象\r
138                 var search =decodeURIComponent(location.search.substring(1)); //decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。\r
139                 var r =search.match(reg);  //匹配目标参数\r
140                 if (r != null) return unescape(r[2]); //unescape() 函数可对通过 escape() 编码的字符串进行解码。\r
141                 return null; //返回参数值\r
142 }\r
143 \r
144 \r
145 pmUtil.addMeatask = function() {\r
146     newMeataskWizard();\r
147     pm.meatask.vm.pageTitle="新建任务";\r
148     pm.meatask.vm.viewVisible=false;\r
149     pm.meatask.vm.createMeataskVisible=true;\r
150     pm.meatask.vm.queryMeataskVisible=false;\r
151 }\r
152 \r
153 pmUtil.meataskOperate = function (obj) {\r
154     var record = obj.aData;\r
155     var meataskId = record.id;\r
156         //此时的id字段已经被渲染成html片段,如<a href="#" onclick="pm.threshold.vm.queryThreshold('10001')">10001</a>需要提取id\r
157         meataskId = meataskId.substring(meataskId.indexOf("('") + 2, meataskId.indexOf("')"));\r
158         \r
159     var innerHtml = "";\r
160         \r
161         innerHtml = \r
162         [\r
163                 "<div class=\"table-btn\">",\r
164                         "<span class=\"modify_user\">",\r
165                                 "<a class=\"btn-xs grey btn-editable\" href=\"#\" onclick=\"pmUtil.queryMeatask('" + meataskId +\r
166                                         "')\"><i class=\"ict-Magnifier\"></i>",\r
167                                         $.i18n.prop('com_zte_ums_ict_pm_action_query'),\r
168                                 "</a>",\r
169                         "</span>",\r
170                         "<span class=\"modify_user\">",\r
171                                 "<a class=\"btn-xs grey btn-editable\" href=\"#\" onclick=\"pmUtil.modifyMeatask('" + meataskId + "'," + obj.iDataRow +\r
172                                         ")\"><i class=\"ict-modify\"></i>",\r
173                                         $.i18n.prop('com_zte_ums_ict_pm_action_modify'),\r
174                                 "</a>",\r
175                         "</span>",\r
176                         "<span>",\r
177                                 "<a href=\"#\" class=\"btn-xs grey btn-editable\" onclick=\"pmUtil.deleteMeatask('" + meataskId + "'," + obj.iDataRow +\r
178                                         ")\"><i class=\"ict-delete\"></i>",\r
179                                         $.i18n.prop('com_zte_ums_ict_pm_action_delete'),\r
180                                 "</a>",\r
181                         "</span>",\r
182                 "</div>"\r
183         ].join("\n");\r
184     return innerHtml;\r
185 }\r
186 \r
187 pmUtil.getActiveStatus = function(obj) {\r
188         var meataskId = obj.aData.id;\r
189         meataskId = meataskId.substring(meataskId.indexOf("('") + 2, meataskId.indexOf("')"));\r
190         var activeStatus = obj.aData.activeStatus;\r
191 \r
192         var prefixStr = "";             \r
193         var suffixStr = "";     \r
194         if(activeStatus == 0){\r
195             prefixStr = "<a  href='#' class=\"label label-sm label-danger\" onclick=\"pm.meatask.vm.changeActiveStatus('"; \r
196             suffixStr = ")\">暂停</a>";\r
197         }else{\r
198             prefixStr = "<a href='#' class=\"label label-sm label-info\" onclick = \"pm.meatask.vm.changeActiveStatus('";\r
199             suffixStr = ")\">激活</a>";\r
200         }\r
201 \r
202         var innerHtml = prefixStr + meataskId + "'," + activeStatus + "," + obj.iDataRow + suffixStr;\r
203 \r
204         return innerHtml;\r
205 }\r
206 \r
207 pmUtil.granularityRender = function(obj) {\r
208         var data = obj.aData;\r
209         switch(data.granularity){\r
210                 case (300): \r
211                         return "5分钟";\r
212                 case (900): \r
213                         return "15分钟";\r
214                 case (3600): \r
215                         return "1小时";\r
216         }\r
217         return "5分钟";\r
218 }\r
219 \r
220 pmUtil.queryMeatask = function(meataskId) {\r
221         queryMeataskWizard("queryID");\r
222         pm.meatask.vm.pageTitle="查询任务";\r
223     pm.meatask.vm.viewVisible=false;\r
224     pm.meatask.vm.createMeataskVisible=false;\r
225     pm.meatask.vm.queryMeataskVisible=true;\r
226         \r
227         $("#queryMeataskSubmit").click(function() {\r
228         pm.meatask.vm.$showResultTable();\r
229     });\r
230 }\r
231 \r
232 pmUtil.meataskIdLink = function(obj) {\r
233         var meatskId = obj.aData.id;\r
234         return "<a href='#' onclick=\"pmUtil.viewMeataskById('" + meatskId + "')\">" + meatskId + "</a>";\r
235 }\r
236 \r
237 pmUtil.viewMeataskById = function(meatskId) {\r
238         newMeataskWizard(meatskId);\r
239     pm.meatask.vm.pageTitle="查看任务";\r
240     pm.meatask.vm.viewVisible=false;\r
241     pm.meatask.vm.createMeataskVisible=true;\r
242     pm.meatask.vm.queryMeataskVisible=false;\r
243 }\r
244 \r
245 pmUtil.timeRender = function( obj ){\r
246     var time=obj.aData[obj.mDataProp];\r
247         if(time!="0"){\r
248     var date = new Date(obj.aData[obj.mDataProp]);\r
249     return commonUtil.parseDate(date , 'yyyy-MM-dd hh:mm:ss');\r
250         }\r
251 };\r
252 \r
253 pmUtil.deleteMeatask=function(meataskId, row){\r
254         bootbox.confirm("确认删除此任务吗?", function (result) { \r
255                 if (result) {\r
256                         $("#ict_meatask_table_div tr:eq("+(row+1)+")").attr('style', 'display:none;');\r
257                 }\r
258         });\r
259 }\r
260 \r
261 pmUtil.modifyMeatask = function(meataskId, row) {\r
262         modifyMeataskWizard("modifyID");\r
263     pm.meatask.vm.pageTitle="修改任务";\r
264     pm.meatask.vm.viewVisible=false;\r
265     pm.meatask.vm.createMeataskVisible=true;\r
266     pm.meatask.vm.queryMeataskVisible=false;\r
267 }\r
268 \r
269 pmUtil.randomCPU = function() {\r
270         var percent = Math.random()*100;\r
271         percent = Math.round(percent);\r
272         return percent + "%";\r
273 }\r
274 \r
275 pmUtil.calculateTime = function(obj) {\r
276         var data = obj.aData;\r
277         var time = data.beginTime + data.granularity;\r
278 \r
279         if(time!="0"){\r
280         var date = new Date(data.granularity * 1000 + obj.aData[obj.mDataProp]);\r
281         return commonUtil.parseDate(date , 'yyyy-MM-dd hh:mm:ss');\r
282         }\r
283 }\r
284 \r
285 pmUtil.queryMeatask = function(meataskId) {\r
286         pm.meatask.vm.pageTitle="查询任务";\r
287     pm.meatask.vm.viewVisible=false;\r
288     pm.meatask.vm.createMeataskVisible=false;\r
289     pm.meatask.vm.queryMeataskVisible=true;\r
290 }\r
291 \r
292 pmUtil.setDateRange = function (dataRangeId, vm) {\r
293 \r
294         var open = 'right';\r
295 \r
296         //var month = $.i18n.prop('ngict-iui-dateRange-month');\r
297 \r
298         var optionSet1 = {\r
299 \r
300                 //startDate: moment().subtract(179, 'days'),\r
301 \r
302                 //endDate: moment(),\r
303 \r
304                 startDate : "2015-12-31",\r
305 \r
306                 endDate : "2016-2017-12-31",\r
307 \r
308                 //format: 'YYYY-MM-DD',\r
309                 format : 'YYYY-MM-DD h:mm A',\r
310 \r
311                 dateLimit : {\r
312                         days : 180\r
313                 },\r
314 \r
315                 showWeekNumbers : false,\r
316 \r
317                 timePicker : true,\r
318                 timePickerIncrement : 5,\r
319 \r
320                 opens : open,\r
321 \r
322                 separator : ' - ',\r
323 \r
324                 locale : {\r
325 \r
326                         applyLabel : $.i18n.prop('ngict-iui-dateRange-applyLabel'),\r
327 \r
328                         cancelLabel : $.i18n.prop('ngict-iui-dateRange-cancelLabel'),\r
329 \r
330                         fromLabel : $.i18n.prop('ngict-iui-dateRange-fromLabel'),\r
331 \r
332                         toLabel : $.i18n.prop('ngict-iui-dateRange-toLabel'),\r
333 \r
334                         customRangeLabel : $.i18n.prop('ngict-iui-dateRange-customRangeLabel'),\r
335 \r
336                         daysOfWeek : [\r
337 \r
338                                 $.i18n.prop('ngict-iui-dateRange-Sunday'),\r
339 \r
340                                 $.i18n.prop('ngict-iui-dateRange-Monday'),\r
341 \r
342                                 $.i18n.prop('ngict-iui-dateRange-Tuesday'),\r
343 \r
344                                 $.i18n.prop('ngict-iui-dateRange-Wednesday'),\r
345 \r
346                                 $.i18n.prop('ngict-iui-dateRange-Thursday'),\r
347 \r
348                                 $.i18n.prop('ngict-iui-dateRange-Friday'),\r
349 \r
350                                 $.i18n.prop('ngict-iui-dateRange-Saturday')],\r
351 \r
352                         //monthNames : ['1' + month, '2' + month, '3' + month, '4' + month, '5' + month, '6' + month, '7' + month, '8' + month, '9' + month, '10' + month, '11' + month, '12' + month],\r
353                         \r
354                         //months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],\r
355                         \r
356                         monthNames: [$.i18n.prop('ngict-iui-dateRange-Jan'),\r
357                                                  $.i18n.prop('ngict-iui-dateRange-Feb'),\r
358                                                  $.i18n.prop('ngict-iui-dateRange-Mar'),\r
359                                                  $.i18n.prop('ngict-iui-dateRange-Apr'),\r
360                                                  $.i18n.prop('ngict-iui-dateRange-May'),\r
361                                                  $.i18n.prop('ngict-iui-dateRange-Jun'),\r
362                                                  $.i18n.prop('ngict-iui-dateRange-Jul'),\r
363                                                  $.i18n.prop('ngict-iui-dateRange-Aug'),\r
364                                                  $.i18n.prop('ngict-iui-dateRange-Sep'),\r
365                                                  $.i18n.prop('ngict-iui-dateRange-Oct'),\r
366                                                  $.i18n.prop('ngict-iui-dateRange-Nov'),\r
367                                                  $.i18n.prop('ngict-iui-dateRange-Dec')],\r
368 \r
369                         firstDay : 1\r
370 \r
371                 }\r
372 \r
373         };\r
374 \r
375         //datarangepicker确认\r
376         $('input[id="' + dataRangeId + '"]').bind('apply.daterangepicker', function () {\r
377 \r
378                 //获取时间范围,查询\r
379 \r
380                 // 都设置为0点\r
381 \r
382                 pmUtil.setTime($(this));\r
383 \r
384                 // 更新tooltip内容\r
385                 //$(this).attr("data-original-title", $(this).val());\r
386 \r
387         });\r
388 \r
389         $('input[id="' + dataRangeId + '"]').daterangepicker(optionSet1);\r
390 \r
391 };\r
392 \r
393 //daterangepicker设置时间\r
394 pmUtil.setTime = function setTime($obj) {\r
395 \r
396         //var title = $obj.attr('dtitle');\r
397 \r
398         var arr = $obj.val().split(' - ');\r
399 \r
400         //排除日历组件空字符串的情况。\r
401 \r
402         if (arr[0] != '') {\r
403 \r
404                 var beginTime = new Date(arr[0].replace(/-/g, "/")).getTime();\r
405 \r
406                 var endTime = new Date(arr[1].replace(/-/g, "/")).getTime();\r
407                 \r
408                 pm.query.vmPmQuery.beginTime = beginTime;\r
409 \r
410                 pm.query.vmPmQuery.endTime = endTime;           \r
411 \r
412         }\r
413 \r
414 }\r
415 \r
416 pmUtil.formatTime = function formatTime(ms) {\r
417         var date = new Date(ms);\r
418         return date.format("yyyy-MM-dd hh:mm:ss");\r
419 }\r
420 \r
421 /*格式化日期*/\r
422 \r
423 Date.prototype.format = function (format) {\r
424 \r
425         /*\r
426 \r
427          * format="yyyy-MM-dd hh:mm:ss";\r
428 \r
429          */\r
430 \r
431         var o = {\r
432 \r
433                 "M+" : this.getMonth() + 1,\r
434 \r
435                 "d+" : this.getDate(),\r
436 \r
437                 "h+" : this.getHours(),\r
438 \r
439                 "m+" : this.getMinutes(),\r
440 \r
441                 "s+" : this.getSeconds(),\r
442 \r
443                 "q+" : Math.floor((this.getMonth() + 3) / 3),\r
444 \r
445                 "S" : this.getMilliseconds()\r
446 \r
447         }\r
448 \r
449         if (/(y+)/.test(format)) {\r
450 \r
451                 format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4\r
452 \r
453                                          - RegExp.$1.length));\r
454 \r
455         }\r
456 \r
457         for (var k in o) {\r
458 \r
459                 if (new RegExp("(" + k + ")").test(format)) {\r
460 \r
461                         format = format.replace(RegExp.$1, RegExp.$1.length == 1\r
462 \r
463                                          ? o[k]\r
464 \r
465                                          : ("00" + o[k]).substr(("" + o[k]).length));\r
466 \r
467                 }\r
468 \r
469         }\r
470 \r
471         return format;\r
472 \r
473 }