GSO-64
author“shentao” <shentao@chinamobile.com>
Thu, 27 Oct 2016 08:26:11 +0000 (16:26 +0800)
committer“shentao” <shentao@chinamobile.com>
Thu, 27 Oct 2016 08:26:11 +0000 (16:26 +0800)
Change-Id: I3ae3efbe2729aa8a657b15628b45eacdc1568918
Signed-off-by: “shentao” <shentao@chinamobile.com>
55 files changed:
openo-portal/pom.xml
openo-portal/portal-common/src/main/webapp/common/about.html [deleted file]
openo-portal/portal-common/src/main/webapp/common/image/source/logo.png [deleted file]
openo-portal/portal-common/src/main/webapp/common/image/source/netnumenLogo.png [deleted file]
openo-portal/portal-common/src/main/webapp/common/image/source/zte_bg_1.jpg [deleted file]
openo-portal/portal-common/src/main/webapp/common/image/source/zte_bg_2.jpg [deleted file]
openo-portal/portal-common/src/main/webapp/common/image/source/zte_bg_3.jpg [deleted file]
openo-portal/portal-common/src/main/webapp/common/image/source/zte_logo_ white.png [deleted file]
openo-portal/portal-common/src/main/webapp/common/image/source/zte_logo_16.gif [deleted file]
openo-portal/portal-common/src/main/webapp/common/image/source/zte_logo_white.png [deleted file]
openo-portal/portal-common/src/main/webapp/common/js/menus/openo-menus-i18n-en-US.properties [deleted file]
openo-portal/portal-common/src/main/webapp/common/js/menus/openo-menus-i18n-zh-CN.properties [deleted file]
openo-portal/portal-common/src/main/webapp/common/json/main-page.json [deleted file]
openo-portal/portal-common/src/main/webapp/common/main_Fmegabar.html [deleted file]
openo-portal/portal-common/src/main/webapp/common/main_Fsiderbar.html [deleted file]
openo-portal/portal-common/src/main/webapp/common/main_blank.html [deleted file]
openo-portal/portal-package/pom.xml
openo-portal/portal-package/src/main/java/org/openo/portal/bean/MsbRegisterBean.java [new file with mode: 0644]
openo-portal/portal-package/src/main/java/org/openo/portal/bean/ServiceNodeBean.java [new file with mode: 0644]
openo-portal/portal-package/src/main/java/org/openo/portal/system/CommonUtil.java [moved from openo-portal/portal-common/src/main/webapp/common/js/menus/loadi18n-openo-menus.js with 60% similarity]
openo-portal/portal-package/src/main/java/org/openo/portal/system/Constants.java [moved from openo-portal/portal-common/src/main/webapp/common/js/constants/menu_link.js with 77% similarity]
openo-portal/portal-package/src/main/java/org/openo/portal/system/RegisterService.java [new file with mode: 0644]
openo-portal/portal-package/src/main/java/org/openo/portal/system/SystemListener.java [new file with mode: 0644]
openo-portal/portal-package/src/main/resources/portalConfig/msb_register.xml [new file with mode: 0644]
openo-portal/portal-package/src/main/webapp/WEB-INF/web.xml
openo-portal/portal-performance/pom.xml [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/alarm_view.html [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/css/alarmsQuery.css [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/css/performanceChart.css [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/css/performanceQuery.css [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/css/pmQueryBox.css [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/i18n/web-alarm-i18n-en-US.properties [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/i18n/web-performance-i18n-en-US.properties [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/image/aos_view-fm.gif [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/image/arrow.png [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/image/chart_icon.png [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/image/delete.png [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/image/details_close.png [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/image/details_open.png [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/image/down.png [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/image/filter.png [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/image/statistics.png [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/image/table_icon.png [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/image/up.png [moved from openo-portal/portal-common/src/main/webapp/common/image/source/ztelogo.png with 91% similarity]
openo-portal/portal-performance/src/main/webapp/performance/js/alarmConds.js [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/js/alarmsServerPageTable.js [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/js/alarmsUtil.js [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/js/commonUtil.js [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/js/curAlarmsController.js [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/js/performanceChart.js [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/js/performanceQueryController.js [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/js/pmUtil.js [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/js/serverPageTable.js [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/performance_query_rule.html [new file with mode: 0644]
openo-portal/portal-performance/src/main/webapp/performance/performance_view.html [new file with mode: 0644]

index c8630bb..626282e 100644 (file)
@@ -37,5 +37,6 @@
         <module>portal-catalog</module>
         <module>portal-auth</module>
         <module>portal-lifecyclemgr</module>
+        <module>portal-performance</module>
     </modules>
 </project>
diff --git a/openo-portal/portal-common/src/main/webapp/common/about.html b/openo-portal/portal-common/src/main/webapp/common/about.html
deleted file mode 100644 (file)
index 1f27321..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--
-    Copyright 2016, CMCC Technologies Co., Ltd.
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-            http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<div class="about aboutmain">
-    <div>
-        <a href="#" onclick="link_click('info')">
-            <span id="com_zte_ums_ict_framework_about_detail" name_i18n="com_zte_ums_ict_framework_ui_i18n"></span>
-            <i class = "fa fa-angle-right"></i>
-        </a>
-        <a href="#"  class="about_close" onclick="ict_about_dlg_close()">
-            &times
-        </a>
-    </div>
-    <div class="info">
-        <img src="image/integration/openo_logo_white.png" alt=""/>
-        <div class="ict_main_productname">
-            <span id="com_zte_ums_ict_framework_ui_main_title" name_i18n="com_zte_ums_ict_framework_ui_i18n"></span>
-        </div>
-        <div class="ict_main_version">
-            <span id="com_zte_ums_ict_framework_about_version" name_i18n="com_zte_ums_ict_framework_ui_i18n"></span>
-        </div>
-        <div class="copyright">
-            <span id="com_zte_ums_ict_portal_login_companyName" name_i18n="com_zte_ums_ict_framework_ui_i18n"></span>.
-        </div>
-    </div>
-</div>
-<div class="about aboutinfo" style="display:none">
-    <div>
-        <a href="#" onclick="link_click('about')">
-            <span id="com_zte_ums_ict_framework_moudle_about" name_i18n="com_zte_ums_ict_framework_ui_i18n"></span>
-            <i class = "fa fa-angle-right"></i>
-        </a>
-        <a href="#"  class="about_close" onclick="ict_about_dlg_close()">
-            &times
-        </a>
-    </div>
-    <div class="row-fluid" data-name="table_zone">
-        <div class="col-xs-12" id = 'ict_about_table_div' style=""></div>
-    </div>
-</div>
diff --git a/openo-portal/portal-common/src/main/webapp/common/image/source/logo.png b/openo-portal/portal-common/src/main/webapp/common/image/source/logo.png
deleted file mode 100644 (file)
index a36c5e8..0000000
Binary files a/openo-portal/portal-common/src/main/webapp/common/image/source/logo.png and /dev/null differ
diff --git a/openo-portal/portal-common/src/main/webapp/common/image/source/netnumenLogo.png b/openo-portal/portal-common/src/main/webapp/common/image/source/netnumenLogo.png
deleted file mode 100644 (file)
index 42ca6df..0000000
Binary files a/openo-portal/portal-common/src/main/webapp/common/image/source/netnumenLogo.png and /dev/null differ
diff --git a/openo-portal/portal-common/src/main/webapp/common/image/source/zte_bg_1.jpg b/openo-portal/portal-common/src/main/webapp/common/image/source/zte_bg_1.jpg
deleted file mode 100644 (file)
index 4a7b072..0000000
Binary files a/openo-portal/portal-common/src/main/webapp/common/image/source/zte_bg_1.jpg and /dev/null differ
diff --git a/openo-portal/portal-common/src/main/webapp/common/image/source/zte_bg_2.jpg b/openo-portal/portal-common/src/main/webapp/common/image/source/zte_bg_2.jpg
deleted file mode 100644 (file)
index db94b16..0000000
Binary files a/openo-portal/portal-common/src/main/webapp/common/image/source/zte_bg_2.jpg and /dev/null differ
diff --git a/openo-portal/portal-common/src/main/webapp/common/image/source/zte_bg_3.jpg b/openo-portal/portal-common/src/main/webapp/common/image/source/zte_bg_3.jpg
deleted file mode 100644 (file)
index f2949df..0000000
Binary files a/openo-portal/portal-common/src/main/webapp/common/image/source/zte_bg_3.jpg and /dev/null differ
diff --git a/openo-portal/portal-common/src/main/webapp/common/image/source/zte_logo_ white.png b/openo-portal/portal-common/src/main/webapp/common/image/source/zte_logo_ white.png
deleted file mode 100644 (file)
index a36c5e8..0000000
Binary files a/openo-portal/portal-common/src/main/webapp/common/image/source/zte_logo_ white.png and /dev/null differ
diff --git a/openo-portal/portal-common/src/main/webapp/common/image/source/zte_logo_16.gif b/openo-portal/portal-common/src/main/webapp/common/image/source/zte_logo_16.gif
deleted file mode 100644 (file)
index 362b825..0000000
Binary files a/openo-portal/portal-common/src/main/webapp/common/image/source/zte_logo_16.gif and /dev/null differ
diff --git a/openo-portal/portal-common/src/main/webapp/common/image/source/zte_logo_white.png b/openo-portal/portal-common/src/main/webapp/common/image/source/zte_logo_white.png
deleted file mode 100644 (file)
index a36c5e8..0000000
Binary files a/openo-portal/portal-common/src/main/webapp/common/image/source/zte_logo_white.png and /dev/null differ
diff --git a/openo-portal/portal-common/src/main/webapp/common/js/menus/openo-menus-i18n-en-US.properties b/openo-portal/portal-common/src/main/webapp/common/js/menus/openo-menus-i18n-en-US.properties
deleted file mode 100644 (file)
index b869ad5..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Copyright 2016 ZTE Corporation.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-org_openo_menu_service=Service
-org_openo_menu_resource=Resource
-org_openo_menu_monitor=Monitor
-
-org_openo_menu_service_design=Service Design
-org_openo_menu_service_design_model_design=Model Design
-
-org_openo_menu_service_catalog=Service Catalog
-org_openo_menu_service_catalog_package=Package
-org_openo_menu_service_catalog_service_template=Service Template
-
-org_openo_menu_external_system_register=External System Register
-org_openo_menu_vim_register=VIM
-org_openo_menu_vnfm_register=VNFM
-org_openo_menu_sdn_controller_register=SDNC
diff --git a/openo-portal/portal-common/src/main/webapp/common/js/menus/openo-menus-i18n-zh-CN.properties b/openo-portal/portal-common/src/main/webapp/common/js/menus/openo-menus-i18n-zh-CN.properties
deleted file mode 100644 (file)
index 99b8bb4..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#
-# Copyright 2016 ZTE Corporation.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
diff --git a/openo-portal/portal-common/src/main/webapp/common/json/main-page.json b/openo-portal/portal-common/src/main/webapp/common/json/main-page.json
deleted file mode 100644 (file)
index 6f97002..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-{
-       "propertiesFileNamePrefix":"web-framework-mainPage-i18n",
-       "productName":"OPEN-O System",
-       "modules":[
-               {
-                       "cover":"org_openo_orchestrator_framework_main_page_service",
-                       "background":"skyBlue-mainpage",
-                       "toolsImage":"toolsImageBrokenLine",
-                       "url":"",
-                       "linkId":"openo-nsoc-template",
-                       "contentTip":""
-               },
-               {
-                       "cover":"org_openo_orchestrator_framework_main_page_cloud",
-                       "background":"golden-mainpage",
-                       "toolsImage":"toolsImageHierachy",
-                       "url":"",
-                       "linkId":"openo-roc-vim",
-                       "contentTip":""
-               },
-               {
-                       "cover":"",
-                       "background":"manLieONCloud-image",
-                       "toolsImage":"",
-                       "url":"",
-                       "contentTip":""
-               },
-               {
-                       "cover":"org_openo_orchestrator_framework_main_page_orchestrator",
-                       "background":"orange-mainpage",
-                       "toolsImage":"toolsImageGear",
-                       "url":"",
-                       "linkId":"openo-nsoc-vApp",
-                       "contentTip":""
-               },
-               {
-                       "cover":"org_openo_orchestrator_framework_main_page_monitor",
-                       "background":"pinkishRed-mainpage",
-                       "toolsImage":"toolsImagePresent",
-                       "url":"",
-                       "linkId":"openo-umc-monitor-setting",
-                       "contentTip":""
-               },
-               {
-                       "cover":"",
-                       "background":"magicCube-image",
-                       "toolsImage":"",
-                       "url":"",
-                       "contentTip":""
-               },
-               {
-                       "cover":"org_openo_orchestrator_framework_main_page_resource",
-                       "background":"grassGreen-mainpage",
-                       "toolsImage":"toolsImageFile",
-                       "url":"",
-                       "linkId":"openo-roc-rs-view-overview",
-                       "contentTip":""
-               },
-               {
-                       "cover":"",
-                       "background":"meeting-image",
-                       "toolsImage":"",
-                       "url":"",
-                       "contentTip":""
-               },
-               {
-                       "cover":"",
-                       "background":"earth-image",
-                       "toolsImage":"",
-                       "url":"",
-                       "contentTip":""
-               },
-               {
-                       "cover":"org_openo_orchestrator_framework_main_page_design",
-                       "background":"orange-mainpage",
-                       "toolsImage":"toolsImageGear",
-                       "url":"",
-                       "linkId":"openo-nsoc-model-design",
-                       "contentTip":""
-               },
-               {
-                       "cover":"org_openo_orchestrator_framework_main_page_alarm",
-                       "background":"skyBlue-mainpage",
-                       "toolsImage":"toolsImageBriefcase",
-                       "url":"",
-                       "linkId":"openo-umc-monitor-alarm-currentAlarm",
-                       "contentTip":""
-               },
-               {
-                       "cover":"org_openo_orchestrator_framework_main_page_performance",
-                       "background":"pinkishRed-mainpage",
-                       "toolsImage":"toolsImagePresent",
-                       "url":"",
-                       "linkId":"openo-umc-monitor-pm-historyQuery",
-                       "contentTip":""
-               }
-       ]
-}
\ No newline at end of file
diff --git a/openo-portal/portal-common/src/main/webapp/common/main_Fmegabar.html b/openo-portal/portal-common/src/main/webapp/common/main_Fmegabar.html
deleted file mode 100644 (file)
index 0f200d6..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<!--
-    Copyright 2016, CMCC Technologies Co., Ltd.
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-            http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<li class="mega-menu-dropdown">
-       <a href="/iui/umcdrill/monitorns.html" id="openo-nsoc" parentid="openo-nsoc" hparentid="openo-nsoc" order="20.0" class="iframe" shiftjs="" cachenum="openo-nsoc" breadcrumgroupbuttonsrc="" operation="" iframeautoscroll="auto" defaultdisplay="">
-               <span id="openo_menu_service" name_i18n="openo_frame_top_menu_i18n" class="title"></span>
-               <span class="selected"></span>
-               <span class="arrow"></span>
-       </a>
-</li>
-<li class="mega-menu-dropdown">
-       <a href="/iui/rocvim/vimView.html" id="openo-roc" parentid="openo-roc" hparentid="openo-roc" order="30.0" class="iframe" shiftjs="" cachenum="openo-roc" breadcrumgroupbuttonsrc="" operation="" iframeautoscroll="auto" defaultdisplay="">
-               <span id="openo_menu_resource" name_i18n="openo_frame_top_menu_i18n" class="title"></span>
-               <span class="selected"></span>
-               <span class="arrow"></span>
-       </a>
-</li>
-<li class="mega-menu-dropdown">
-       <a href="/iui/umcmonitor/monitorSettingList.html" id="openo-umc" parentid="openo-umc" hparentid="openo-umc" order="40.0" class="iframe" shiftjs="" cachenum="openo-umc" breadcrumgroupbuttonsrc="" operation="" iframeautoscroll="auto" defaultdisplay="">
-               <span id="openo_menu_monitor" name_i18n="openo_frame_top_menu_i18n" class="title"></span>
-               <span class="selected"></span>
-               <span class="arrow"></span>
-       </a>
-</li>
-<script>loadi18n_WebFramework('web-framework-menu-i18n', 'i18n/', 'openo_frame_top_menu_i18n');</script>
diff --git a/openo-portal/portal-common/src/main/webapp/common/main_Fsiderbar.html b/openo-portal/portal-common/src/main/webapp/common/main_Fsiderbar.html
deleted file mode 100644 (file)
index ffd522b..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-<!--
-    Copyright 2016, CMCC Technologies Co., Ltd.
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-            http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<script type="text/javascript" src="js/constants/menu_link.js"></script>
-<li>
-       <a href="javascript:;" id="col-openo-umc-monitor-service" hparentid="openo-nsoc">
-               <i class="fa fa-comments"></i>
-               <span id="openo_menu_service_list" name_i18n="openo_frame_left_menu_i18n" class="title"></span>
-               <span class="selected"></span>
-               <span class="arrow"></span>
-       </a>
-       <ul class="sub-menu">
-               <li>
-                       <a href="todo.html" class="iframe" id="openo-umc-monitor-service-overview" parentid="openo-nsoc" hparentid="col-openo-umc-monitor-service" order="10.0" horgroup="10.0" cachenum="" shiftjs="" iframeautoscroll="auto">
-                               <i class="fa fa-comments"></i>
-                               <span id="openo_menu_service_list_overview" name_i18n="openo_frame_left_menu_i18n"></span>
-                       </a>
-               </li>
-       </ul>
-</li>
-<li>
-       <a href="javascript:;" id="col-openo-nsoc-orchestrator" hparentid="openo-nsoc">
-               <i class="fa fa-folder-open-o"></i>
-               <span id="openo_menu_orchestrator" name_i18n="openo_frame_left_menu_i18n" class="title"></span>
-               <span class="selected"></span>
-               <span class="arrow"></span>
-       </a>
-       <ul class="sub-menu">
-               <li>
-                       <a href="/winery/servicetemplates" class="iframe" id="openo-nsoc-model-design" parentid="openo-nsoc" hparentid="col-openo-nsoc-orchestrator" order="10.0" horgroup="10.0" cachenum="" shiftjs="" iframeautoscroll="auto">
-                               <i class="fa fa-folder-open-o"></i>
-                               <span id="openo_menu_orchestrator_model_design" name_i18n="openo_frame_left_menu_i18n"></span>
-                       </a>
-               </li>
-               <li>
-                       <a href="/winery/nodetypes" class="iframe" id="openo-nsoc-node-type" parentid="openo-nsoc" hparentid="col-openo-nsoc-orchestrator" order="20.0" horgroup="10.0" cachenum="" shiftjs="" iframeautoscroll="auto">
-                               <i class="fa fa-folder-open-o"></i>
-                               <span id="openo_menu_orchestrator_node_type" name_i18n="openo_frame_left_menu_i18n"></span>
-                       </a>
-               </li>
-               <li>
-                       <a href="/iui/nsoc/csarPackage.html" class="iframe" id="openo-nsoc-vnfd" parentid="openo-nsoc" hparentid="col-openo-nsoc-orchestrator" order="30.0" horgroup="10.0" cachenum="" shiftjs="" iframeautoscroll="auto">
-                               <i class="fa fa-folder-open-o"></i>
-                               <span id="openo_menu_orchestrator_package" name_i18n="openo_frame_left_menu_i18n"></span>
-                       </a>
-               </li>
-               <li>
-                       <a href="/iui/nsoc/template.html" class="iframe" id="openo-nsoc-template" parentid="openo-nsoc" hparentid="col-openo-nsoc-orchestrator" order="40.0" horgroup="10.0" cachenum="" shiftjs="" iframeautoscroll="auto">
-                               <i class="fa fa-list-alt"></i>
-                               <span id="openo_menu_orchestrator_service_template" name_i18n="openo_frame_left_menu_i18n"></span>
-                       </a>
-               </li>
-               <li>
-                       <a href="/iui/nsoc/hostMirror.html" class="iframe" id="openo-nsoc-hostimage" parentid="openo-nsoc" hparentid="col-openo-nsoc-orchestrator" order="50.0" horgroup="10.0" cachenum="" shiftjs="" iframeautoscroll="auto">
-                               <i class="fa fa-list-alt"></i>
-                               <span id="openo_menu_orchestrator_host_image" name_i18n="openo_frame_left_menu_i18n"></span>
-                       </a>
-               </li>
-               <li>
-                       <a href="/iui/nsoc/virtualApplication.html" class="iframe" id="openo-nsoc-vApp" parentid="openo-nsoc" hparentid="col-openo-nsoc-orchestrator" order="60.0" horgroup="10.0" cachenum="" shiftjs="" iframeautoscroll="auto">
-                               <i class="ict-VNF"></i>
-                               <span id="openo_menu_orchestrator_lifecycle" name_i18n="openo_frame_left_menu_i18n"></span>
-                       </a>
-               </li>
-       </ul>
-</li>
-<li>
-       <a href="javascript:;" id="col-openo-roc-manageview" hparentid="openo-roc">
-               <i class="fa fa-cube"></i>
-               <span id="openo_menu_manage_view" name_i18n="openo_frame_left_menu_i18n" class="title"></span>
-               <span class="selected"></span>
-               <span class="arrow"></span>
-       </a>
-       <ul class="sub-menu">
-               <li>
-                       <a href="/iui/rocvim/vimView.html" class="iframe" id="openo-roc-vim" parentid="openo-roc" hparentid="col-openo-roc-manageview" order="10.0" horgroup="10.0" cachenum="" shiftjs="" iframeautoscroll="auto">
-                               <i class="fa fa-cube"></i>
-                               <span id="openo_menu_manage_view_vim_manage" name_i18n="openo_frame_left_menu_i18n"></span>
-                       </a>
-               </li>
-               <li>
-                       <a href="/iui/nsoc/vnfmView.html" class="iframe" id="openo-roc-vnfm" parentid="openo-roc" hparentid="col-openo-roc-manageview" order="20.0" horgroup="10.0" cachenum="" shiftjs="" iframeautoscroll="auto">
-                               <i class="ict-VNFM"></i>
-                               <span id="openo_menu_manage_view_vnfm" name_i18n="openo_frame_left_menu_i18n"></span>
-                       </a>
-               </li>
-       </ul>
-</li>
-<li>
-       <a href="javascript:;" id="col-openo-roc-resourceview" hparentid="openo-roc">
-               <i class="fa fa-cubes"></i>
-               <span id="openo_menu_resource_view" name_i18n="openo_frame_left_menu_i18n" class="title"></span>
-               <span class="selected"></span>
-               <span class="arrow"></span>
-       </a>
-       <ul class="sub-menu">
-               <li>
-                       <a href="/iui/rocrsview/resView.html" class="iframe" id="openo-roc-rs-view-overview" parentid="openo-roc" hparentid="col-openo-roc-resourceview" order="8.0" horgroup="10.0" cachenum="" shiftjs="" iframeautoscroll="auto">
-                               <i class="fa fa-cubes"></i>
-                               <span id="openo_menu_resource_view_overview" name_i18n="openo_frame_left_menu_i18n"></span>
-                       </a>
-               </li>
-       </ul>
-</li>
-<li>
-       <a href="javascript:;" id="col-openo-umc-setting" hparentid="openo-umc">
-               <i class="fa fa-puzzle-piece"></i>
-               <span id="openo_menu_setting" name_i18n="openo_frame_left_menu_i18n" class="title"></span>
-               <span class="selected"></span>
-               <span class="arrow"></span>
-       </a>
-       <ul class="sub-menu">
-               <li>
-                       <a href="/iui/umcmonitor/monitorSettingList.html" class="iframe" id="openo-umc-monitor-setting" parentid="openo-umc" hparentid="col-openo-umc-setting" order="10.0" horgroup="10.0" cachenum="" shiftjs="" iframeautoscroll="auto">
-                               <i class="fa fa-puzzle-piece"></i>
-                               <span id="openo_menu_setting_monitor_para_setting" name_i18n="openo_frame_left_menu_i18n"></span>
-                       </a>
-               </li>
-       </ul>
-</li>
-<li>
-       <a href="javascript:;" id="col-openo-umc-topo" hparentid="openo-umc">
-               <i class="fa fa-puzzle-piece"></i>
-               <span id="openo_menu_topology" name_i18n="openo_frame_left_menu_i18n" class="title"></span>
-               <span class="selected"></span>
-               <span class="arrow"></span>
-       </a>
-       <ul class="sub-menu">
-               <li>
-                       <a href="/iui/umctopo/physicalTopology.html" class="iframe" id="openo-umc-physical-topo" parentid="openo-umc" hparentid="col-openo-umc-topo" order="10.0" horgroup="10.0" cachenum="" shiftjs="" iframeautoscroll="auto">
-                               <i class="fa fa-puzzle-piece"></i>
-                               <span id="openo_menu_topology_physical_topology" name_i18n="openo_frame_left_menu_i18n"></span>
-                       </a>
-               </li>
-               <li>
-                       <a href="/iui/umctopo/serviceTopology.html" class="iframe" id="openo-umc-service-topo" parentid="openo-umc" hparentid="col-openo-umc-topo" order="10.0" horgroup="10.0" cachenum="" shiftjs="" iframeautoscroll="auto">
-                               <i class="fa fa-puzzle-piece"></i>
-                               <span id="openo_menu_topology_service_topology" name_i18n="openo_frame_left_menu_i18n"></span>
-                       </a>
-               </li>
-       </ul>
-</li>
-<li>
-       <a href="javascript:;" id="col-openo-umc-fm" hparentid="openo-umc">
-               <i class="fa fa-comments"></i>
-               <span id="openo_menu_alarm" name_i18n="openo_frame_left_menu_i18n" class="title"></span>
-               <span class="selected"></span>
-               <span class="arrow"></span>
-       </a>
-       <ul class="sub-menu">
-               <li>
-                       <a href="/iui/umcfm/html/fm_currentAlarm_view.html" class="iframe" id="openo-umc-monitor-alarm-currentAlarm" parentid="openo-umc" hparentid="col-openo-umc-fm" order="10.0" horgroup="10.0" cachenum="" shiftjs="" iframeautoscroll="auto">
-                               <i class="fa fa-comments"></i>
-                               <span id="openo_menu_alarm_alarm_query" name_i18n="openo_frame_left_menu_i18n"></span>
-                       </a>
-               </li>
-       </ul>
-</li>
-<li>
-       <a href="javascript:;" id="col-openo-umc-pm" hparentid="openo-umc">
-               <i class="fa fa-coffee"></i>
-               <span id="openo_menu_performance" name_i18n="openo_frame_left_menu_i18n" class="title"></span>
-               <span class="selected"></span>
-               <span class="arrow"></span>
-       </a>
-       <ul class="sub-menu">
-               <li>
-                       <a href="/iui/umcpm/html/meatask/meataskQueryView.html" class="iframe" id="openo-umc-monitor-pm-historyQuery" parentid="openo-umc" hparentid="col-openo-umc-pm" order="10.0" horgroup="10.0" cachenum="" shiftjs="" iframeautoscroll="auto">
-                               <i class="fa fa-coffee"></i>
-                               <span id="openo_menu_performance_performance_query" name_i18n="openo_frame_left_menu_i18n"></span>
-                       </a>
-               </li>
-       </ul>
-</li>
-<script>loadi18n_WebFramework('web-framework-menu-i18n', 'i18n/', 'openo_frame_left_menu_i18n');</script>
diff --git a/openo-portal/portal-common/src/main/webapp/common/main_blank.html b/openo-portal/portal-common/src/main/webapp/common/main_blank.html
deleted file mode 100644 (file)
index 5897267..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-    Copyright 2016, CMCC Technologies Co., Ltd.
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-            http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
index e93b04a..fd051a1 100644 (file)
   </properties>
 
   <dependencies>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+      <scope>provided</scope>
+      <version>2.5</version>
+    </dependency>
     <dependency>
       <groupId>org.openo.gso.gui</groupId>
       <artifactId>portal-common</artifactId>
       <version>1.0.0-SNAPSHOT</version>
       <type>war</type>
     </dependency>
+    <dependency>
+      <groupId>org.openo.gso.gui</groupId>
+      <artifactId>portal-performance</artifactId>
+      <version>1.0.0-SNAPSHOT</version>
+      <type>war</type>
+    </dependency>
+    <dependency>
+      <groupId>dom4j</groupId>
+      <artifactId>dom4j</artifactId>
+      <version>1.6.1</version>
+    </dependency>
+    <dependency>
+      <groupId>net.sf.json-lib</groupId>
+      <artifactId>json-lib</artifactId>
+      <version>2.1</version>
+      <classifier>jdk15</classifier>
+      </dependency>
+      <dependency>
+        <groupId>commons-httpclient</groupId>
+        <artifactId>commons-httpclient</artifactId>
+        <version>3.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.httpcomponents</groupId>
+      <artifactId>httpclient</artifactId>
+        <version>4.3.5</version>
+    </dependency>
   </dependencies>
 
   <build>
               <groupId>org.openo.gso.gui</groupId>
               <artifactId>portal-lifecyclemgr</artifactId>
             </overlay>
+            <overlay>
+              <groupId>org.openo.gso.gui</groupId>
+              <artifactId>portal-performance</artifactId>
+            </overlay>
           </overlays>
         </configuration>
       </plugin>
diff --git a/openo-portal/portal-package/src/main/java/org/openo/portal/bean/MsbRegisterBean.java b/openo-portal/portal-package/src/main/java/org/openo/portal/bean/MsbRegisterBean.java
new file mode 100644 (file)
index 0000000..c5b53d0
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.openo.portal.bean;
+
+import java.util.List;
+
+public class MsbRegisterBean {
+    private String serviceName = "";
+
+    private String lb_policy = "";
+
+    private String url = "";
+
+    private String protocol = "";
+
+    private String visualRange = "";
+
+    private List<ServiceNodeBean> nodes;
+
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    public void setServiceName(String serviceName) {
+        this.serviceName = serviceName;
+    }
+
+    public String getLb_policy() {
+        return lb_policy;
+    }
+
+    public void setLb_policy(String lb_policy) {
+        this.lb_policy = lb_policy;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getProtocol() {
+        return protocol;
+    }
+
+    public void setProtocol(String protocol) {
+        this.protocol = protocol;
+    }
+
+    public String getVisualRange() {
+        return visualRange;
+    }
+
+    public void setVisualRange(String visualRange) {
+        this.visualRange = visualRange;
+    }
+
+    public List<ServiceNodeBean> getNodes() {
+        return nodes;
+    }
+
+    public void setNodes(List<ServiceNodeBean> nodes) {
+        this.nodes = nodes;
+    }
+}
diff --git a/openo-portal/portal-package/src/main/java/org/openo/portal/bean/ServiceNodeBean.java b/openo-portal/portal-package/src/main/java/org/openo/portal/bean/ServiceNodeBean.java
new file mode 100644 (file)
index 0000000..0c20ac6
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.openo.portal.bean;
+
+public class ServiceNodeBean {
+    private String ip = "";
+
+    private String port = "";
+
+    private int ttl = 0;
+
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+
+    public String getPort() {
+        return port;
+    }
+
+    public void setPort(String port) {
+        this.port = port;
+    }
+
+    public int getTtl() {
+        return ttl;
+    }
+
+    public void setTtl(int ttl) {
+        this.ttl = ttl;
+    }
+}
@@ -1,11 +1,11 @@
 /*
- * Copyright 2016 ZTE Corporation.
+ * Copyright 2016, CMCC Technologies Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *         http://www.apache.org/licenses/LICENSE-2.0
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.openo.portal.system;
 
-function loadOpenoSideMenu(lang){
-    loadPropertiesSideMenu(lang, 'openo-menus-i18n', '/openoui/common/js/menus/');
+public class CommonUtil {
+
+    public static boolean isEmpty(String str) {
+        if (null == str || "".equals(str.trim())) {
+            return true;
+        } else {
+            return false;
+        }
+    }
 }
-loadOpenoSideMenu(lang);
\ No newline at end of file
@@ -5,7 +5,7 @@
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *         http://www.apache.org/licenses/LICENSE-2.0
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
@@ -13,3 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.openo.portal.system;
+
+public class Constants {
+    public final static String MARK_COLON = ":";
+}
diff --git a/openo-portal/portal-package/src/main/java/org/openo/portal/system/RegisterService.java b/openo-portal/portal-package/src/main/java/org/openo/portal/system/RegisterService.java
new file mode 100644 (file)
index 0000000..01ba352
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.openo.portal.system;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import net.sf.json.JSONObject;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.util.EntityUtils;
+import org.apache.commons.httpclient.HttpStatus;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.openo.portal.bean.MsbRegisterBean;
+import org.openo.portal.bean.ServiceNodeBean;
+
+public class RegisterService {
+
+    public static HashMap<String, String> msbHostMap = new HashMap<String, String>();
+    public static List<HashMap<String, String>> registerList = new ArrayList<HashMap<String, String>>();
+
+    public static void registerMsb(String configPath) {
+        File inputXml = new File(configPath);
+        SAXReader saxReader = new SAXReader();
+
+        try {
+            Document document = saxReader.read(inputXml);
+            Element rootNode = document.getRootElement();
+            getMsbHostInfo(rootNode);
+            getRegisterList(rootNode);
+
+            String url = msbHostMap.get("hostIp") + Constants.MARK_COLON + msbHostMap.get("hostPort") + msbHostMap.get("msbApiRootDomain");
+            for (int i = 0; i < registerList.size(); i++) {
+                HashMap<String, String> registerInfo = registerList.get(i);
+
+                ServiceNodeBean serviceNode = new ServiceNodeBean();
+                serviceNode.setIp(registerInfo.get("ip"));
+                serviceNode.setPort(registerInfo.get("port"));
+                serviceNode.setTtl(Integer.valueOf(registerInfo.get("ttl")));
+                List<ServiceNodeBean> nodeList =  new ArrayList<ServiceNodeBean>();
+                nodeList.add(serviceNode);
+
+                MsbRegisterBean registerBean = new MsbRegisterBean();
+                registerBean.setNodes(nodeList);
+                registerBean.setServiceName(registerInfo.get("serviceName"));
+                registerBean.setUrl(registerInfo.get("url"));
+                registerBean.setProtocol(registerInfo.get("protocol"));
+                registerBean.setVisualRange(registerInfo.get("visualRange"));
+                registerBean.setLb_policy(registerInfo.get("lb_policy"));
+
+                JSONObject registerObj = JSONObject.fromObject(registerBean);
+                String registerResponse = registerPortalService(url, registerObj, "");
+                // TODO
+                System.out.println(registerResponse);
+            }
+        } catch (Exception e){
+            // TODO
+            e.printStackTrace();
+        }
+    }
+
+    private static void getMsbHostInfo(Element rootNode) {
+        Element msbHostNode = rootNode.element("msbHost");
+        Iterator iter = msbHostNode.elementIterator();
+
+        while (iter.hasNext()) {
+            Element element = (Element) iter.next();
+            msbHostMap.put(element.getName(), element.getText());
+        }
+    }
+
+    private static void getRegisterList(Element rootNode) {
+        Element registerListNode = rootNode.element("registerList");
+        Iterator iRegisterList = registerListNode.elementIterator();
+
+        while (iRegisterList.hasNext()) {
+            HashMap<String, String> registerMap = new HashMap<String, String>();
+            Element registerInfo = (Element) iRegisterList.next();
+            Iterator iRegisterInfo = registerInfo.elementIterator();
+
+            while (iRegisterInfo.hasNext()) {
+                Element element = (Element) iRegisterInfo.next();
+                registerMap.put(element.getName(), element.getText());
+            }
+            registerList.add(registerMap);
+        }
+    }
+
+    private static String registerPortalService(String url, JSONObject json, String token) {
+        DefaultHttpClient client = new DefaultHttpClient();
+        HttpPost post = new HttpPost(url);
+        String response = null;
+
+        try {
+            if (null != json) {
+                StringEntity s = new StringEntity(json.toString());
+                s.setContentEncoding("UTF-8");
+                s.setContentType("application/json");
+                post.setEntity(s);
+            }
+            if (!CommonUtil.isEmpty(token)) {
+                post.addHeader("X-Auth-Token", token);
+            }
+            HttpResponse res = client.execute(post);
+            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK
+                    || res.getStatusLine().getStatusCode() == HttpStatus.SC_CREATED) {
+                String result = EntityUtils.toString(res.getEntity());
+                if (!CommonUtil.isEmpty(result)) {
+                    response = result;
+                } else {
+                    response = null;
+                }
+            }
+        } catch (Exception e) {
+            // TODO
+            e.printStackTrace();;
+        }
+
+        return response;
+    }
+}
diff --git a/openo-portal/portal-package/src/main/java/org/openo/portal/system/SystemListener.java b/openo-portal/portal-package/src/main/java/org/openo/portal/system/SystemListener.java
new file mode 100644 (file)
index 0000000..0544723
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.openo.portal.system;
+
+import java.io.File;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+public class SystemListener implements ServletContextListener {
+
+    public void contextDestroyed(ServletContextEvent sce) {
+    }
+
+    public void contextInitialized(ServletContextEvent servletContextEvent) {
+        // TODO
+        System.out.println("portal register task begin");
+        String registerFilePath = SystemListener.class.getClassLoader().getResource("").getPath() + "portalConfig" + File.separator + "msb_register.xml";
+        RegisterService.registerMsb(registerFilePath);
+        // TODO
+        System.out.println("portal register task ended.");
+    }
+}
diff --git a/openo-portal/portal-package/src/main/resources/portalConfig/msb_register.xml b/openo-portal/portal-package/src/main/resources/portalConfig/msb_register.xml
new file mode 100644 (file)
index 0000000..b0a94ac
--- /dev/null
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright 2016, CMCC Technologies Co., Ltd.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+            http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<msbRegister>
+    <msbHost>
+        <hostIp>http://192.168.233.226</hostIp>
+        <hostPort>80</hostPort>
+        <msbApiRootDomain>/openoapi/microservices/v1/services</msbApiRootDomain>
+    </msbHost>
+    <registerList>
+        <registerInfo>
+            <ip>127.0.0.1</ip>
+            <port>8300</port>
+            <url>/openo-portal/common</url>
+            <serviceName>common</serviceName>
+            <protocol>UI</protocol>
+            <visualRange>1</visualRange>
+            <lb_policy>hash</lb_policy>
+            <ttl>0</ttl>
+        </registerInfo>
+        <registerInfo>
+            <ip>127.0.0.1</ip>
+            <port>8300</port>
+            <url>/openo-portal/catalog</url>
+            <serviceName>catalog</serviceName>
+            <protocol>UI</protocol>
+            <visualRange>1</visualRange>
+            <lb_policy>hash</lb_policy>
+            <ttl>0</ttl>
+        </registerInfo>
+        <registerInfo>
+            <ip>127.0.0.1</ip>
+            <port>8300</port>
+            <url>/openo-portal/extsys</url>
+            <serviceName>extsys</serviceName>
+            <protocol>UI</protocol>
+            <visualRange>1</visualRange>
+            <lb_policy>hash</lb_policy>
+            <ttl>0</ttl>
+        </registerInfo>
+        <registerInfo>
+            <ip>127.0.0.1</ip>
+            <port>8300</port>
+            <url>/openo-portal/performance</url>
+            <serviceName>performance</serviceName>
+            <protocol>UI</protocol>
+            <visualRange>1</visualRange>
+            <lb_policy>hash</lb_policy>
+            <ttl>0</ttl>
+        </registerInfo>
+        <registerInfo>
+            <ip>127.0.0.1</ip>
+            <port>8300</port>
+            <url>/openo-portal/lifecyclemgr</url>
+            <serviceName>lifecyclemgr</serviceName>
+            <protocol>UI</protocol>
+            <visualRange>1</visualRange>
+            <lb_policy>hash</lb_policy>
+            <ttl>0</ttl>
+        </registerInfo>
+        <registerInfo>
+            <ip>127.0.0.1</ip>
+            <port>8300</port>
+            <url>/openo-portal/resmgr-nfv</url>
+            <serviceName>resmgr-nfv</serviceName>
+            <protocol>UI</protocol>
+            <visualRange>1</visualRange>
+            <lb_policy>hash</lb_policy>
+            <ttl>0</ttl>
+        </registerInfo>
+        <registerInfo>
+            <ip>127.0.0.1</ip>
+            <port>8300</port>
+            <url>/openo-portal/resmgr-sdn</url>
+            <serviceName>resmgr-sdn</serviceName>
+            <protocol>UI</protocol>
+            <visualRange>1</visualRange>
+            <lb_policy>hash</lb_policy>
+            <ttl>0</ttl>
+        </registerInfo>
+        <registerInfo>
+            <ip>127.0.0.1</ip>
+            <port>8300</port>
+            <url>/openo-portal/user</url>
+            <serviceName>user</serviceName>
+            <protocol>UI</protocol>
+            <visualRange>1</visualRange>
+            <lb_policy>hash</lb_policy>
+            <ttl>0</ttl>
+        </registerInfo>
+    </registerList>
+</msbRegister>
index 071ba46..70a7195 100644 (file)
     limitations under the License.
 -->
 <web-app>
-  <display-name>OPEN-O Web Application</display-name>
-  <welcome-file-list>
-    <welcome-file>common/login.html</welcome-file>
-  </welcome-file-list>
+    <display-name>OPEN-O Web Application</display-name>
+    <welcome-file-list>
+        <welcome-file>common/login.html</welcome-file>
+    </welcome-file-list>
+    <listener>
+        <listener-class>org.openo.portal.system.SystemListener</listener-class>
+    </listener>
 </web-app>
diff --git a/openo-portal/portal-performance/pom.xml b/openo-portal/portal-performance/pom.xml
new file mode 100644 (file)
index 0000000..c317daf
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright 2016, CMCC Technologies Co., Ltd.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+            http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <groupId>org.openo.gso.gui</groupId>
+    <artifactId>openo-portal</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+  </parent>
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>portal-performance</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <packaging>war</packaging>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-war-plugin</artifactId>
+        <configuration>
+          <failOnMissingWebXml>false</failOnMissingWebXml>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/alarm_view.html b/openo-portal/portal-performance/src/main/webapp/performance/alarm_view.html
new file mode 100644 (file)
index 0000000..2e883ee
--- /dev/null
@@ -0,0 +1,339 @@
+<!--
+    Copyright 2016, CMCC Technologies Co., Ltd.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+            http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<!DOCTYPE html>
+<html>
+       <head>
+               <meta charset="UTF-8">
+               <link href="../common/thirdparty/font-awesome/css/font-awesome.min.css" rel="stylesheet" id="font_awesome"/>
+               <link href="../common/thirdparty/bootstrap/css/bootstrap.min.css" rel="stylesheet"/>
+               <link href="../common/thirdparty/uniform/css/uniform.default.css" rel="stylesheet"/>
+               <link href="../common/thirdparty/zTree/css/zTreeStyle/zTreeStyle.css" type="text/css" rel="stylesheet">
+               <link href="../common/thirdparty/icheck/skins/all.css" type="text/css" rel="stylesheet">
+               <link href="../common/thirdparty/bootstrap-daterangepicker/daterangepicker-bs3.css" rel="stylesheet">
+               <link href="../common/css/plugins.css" rel="stylesheet" type="text/css">
+               <link href="../common/css/ZteIctIcons/style.css" rel="stylesheet" type="text/css"/>
+               <link href="../common/css/ngict-component.css" rel="stylesheet" type="text/css">
+               <link href="css/alarmsQuery.css" rel="stylesheet" type="text/css">
+       </head>
+       <body>
+               <div id="alarmsDiv" class="container-fluid ms-controller" ms-controller="curAlarmsController">
+                       <div class="row" style=" margin-top: 15px;">
+                               <div class="col-xs-6 col-md-6 col-sm-6 col-lg-6 titlefont searchTitle">
+                                       <span id="ngict_fm_iui_curalarm_currentAlarm" name_i18n="openo_alarm_i18n"></span>
+                               </div>
+                       </div>
+                       <div class="separator-line"></div>
+                       <div class="row-fluid filtergroup">
+                               <div>
+                                       <div class="btn-group">
+                                               <button class="btn btnWhite circleBtn" ms-repeat-el="severityTypes" ms-class="<!--el.class-->:severityTypes[$index].value" ms-click="tabClicked(el ,this)"><!--el.name--></button>
+                                       </div>
+                                       <div class="btn-group btn-groupBlue">
+                                               <button class="btn btnWhite circleBtn" ms-repeat-el="ackStateTypes" ms-class-blueActive="el.value" ms-click="tabClicked(el ,this)"><!--el.name--></button>
+                                       </div>
+                                       <div class="btn-group btn-groupBlue circleBtn">
+                                               <button class="btn btnWhite circleBtn" ms-repeat-el="filterStateTypes" ms-class-blueActive="el.value" ms-click="tabClicked(el ,this)"><!--el.name--></button>
+                                       </div>
+                                       <div class="btn-group flRight">
+                                               <span class=" adCondition">
+                                                       <button id="moreCondBtn" type="button" class="btn radius_l white" ms-click="moreCondClicked()" ms-class-blueActive="vm.moreCondBtn">
+                                                               <span class="caret"></span><span id="ngict_fm_iui_curalarm_advance" name_i18n="openo_alarm_i18n"></span>
+                                                       </button>
+                                               </span>
+                                       </div>
+                               </div>
+                       </div>
+                       <div class="row" id="moreCond" style="display: none;">
+                               <div class="row" style="margin-top: 20px;">
+                                       <span id="alLocation" class="cond_zone">
+                                               <button class="condSelect btn white radius_l">
+                                                       <span id="ngict_fm_iui_curalarm_alarmPosition" name_i18n="openo_alarm_i18n"></span>
+                                               </button>
+                                               <span class="cond_selected">
+                                                       <span id="ngict_fm_iui_curalarm_locationSelected" name_i18n="openo_alarm_i18n"></span>
+                                               </span>
+                                       </span>
+                                       <span id="alType" class="cond_zone">
+                                               <button class="condSelect btn white radius_l">
+                                                       <span id="ngict_fm_iui_curalarm_alarmType" name_i18n="openo_alarm_i18n"></span>
+                                               </button>
+                                               <span class="cond_selected">
+                                                       <span id="ngict_fm_iui_curalarm_alarmTypeSelected" name_i18n="openo_alarm_i18n"></span>
+                                               </span>
+                                       </span>
+                                       <span id="alCode" class="cond_zone">
+                                               <button class="condSelect btn white radius_l">
+                                                       <span id="ngict_fm_iui_curalarm_probableCause" name_i18n="openo_alarm_i18n"></span>
+                                               </button>
+                                               <span class="cond_selected">
+                                                       <span id="ngict_fm_iui_curalarm_probableCauseSelected" name_i18n="openo_alarm_i18n"></span>
+                                               </span>
+                                       </span>
+                               </div>
+                               <div class="row cond_zone_time">
+                                       <div class="col-xs-12 confirmTime">
+                                               <label>
+                                                       <span id="ngict_fm_iui_curalarm_ackTimeTitle" name_i18n="openo_alarm_i18n"></span>&nbsp;&nbsp;
+                                               </label>
+                                               <input id="today_confirm" type="radio" name="timeConfirm" cond_value="1" cond_id="time" class="btn blue"></input>
+                                               <label for="today_confirm" class="radioLabel">
+                                                       <span id="ngict_fm_iui_curalarm_recentOneDay" name_i18n="openo_alarm_i18n"></span>
+                                               </label>
+                                               <input id="one_week_confirm" type="radio" name="timeConfirm" cond_value="2" cond_id="time" class="btn blue"></input>
+                                               <label for="one_week_confirm" class="radioLabel">
+                                                       <span id="ngict_fm_iui_curalarm_recenttwoDays" name_i18n="openo_alarm_i18n"></span>
+                                               </label>
+                                               <input id="one_month_confirm" type="radio" name="timeConfirm" cond_value="7" cond_id="time" class="btn blue"></input>
+                                               <label for="one_month_confirm" class="radioLabel">
+                                                       <span id="ngict_fm_iui_curalarm_recentOneWeek" name_i18n="openo_alarm_i18n"></span>
+                                               </label>
+                                               <input id="customAckTime" type="radio" name="timeConfirm" class="btn blue"></input>
+                                               <input dtitle="ackTime" id='daterangeConfirm' name="daterange" type='select' value="Custom" data-toggle="tooltip" data-placement="top" title ms-attr-disabled="<!--dataRangeLocationDisabled-->" class='btn btn-default dropdown-toggle' data-toggle='dropdown' />
+                                       </div>
+                               </div>
+                               <div class="row cond_zone_time">
+                                       <div class="col-xs-12 confirmTime">
+                                               <label>
+                                                       <span id="ngict_fm_iui_curalarm_raisedTime" name_i18n="openo_alarm_i18n"></span>&nbsp;&nbsp;
+                                               </label>
+                                               <input id="today_occur" type="radio" name="timeOccur" cond_value="1" cond_id="time" class="btn blue"></input>
+                                               <label for="today_occur" class="radioLabel">
+                                                       <span id="ngict_fm_iui_curalarm_recentOneDay" name_i18n="openo_alarm_i18n"></span>
+                                               </label>
+                                               <input id="one_week_occur" type="radio" name="timeOccur" cond_value="2" cond_id="time" class="btn blue"></input>
+                                               <label for="one_week_occur" class="radioLabel">
+                                                       <span id="ngict_fm_iui_curalarm_recenttwoDays" name_i18n="openo_alarm_i18n"></span>
+                                               </label>
+                                               <input id="one_month_occur" type="radio" name="timeOccur" cond_value="7" cond_id="time" class="btn blue"></input>
+                                               <label for="one_month_occur" class="radioLabel">
+                                                       <span id="ngict_fm_iui_curalarm_recentOneWeek" name_i18n="openo_alarm_i18n"></span>
+                                               </label>
+                                               <input id="customRaisedTime" type="radio" name="timeOccur" class="btn blue"></input>
+                                               <input dtitle="raisedTime" id='daterangeOccur' name="daterange" type='select' value="Custom" data-toggle="tooltip" data-placement="top" title ms-attr-disabled="<!--dataRangeTypeDisabled-->" class='btn btn-default dropdown-toggle' data-toggle='dropdown' />
+                                       </div>
+                               </div>
+                               <div class="row margin-space flRight">
+                                       <button ms-click="searchModal()" class="btn white radius_l">
+                                               <span class="ict-Magnifier alarmsSave"></span>
+                                               <span id="ngict_fm_iui_curalarm_query" name_i18n="openo_alarm_i18n"></span>
+                                       </button>&nbsp;&nbsp;
+                                       <button ms-click="saveModal()" ms-visible="tempHide" class="btn white radius_l">
+                                               <span class="ict-save alarmsSave"></span>
+                                               <span id="ngict_fm_iui_curalarm_save" name_i18n="openo_alarm_i18n"></span>
+                                       </button>
+                               </div>
+                       </div>
+                       <div class="fliterline"></div>
+                       <div class="row-fluid bodyTop">
+                               <div class="col-xs-4 alarmbtn">
+                                       <div class="btn-group">
+                                               <button id="affirm" onclick="alarmsUtil.loopAffirm(1);" class="btn white sideBtn" ms-class="btnRiusCircle:!showClear"><span class="ict-acknownledge"></span></button>
+                                               <button id="unAffirm" class="btn white sideBtn" ms-visible="showClear" onclick="alarmsUtil.loopAffirm(2);"><span class="ict-unacknownledge"></span></button>
+                                       </div>
+                                       <button class="btn radius_l white" onclick="alarmsUtil.loopDelAralms();">
+                                               <span class="ict-delete"></span>
+                                               <span id="ngict_fm_iui_curalarm_clean" name_i18n="openo_alarm_i18n"></span>
+                                       </button>
+                               </div>
+                               <div class="tablebtn">
+                                       <button class="btn radius_l white" onclick="alarmsUtil.refresh();">
+                                               <span class="ict-refresh"></span>
+                                               <span id="ngict_fm_iui_curalarm_refreash" name_i18n="openo_alarm_i18n"></span>
+                                       </button>
+                                       <button class="btn radius_l white" ms-visible="tempHide">
+                                               <span class="ict-export"></span>
+                                               <span id="ngict_fm_iui_curalarm_exportAll" name_i18n="openo_alarm_i18n"></span>
+                                       </button>
+                               </div>
+                       </div>
+                       <div class="row-fluid" data-name="table_zone">
+                               <div class="col-xs-12" id='ict_alarms_table_div'></div>
+                       </div>
+                       <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+                               <div class="modal-dialog">
+                                       <div class="modal-content">
+                                               <div class="modal-header">
+                                                       <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                                                       <h4 class="modal-title" id="myModalLabel"><span id="ngict_fm_iui_curalarm_save" name_i18n="openo_alarm_i18n"></span></h4>
+                                               </div>
+                                               <div class="modal-body">
+                                                       <span><span id="ngict_fm_iui_curalarm_name" name_i18n="openo_alarm_i18n"></span>&nbsp;&nbsp;</span>
+                                                       <input type="text" id="saveCondId"/>
+                                                       <div class="condSaveTip">
+                                                               <span id="ngict_fm_iui_curalarm_condSaveTip" name_i18n="openo_alarm_i18n"></span>
+                                                       </div>
+                                               </div>
+                                               <div class="modal-footer">
+                                                       <button type="button" class="btn btn-default" id="saveModalCancle" data-dismiss="modal">
+                                                               <span id="ngict_fm_iui_curalarm_cancel" name_i18n="openo_alarm_i18n"></span>
+                                                       </button>
+                                                       <button type="button" class="btn btn-primary" ms-click="alarmsCondSave()">
+                                                               <span id="ngict_fm_iui_curalarm_ok" name_i18n="openo_alarm_i18n"></span>
+                                                       </button>
+                                               </div>
+                                       </div>
+                               </div>
+                       </div>
+                       <div hidefocus="true" class="modal fade group" id="alCodeTree" tabindex="-1" role="dialog" aria-labelledby="myModalLabelCode" aria-hidden="true">
+                               <div class="modal-dialog">
+                                       <div class="modal-content">
+                                               <div class="modal-header">
+                                                       <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                                                       <h4 class="modal-title" id="myModalLabelCode"><span id="ngict_fm_iui_curalarm_probableCause" name_i18n="openo_alarm_i18n"></span></h4>
+                                               </div>
+                                               <div class="modal-body">
+                                                       <div class="row">
+                                                               <div class="form-group col-xs-12 margin-top-space">
+                                                                       <div class="col-xs-6">
+                                                                               <div class=" right_assign_box">
+                                                                                       <ul id="probableCausesTree" class="ztree"></ul>
+                                                                               </div>
+                                                                       </div>
+                                                                       <div class="col-xs-1 iconPosition">
+                                                                               <div ms-repeat-el="treeIcons">
+                                                                                       <i treeType="probableCausesTree" ms-class="<!--el-->" ms-click="moveTreeNode($(this))"></i>
+                                                                               </div>
+                                                                       </div>
+                                                                       <div class="col-xs-5">
+                                                                               <div tabindex="11" class="right-assign-checked-box tree-right-table">
+                                                                                       <table id="selectedProbableCausesTreeTable" class="table table-bordered"></table>
+                                                                               </div>
+                                                                       </div>
+                                                                       <div class="col-xs-4 nodesDetail right">
+                                                                               <button id="moreCondBtn" type="button" class="btn white blueactive right" ms-click="probableCausesTreeAffirm()">
+                                                                                       <span id="ngict_fm_iui_curalarm_ok" name_i18n="openo_alarm_i18n"></span>
+                                                                               </button>
+                                                                       </div>
+                                                               </div>
+                                                       </div>
+                                               </div>
+                                       </div>
+                               </div>
+                       </div>
+                       <div hidefocus="true" class="modal fade group" id="alTypeTree" tabindex="-1" role="dialog" aria-labelledby="myModalLabelType" aria-hidden="true">
+                               <div class="modal-dialog">
+                                       <div class="modal-content">
+                                               <div class="modal-header">
+                                                       <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                                                       <h4 class="modal-title" id="myModalLabelType"><span id="ngict_fm_iui_curalarm_alarmType" name_i18n="openo_alarm_i18n"></span></h4>
+                                               </div>
+                                               <div class="modal-body">
+                                                       <div class="row">
+                                                               <div class="form-group col-xs-12 margin-top-space">
+                                                                       <div class="col-xs-12">
+                                                                               <div class=" right-assign-checked-box">
+                                                                                       <table id="selectedAlTypeTable" class="table table-bordered tree-left-table"></table>
+                                                                               </div>
+                                                                       </div>
+                                                                       <div class="col-xs-4 nodesDetail right">
+                                                                               <button id="moreCondBtn" type="button" class="btn white blueactive right" ms-click="alTypeTreeAffirm()">
+                                                                                       <span id="ngict_fm_iui_curalarm_ok" name_i18n="openo_alarm_i18n"></span>
+                                                                               </button>
+                                                                       </div>
+                                                               </div>
+                                                       </div>
+                                               </div>
+                                       </div>
+                               </div>
+                       </div>
+                       <div hidefocus="true" class="modal fade group" id="alLocationTree" tabindex="-1" role="dialog" aria-labelledby="myModalLabelLocation" aria-hidden="true">
+                               <div class="modal-dialog">
+                                       <div class="modal-content">
+                                               <div class="modal-header">
+                                                       <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                                                       <h4 class="modal-title" id="myModalLabelLocation"><span id="ngict_fm_iui_curalarm_alarmPosition" name_i18n="openo_alarm_i18n"></span></h4>
+                                               </div>
+                                               <div class="modal-body">
+                                                       <div class="row">
+                                                               <div class="form-group col-xs-12 margin-top-space">
+                                                                       <div class="col-xs-6">
+                                                                               <div class="right_assign_box">
+                                                                                       <ul id="deptTree" class="ztree"></ul>
+                                                                               </div>
+                                                                       </div>
+                                                                       <div class="col-xs-1 iconPosition">
+                                                                               <div ms-repeat-el="treeIcons">
+                                                                                       <i treeType="deptTree" ms-class="<!--el-->" ms-click="moveTreeNode($(this))"></i>
+                                                                               </div>
+                                                                       </div>
+                                                                       <div class="col-xs-5">
+                                                                               <div id="selectedDeptTree" tabindex="11" class="right-assign-checked-box tree-right-table">
+                                                                                       <table id="selectedDeptTreeTable" class="table table-bordered"></table>
+                                                                               </div>
+                                                                       </div>
+                                                               </div>
+                                                       </div>
+                                                       <div class="row">
+                                                               <div class="form-group col-xs-12">
+                                                                       <div class="col-xs-4 right">
+                                                                               <button id="moreCondBtn" type="button" class="btn white blueactive right" ms-click="deptTreeAffirm()">
+                                                                                       <span id="ngict_fm_iui_curalarm_ok" name_i18n="openo_alarm_i18n"></span>
+                                                                               </button>
+                                                                       </div>
+                                                               </div>
+                                                       </div>
+                                               </div>
+                                       </div>
+                               </div>
+                       </div>
+                       <div id="affirmTrip" class="defaultHideTopLink">
+                               <span id="ngict_fm_iui_curalarm_affirm" name_i18n="openo_alarm_i18n"></span>
+                       </div>
+                       <div id="unAffirmTrip" class="defaultHideTopLink">
+                               <span id="ngict_fm_iui_curalarm_unaffirm" name_i18n="openo_alarm_i18n"></span>
+                       </div>
+               </div>
+               <script src="../common/thirdparty/jquery/jquery-1.10.2.min.js" type="text/javascript"></script>
+               <script src="../common/thirdparty/jquery-cokie/jquery.cokie.min.js" type="text/javascript" ></script>
+               <script src="../common/thirdparty/jquery.i18n/jquery.i18n.properties-1.0.9.js" type="text/javascript"></script>
+               <script src="../common/thirdparty/bootbox/bootbox.min.js" type="text/javascript"></script>
+               <script src="../common/thirdparty/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
+               <script src="../common/thirdparty/data-tables/jquery.dataTables.js" type="text/javascript"></script>
+               <script src="../common/thirdparty/bootstrap-daterangepicker/moment.js" type="text/javascript"></script>
+               <script src="../common/thirdparty/bootstrap-daterangepicker/daterangepicker.js" type="text/javascript"></script>
+               <script src="../common/js/international/loadi18n.js" type="text/javascript"></script>
+               <script src="../common/js/json2.js" type="text/javascript"></script>
+               <script src="../common/js/tools.js" type="text/javascript"></script>
+               <script src="../common/thirdparty/avalon/avalon.modern.js" type="text/javascript"></script>
+               <script src="../common/thirdparty/icheck/icheck.min.js" type="text/javascript"></script>
+               <script src="../common/thirdparty/zTree/js/jquery.ztree.all.js" type="text/javascript"></script>
+               <script>
+                       loadi18n_WebFramework('web-alarm-i18n', 'i18n/', 'openo_alarm_i18n');
+                       var getUrlParam = function(name){
+                               var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
+                               var search = decodeURIComponent(location.search.substring(1));
+                               var r = search.match(reg);
+                               if (r != null) {
+                                       return unescape(r[2]);
+                               }
+                               return null;
+                       }
+                       $(function(){
+                               var queryName = getUrlParam("queryId");
+                               if (queryName) {
+                                       $(".searchTitle").text(queryName);
+                                       $("#saveCondId").val(queryName);
+                               }
+                               $('[data-toggle="tooltip"]').tooltip();
+                       });
+               </script>
+               <script src="js/alarmsServerPageTable.js" type="text/javascript"></script>
+               <script src="js/alarmsUtil.js" type="text/javascript"></script>
+               <script src="js/alarmConds.js" type="text/javascript"></script>
+               <script src="js/performanceUtil.js" type="text/javascript"></script>
+               <script src="js/curAlarmsController.js" type="text/javascript"></script>
+       </body>
+</html>
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/css/alarmsQuery.css b/openo-portal/portal-performance/src/main/webapp/performance/css/alarmsQuery.css
new file mode 100644 (file)
index 0000000..ee83721
--- /dev/null
@@ -0,0 +1,752 @@
+/**
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+body {
+       overflow: auto !important;
+       background-color: #fff;
+}
+
+.ms-controller{
+       visibility: hidden
+}
+
+.container-fluid{
+       background-color: #fff;
+}
+
+.page-content-body {
+       margin-top: 10px;
+}
+.page-content-body .row{
+    margin-left:0;
+}
+#ict_fm_alarmCount_div_left{
+    margin-bottom:10px;
+}
+.page-content-body .separator-line{
+    height:1px;
+       border-bottom:1px dashed #ccc;
+       background:transparent;
+}
+.circleBtn:first-child {
+    border-top-left-radius: 3px !important;
+    border-bottom-left-radius: 3px !important;
+}
+
+.circleBtn:last-child {
+
+    border-top-right-radius: 3px !important;
+    border-bottom-right-radius: 3px !important;
+}
+
+.sideBtn:first-child {
+    border-top-left-radius: 20px !important;
+    border-bottom-left-radius: 20px !important;
+    min-width: 50px;
+}
+
+.sideBtn:last-child {
+    border-top-right-radius: 20px !important;
+    border-bottom-right-radius: 20px !important;
+    min-width: 50px;
+}
+
+.btnRiusCircle {
+    border-radius: 20px !important;
+}
+
+button:last-child {
+    margin-left: 15px;
+}
+.btn-groupBlue {
+    padding-left: 20px;
+}
+
+.btn-groupBlue .btn:hover {
+    color: #333;
+    background-color: #ebebeb ;
+
+}
+.btnWhite {
+    font-size: 14px;
+    font-family: "微软雅黑";
+    line-height: 20px;
+    /*background-image: linear-gradient(to bottom, #ffffff, #ffffff);*/
+    background-color: #ffffff;
+
+    border: 1px solid #cccccc;
+}
+.btnWhite:hover{
+background-color:#ebebeb;
+color:#333;
+}
+.btn_group1 .btn:hover {
+    color: #ffffff;
+       background-color:#ebebeb;
+    background-position: 0 0px;
+    -webkit-transition: background-position 0.1s linear;
+    -moz-transition: background-position 0.1s linear;
+    -o-transition: background-position 0.1s linear;
+    transition: background-position 0.1s linear;
+}
+
+.blueactive {
+    color: #ffffff !important;
+    background-color: #5b9bd1;
+}
+
+.blueactive:hover {
+    color: #ffffff !important;
+    background-color: #4d85b4 !important;      
+}
+
+.cond_zone {
+    background-color: #fff;
+    padding-left: 20px;
+    padding-right: 50px;
+}
+
+.cond_zone_time {
+       background-color: #fff;
+    margin-top: 20px;
+    margin-bottom: 10px;
+}
+
+.condSelect {
+    /* width: 100%; */
+    border: 1px solid #CCC;
+       height: 34px !important;
+}
+
+.cond_selected{
+       padding-left: 10px;
+}
+
+button.btn.btn-default {
+    color: #aaa;
+}
+
+.filtergroup button.btn {
+    min-width: 68px;
+}
+.adCondition button.btn {
+    min-width: 80px;
+}
+.btn-default {
+    color: #5b9bd1;
+    background-color: #fff;
+    border-color: #ccc;
+}
+
+.daySelect {
+    width: 42px;
+    height: 26px !important;
+    font-size: 14px;
+    margin-bottom: 0px;
+    border-width: 1px;
+    padding: 0px 0px; 
+    border-radius: 4px; 
+}
+
+.calendar-date {
+    color: #5b9bd1;
+}
+
+.daterangepicker .ranges {
+    width: 205px;
+}
+
+.daterangepicker .ranges input {
+    width: 95px !important;
+}
+
+/* .daterangepicker {
+    left: 20% !important;
+} */
+.daterangepicker .ranges input[type="text"] {
+    width: 85px !important;
+}
+
+.dataRange {
+    width: 195px;
+    line-height: 0;
+    height: 26px;
+    vertical-align: top;
+    margin-left: 5px;
+    padding: 0px 0px;
+}
+
+div.dataTables_paginate {
+    display: inline;
+    float: right !important;
+}
+
+div.dataTables_length, div.dataTables_info {
+    display: inline;
+}
+
+div.pagination-panel {
+    margin-right: 10px;
+}
+
+input.pagination-panel-input {
+    width: 50px;
+}
+
+.input-sm {
+    padding: 4px 10px;
+}
+
+td.details-control {
+       text-align: center;
+    cursor: pointer;
+}
+
+
+.details table td {
+    word-wrap: break-word;
+    word-break: normal;
+    border-top: 1px solid #dddddd;
+}
+
+td.title {
+    width: 10%;
+}
+
+.detailTitleStyle{
+       background-color: #EEE !important;
+}
+
+.close-statistic{
+    float:right;
+       margin-top:5px;
+       margin-right:25px;
+       vertical-align:bottom;
+       padding:3px;
+       border:2px solid #fff ;
+       border-radius:20px;
+    color:#9b9b9b;     
+}
+.close-statistic:hover{
+border:2px solid #e74c3c ;
+color:#e74c3c;
+text-decoration:none;
+}
+.detailCellStyle{
+       background-color: #FFF !important;
+}
+
+table.dataTable tbody th, table.dataTable tbody td {
+    padding: 8px 10px;
+    vertical-align:middle;
+}
+
+.echart_height{
+       height: 400px;
+}
+
+
+
+button.serveractive {
+    color: #ffffff !important;
+    background-position: 0 0px;
+    -webkit-transition: background-position 0.1s linear;
+    -moz-transition: background-position 0.1s linear;
+    -o-transition: background-position 0.1s linear;
+    transition: background-position 0.1s linear;
+    background-image: linear-gradient(to bottom, #E6971A, #E6971A) !important;
+}
+
+.rule_title {
+    padding: 8px;
+    margin-bottom: 25px;
+    border-left: 2px solid #5b9bd1;
+    color: #1A78CA;
+    font-size: 16px;
+}
+
+.iconPosition > div {
+    margin: 20px 0px 0px 0px;
+}
+.iconPosition{
+  margin-top: 90px;
+}
+.iconPosition div {
+    color: #757575;
+    cursor: pointer;
+}
+
+.iconPosition div:hover {
+    color: #333;
+}
+
+#defaulInfo, #selectAralmCodes {
+    border: 1px solid #e0e0e0;
+}
+
+.right_assign_box {
+    height: 370px;
+    overflow-y: auto;
+    overflow-x: auto;
+    border: 1px solid #e0e0e0;
+}
+
+.right-assign-checked-box{
+    /*height: 312px;*/
+       height: 370px;
+    overflow-y: auto;
+    overflow-x: auto;
+    border: 1px solid #e0e0e0;
+} 
+
+.fmZtree {
+    z-index: 3000;
+    position: absolute;
+    background: #fff;
+    outline: none;
+}
+
+.filtergroup {
+    text-align: center;
+    margin-top: 15px;
+}
+
+.fliterline {
+    margin-top: 20px;
+       height:1px;
+       border-bottom:1px dashed #c4cde8;
+       margin-bottom:15px;
+       overflow:hidden;
+       width:100%;
+}
+
+.adCondition {
+    float: right;
+}
+
+.btn .caret {
+    margin-right: 5px;
+}
+
+.tablebtn {
+    float: right;
+}
+
+#ict_alarms_table_div {
+    padding-right: 0;
+    margin-top: 10px;
+}
+
+div.alarmsTree {
+    width: 580px;
+}
+
+div.alarmsTree-small{
+    width: 280px; 
+}
+.alarm-serious {
+    background-color: #de4040;
+    color: #ffffff !important;
+}
+.alarm-serious:hover {
+    background-color: #c23737 !important;
+}
+.alarm-important {
+    background-color: #e37c29;
+    color: #ffffff !important;
+}
+.alarm-important:hover {
+    background-color: #c86e25 !important;
+}
+.alarm-secondary {
+    background-color: #e9d426;
+    color: #ffffff !important;
+}
+.alarm-secondary:hover {
+    background-color: #d3c023 !important;   
+}
+.alarm-slightly {
+    background-color: #86bcdb;
+    color: #ffffff !important;
+}
+.alarm-slightly:hover {
+    background-color: #77a7c2 !important;
+}
+.flRight {
+    float: right;
+       margin-right: 1px;
+}
+
+/* #alLocation {
+    margin-top: 40px;
+} */
+
+.borderBottom {
+    border-bottom: 4px solid !important;
+    border-top: 0px solid !important;
+}
+
+.borderTop {
+    border-top: 4px solid !important;
+    border-bottom: 0px solid !important;
+}
+
+.spinnerSmall {
+    width: 34px !important;
+    margin-right: 24px;
+}
+
+.icheckbox_square-aero{
+    margin-right: 5px;
+}
+.alarmsSave {
+  font-size: 16px;
+  color: #555;
+  vertical-align: middle;
+  cursor: pointer;
+}
+
+.alarmsSave:hover {
+    color: #5b9bd1;
+}
+.margin-space{
+    margin-bottom: 15px;
+       margin-top: 5px;
+}
+
+.defaultHideTopLink{
+  display: none;
+  position: absolute;
+  display: none;
+  background: #000;
+  opacity: 0.8;
+  border: 1px solid #ddd !important;
+  font-size: 0.8em;
+  box-shadow: 2px 3px 5px #C8C8C8;
+  border-radius: 8px;
+  padding: 0px 10px;
+  z-index: 999;
+  height: 30px;
+  color: #fff;
+  line-height: 25px;
+}
+
+.defaultHideTopLink:after {
+  position: absolute;
+  top: -6px;
+  left: 10px;
+  display: inline-block;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #000;
+  border-left: 6px solid transparent;
+  content: '';
+}
+
+.tooltip-inner {
+    max-width: 300px !important;
+}
+
+.calendar-time select {
+  color: #555 !important;
+}
+
+#affirmTrip{
+  margin-top: 3%;
+  margin-left: 1%;
+}
+
+
+#unAffirmTrip{
+  margin-top: 3%;
+  margin-left: 4%;
+}
+
+#alLocationTree,#alCodeTree,#alTypeTree{
+  border: 1px solid rgba(0,0,0,.2);
+  margin-top: 5px;
+  background-clip: padding-box;
+  border-radius: 6px;
+  outline: 0;
+  margin-left: -5px;
+  box-shadow: 0 5px 15px rgba(0,0,0,.5);
+}
+
+#right-menu {
+  position: fixed;
+  top: 0;
+  right: 0;
+  width: 400px;
+  height: 100%;
+  border-left: 4px solid rgb(58,174,218);
+  background-color: rgba(255,255,255,.95);
+  padding-left: 19px;
+  padding-right: 13px;
+  padding-top: 20px;
+  z-index: 9999;
+  overflow-y: auto;
+}
+
+.btn-right-detail {
+  color: #5b9bd1;
+  background-color: #fff;
+  border-color: #ccc;
+}
+
+
+.right {
+  float: right;
+}
+
+
+.default-display-none{
+  display: none;
+}
+
+.nodesDetail {
+  margin-top: 15px;
+}
+
+#ict_table_general_div td{
+    min-width: 115px;
+}
+
+
+#moreCond label{
+    margin-bottom: 0px;
+}
+
+.alarm-date-form-control{
+    padding: 0px 4px;
+}
+
+.titlefont {
+  font-size: 16px;
+}
+
+.subtitlefont {
+  font-size: 14px;
+}
+
+
+.ackState a:hover{
+    color: #fff;
+  text-decoration:none;
+}
+
+
+.label-danger:hover{
+  background-color: #C9302C;
+}
+
+.right-button-pointer {
+  display: inline-block;
+  cursor: pointer;
+}
+
+.tree-right-table td{
+  white-space: nowrap;
+  cursor: pointer;
+}
+
+.tree-right-table td:hover{
+  background: #FFEDE4;
+  border-bottom: 1px solid #f8dddd;
+  border-top: 1px solid #f8dddd;
+}
+
+.tallCellSelected{
+  background: #f8dddd;
+  border-bottom: 1px solid #f8dddd;
+  border-top: 1px solid #f8dddd;
+}
+
+.tallCellSelected:hover{
+  background: #f8dddd !important;
+}
+
+
+.margin-top-space{
+  margin-top: 15px;
+}
+
+
+.tree-left-table td{
+  white-space: nowrap;
+  cursor: pointer;
+}
+
+.tree-left-table td:hover{
+  background: #FFEDE4;
+  border-bottom: 1px solid #f8dddd;
+  border-top: 1px solid #f8dddd;
+}
+
+#saveModalCancle{
+  color:#333;
+}
+
+.radioLabel{  
+  margin-left: -10px;
+  margin-right: 10px;
+}
+
+.alarmbtn, #ict_alarms_table_div{
+padding-left:0;
+}
+
+.advanced-selection{
+       margin-top:40px;
+}
+
+#moreCond{
+       border: 1px dashed rgb(196, 205, 232);
+       margin-top: 10px;
+    margin-bottom: 10px;
+    margin-left: 0px;
+    margin-right: 0px;
+    padding-left: 15px;
+    padding-right: 15px;
+}
+
+.bodyTop{
+       margin-top: 10px;
+}
+
+.confirmTime{
+       margin-left: 5px;
+}
+
+.condSaveTip{
+       margin-top: 15px;
+}
+
+/*修改树组件默认样式*/
+.ztree li a {  
+       border: 0px;
+}
+
+.ict-Magnifier:hover{
+       color:#555555
+}
+
+.ict-save:hover{
+       color:#555555
+}
+
+.dataTables_scrollHeadInner table.dataTable tbody td {
+    padding-top: 0px !important;
+    padding-bottom: 0px !important;
+}
+
+.dataTables_scrollHeadInner table.dataTable {
+       margin-bottom: 0px !important;
+       border-bottom: 0px !important;
+}
+
+.dataTables_scrollBody  table {
+       border-top: 0px !important;
+       border-bottom: 1px solid #ddd !important;
+       /* margin-top: -5px; */
+}
+
+.dataTables_scrollBody {
+       margin-top: -2px;
+}
+
+#ict_alarms_table_wrapper .bottom{
+       margin-top: 10px;
+}
+
+table .DataTables_sort_wrapper {
+       padding-left: 2px !important;
+}
+
+.detailTable {
+  border-collapse:collapse;border-spacing:0;border-left:1px solid #888;border-top:1px solid #888;
+}
+
+.detailTable td{border:1px solid #ddd !important;}
+
+.detailTitleStyle .label{
+       color:#333333;
+       background-color: rgba(66, 139, 202, 0);
+       float:right;
+}
+
+.label{
+       font-size: 100%;
+    font-weight: 100;
+}
+
+input[name="daterange"] {
+    width: 220px;
+    line-height: 0;
+    height: 31px;
+    /* vertical-align: top; */
+    margin-top: 2px;
+}
+.acknow-purple{
+background-color:#bf74d5;
+color:#fff;
+}
+.acknow-purple:hover{
+background-color:#b36bc8;
+}
+.ict-table{
+ color:#549bb6;
+}
+.dataTables_length  select[size]{
+    height:28px;
+}
+/*1024下展开左边菜单*/
+@media screen and (max-width: 770px) and (min-width: 750px) {
+    .btn-groupBlue {
+        padding-left: 5px;
+    }  
+}
+
+/*1024下,左边菜单收起来*/
+
+@media screen and (max-width: 1000px) and (min-width: 810px) {
+    .tree-padd {
+        padding-left: 7%;
+    }
+
+    .daterange-cond-padd {
+        padding-left: 10%;
+    }
+}
+
+@media screen and (max-width: 1100px) and (min-width: 1000px) {
+
+    .tree-padd {
+        padding-left: 10%;
+    }
+
+    .tree-daterange-cond-padd {
+        padding-left: 10%;
+    }
+}
+
+@media screen and (min-width: 1100px) {
+    .tree-padd {
+        padding-left: 12%;
+    }
+
+    .daterange-cond-padd {
+        padding-left: 10%;
+    }
+}
+
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/css/performanceChart.css b/openo-portal/portal-performance/src/main/webapp/performance/css/performanceChart.css
new file mode 100644 (file)
index 0000000..a655629
--- /dev/null
@@ -0,0 +1,60 @@
+/**
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+.reveal-modal-bg {
+    position: fixed;
+    height: 100%;
+    width: 100%;
+    background: #000;
+    background: rgba(0,0,0,.8);
+    z-index: 100;
+    display: none;
+    top: 0;
+    left: 0;
+}
+
+.reveal-modal {
+    visibility: hidden;
+    top: 100px;
+    left: 200px;
+    width: 1200px;
+    background: #eee url(modal-gloss.png) no-repeat -200px -80px;
+    position: fixed;
+    z-index: 101;
+    padding: 30px 40px 34px;
+    -moz-border-radius: 5px;
+    -webkit-border-radius: 5px;
+    border-radius: 5px;
+    -moz-box-shadow: 0 0 10px rgba(0,0,0,.4);
+    -webkit-box-shadow: 0 0 10px rgba(0,0,0,.4);
+    -box-shadow: 0 0 10px rgba(0,0,0,.4);
+}
+
+.reveal-modal.small {width: 200px; margin-left: -140px;}
+.reveal-modal.medium {width: 400px; margin-left: -240px;}
+.reveal-modal.large {width: 600px; margin-left: -340px;}
+.reveal-modal.xlarge {width: 800px; margin-left: -440px;}
+
+.reveal-modal .close-reveal-modal {
+    font-size: 22px;
+    line-height: .5;
+    position: absolute;
+    top: 8px;
+    right: 11px;
+    color: #aaa;
+    text-shadow: 0 -1px 1px rbga(0,0,0,.6);
+    font-weight: bold;
+    cursor: pointer;
+}
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/css/performanceQuery.css b/openo-portal/portal-performance/src/main/webapp/performance/css/performanceQuery.css
new file mode 100644 (file)
index 0000000..6594e94
--- /dev/null
@@ -0,0 +1,843 @@
+/**
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+body{
+       font-family: microsoft yahei !important;
+}
+body {
+  font-family: 'Open Sans', sans-serif;  
+  background-color: #f1f3fa;
+  width: '100%';
+  height: '100%';
+  margin-top: 5px;
+}
+
+a {
+  /*  font-weight: bold;*/
+   text-decoration: none !important; }
+
+p {
+    color: #444;
+    font-size: 14px;
+    font-weight: normal;
+    line-height: 21px;
+    margin: 0 0 12px 0; }
+
+p.credit {
+    border-top: 1px solid #ccc;
+    font-size: 14px;
+    line-height: 140%;
+    margin: 36px 0 12px 0;
+    padding: 8px 0 0 0;
+    text-align: center; }
+
+ul.column {
+    float: left;
+    list-style: none;
+    width: 675px; }
+ul.column li {
+    background: #eee;
+    -webkit-border-radius: 5px;
+    border-radius: 5px;
+    -webkit-box-shadow: inset 0 1px 1px 0 #c7c7c7;
+    box-shadow: inset 0 1px 1px 0 #c7c7c7;
+    float: left;
+    margin: 10px 0 0 10px;
+    display: block;
+    height: 150px;
+    text-align: center;
+    width: 215px; }
+
+
+/* Clear Floated Elements
+------------------------------------------------------------------------------*/
+.column:after,
+.button-collection:after,
+.clearfix:after,
+div.project-info:after {
+    clear: both;
+    content: ' ';
+    display: block;
+    font-size: 0;
+    line-height: 0;
+    visibility: hidden;
+    width: 0;
+    height: 0; }
+
+.nav-tabs{
+border:0;
+}
+.nav-tabs>li.active>a, .nav-tabs>li.active>a:hover, .nav-tabs>li.active>a:focus{
+border:0;
+border-top:3px solid #F3565D;
+}
+.nav-tabs>li>a{
+border-radius:0;
+}
+.nav-tabs>li>a:hover{
+background-color:#f1f3fa;
+border:1Px solid #f1f3fa;
+}
+.c3{
+margin-top:120px;
+}
+.skills-chart-breadcrumb{
+
+}
+
+.blue:selected{
+border:0;
+background-color: #5b9bd1;
+}
+.btn {
+  /* border-width: 0; */
+  /* padding: 7px 14px; */
+  /* font-size: 14px; */
+  /* outline: none !important; */
+  /* background-image: none !important; */
+  /* filter: none; */
+  /* -webkit-box-shadow: none; */
+  -moz-box-shadow: none;
+  /* box-shadow: none; */
+  /* text-shadow: none; */
+}
+
+.btn-default, select {
+border-width: 1px;
+padding: 4px 1px;
+border-radius: 4px;
+}
+
+.input-sm {
+       padding: 4px 10px;
+}
+
+.btn-block {
+  display: block;
+  width: 100%;
+  padding-left: 0;
+  padding-right: 0;
+}
+
+/* Bootstrap buttons */
+.btn-default {
+  color: #5b9bd1;
+  background-color: #fff;
+  border-color: #ccc;
+
+}
+.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active {
+  color: #333;
+  background-color: #ededed;
+  border-color: #b3b3b3;
+}
+.open .btn-default.dropdown-toggle {
+  color: #333;
+  background-color: #ededed;
+  border-color: #b3b3b3;
+}
+.btn-default:active, .btn-default.active {
+  background-image: none;
+  background-color: #e0e0e0;
+  font-weight: bold;
+}
+.btn-default:active:hover, .btn-default.active:hover {
+  background-color: #e6e6e6;
+}
+.open .btn-default.dropdown-toggle {
+  background-image: none;
+}
+.btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled]:active, .btn-default[disabled].active, fieldset[disabled] .btn-default, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:active, fieldset[disabled] .btn-default.active {
+  background-color: #fff;
+  border-color: #ccc;
+}
+.btn-default .badge {
+  color: #fff;
+  background-color: #333;
+}
+.btn-default > i {
+  color: #aaa;
+}
+.btn-default > i[class^="icon-"],
+.btn-default > i[class*="icon-"] {
+  color: #8c8c8c;
+}
+
+div[data-name="tab_zone"] div{
+       background-color:#f1f3fa;
+       padding:0px;
+}
+
+
+div[data-name="cond_zone"] div{
+       background-color: #fff;
+       margin-top:15px;
+       margin-bottom:15px;
+}
+
+div[data-name="log-otherConds-zone"]{
+       display:inline;
+}
+
+div[data-name="log-otherConds-zone"] select ,div[data-name="log-otherConds-zone"] span{
+     /**height:33px;*/
+        margin-left:15px;
+        color:#5b9bd1;
+        border-color:#ccc;
+         font-weight: bold;
+}
+
+div.separator div{
+       text-align: center;
+       line-height:0;
+}
+div.separator-sline{
+       height:28px ;
+       width:3px;
+}
+
+.dropdown-toggle{
+color:#5b9bd1;
+}
+.calendar-date{
+color:#5b9bd1;
+}
+.range_inputs{
+color:#5b9bd1;
+}
+.btn.dropdown-toggle, .btn-group .btn.dropdown-toggle, .btn:hover, .btn:disabled, .btn[disabled], .btn:focus, .btn:active, .btn.active {
+  outline: none !important;
+  background-image: none !important;
+  filter: none;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+  text-shadow: none;
+}
+
+#skills-chart-breadcrumb{
+margin-bottom:10px
+}
+
+
+/*增加daterangepicker的css*/
+input[name="daterange"]{
+    width: 220px;
+       line-height:0;  
+    height: 31px;
+    vertical-align: top;
+    margin-top: 2px;
+
+}
+
+.daterangepicker .ranges{
+       width: 205px;
+}
+.daterangepicker .ranges input{
+       width:95px !important;
+}
+
+td.details-control {
+    background: url('../images/details_open.png') no-repeat center center;
+    cursor: pointer;
+}
+tr.shown td.details-control {
+    background: url('../images/details_close.png') no-repeat center center;
+}
+
+
+.details table td{
+       word-wrap: break-word;
+       word-break: normal;
+       border-top: 1px solid #dddddd;
+}
+
+.details table  tr:first-child td {
+       border-top: none;
+}
+
+.details table{
+       table-layout:fixed;
+       width:100%;
+}
+
+td.title{
+       width:10%;
+}
+
+table.dataTable tbody th, table.dataTable tbody td {
+padding: 8px 10px;
+}
+
+div.dataTables_length ,div.dataTables_info{
+       display: inline;
+}
+
+div.dataTables_paginate{
+       display: inline;
+       float: right;
+}
+
+div.pagination-panel{
+       margin-right:10px;
+}
+
+input.pagination-panel-input{
+       width:50px;
+}
+
+#ict_log_table_div{
+       margin-top:15px;
+}
+
+
+#ict_sm_table_div label{
+       font-weight:100;
+}
+
+.daterangepicker .daterangepicker_start_input label, .daterangepicker .daterangepicker_end_input label{
+color:#5b9bd1;
+
+}
+.daterangepicker .ranges .input-mini{
+     color:#5b9bd1;
+  }
+.cancelBtn {
+    padding:5px 10px 5px 10px;
+}
+.btn:focus, .btn:active:focus, .btn.active:focus{
+    outline:0;
+}
+
+#ict_log_table_div  table{
+       
+}
+
+.box0{
+display:none !important
+
+}
+.box1{
+background-image:url(../images/userGroup.png);
+background-repeat:no-repeat;
+background-color:#578ebe !important;
+height:3px !important;
+background-position-y:100%;
+}
+.box2{
+background-image:url(../images/loginUser.png);
+background-repeat:no-repeat;  
+background-color:#44b6ae !important;
+height:3px !important;
+background-position-y:100%;
+}
+.box3{
+background-image:url(../images/blackList.png); 
+background-repeat:no-repeat;
+background-color:#c0af69 !important;
+height:3px !important;
+background-position-y:100%;
+}
+.box4{
+background-image:url(../images/lockUser.png); 
+background-repeat:no-repeat;
+background-color:#e35b5a !important;
+height:3px !important;
+background-position-y:100%;
+}
+.box5{
+background-image:url(../images/userGroup.png);
+background-repeat:no-repeat;
+background-color:#578ebe !important;
+height:3px !important;
+background-position-y:100%;
+}
+.box6{
+background-image:url(../images/loginUser.png);
+background-repeat:no-repeat;  
+background-color:#44b6ae !important;
+height:3px !important;
+background-position-y:100%;
+}
+.box7{
+background-image:url(../images/lockUser.png); 
+background-repeat:no-repeat;
+background-color:#e35b5a !important;
+height:3px !important;
+background-position-y:100%;
+}
+.box8{
+background-image:url(../images/userGroup.png);
+background-repeat:no-repeat;
+background-color:#578ebe !important;
+height:3px !important;
+background-position-y:100%;
+}
+.box9{
+background-image:url(../images/loginUser.png);
+background-repeat:no-repeat;  
+background-color:#44b6ae !important;
+height:3px !important;
+background-position-y:100%;
+}
+.boxPadding{
+padding-left:15px;
+padding-right:0px;
+}
+.row1 .separator-line{
+margin-bottom:5px;
+}
+.row  a{
+/*color:white;*/
+font-weight:normal;
+font-size:14px;
+
+}
+.btnBlue {
+  background-color: #5b9bd1;
+  border-radius: 20px;
+  color: white;
+  font-weight: normal;
+  text-align: center;
+  min-width: 80px;
+}
+.btnBlue:hover{
+  background-color: #487ca9 !important;
+  color:#fff !important;
+}
+.btnBlue1 {
+  background-color: #5b9bd1;
+  border-radius: 20px;
+  color: white;
+  font-weight: normal; 
+  text-align: center;
+  min-width: 80px;
+}
+.btnGrey {
+  background-color: #d3d1d1;
+  border-radius: 20px;
+  color: black !important;
+  font-weight: normal;
+  padding: 8px 0;
+  text-align: center;
+  width: 70px;
+}
+.smLianJie {
+color:#5b9bd1 !important;
+font-weight:normal;
+display:inline-block;
+margin-top:25px;
+font-size:14px
+}
+
+.smLianJie span{
+padding:2px;
+}
+.rightDiv{
+float:right;
+color:#5b9bd1 !important;
+}
+.num{
+font-size:30px;
+font-family:arial;
+font-weight:bold;
+}
+.numdiv{
+margin-bottom:20px;
+}
+.ruleDiv{
+text-align:center;
+}
+
+.ruleDiv1{
+padding-top:20px;
+text-align:center;
+}
+.fmTypeDiv{
+  padding: 20px;
+  text-align: center;
+  font-size: 16px;
+  background: white;
+  margin-top: 5px;
+  margin-left: 30px;
+  margin-right: 10px;
+  height: 105px;
+}
+.container-fluid{
+background-color:white !important;
+/*margin-top:25px;*/
+min-height:500px;
+}
+.titlefont{
+ font-size:16px;
+}
+.label{
+  font-weight: 400;
+  /*font-size: 14px; */
+}
+.v5h5{
+   font-size: 16px;
+   color:#5b9bd1 !important;
+   font-weight:bold !important;
+}
+.v5label{
+   padding-top: 5px !important;
+   font-size: 13px;
+   text-align:right;
+}
+.v5lineColor1{
+   background-color:#578ebe !important;
+}
+.box1:hover{
+   background-color:#487ca9 !important;
+}
+   
+.box2:hover{
+   background-color: #329d96 !important;
+}
+.box3:hover{
+   background-color:#ad9a4d !important;
+}
+.box4:hover{
+   background-color:#d45150 !important;
+}
+.v5spinner{
+  width:50px;
+  margin-left:10px;
+  margin-right:10px;
+}
+.ff{
+   float:left;/*左漂浮*/
+   width: 1px;
+   height: 25px;/*竖线高度*/
+   background: #000;/*填充颜色*/
+}
+.radio-list{
+  padding-top:0px;
+}
+.row1{
+ margin-right: 0px !important;
+}
+
+#ict_sm_tableloginUser_wrapper .ict-legendshow,
+#ict_sm_tablelockUser .ict-unlock
+{
+       margin-right:6px;
+}
+#ict_sm_tableallUser > thead > tr > th,#ict_sm_tableloginUser > thead > tr > th,#ict_sm_tablelockUser > thead > tr > th{
+       background:white;
+       background-color:white !important;
+}
+#weakregularity{color:#468ECE;border-bottom: 1px #468ECE dotted;margin:0px !important;}
+#weakregularity_tip{
+       position:absolute;
+       display:none;
+       background:#000;
+       opacity:0.8;
+       border:1px solid #ddd !important;       
+       font-size:0.8em;
+       margin-top:-1%;
+       margin-left:15%;
+       box-shadow:2px 3px 5px #C8C8C8;
+       border-radius:8px;
+       padding:20px 5px;
+       z-index:999;
+       width:530px;
+       height:270px;
+       color:#fff;
+       line-height:25px;
+}
+#weakregularity_tip > ul > li{margin-top:4px;list-style-type:disc;}
+#weakregularity_tip > ul > li:first-child{margin-top:0px;}
+#com_zte_ums_ict_sm_new_user_isPasswordChanged > span,
+#com_zte_ums_ict_sm_new_user_passwordvaliddays > span
+{
+       margin:0px 6px;
+}
+#forceExit{
+       /**padding:3px 18px 3px 10px;
+       cursor:pointer;
+       border:1px solid #ddd;
+       border-radius:12px;
+       text-shadow:0 1px 0 hsla(0,0%,100%,0.75);
+       //background-image:url("../images/forceOut.png");
+       //background-repeat:no-repeat;
+       //background-size:20% 70%;
+       background-position:left 10% top 45%;**/
+       margin-bottom:10px;
+}
+
+/*#forceExit:hover{
+       background-color:#F9F9F9;
+}*/
+.smLianJie:hover{
+       cursor:pointer;
+}
+div.checker,div.checker span{
+       width:22px;
+       height:22px;
+       background:#fff;
+}
+.row1 .col-xs-10, .row1 .col-md-10, .row1 .col-sm-10, .row1 .col-lg-10{
+width:87% !important;
+}
+.row1 .col-xs-2, .row1 .col-md-2, .row1 .col-sm-2, .row1 .col-lg-2{
+width:13% !important;
+}
+.modify_user{
+padding-left:0px;
+}
+.btn-xs{
+color:#333;
+font-size:14px;
+}
+.btn-xs:hover{
+color:#333
+}
+ul.ztree {margin-top: 10px;border: 1px solid #E0E0E0;/*background: #f0f6e4;width:220px;height:360px;*/overflow-y:auto;overflow-x:auto;/*ict*/padding: 25px;}
+#new_rule_body{
+padding-left:25px;
+}
+.rule_title{
+padding:8px;
+margin-bottom:25px;
+border-left: 2px solid #5b9bd1;
+color:#1A78CA;
+font-size:16px;
+}
+.group{
+margin-top:25px;
+}
+
+h5.form-section, .checkbox-list, .panel-title{
+  font-family: microsoft yahei !important;
+  color: #333;
+  <!-- padding-bottom: 15px !important; -->
+}
+.right_assign_box{
+height:400px;
+overflow-y:auto;
+overflow-x:hidden;
+border:1px solid #e0e0e0;
+}
+.right_assign_box ul.ztree{
+border:0;
+}
+.right_assign_box .table-bordered{
+ border:0;
+ }
+.right_assign_box  .table-bordered>thead>tr>th, .right_assign_box  .table-bordered>tbody>tr>th, .right_assign_box  .table-bordered>tfoot>tr>th, .right_assign_box  .table-bordered>thead>tr>td, .right_assign_box  .table-bordered>tbody>tr>td, .right_assign_box  .table-bordered>tfoot>tr>td{
+ border-left:0;
+ padding:8px 18px;
+}
+.right_assign_box .table>thead>tr>th{
+ border:0;
+}
+#com_zte_ums_ict_sm_new_user_maxlogin .form-control{
+width:30%;
+display:inline;
+margin-left:10px;
+}
+
+.div_padding{
+  padding-left:75px;
+}
+#lockThreshold{width:80%;}
+#lockThreshold_select{width:100%;height:20px;font-size:0.8em;color:black;margin-top:10px;}
+#lockThreshold_1{position:absolute;cursor:pointer;width:auto;}
+#lockThreshold_2{position:absolute;cursor:pointer;width:auto;}
+#lockThreshold_3{position:absolute;cursor:pointer;width:auto;}
+
+.delete-icon {
+  float: right;
+  /* padding: 5px; */
+  cursor: pointer;
+  position: relative;
+  display: inline-block;
+  margin-right: 2%;
+}
+.delete-icon img {
+  position: absolute;
+  right: 0px;
+}
+.removeIcon {
+  width: 22px;
+  height: 22px;
+  float: right;
+  margin-right: -8px;
+  margin-top: -8px;
+  background: url(/ngict/iui/component/ict/ict-dashboard/images/delete.png) no-repeat 0px 0px;
+  cursor: pointer;
+}
+.deleteIconHidden{
+       opacity:0;
+}
+.nam{
+       font-size: 15px;
+}
+.queryLink{
+       font-size: 15px;
+       margin-top: 10px;
+}
+.carousel-control {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  width: 3% !important;
+  opacity: .5;
+  filter: alpha(opacity=50);
+  font-size: 20px;
+  color: #fff;
+  text-align: center;
+  text-shadow: 0 1px 2px rgba(0,0,0,.6);
+}
+.carousel-control .glyphicon-chevron-right {
+  right: 10%;
+}
+.item {
+  overflow: hidden;
+  display: block;
+  margin-bottom: 0px !important;
+}
+.page-info-bottom{
+margin-top:10px;
+}
+
+.deleteIcon {
+       font-size:16px;                 
+       cursor: pointer;
+       margin-bottom: 10px;
+       float: left;
+       color:#a9c2d6;
+       border:1px solid #eef5fb;
+       border-radius:20px;
+       padding:3px;
+}
+.deleteIcon:hover {
+border:1px solid #e74c3c;
+color:#e74c3c;
+}
+.resourceObj {
+       margin-left: 30px;      
+       margin-top:3px;         
+}
+
+.resourceList th {
+       background-color: #D3E7F8 !important;
+       border: 1px solid #CEE5F9 !important;
+}
+.resourceList td {
+       background-color: #EEF5FB !important;
+       padding-top: 20px !important;
+       border: 1px solid #CEE5F9 !important;
+}
+.filterDiv {
+       margin-bottom:0;
+                                               
+}
+.filterDiv input{
+       border: 1px solid #ddd; 
+       //border-radius:3px;
+       height:30px;
+       width:100%;
+       border-bottom:0;
+}
+.boxLabel {
+       background-color: #D3E7F8;
+       margin-left: 26%;
+       border: 1px solid #E2EFFA;
+       padding: 8px;
+}
+.blueactive {
+       color: #ffffff !important;
+       background-color: #5b9bd1;
+}
+.btnWhite {
+       font-size: 14px;
+       line-height: 15px;
+       border: 1px solid #cccccc;
+}
+#taskTimeDiv {
+       margin-top: 8px;
+}
+.daterangepicker .ranges input[type="text"] {
+       width: 76px !important;
+       font-size: 11px;
+       vertical-align: middle;
+}
+#queryTimeRange {
+       width: 275px;
+       padding: 6px;
+       border: 1px solid #ddd;
+}
+.selector-class{
+       width: 200px;
+}
+.table{
+       margin-bottom: 0px;
+}
+.ict-modify{
+       font-size:16px;
+       float: right;
+       margin-bottom:-10px;    
+       position:absolute;      
+       right:5px;
+       bottom:30px;                            
+}
+.subbox{
+       text-align:center;
+}
+.subbox .ict-modify{
+       border:1px #fff solid;
+       padding:3px;
+       border-radius:5px;
+}
+.subbox .ict-modify:hover{
+       background-color:#fff;          
+       color:#709bce;
+}              
+.subbox .textImageStyle span{
+       padding:10px;
+       border-radius:30px;
+       background-color:#fff;
+       text-align:center;
+       margin:0 auto;
+       color:#b3c9e2;
+       font-size:16px;
+}
+.textImageStyle{
+       margin-bottom:4px;
+}
+.carousel-control .glyphicon-chevron-left{
+       margin-left:-30px;
+}
+.carousel-control .glyphicon-chevron-right{
+       margin-right:-10px;
+}
+.carousel-control.left, .carousel-control.right {
+    background-image: none;
+}
+.carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right, .carousel-control .icon-prev, .carousel-control .icon-next {
+    /* margin-left: 0; */
+    font-size: 25px;
+    margin-top: -20px;
+}
+.resourceList .heading{
+       font:12px normal "microsoft yahei";
+}
+.ms-controller {
+       visibility: hidden
+}
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/css/pmQueryBox.css b/openo-portal/portal-performance/src/main/webapp/performance/css/pmQueryBox.css
new file mode 100644 (file)
index 0000000..06428ed
--- /dev/null
@@ -0,0 +1,310 @@
+/**
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#addRule {
+       margin-bottom: 10px;
+}
+.btn.dropdown-toggle,
+.btn-group .btn.dropdown-toggle,
+.btn:hover,
+.btn:disabled,
+.btn[disabled],
+.btn:focus,
+.btn:active,
+.btn.active {
+       outline: none !important;
+       background-image: none !important;
+       filter: none;
+       -webkit-box-shadow: none;
+       -moz-box-shadow: none;
+       box-shadow: none;
+       text-shadow: none;
+}
+.btn-rank {
+       border-color: #ccc;
+}
+.alarm-serious {
+       background-color: #de4040;
+       color: #ffffff !important;
+}
+.alarm-serious:hover {
+       background-color: #c23737 !important;
+}
+.alarm-important {
+       background-color: #e37c29;
+       color: #ffffff !important;
+}
+.alarm-important:hover {
+       background-color: #c86e25 !important;
+}
+.alarm-secondary {
+       background-color: #e9d426;
+       color: #ffffff !important;
+}
+.alarm-secondary:hover {
+       background-color: #d3c023 !important;
+}
+.alarm-slightly {
+       background-color: #86bcdb;
+       color: #ffffff !important;
+}
+.alarm-slightly:hover {
+       background-color: #77a7c2 !important;
+}
+.btn-group.btn-group-circle > .btn:first-child {
+       border-radius: 3px 0px 0px 3px;
+}
+.btn-group.btn-group-circle > .btn:last-child {
+       border-radius: 0 3px 3px 0 !important;
+}
+.btn-group-circle {
+       padding-bottom: 5px;
+}
+.open .btn-default.dropdown-toggle {
+       color: #333;
+       background-color: #ededed;
+       border-color: #b3b3b3;
+}
+.btn-group .btn-default:active,
+.btn-group .btn-default.active {
+       background-image: none;
+       background-color: #5b9bd1;
+       color: #fff;
+}
+.ruleBox {
+       height: 175px;
+}
+.filterRule {
+       background-image: url(../images/filter.png);
+       background-repeat: no-repeat;
+       background-position: center;
+       text-align: center;
+}
+/*.boxPadding {
+       padding-top: 60px;
+}*/
+.ruleRow {
+       padding-left: 20px;
+       padding-right: 30px;
+       font-size: 15px;
+}
+.filterRuleRow {
+       padding-left: 30px;
+       padding-right: 20px;
+       font-size: 15px;
+}
+.fRule {
+       padding-left: 12%;
+       padding-right: 12%;
+}
+.ruleNav .ruleBox .rule {
+       margin-top: 5px;
+       padding-left: 0px;
+}
+.bigText {
+       height: 400px;
+}
+.bigText1 {
+       margin-bottom: 20px;
+       height: 320px;
+}
+.right_assign_box {
+       height: 412px;
+       overflow-y: auto;
+       overflow-x: hidden;
+       border: 1px solid #ccc;
+       border-radius: 4px;
+}
+.boxHeight {
+       height: 723px;
+}
+.right_assign_box1 {
+       height: 800px;
+       overflow-y: auto;
+       overflow-x: hidden;
+       border: 1px solid #e0e0e0;
+}
+.right_assign_box ul.ztree {
+       border: 0;
+}
+.right_assign_box .table-bordered {
+       border: 0;
+}
+.right_assign_box .table-bordered > thead > tr > th,
+.right_assign_box .table-bordered > tbody > tr > th,
+.right_assign_box .table-bordered > tfoot > tr > th,
+.right_assign_box .table-bordered > thead > tr > td,
+.right_assign_box .table-bordered > tbody > tr > td,
+.right_assign_box .table-bordered > tfoot > tr > td {
+       border-left: 0;
+       padding: 8px 18px;
+}
+.right_assign_box .table > thead > tr > th {
+       border: 0;
+}
+ul.ztree {
+       border: 1px solid #E0E0E0;
+       /*background: #f0f6e4;width:220px;height:360px;*/
+       
+       overflow-y: auto;
+       overflow-x: auto;
+}
+.rule_title {
+       padding-left: 5px;
+       margin-bottom: 15px;
+       border-left: 2px solid #5b9bd1;
+       color: #1A78CA;
+       font-size: 16px;
+}
+.row1 .separator-line {
+       margin-bottom: 5px;
+}
+.group {
+       margin-top: 25px;
+}
+.ztree li span.button.diy1_icon {
+       background: url("");
+}
+.titlefont {
+       font-size: 16px;
+}
+#new_rule_body {
+       padding-left: 25px;
+}
+#defaulInfo,
+#selectAralmCodes {
+       border: 1px solid #e0e0e0;
+}
+.iconPosition div {
+       color: #757575;
+       cursor: pointer;
+}
+.iconPosition div:hover {
+       color: #333;
+}
+#dataRange {
+       margin-left: 15px;
+}
+.dataRow {
+       margin-left: 15px;
+}
+.alarmLevel {
+       margin-left: 15px;
+}
+.ruleList {
+       background-color: #fff;
+       min-height: 460px;
+}
+.ruleNav {
+       // margin-bottom: 15px;
+       margin-left: 15px;
+       margin-right: 15px;
+}
+.right-assign-checked-box {
+       height: 412px;
+       overflow-y: auto;
+       overflow-x: auto;
+       border: 1px solid #e0e0e0;
+}
+.box {
+       color: white;
+       text-align: center;
+       height: 80px !important;
+       font-size: 14px;
+}
+.boxStyle1,
+.ProcessingSuggestion {
+       background-repeat: no-repeat;
+       background-color: #48C79C !important;
+       background-position-y: 100%;
+}
+.boxStyle1:hover,
+.ProcessingSuggestion:hover {
+       background-color: #64e2b8 !important;
+}
+.boxStyle2,
+.notifyFilter {
+       background-repeat: no-repeat;
+       background-color: #709BCE !important;
+       background-position-y: 100%;
+}
+.boxStyle2:hover,
+.notifyFilter:hover {
+       background-color: #87b2e4 !important;
+}
+.boxStyle3,
+.alarmBox {
+       background-repeat: no-repeat;
+       background-color: #9699E0 !important;
+       background-position-y: 100%;
+}
+.boxStyle3:hover,
+.alarmBox:hover {
+       background-color: #acaff1 !important;
+}
+.boxStyle4,
+.codesetting {
+       background-repeat: no-repeat;
+       background-color: #5BC0DE !important;
+       background-position-y: 100%;
+}
+.boxStyle4:hover,
+.codesetting:hover {
+       background-color: #8dd4eb !important;
+}
+.ruleNav .separator-line {
+       margin-bottom: 5px;
+       height: 3px;
+}
+.ruleNav .separator-line-visibilty {
+       visibility: hidden;
+}
+a {
+       text-decoration: none !important;
+}
+.subbox {
+       padding-left: 5px;
+       padding-right: 5px;
+}
+.textImageStyle {
+       font-size: 24px;
+       margin-right: 5px;
+       vertical-align: middle;
+       padding-left: 0;
+       padding-bottom: 1px;
+       padding-top: 14px;
+}
+#test1>div {
+       margin-bottom: 15px;
+}
+.rule-submit {
+       padding-left: 45px;
+}
+.sugg-box .form-control {
+       margin-bottom: 15px;
+}
+/*.dataTables_info{
+    float:right;
+}*/
+
+@media screen and (max-width: 900px) and (min-width: 600px) {
+       .rule-pic {
+               display: none;
+       }
+       .ruleNav .col-xs-10 {
+               width: 100%;
+       }
+}
+
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/i18n/web-alarm-i18n-en-US.properties b/openo-portal/portal-performance/src/main/webapp/performance/i18n/web-alarm-i18n-en-US.properties
new file mode 100644 (file)
index 0000000..281d3e3
--- /dev/null
@@ -0,0 +1,123 @@
+#
+# Copyright 2016, CMCC Technologies Co., Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+//表格相关
+ngict-fm-iui-table-sLengthMenu=View _MENU_ records
+ngict-fm-iui-table-sZeroRecords=No matching records found
+ngict-fm-iui-table-sInfo= | Found total _TOTAL_ records     
+ngict-fm-iui-table-sInfoEmpty=No records found to show
+ngict-fm-iui-table-sGroupActions=_TOTAL_ records selected:  
+ngict-fm-iui-table-sAjaxRequestGeneralError=Could not complete request. Please check your internet connection.
+ngict-fm-iui-table-sEmptyTable=No data available in table
+ngict-fm-iui-table-sPrevious=Prev
+ngict-fm-iui-table-sNext=Next
+ngict-fm-iui-table-sPage=Page
+ngict-fm-iui-table-sPageOf=of
+
+//告警界面
+ngict_fm_iui_curalarm_currentAlarm=Active Alarms
+ngict_fm_iui_curalarm_advance=Advance
+ngict_fm_iui_curalarm_alarmPosition=Location
+ngict_fm_iui_curalarm_choosed=Selected
+ngict_fm_iui_curalarm_locationSelected=Selected <!--alarmLocationSelectedCount-->
+ngict_fm_iui_curalarm_alarmTypeSelected=Selected <!--alarmTypeSelectedCount-->
+ngict_fm_iui_curalarm_probableCauseSelected=Selected <!--alarmCodeSelectedCount-->
+ngict_fm_iui_curalarm_alarmType=Alarm Type
+ngict_fm_iui_curalarm_probableCause=Alarm Code
+ngict_fm_iui_curalarm_ackTimeTitle=ACK Time:
+ngict_fm_iui_curalarm_recentOneDay=Last One Day
+ngict_fm_iui_curalarm_recenttwoDays=Last Two Days
+ngict_fm_iui_curalarm_recentOneWeek=Last One Week
+ngict_fm_iui_curalarm_raisedTime=Raised Time:
+ngict_fm_iui_curalarm_query=Query
+ngict_fm_iui_curalarm_save=Save
+ngict_fm_iui_curalarm_clean=Clear
+ngict_fm_iui_curalarm_refreash=Refreash
+ngict_fm_iui_curalarm_exportAll=Export All
+ngict_fm_iui_curalarm_name=Name
+ngict_fm_iui_curalarm_condSaveTip=Update conditions when conditions exist,otherwise create a new condition.
+ngict_fm_iui_curalarm_cancel=Cancel
+ngict_fm_iui_curalarm_ok=OK
+ngict_fm_iui_curalarm_affirm=Acknowledge
+ngict_fm_iui_curalarm_unaffirm=Unacknowledge
+ngict_fm_iui_curalarm_custom=Custom
+
+ngict_fm_iui_curalarm_critical=Critical
+ngict_fm_iui_curalarm_major=Major
+ngict_fm_iui_curalarm_minor=Minor
+ngict_fm_iui_curalarm_warning=Warning
+ngict_fm_iui_curalarm_ackAlarm=Acknowledge
+ngict_fm_iui_curalarm_unackAlarm=Unacknowledge
+ngict_fm_iui_curalarm_visible=Visible
+ngict_fm_iui_curalarm_invisible=Invisible
+
+ngict_fm_iui_curalarm_order=No.
+ngict_fm_iui_curalarm_id=id
+ngict_fm_iui_curalarm_ne=NE
+ngict_fm_iui_curalarm_moc=NE Type
+ngict_fm_iui_curalarm_probableCauseCode=Alarm Code
+ngict_fm_iui_curalarm_alarmRaisedTime=Raised Time
+ngict_fm_iui_curalarm_perceivedSeverity=Severity
+ngict_fm_iui_curalarm_ackState=ACK State
+ngict_fm_iui_curalarm_ackTime=(UN)ACK Time
+ngict_fm_iui_curalarm_position1=Position1
+ngict_fm_iui_curalarm_alarmChangedTime=Changed Time
+ngict_fm_iui_curalarm_ackUserId=(UN)ACK User ID
+ngict_fm_iui_curalarm_ackSystemId=(UN)ACK System ID
+ngict_fm_iui_curalarm_alarmClearedTime=Cleared Time
+ngict_fm_iui_curalarm_additionalText=Additional Information
+ngict_fm_iui_curalarm_ackSystem=(UN)ACK System
+ngict_fm_iui_curalarm_clearUserId=Clear User ID
+ngict_fm_iui_curalarm_clearSystemId=Clear System ID
+ngict_fm_iui_curalarm_clearType=Clear Type
+ngict_fm_iui_curalarm_specificProblem=Specific Problem
+ngict_fm_iui_curalarm_neIp=NE IP
+
+//调用datarangepicker组件
+ngict_fm_iui_curalarm_from=from
+ngict_fm_iui_curalarm_to=to
+ngict_fm_iui_curalarm_Mon=Mon
+ngict_fm_iui_curalarm_Tues=Tues
+ngict_fm_iui_curalarm_Wed=Wed
+ngict_fm_iui_curalarm_Thurs=Thurs
+ngict_fm_iui_curalarm_Fri=Fri
+ngict_fm_iui_curalarm_Sat=Sat
+ngict_fm_iui_curalarm_Sun=Sun
+ngict_fm_iui_curalarm_January=January
+ngict_fm_iui_curalarm_February=February
+ngict_fm_iui_curalarm_March=March
+ngict_fm_iui_curalarm_April=April
+ngict_fm_iui_curalarm_May=May
+ngict_fm_iui_curalarm_June=June
+ngict_fm_iui_curalarm_July=July
+ngict_fm_iui_curalarm_August=August
+ngict_fm_iui_curalarm_September=September
+ngict_fm_iui_curalarm_October=October
+ngict_fm_iui_curalarm_November=November
+ngict_fm_iui_curalarm_December=December
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/i18n/web-performance-i18n-en-US.properties b/openo-portal/portal-performance/src/main/webapp/performance/i18n/web-performance-i18n-en-US.properties
new file mode 100644 (file)
index 0000000..02fa546
--- /dev/null
@@ -0,0 +1,145 @@
+#
+# Copyright 2016, CMCC Technologies Co., Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+com_zte_ums_ict_pm_index_indexManagement=Index Management
+com_zte_ums_ict_pm_index_indexName=Name
+com_zte_ums_ict_pm_index_dataType=Data Type
+com_zte_ums_ict_pm_index_moType=Mo Type
+com_zte_ums_ict_pm_index_counter=Counter
+com_zte_ums_ict_pm_index_resourceType=NE Type
+com_zte_ums_ict_pm_index_strExpression=Formula
+com_zte_ums_ict_pm_index_indexDes=Formula Expression
+com_zte_ums_ict_pm_index_operate=Operate
+com_zte_ums_ict_pm_index_selectCounter=Please select the Mo Type first
+com_zte_ums_ict_sm_confirmToDeleteIndex=Are you sure to delete this index?
+STRING=String
+INT=Int
+FLOAT=Float
+LONG=Long
+DATA=Date
+PERCENT=Percent
+
+com_zte_ums_ict_pm_threshold=Threshold
+com_zte_ums_ict_pm_threshold_title=Threshold Management
+com_zte_ums_ict_pm_threshold_index=门限标示
+com_zte_ums_ict_pm_threshold_taskName=Task Name
+com_zte_ums_ict_pm_index_direction=Direction
+com_zte_ums_ict_pm_threshold_warning=Warning Threshold
+com_zte_ums_ict_pm_threshold_minor=Minor Threshold
+com_zte_ums_ict_pm_threshold_major=Major Threshold
+com_zte_ums_ict_pm_threshold_critical=Critical Threshold
+com_zte_ums_ict_pm_threshold_resource=Resource
+com_zte_ums_ict_pm_threshold_resource_name=Resource Name
+com_zte_ums_ict_pm_threshold_resource_value=Resource Value
+com_zte_ums_ict_pm_threshold_resource_turbulence=Turbulence Value
+com_zte_ums_ict_pm_threshold_up=Up
+com_zte_ums_ict_pm_threshold_down=Down
+
+
+com_zte_ums_ict_pm_index_dataType=数据类型
+com_zte_ums_ict_pm_index_activeStatus=状态
+com_zte_ums_ict_pm_index_activeStatus_true=激活
+com_zte_ums_ict_pm_index_activeStatus_false=挂起
+com_zte_ums_ict_pm_index_granularity=粒度
+com_zte_ums_ict_pm_index_beginTime=开始时间
+com_zte_ums_ict_pm_index_endTime=结束时间
+
+
+com_zte_ums_ict_pm_action_add=Create
+com_zte_ums_ict_pm_action_modify=Modify
+com_zte_ums_ict_pm_action_delete=Delete
+com_zte_ums_ict_pm_action_query=Query
+
+com_zte_ums_ict_pm_submit=Submit
+com_zte_ums_ict_pm_back=Back
+com_zte_ums_ict_sm_confirmToDeleteThreshold=Are you sure to remove this task?
+
+com_zte_ums_ict_pm_query_data=PM Data Query
+com_zte_ums_ict_pm_query_edit=Edit Query Condition
+com_zte_ums_ict_pm_query_result=Query Data Result
+com_zte_ums_ict_pm_query_start_time=Start Time
+com_zte_ums_ict_pm_query_end_time=End Time
+com_zte_ums_ict_pm_query_granularity=Granularity
+com_zte_ums_ict_pm_query_resource_type=Resource Type
+com_zte_ums_ict_pm_query_resource_name=Resource Name
+com_zte_ums_ict_pm_query_time=Query Time
+com_zte_ums_ict_pm_query_granularity=Query Granularity
+com_zte_ums_ict_pm_query_pmIndex=PM Index
+com_zte_ums_ict_pm_query_moType=Mo Type
+com_zte_ums_ict_pm_query_index=Counters
+com_zte_ums_ict_pm_query_resource=Resource
+com_zte_ums_ict_pm_query_target_resource=Query Resource
+com_zte_ums_ict_pm_query_selected_resource=Selected Resources
+com_zte_ums_ict_pm_query_selected_search=Search
+com_zte_ums_ict_pm_query_5=5 Minutes
+com_zte_ums_ict_pm_query_15=15 Minutes
+com_zte_ums_ict_pm_query_60=One Hour
+resourcesToFilter=Search
+
+//表格相关
+ngict-log-iui-table-sLengthMenu=View _MENU_ records
+ngict-log-iui-table-sZeroRecords=No matching records found
+ngict-log-iui-table-sInfo=Found total _TOTAL_ records
+ngict-log-iui-table-sInfoEmpty=No records found to show
+ngict-log-iui-table-sGroupActions=_TOTAL_ records selected:  
+ngict-log-iui-table-sAjaxRequestGeneralError=Could not complete request. Please check your internet connection.
+ngict-log-iui-table-sEmptyTable=No data available in table
+ngict-log-iui-table-sPrevious=Prev
+ngict-log-iui-table-sNext=Next
+ngict-log-iui-table-sPage=Page
+ngict-log-iui-table-sPageOf=of
+
+//日期组件
+ngict-iui-dateRange-month=Month
+ngict-iui-dateRange-Jan=Jan
+ngict-iui-dateRange-Feb=Feb
+ngict-iui-dateRange-Mar=Mar
+ngict-iui-dateRange-Apr=Apr
+ngict-iui-dateRange-May=May
+ngict-iui-dateRange-Jun=Jun
+ngict-iui-dateRange-Jul=Jul
+ngict-iui-dateRange-Aug=Aug
+ngict-iui-dateRange-Sep=Sep
+ngict-iui-dateRange-Oct=Oct
+ngict-iui-dateRange-Nov=Nov
+ngict-iui-dateRange-Dec=Dec
+ngict-iui-dateRange-applyLabel=Confirm
+ngict-iui-dateRange-cancelLabel=Cancel
+ngict-iui-dateRange-fromLabel=From
+ngict-iui-dateRange-toLabel=To
+ngict-iui-dateRange-customRangeLabel=Custom
+ngict-iui-dateRange-Sunday=Su
+ngict-iui-dateRange-Monday=Mo
+ngict-iui-dateRange-Tuesday=Tu
+ngict-iui-dateRange-Wednesday=We
+ngict-iui-dateRange-Thursday=Th
+ngict-iui-dateRange-Friday=Fr
+ngict-iui-dateRange-Saturday=Sa
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/image/aos_view-fm.gif b/openo-portal/portal-performance/src/main/webapp/performance/image/aos_view-fm.gif
new file mode 100644 (file)
index 0000000..7914b55
Binary files /dev/null and b/openo-portal/portal-performance/src/main/webapp/performance/image/aos_view-fm.gif differ
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/image/arrow.png b/openo-portal/portal-performance/src/main/webapp/performance/image/arrow.png
new file mode 100644 (file)
index 0000000..5c66dd7
Binary files /dev/null and b/openo-portal/portal-performance/src/main/webapp/performance/image/arrow.png differ
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/image/chart_icon.png b/openo-portal/portal-performance/src/main/webapp/performance/image/chart_icon.png
new file mode 100644 (file)
index 0000000..f4fbc31
Binary files /dev/null and b/openo-portal/portal-performance/src/main/webapp/performance/image/chart_icon.png differ
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/image/delete.png b/openo-portal/portal-performance/src/main/webapp/performance/image/delete.png
new file mode 100644 (file)
index 0000000..5947c7c
Binary files /dev/null and b/openo-portal/portal-performance/src/main/webapp/performance/image/delete.png differ
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/image/details_close.png b/openo-portal/portal-performance/src/main/webapp/performance/image/details_close.png
new file mode 100644 (file)
index 0000000..e6281ba
Binary files /dev/null and b/openo-portal/portal-performance/src/main/webapp/performance/image/details_close.png differ
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/image/details_open.png b/openo-portal/portal-performance/src/main/webapp/performance/image/details_open.png
new file mode 100644 (file)
index 0000000..5bf4389
Binary files /dev/null and b/openo-portal/portal-performance/src/main/webapp/performance/image/details_open.png differ
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/image/down.png b/openo-portal/portal-performance/src/main/webapp/performance/image/down.png
new file mode 100644 (file)
index 0000000..f7732ba
Binary files /dev/null and b/openo-portal/portal-performance/src/main/webapp/performance/image/down.png differ
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/image/filter.png b/openo-portal/portal-performance/src/main/webapp/performance/image/filter.png
new file mode 100644 (file)
index 0000000..d7600c8
Binary files /dev/null and b/openo-portal/portal-performance/src/main/webapp/performance/image/filter.png differ
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/image/statistics.png b/openo-portal/portal-performance/src/main/webapp/performance/image/statistics.png
new file mode 100644 (file)
index 0000000..8be1db1
Binary files /dev/null and b/openo-portal/portal-performance/src/main/webapp/performance/image/statistics.png differ
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/image/table_icon.png b/openo-portal/portal-performance/src/main/webapp/performance/image/table_icon.png
new file mode 100644 (file)
index 0000000..4a7be17
Binary files /dev/null and b/openo-portal/portal-performance/src/main/webapp/performance/image/table_icon.png differ
similarity index 91%
rename from openo-portal/portal-common/src/main/webapp/common/image/source/ztelogo.png
rename to openo-portal/portal-performance/src/main/webapp/performance/image/up.png
index ebe122a..8bd5374 100644 (file)
Binary files a/openo-portal/portal-common/src/main/webapp/common/image/source/ztelogo.png and b/openo-portal/portal-performance/src/main/webapp/performance/image/up.png differ
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/js/alarmConds.js b/openo-portal/portal-performance/src/main/webapp/performance/js/alarmConds.js
new file mode 100644 (file)
index 0000000..69f72d7
--- /dev/null
@@ -0,0 +1,276 @@
+/*
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var AlarmConds = function () {
+
+    return {
+
+        parseActiveConds2JSon: function (conds) {
+            return this.parseConds2JSon(conds, 1);
+        },
+        parseHistoryConds2JSon: function (conds) {
+            return this.parseConds2JSon(conds, 2);
+        },
+
+        /**
+         *  传入的条件数组说明:
+         *  每个条件都是一个对象,包含2个属性:type和data。type表示条件的类型,data是一个数组,每项都表示一个条件。
+         *  下面是支持的所有条件的说明:
+         *  1)网元
+         *      {
+                        *          type : 'Position',
+                        *          data : [{   //支持多个
+                        *               locationId : 'lId1',
+                        *               oid : 'oid1',
+                        *               isSelf : true //是否分组,true表示只包含自己,false表示分组
+                        *           }
+                        *          ]
+                        *       }
+         *  2)级别
+         *      {
+                        *          type : 'Severity',
+                        *          data : [{  //支持多个
+                        *               severity : 1 //1表示严重,2表示主要,3表示次要,4表示警告
+                        *           }
+                        *          ]
+                        *       }
+         *  3)确认状态
+         *      {
+                        *          type : 'AckState',
+                        *          data : [{  //支持多个
+                        *               ackState : 1 //1表示已确认,2表示未确认
+                        *           }
+                        *          ]
+                        *      }
+         *  4)可见性
+         *      {
+                        *          type : 'FilterState',
+                        *          data : [{  //支持多个
+                        *               filterState : 1 //1表示可见,0表示不可见
+                        *           }
+                        *          ]
+                        *       }
+         *  5)告警类型
+         *      {
+                        *          type : 'AlarmType',
+                        *          data : [{  //支持多个
+                        *               alarmType : 1 //0表示通信告警,1表示处理错误告警,2表示服务质量告警,3表示设备告警,4表示环境告警,5表示网管系统告警,6表示完整性告警,7表示可用性告警,8表示物理攻击告警,9表示安全攻击告警,10表示时限告警
+                        *           }
+                        *          ]
+                        *       }
+         *  6)告警码
+         *      {
+                        *          type : 'ProbableCause',
+                        *          data : [{  //支持多个
+                        *               systemType : 6,
+                        *               code : 1001
+                        *           }
+                        *          ]
+                        *       }
+         *  7)发生时间
+         *      {
+                        *          type : 'RaisedTime',
+                        *          data : [{  //支持一个
+                        *               mode : 0, //0表示区间,1表示最近
+                        *               start : 1399429229000, //mode为0时,表示开始时间,mode为1时,表示时间的毫秒值
+                        *               end : 1399515601000  //mode为0时,表示结束时间,mode为1时,表示时间的毫秒值
+                        *           }
+                        *          ]
+                        *       }
+         *  8)确认时间
+         *      {
+                        *          type : 'AckTime',
+                        *          data : [{  //支持一个
+                        *               mode : 0, //0表示区间,1表示最近
+                        *               start : 1399429229000, //mode为0时,表示开始时间,mode为1时,表示时间的毫秒值
+                        *               end : 1399515601000  //mode为0时,表示结束时间,mode为1时,表示时间的毫秒值
+                        *           }
+                        *          ]
+                        *       }
+         *  9)清除时间
+         *      {
+                        *          type : 'ClearedTime',
+                        *          data : [{  //支持一个
+                        *               mode : 0, //0表示区间,1表示最近
+                        *               start : 1399429229000, //mode为0时,表示开始时间,mode为1时,表示时间的毫秒值
+                        *               end : 1399515601000  //mode为0时,表示结束时间,mode为1时,表示时间的毫秒值
+                        *           }
+                        *          ]
+                        *       }
+         *    10)告警ID
+         *      {
+                        *          type : 'AlarmId',
+                        *          data : [{  //支持一个
+                        *               id : 1412923648983
+                        *           }
+                        *          ]
+                        *       }
+         *    11)MOC
+         *      {
+                        *          type : 'Moc',
+                        *          data : [{ //支持一个
+                        *               moc : 'moc' //支持前缀匹配,如:'moc%'
+                        *           }
+                        *          ]
+                        *       }
+         *    12)ip地址
+         *      {
+                        *                      type : 'NeIp',
+                        *                      data : [{ //支持一个
+                        *                              neIp : '10.74.165.57'
+                        *                      }
+                        *         ]
+                        *              }
+         */
+        parseConds2JSon: function (conds, ruleType) {
+            var parser = {
+                Position: function (cond) {
+                    var condStr = "";
+                    if (cond.type === "Position" && cond.data.length > 0) {
+                        condStr = "<NewPositionCond OwnerType='Position' value='" + cond.data[0].locationId + "#" + cond.data[0].oid + "#" + cond.data[0].isSelf;
+                        for (var i = 1; i < cond.data.length; i++) {
+                            condStr += "∷" + cond.data[i].locationId + "#" + cond.data[i].oid + "#" + cond.data[i].isSelf;
+                        }
+                        condStr += "' />";
+                    }
+                    return condStr;
+                },
+                Severity: function (cond) {
+                    var condStr = "";
+                    if (cond.type === "Severity" && cond.data.length > 0) {
+                        condStr = "<PerceivedSeverity value='" + cond.data[0].severity;
+                        for (var i = 1; i < cond.data.length; i++) {
+                            condStr += "," + cond.data[i].severity;
+                        }
+                        condStr += "' />";
+                    }
+                    return condStr;
+                },
+                AckState: function (cond) {
+                    var condStr = "";
+                    if (cond.type === "AckState" && cond.data.length > 0) {
+                        condStr = "<AckState value='" + cond.data[0].ackState;
+                        for (var i = 1; i < cond.data.length; i++) {
+                            condStr += "," + cond.data[i].ackState;
+                        }
+                        condStr += "' />";
+                    }
+                    return condStr;
+                },
+                FilterState: function (cond) {
+                    var condStr = "";
+                    if (cond.type === "FilterState" && cond.data.length > 0) {
+                        condStr = "<FilterState value='" + cond.data[0].filterState;
+                        for (var i = 1; i < cond.data.length; i++) {
+                            condStr += "," + cond.data[i].filterState;
+                        }
+                        condStr += "' />";
+                    }
+                    return condStr;
+                },
+                AlarmType: function (cond) {
+                    var condStr = "";
+                    if (cond.type === "AlarmType" && cond.data.length > 0) {
+                        condStr = "<AlarmType value='" + cond.data[0].alarmType;
+                        for (var i = 1; i < cond.data.length; i++) {
+                            condStr += "," + cond.data[i].alarmType;
+                        }
+                        condStr += "' />";
+                    }
+                    return condStr;
+                },
+                ProbableCause: function (cond) {
+                    var condStr = "";
+                    if (cond.type === "ProbableCause" && cond.data.length > 0) {
+                        condStr = "<ProbableCause value='" + cond.data[0].systemType + "#" + cond.data[0].code;
+                        for (var i = 1; i < cond.data.length; i++) {
+                            condStr += "," + cond.data[i].systemType + "#" + cond.data[i].code;
+                        }
+                        condStr += "' />";
+                    }
+                    return condStr;
+                },
+                RaisedTime: function (cond) {
+                    var condStr = "";
+                    if (cond.type === "RaisedTime" && cond.data.length === 1) {
+                        condStr = "<RaisedTime model='" + cond.data[0].mode + "' start='" + cond.data[0].start + "' end= '" + cond.data[0].end + "' queryTimeZone='' condTimeZone='' />";
+                    }
+                    return condStr;
+                },
+                AckTime: function (cond) {
+                    var condStr = "";
+                    if (cond.type === "AckTime" && cond.data.length === 1) {
+                        condStr = "<AckTime model='" + cond.data[0].mode + "' start='" + cond.data[0].start + "' end= '" + cond.data[0].end + "' queryTimeZone='' condTimeZone='' />";
+                    }
+                    return condStr;
+                },
+                ClearedTime: function (cond) {
+                    var condStr = "";
+                    if (cond.type === "ClearedTime" && cond.data.length === 1) {
+                        condStr = "<ClearedTime model='" + cond.data[0].mode + "' start='" + cond.data[0].start + "' end= '" + cond.data[0].end + "' queryTimeZone='' condTimeZone='' />";
+                    }
+                    return condStr;
+                },
+                AlarmId: function (cond) {
+                    var condStr = "";
+                    if (cond.type === "AlarmId" && cond.data.length === 1) {
+                        condStr = "<IDString value='" + cond.data[0].id + "'/>";
+                    }
+                    return condStr;
+                },
+                Moc: function (cond) {
+                    var condStr = "";
+                    if (cond.type === "Moc" && cond.data.length === 1) {
+                        condStr = "<Moc Moc='" + cond.data[0].moc + "' SELECT_MODEL='false' MocSelf='true' />";
+                    }
+                    return condStr;
+                },
+                NeIp: function (cond) {
+                    var condStr = "";
+                    if (cond.type === "NeIp" && cond.data.length === 1) {
+                        condStr = "<NeIp value='" + cond.data[0].neIp + "' />";
+                    }
+                    return condStr;
+                }
+            };
+
+            var d = new Date();
+            var JSonObj = {
+                rule: {
+                    ruleId: -1,
+                    name: "Alarm",
+                    creator: "admin",
+                    createTime: d.getTime(),
+                    modifier: "",
+                    modifyTime: 0,
+                    description: "",
+                    state: true,
+                    ruleType: ruleType,
+                    ruleSort: 1,
+                    owner: "",
+                    attrs: "<Attrs/>"
+                }
+            };
+            var condStr = "<CompoundCond>";
+            for (var i = 0; i < conds.length; i++) {
+                condStr += parser[conds[i].type](conds[i]);
+            }
+            JSonObj.rule.ruleData = condStr + "</CompoundCond>";
+            //return JSON.stringify(JSonObj);
+            return JSonObj;
+        }
+
+    };
+}();
\ No newline at end of file
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/js/alarmsServerPageTable.js b/openo-portal/portal-performance/src/main/webapp/performance/js/alarmsServerPageTable.js
new file mode 100644 (file)
index 0000000..6765920
--- /dev/null
@@ -0,0 +1,529 @@
+/*
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var serverPageTable = {};
+var queryCacheId = null;
+var alarmCount;
+/* Bootstrap style full number pagination control */
+$.fn.dataTableExt.oApi.fnPagingInfo = function (oSettings) {
+    return {
+        "iEnd": oSettings.fnDisplayEnd(),
+        "iLength": oSettings._iDisplayLength,
+        "iTotal": oSettings.fnRecordsTotal(),
+        "iFilteredTotal": oSettings.fnRecordsDisplay(),
+        "iPage": Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength),
+        "iTotalPages": Math.ceil(oSettings.fnRecordsDisplay() / oSettings._iDisplayLength)
+    };
+};
+
+$.extend($.fn.dataTableExt.oPagination, {
+    "bootstrap_extended": {
+        "fnInit": function (oSettings, nPaging, fnDraw) {
+            var oLang = oSettings.oLanguage.oPaginate;
+            var oPaging = oSettings.oInstance.fnPagingInfo();
+
+            var fnClickHandler = function (e) {
+                e.preventDefault();
+                if (oSettings.oApi._fnPageChange(oSettings, e.data.action)) {
+                    fnDraw(oSettings);
+                }
+            };
+
+            $(nPaging).append(
+                '<div class="pagination-panel"> ' + oLang.sPage + ' ' +
+                '<a href="#" class="btn btn-sm default prev disabled" title="' + oLang.sPrevious + '"><i class="fa fa-angle-left"></i></a>' +
+                '<input type="text" class="pagination-panel-input input-mini input-inline input-sm" maxlenght="5" style="text-align:center; margin: 0 4px; border: 1px solid rgb(169, 169, 169);height: 28px;">' +
+                '<a href="#" class="btn btn-sm default next disabled" title="' + oLang.sNext + '"><i class="fa fa-angle-right"></i></a> ' +
+                oLang.sPageOf + ' <span class="pagination-panel-total"></span>' +
+                '</div>'
+            );
+
+            var els = $('a', nPaging);
+
+            $(els[0]).bind('click.DT', {action: "previous"}, fnClickHandler);
+            $(els[1]).bind('click.DT', {action: "next"}, fnClickHandler);
+
+            $('.pagination-panel-input', nPaging).bind('change.DT', function (e) {
+                var oPaging = oSettings.oInstance.fnPagingInfo();
+                e.preventDefault();
+                var page = parseInt($(this).val());
+                if (page > 0 && page < oPaging.iTotalPages) {
+                    if (oSettings.oApi._fnPageChange(oSettings, page - 1)) {
+                        fnDraw(oSettings);
+                    }
+                } else {
+                    $(this).val(oPaging.iPage + 1);
+                }
+            });
+
+            $('.pagination-panel-input', nPaging).bind('keypress.DT', function (e) {
+                var oPaging = oSettings.oInstance.fnPagingInfo();
+                if (e.which == 13) {
+                    var page = parseInt($(this).val());
+                    if (page > 0 && page < oSettings.oInstance.fnPagingInfo().iTotalPages) {
+                        if (oSettings.oApi._fnPageChange(oSettings, page - 1)) {
+                            fnDraw(oSettings);
+                        }
+                    } else {
+                        $(this).val(oPaging.iPage + 1);
+                    }
+                    e.preventDefault();
+                }
+            });
+        },
+
+        "fnUpdate": function (oSettings, fnDraw) {
+            var iListLength = 5;
+            var oPaging = oSettings.oInstance.fnPagingInfo();
+            var an = oSettings.aanFeatures.p;
+            var i, j, sClass, iStart, iEnd, iHalf = Math.floor(iListLength / 2);
+
+            if (oPaging.iTotalPages < iListLength) {
+                iStart = 1;
+                iEnd = oPaging.iTotalPages;
+            }
+            else if (oPaging.iPage <= iHalf) {
+                iStart = 1;
+                iEnd = iListLength;
+            } else if (oPaging.iPage >= (oPaging.iTotalPages - iHalf)) {
+                iStart = oPaging.iTotalPages - iListLength + 1;
+                iEnd = oPaging.iTotalPages;
+            } else {
+                iStart = oPaging.iPage - iHalf + 1;
+                iEnd = iStart + iListLength - 1;
+            }
+
+
+            for (i = 0, iLen = an.length; i < iLen; i++) {
+                var wrapper = $(an[i]).parents(".dataTables_wrapper");
+
+                if (oPaging.iTotalPages <= 0) {
+                    $('.pagination-panel, .dataTables_length', wrapper).hide();
+                } else {
+                    $('.pagination-panel, .dataTables_length', wrapper).show();
+                }
+
+                $('.pagination-panel-total', an[i]).html(oPaging.iTotalPages);
+                $('.pagination-panel-input', an[i]).val(oPaging.iPage + 1);
+
+                // Remove the middle elements
+                $('li:gt(1)', an[i]).filter(':not(.next)').remove();
+
+                // Add the new list items and their event handlers
+                for (j = iStart; j <= iEnd; j++) {
+                    sClass = (j == oPaging.iPage + 1) ? 'class="active"' : '';
+                    $('<li ' + sClass + '><a href="#">' + j + '</a></li>')
+                        .insertBefore($('li.next:first', an[i])[0])
+                        .bind('click', function (e) {
+                            e.preventDefault();
+                            oSettings._iDisplayStart = (parseInt($('a', this).text(), 10) - 1) * oPaging.iLength;
+                            fnDraw(oSettings);
+                        });
+                }
+
+                // Add / remove disabled classes from the static elements
+                if (oPaging.iPage === 0) {
+                    $('a.prev', an[i]).addClass('disabled');
+                } else {
+                    $('a.prev', an[i]).removeClass('disabled');
+                }
+
+                if (oPaging.iPage === oPaging.iTotalPages - 1 || oPaging.iTotalPages === 0) {
+                    $('a.next', an[i]).addClass('disabled');
+                } else {
+                    $('a.next', an[i]).removeClass('disabled');
+                }
+            }
+        }
+    }
+});
+
+//构造查询条件
+serverPageTable.getRestPara = function (cond, tableSetting) {
+
+       var conditions =  {};
+       //告警级别
+       if (cond.severity != null && cond.severity != "undefined" && cond.severity.length > 0) {
+               var severity = '['+cond.severity+']';
+        var severityObj = window.JSON.parse(severity);
+               conditions.severities=severityObj;
+    }
+       
+       //确认状态
+       if (cond.ackState != null && cond.ackState != "undefined" && cond.ackState.length > 0) {
+        var ackState = '[' + cond.ackState + ']';
+        var ackStateObj = window.JSON.parse(ackState)
+        conditions.ackStates=ackStateObj;
+    }
+       
+       //可见性
+       if (cond.filterState != null && cond.filterState != "undefined" && cond.filterState.length > 0) {
+        var filterState = '[' + cond.filterState + ']';
+        var filterStateObj = window.JSON.parse(filterState);
+        conditions.isVisibles=filterStateObj;
+    }
+       
+       //告警确认时间
+       if (cond.ackTimeMode != null && cond.ackTimeMode != "undefined") {
+               var ackTime;
+               if(cond.ackTimeMode === 1){
+                       ackTime = '{"timeMode": '+cond.ackTimeMode+',"relativeTime": '+cond.ackRelativeTime+'}';
+               }else{
+                       ackTime = '{"beginTime": '+cond.ackTimeStarTime+',"endTime": '+cond.ackTimeEndTime+',"timeMode": '+cond.ackTimeMode+'}';
+               }
+        var ackTimeObj = window.JSON.parse(ackTime);
+        conditions.ackTime = ackTimeObj;
+    }
+
+       //告警发生时间
+    if (cond.alarmRaisedTimeMode != null && cond.alarmRaisedTimeMode != "undefined") {
+               var alarmRaisedTime;
+               if(cond.alarmRaisedTimeMode === 1){
+                       alarmRaisedTime = '{"timeMode": '+cond.alarmRaisedTimeMode+',"relativeTime": '+cond.alarmRaisedRelativeTime+'}';
+               }else{
+                       alarmRaisedTime = '{"beginTime": '+cond.alarmRaisedStartTime+',"endTime": '+cond.alarmRaisedEndTime+',"timeMode": '+cond.alarmRaisedTimeMode+'}';
+               }
+        var alarmRaisedTimeObj = window.JSON.parse(alarmRaisedTime);
+        conditions.alarmRaisedTime = alarmRaisedTimeObj;
+    }
+       
+       //告警清除时间
+       if (cond.clearedTimeMode != null && cond.clearedTimeMode != "undefined") {
+               var clearedTime;
+               if(cond.clearedTimeMode === 1){
+                       clearedTime = '{"timeMode": '+cond.clearedTimeMode+',"relativeTime": '+cond.clearedTimeRelativeTime+'}';
+               }else{
+                       clearedTime = '{"beginTime": '+cond.clearedTimeStartTime+',"endTime": '+cond.clearedTimeEndTime+',"timeMode": '+cond.clearedTimeMode+'}';
+               }
+        var clearedTimeTimeObj = window.JSON.parse(clearedTime);
+        conditions.alarmClearedTime = clearedTimeTimeObj;
+    }
+
+       //告警码
+       if (cond.probableCause != null && cond.probableCause != "undefined") {
+        //var probableCauseArr = cond.probableCause.split(',');
+        var str = "";
+               var arr="[";
+        for (var i = 0; i < cond.probableCause.length; i++) {
+                       if(i === 0){
+                               if(cond.probableCause[i].type === "1"){
+                                       arr+='{"systemType":'+cond.probableCause[i].codeid+',"codes":[]}';
+                               }else{
+                                       arr+='{"systemType":'+cond.probableCause[i].parentid+',"codes":['+cond.probableCause[i].codeid+']}';
+                               }
+                       }else{
+                               if(cond.probableCause[i].type === "1"){
+                                       arr+=',{"systemType":'+cond.probableCause[i].codeid+',"codes":[]}';
+                               }else{
+                                       arr+=',{"systemType":'+cond.probableCause[i].parentid+',"codes":['+cond.probableCause[i].codeid+']}';
+                               }
+                       }               
+        }
+               arr+="]";
+               var probableCausesObj = window.JSON.parse(arr);
+        conditions.probableCauses = probableCausesObj;      
+    }
+       
+       var requests={};
+       requests.condition=conditions;
+       requests.pageSize=tableSetting._iDisplayLength;
+       requests.pageNumber=tableSetting._iDisplayStart / tableSetting._iDisplayLength + 1;
+       if(cond.alarmType===2 && requests.pageNumber === 1){
+               requests.queryCacheId="";
+       }else if(cond.alarmType===2 && requests.pageNumber != 1){
+               requests.queryCacheId=queryCacheId;
+       }
+       
+       var resStr = window.JSON.stringify(requests);
+       result={
+               request:resStr
+       };
+       return result;
+};
+
+
+serverPageTable.initDataTable = function (setting, cond, divId) {
+    //转换colomn
+    var column = setting.columns;
+       var setting;
+    //先把原来的表格清空
+    $('#' + divId).children().remove();
+    var tableId = setting.tableId;
+    var tableEleStr = '<table class="table table-striped table-bordered table-hover" id= ' + tableId + '>'
+        + '<thead>'
+        + '<tr role="row" class="heading" >'
+        + '</tr>'
+        + '</thead>'
+        + '<tbody>'
+        + '</tbody>'
+        + '</table>';
+    $('#' + divId).append(tableEleStr);
+    //$('#'+ tableId).append(' <thead><tr role="row" class="heading" ></tr></thead><tbody></tbody>');
+    var trEle = $('#' + tableId + ' > thead >tr');
+    //var dataTableColumn = [];
+    for (var one in column) {
+        if (one != "contains") {
+            var th = '<th>' + column[one].name + '</th>';
+            trEle.append(th);
+        }
+    }
+       
+    var table = $("#" + tableId).dataTable({
+        //"sDom" : "tr<'row'<'col-md-6 col-sm-12'><'col-md-6 col-sm-12'pli>>", // datatable layout
+        // "sDom" : "<'row'<'col-md-12 col-sm-12'lip>r><'table-scrollable't>>",
+        "oLanguage": setting.language,//汉化
+        "bJQueryUI": true,
+        "bPaginate": true,// 分页按钮
+        "bFilter": false,// 搜索栏
+        "bAutoWidth": true,//自动设置列宽
+        "bLengthChange": true,// 每行显示记录数
+        "iDisplayLength": 10,// 每页显示行数
+        "bSort": false,// 排序
+        "bInfo": true,// Showing 1 to 10 of 23 entries 总记录数没也显示多少等信息
+        "bWidth": true,
+        "bScrollCollapse": false,
+               "sScrollY": "400px",
+        "sScrollX": "100%",
+        "sPaginationType": "bootstrap_extended", // 分页,  bootstrap_extended  一共两种样式 另一种为two_button // 是datatables默认
+        "bProcessing": true,
+        "bServerSide": true,
+        "bDestroy": true,
+        "bSortCellsTop": true,
+        "sDom": '<"top"rt><"bottom"lip>',
+        "sAjaxSource": setting.restUrl,// ./js/testJson.json  setting.restUrl
+        "aoColumns": setting.columns,
+               "bRetrieve": true,
+        "fnServerData": function (sSource, aoData, fnCallback, oSettings) {
+            oSettings.jqXHR = $.ajax({
+                "type": 'get',
+                "url": sSource,
+                "dataType": "json",
+                "data": serverPageTable.getRestPara(cond, oSettings),
+                "success": function (resp) {
+                    oSettings.iDraw = oSettings.iDraw + 1;
+                                       
+                                       var data = {};
+                                       if(cond.ruleType===1){
+                                               var logList = resp.alarms;
+                                               data.iTotalRecords = resp.totalCount;
+                                               data.iTotalDisplayRecords = resp.totalCount;
+                                               
+                                       }else if(cond.ruleType===2){
+                                               var logList = resp.alarms;
+                                               if(resp.queryCacheId === ""){
+                                                       data.iTotalRecords = alarmCount;
+                                                       data.iTotalDisplayRecords = alarmCount;
+                                               }else{
+                                                       alarmCount = resp.totalCount;
+                                                       data.iTotalRecords = resp.totalCount;
+                                                       data.iTotalDisplayRecords = resp.totalCount;
+                                                       queryCacheId = resp.queryCacheId;
+                                               }
+
+                                       }
+                                       
+                    var pageInfo = null;
+                                       setting=oSettings;
+                    if (pageInfo != null) {
+                        vm.logInfo[vm.logType].pageInfo = pageInfo;
+                    }
+                    
+                                       //添加序号
+                                        for(var i=0;i<logList.length;i++){
+                                               logList[i].order="<a>"+(i+1)+"</a>";    
+                                       } 
+                                       //组合告警码
+                                        for(var i=0;i<logList.length;i++){
+                                               logList[i].probableCauseCodeNameAndCode=logList[i].probableCauseCodeName+"("+logList[i].probableCauseCode+")";  
+                                       } 
+                                                       
+                    data.aaData = logList;
+                    data.sEcho = oSettings;
+                    fnCallback(data);                   
+
+                    $('#dataTableCheckBox').click(function () {
+                        var checkArr = $('#' + divId + ' .details-check input[type="checkbox"]');//
+                        for (var i = 0; i < checkArr.length; i++) {
+                            if ($(checkArr).eq(i).attr('id') != 'dataTableCheckBox') {
+                                if ($('#dataTableCheckBox').prop("checked")) {
+                                    $(checkArr).eq(i).removeClass('checked');
+                                                                       $(checkArr).eq(i).prop('checked',true);
+                                } else {
+                                    $(checkArr).eq(i).addClass('checked');
+                                                                       $(checkArr).eq(i).prop('checked',false);
+                                }
+                            }
+                                               }
+                    });                        
+                }
+
+            });
+        },
+               "fnDrawCallback": function( oSettings ) { // run some code on table redraw              
+                       
+                       var tableWrapper = $('div.dataTables_wrapper');
+                       //自适应对齐表头
+                       var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);
+                       var tbodyHead = $('tbody', $tableHead);
+                       if(tbodyHead && tbodyHead.length >0){
+                               $(tbodyHead).remove();
+                       }
+
+                       var $tableBody = $('table#' + tableId, tableWrapper);
+                       var trIn = $('thead > tr:nth-child(1)', $tableHead);
+                       var trBodyHead = $('thead > tr:nth-child(1)', $tableBody);
+                       var tds = $(trIn).children();
+                       var ths = $(trBodyHead).children();
+                       for(var k=0;k<tds.length;k++){
+                               $(ths.eq(k)).html('<div style="height: 0;overflow: hidden;">' + tds.eq(k).html() + '</div>');
+                       }
+                       var bodyRows = $('tbody > tr', $tableBody);
+                       for(var i=0;i<bodyRows.length;i++){
+                               var rowClone = $(bodyRows.eq(i)).clone();
+                               var tds = $(rowClone).children();
+                               for(var j=0;j<tds.length;j++){
+                                       $(tds.eq(j)).html('<div style="height: 0;overflow: hidden;">' + tds.eq(j).html() + '</div>');
+                                       $(tds.eq(j)).height('0px');
+                                       $(tds.eq(j)).css('padding-top','0px');
+                                       $(tds.eq(j)).css('padding-bottom','0px');
+                                       $(tds.eq(j)).css('border-top-width','0px');
+                                       $(tds.eq(j)).css('border-bottom-width','0px');
+                               }
+                               $(rowClone).height('0px');
+                               $tableHead.append($(rowClone).prop("outerHTML"));
+                       }
+
+                       $('div.dataTables_scrollBody', tableWrapper).css('width','100%');
+                       //$('div.dataTables_scrollHead', tableWrapper).css('width','98.5%');
+                       $('div.dataTables_scrollHeadInner', tableWrapper).css('padding-right', 0);
+                       
+                       //$("table.dataTable > thead > tr > th:nth-child(2)", $(".dataTables_scrollHeadInner")).click();
+                       
+                       //设置表格本体高度
+                       //$('div.dataTables_scrollBody', tableWrapper).css('height', "280px");
+                       //填充表头右边界
+            /* $('div.dataTables_scrollHead', tableWrapper).css('display','inline-block');
+            $("div.dataTables_scrollHead", tableWrapper).after("<div id='divRightPadding' style='overflow: hidden; background:#eee; position: relative; float:right; border: 1px solid #ddd; height:" + 42 + "px; width: 1.4%;'></div>"); */
+            /* if($.browser.mozilla){
+                $('div#divRightPadding', tableWrapper).css('height', '40');
+            } */
+               }
+    });
+
+       $(window).bind('resize', function () {
+               //oTable.DataTable.models.oSettings.bAjaxDataGet = false;
+               table.fnAdjustColumnSizing(setting);
+       } );
+
+    function format_Detail(oTable, nTr) {
+        var aData = oTable.fnGetData(nTr);
+
+               var sOut = '<table class = "detailTable" width="100%">';
+        sOut += '<tr><td class = "detailTitleStyle" width = 160><span class = "label label-primary">' + column[3].name + '</span></td><td class = "detailCellStyle" width = 320>' + null2space(aData[column[3].mData]) + '</td>';
+        sOut += '<td class = "detailTitleStyle" width = 160><span class = "label label-primary">' + column[8].name + '</span></td><td class = "detailCellStyle" width = 320>' + null2space(vm.alTypes[aData[column[8].mData]]) + '</td></tr>';
+               
+        sOut += '<tr><td class = "detailTitleStyle" width = 80><span class = "label label-primary">' + column[9].name + '</span></td><td class = "detailCellStyle" width = 160>' + null2space(aData[column[9].mData]) + '</td>';
+        sOut += '<td class = "detailTitleStyle" width = 80><span class = "label label-primary">' + column[7].name + '</span></td><td class = "detailCellStyle" width = 160>' + null2space(aData[column[7].mData]) + '</td></tr>';
+
+        sOut += '<tr><td class = "detailTitleStyle"><span class = "label label-primary">' + column[6].name + '</span></td><td class = "detailCellStyle">' + null2space(aData[column[6].mData]) + '</td>';
+        sOut += '<td class = "detailTitleStyle"><span class = "label label-primary">' + column[11].name + '</span></td><td class = "detailCellStyle">' + null2space(aData[column[11].mData]) + '</td></tr>';
+               
+        sOut += '<tr><td class = "detailTitleStyle"><span class = "label label-primary">' + column[10].name + '</span></td><td class = "detailCellStyle">' + null2space(aData[column[10].mData]) + '</td>';
+        sOut += '<td class = "detailTitleStyle"><span class = "label label-primary">' + column[13].name + '</span></td><td class = "detailCellStyle">' + null2space(aData[column[13].mData]) + '</td></tr>';
+
+        sOut += '<tr><td class = "detailTitleStyle"><span class = "label label-primary">' + column[12].name + '</span></td><td class = "detailCellStyle">' + null2space(aData[column[12].mData]) + '</td>';
+        sOut += '<td class = "detailTitleStyle"><span class = "label label-primary">' + column[5].name + '</span></td><td class = "detailCellStyle">' + null2space(aData[column[5].mData]) + '</td></tr>';
+               
+        sOut += '<tr><td class = "detailTitleStyle"><span class = "label label-primary">' + column[23].name + '</span></td><td class = "detailCellStyle">' + null2space(aData[column[23].mData]) + '</td>';
+               sOut += '<td class = "detailTitleStyle"><span class = "label label-primary">' + column[4].name + '</span></td><td class = "detailCellStyle">' + null2space(aData[column[4].mData]) + '</td></tr>';
+   //     sOut += '<td class = "detailTitleStyle"><span class = "label label-primary">' + column[5].name + '</span></td><td class = "detailCellStyle">' + aData[column[5].mData] + '</td></tr>';
+               
+     //   sOut += '<tr><td class = "detailTitleStyle"><span class = "label label-primary">' + column[4].name + '</span></td><td class = "detailCellStyle">' + aData[column[4].mData] + '</td>';
+       //      sOut += '<tr><td class = "detailTitleStyle"><span class = "label label-primary">' + column[22].name + '</span></td><td class = "detailCellStyle">' + aData[column[22].mData] + '</td></tr>';
+    //    sOut += '<td class = "detailTitleStyle"><span class = "label label-primary">' + column[22].name + '</span></td><td class = "detailCellStyle">' + aData[column[22].mData] + '</td></tr>';
+               
+    //    sOut += '<tr><td class = "detailTitleStyle"><span class = "label label-primary">' + column[12].name + '</span></td><td class = "detailCellStyle">' + aData[column[12].mData] + '</td>';
+     //   sOut += '<td class = "detailTitleStyle"><span class = "label label-primary">' + column[17].name + '</span></td><td class = "detailCellStyle">' + aData[column[17].mData] + '</td></tr>';
+
+        sOut += '<td class = "detailTitleStyle"><span class = "label label-primary">' + column[16].name + '</span></td><td class = "detailCellStyle" colspan = 3>' + null2space(aData.additionalText) + '</td></tr>';
+               
+        return sOut;
+    }
+       function null2space(nullStr){
+               if(nullStr == null){
+                       return "";
+               } else {
+                       return nullStr;
+               }
+       }
+    $('#' + tableId + '>tbody').on('click', 'td.details-control', function () {
+        var tr = $(this).closest('tr');
+        //var nTr = $(this).parents('tr')[0];
+        //var row = table.row( tr );
+        if (table.fnIsOpen(tr[0])) {
+            table.fnClose(tr[0]);
+            //if ( row.child.isShown() ) {
+            // This row is already open - close it
+            //row.child.hide();
+            tr.removeClass('shown');
+        }
+        else {
+            // Open this row
+            table.fnOpen(tr[0], format_Detail(table, tr[0]), 'details');
+            //row.child( format_Detail(row.data()) ).show();
+            tr.addClass('shown');
+        }
+    });
+
+    // mod by chenhao 2015-10-26 注释掉
+    // // 所有td注册一个点击事件用来展示出详情。
+    // $('#ict_alarms_table >tbody').on('click', 'td', function () {
+           
+    //         var className= $(this).eq(0).attr('class');
+    //         //当点击的是如下的table页的时候
+    //         if(className &&(className.indexOf('relInfo')>-1 || className.indexOf('details-check')>-1 || className.indexOf('ackState')>-1  || className.indexOf('details-control')>-1)){
+    //             $('#right-menu').fadeOut();
+    //         }else{
+    //             //填充table的数据
+    //             var tbody=$('#ict_table_general >tbody');
+    //             tbody.children().remove();
+    //             var trHtml="";
+    //             var tr = $(this).closest('tr'); 
+    //             var aData = table.fnGetData(tr[0]);
+    //             for (var i = 0; i < column.length; i++) {
+    //             if( column[i].bVisible == false ){//如果列可见就继续遍历下一个
+    //                 trHtml += '<tr role="row"><td>'+column[i].name+':</td><td>' + aData[column[i].mData] + '</td></tr>';
+    //                }
+    //             }
+    //             tbody.append(trHtml);
+    //             if(!vm.alarmId ||vm.alarmId==aData.alarmId){
+    //                 $('#right-menu').fadeToggle();
+    //             }else{
+    //                 $('#right-menu').fadeIn();
+    //             } 
+    //              vm.alarmId=aData.alarmId;  
+    //         }  
+    // });
+       //重新调节列宽以适应window resize
+    $(window).bind('resize', function () {
+        //oTable.fnAdjustColumnSizing();
+               $("table.dataTable > thead > tr > th:nth-child(2)", $(".dataTables_scrollHeadInner")).click();
+    } );
+
+};
+
+
+
+
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/js/alarmsUtil.js b/openo-portal/portal-performance/src/main/webapp/performance/js/alarmsUtil.js
new file mode 100644 (file)
index 0000000..b0633cf
--- /dev/null
@@ -0,0 +1,1169 @@
+/*
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var alarmsUtil = {};
+var alarmTemp=[];
+
+alarmsUtil.timeRender = function (obj) {
+       if (obj.aData[obj.mDataProp] == -1 || obj.aData[obj.mDataProp] == 0) {
+               return "";
+       } else {
+               var date = new Date(obj.aData[obj.mDataProp]);
+               return commonUtil.parseDate(date, 'yyyy-MM-dd hh:mm:ss');
+       }
+};
+
+alarmsUtil.LinkRender = function (obj) {
+       return '<a href="">' + obj.aData[obj.mDataProp] + '</a>';
+};
+alarmsUtil.ackState = function (obj) {
+       
+       var innerHtml = "";
+       var ackState = obj.aData.ackState;
+       var alarmId = obj.aData.id;
+       var alarmIdArr = [alarmId];
+       var tableId="\'" + obj.oSettings.sTableId + "\'";
+       var divId="\'" + obj.oSettings.nTableWrapper.parentElement.id + "\'";
+       if (ackState == "1" && vm.ruleType == 1) {
+               innerHtml = "<a class=\"label label-sm label-info\"   onclick=\" alarmsUtil.unaffirm([" + alarmIdArr + "]," + tableId + "," + divId + ","+obj.iDataRow+")  \">Acknowledge</a>";
+       } else if(ackState == "1" && vm.ruleType == 2){
+               innerHtml = "<div class=\"label label-sm label-info\">Acknowledge</div>";
+       } else if(ackState == "2" ){
+               innerHtml = "<a class=\"label label-sm acknow-purple\"    onclick=\" alarmsUtil.affirm([" + alarmIdArr + "]," + tableId + "," + divId + ","+obj.iDataRow+")\">Unacknowledge</a>";
+       } 
+       return innerHtml;
+};
+
+alarmsUtil.Severity = function (obj) {
+
+       var innerHtml = "";
+       var Severity = obj.aData.perceivedSeverity;
+       if (Severity == "1") {
+               innerHtml = "<span style=\"color:#E24949 \"  class=\"ict-alarm \" ></span><sapn  \">Critical</sapn>";
+       } else if (Severity == "2") {
+               innerHtml = "<span style=\"color:#E59313 \" class=\"ict-alarm\" ></span><sapn \">Major</sapn>";
+       } else if (Severity == "3") {
+               innerHtml = "<span style=\"color:#F7E51B \" class=\"ict-alarm\" ></span><sapn  \">Minor</sapn>";
+       } else if (Severity == "4") {
+               innerHtml = "<span style=\"color:#61C2DE \" class=\"ict-alarm\" ></span><sapn \">Warning</sapn>";
+       }
+       return innerHtml;
+
+};
+
+alarmsUtil.operate = function (obj) {
+
+       var alarmId = obj.aData.alarmId;
+       return "<div class='row col-xs-12'><div><a href='#' class=\"btn-xs grey btn-editable\" onclick=\" alarmsUtil.congfirms('" + alarmId + "')\"><i class=\"ict-delete\"></i>清除</a></div></div>";
+
+};
+
+alarmsUtil.congfirms = function (alarmId) {
+
+       bootbox.confirm('你确定要删除该告警吗?', function (result) { //你确定要删除该用户吗?
+
+               if (result) {
+                       var sSource = "/web/rest/web/fm/curalarms?data={\"alarmId\":" + alarmId + "}&_dataSource=isc_PageRestDataSource_0&isc_metaDataPrefix=_&isc_dataFormat=json&_operationType=remove&_componentId=isc_com_zte_ums_aos_fm_view_eventview_table_AlarmTable_0";
+                       $.ajax({
+                               dataType : "json",
+                               type : "DELETE",
+                               //数据格式:[tab标签id,tabItem的名字,图片路径,tabItem的描述,更多的LInk地址]
+                               contentType : 'application/json; charset=utf-8',
+                               url : sSource,
+                               data : null,
+                               async : false,
+                               success : function (msg) {
+                                       setTimeout(function () {
+                                               refreshByCond();
+                                       }, 500);
+                               }
+                       });
+               }
+
+       });
+
+};
+
+alarmsUtil.allOperate = function (obj) {
+
+       var record = obj.aData;
+       var hasModify = commonUtil.hasRigth('uep.pfl.sm.updateuser');
+       var hasDel = commonUtil.hasRigth('uep.pfl.sm.deluser');
+       var selectUsername = new String(record.userName);
+       var innerHtml = "";
+       
+       // 如果有权限,显示操作列
+       if (hasModify) {
+               if (hasDel && selectUsername != "admin") {
+                       innerHtml = "<div class='row col-xs-12'><div class='col-xs-6 modify_user'><a class=\"btn-xs grey btn-editable\" href='#' onclick=\"vm.modifyUser('" + selectUsername + "')\"><i class=\"ict-modify\"></i>修改</a></div><div class='col-xs-6'><a href='#' class=\"btn-xs grey btn-editable\" onclick=\"smUtil.congfirms('" + selectUsername + "')\"><i class=\"ict-delete\"></i>删除</a></div></div>";
+               } else {
+                       innerHtml = "<div class='row col-xs-12'><div class='col-xs-6 modify_user'><a class=\"btn-xs grey btn-editable\" href='#' onclick=\"vm.modifyUser('" + selectUsername + "')\"><i class=\"ict-modify\"></i>修改</a></div>";
+               }
+       }
+
+       return innerHtml;
+
+};
+
+alarmsUtil.refresh = function () {
+
+       refreshByCond();
+
+}
+
+/*
+
+1.确认
+
+2.反确认
+
+ */
+
+alarmsUtil.loopAffirm = function (type) {
+
+       var checkArr = $('#ict_alarms_table_div .details-check input[type="checkbox"]');
+       var aidArr = [];
+       for (var i = 0; i < checkArr.length; i++) {
+               if($(checkArr[i]).prop("checked")){
+                       if ($(checkArr[i]).attr('alarmId') != 'undefined' && $(checkArr[i]).attr('alarmId') != null) {
+                               aidArr.push($(checkArr[i]).attr('alarmId'));
+                       }
+               }
+       }
+
+       if (type == "1" && aidArr.length > 0) {
+               alarmsUtil.affirm(aidArr);
+       } else if (type == "2" && aidArr.length > 0) {
+               alarmsUtil.unaffirm(aidArr);
+       }
+
+}
+
+/*
+
+
+
+ */
+
+alarmsUtil.loopDelAralms = function () {
+
+       var checkArr = $('#ict_alarms_table_div .details-check input[type="checkbox"]');
+       var aidArr = [];
+       for (var i = 0; i < checkArr.length; i++) {
+               if($(checkArr[i]).prop("checked")){
+                       if ($(checkArr[i]).attr('alarmId') != 'undefined' && $(checkArr[i]).attr('alarmId') != null) {
+                               aidArr.push($(checkArr[i]).attr('alarmId'));
+                       }
+               }
+       }
+
+       if (aidArr.length > 0) {
+               bootbox.confirm('Are you sure to delete alarm(s)', function (result) { 
+                       if (result) {
+                               var sSource = "/api/umcfm/v1/curalarms?request={\"ids\":["+ aidArr +"]}";
+                               $.ajax({
+                                       type : "DELETE", 
+                                       dataType : "json",
+                                       contentType : 'application/json; charset=utf-8',
+                                       url : sSource,
+                                       data : null,
+                                       async : false,
+                                       success : function (msg) {
+                                               setTimeout(function () {
+                                                       refreshByCond()
+                                               }, 500);
+                                       }
+                               });
+                       }
+               });
+       }
+}
+
+alarmsUtil.affirm = function (alarmIdArr,tableId,divId) {
+
+       var getData = {};
+       var request = {};
+       request.ids=[];
+       for(i=0;i<alarmIdArr.length;i++){
+               request.ids.push(alarmIdArr[i]);
+       }
+       var url = "";
+       if (vm.ruleType == 1) { //当前告警
+               request.ackState=1;
+               getData.request = JSON.stringify(request);
+               url = "/api/umcfm/v1/curalarms";
+       } else { //历史告警
+               url = "/ngict/rest/fm/hisalarms"
+       }
+
+       $.ajax({
+               type : "PUT",
+               contentType : 'application/json; charset=utf-8',
+               url : url + "?" + "request=" + JSON.stringify(request),
+               async : false,
+               success : function (msg) {
+                       setTimeout(function () {
+                               refreshByCond(tableId,divId);
+                       }, 100);
+               },      
+               error : function(msg){
+                       setTimeout(function () {
+                               refreshByCond(tableId,divId);
+                       }, 100);        
+               }
+       });
+
+}
+
+alarmsUtil.unaffirm = function (alarmIdArr,tableId,divId) {
+
+       var getData = {};
+       var request = {};
+       request.ids=[];
+       for(i=0;i<alarmIdArr.length;i++){
+               request.ids.push(alarmIdArr[i]);
+       }
+       request.ackState=2;
+       getData.request = JSON.stringify(request);
+       var url = "";
+       if (vm.ruleType == 1) { //当前告警
+               url = "/api/umcfm/v1/curalarms";
+               $.ajax({
+                       "type" : "PUT",
+                       "contentType" : 'application/json; charset=utf-8',
+                       "url" : url + "?request=" + JSON.stringify(request),
+                       async : false,
+                       success : function (msg) {
+                               setTimeout(function () {
+                                       refreshByCond(tableId,divId);
+                               }, 100);
+                       },
+                       error : function(msg){          
+                               setTimeout(function () {
+                                       refreshByCond(tableId,divId);
+                               }, 100);                
+                       }
+               });
+       } 
+
+       
+       
+}
+
+alarmsUtil.checkBox = function (obj) {
+
+       var alarmId = obj.aData.id;
+       var innerHtml = '<input type="checkbox" alarmId="' + alarmId + '"/> ';
+       return innerHtml;
+}
+
+//初始化告警码树
+alarmsUtil.initProbableCausesTree = function () {
+       //zTree设置
+       var setting = {
+               view : {
+                       selectedMulti : false, //设置是否可以同时选中多个借点。
+                       showIcon : true, //不显示图标
+                       showLine : false, //是否显示节点之间的连线
+               },
+               data : {
+                       simpleData : {
+                               enable : true //如果设置为 true,请务必设置 setting.data.simpleData 内的其他参数: idKey / pIdKey / rootPId,并且让数据满足父子关系。
+                       }
+               },
+               callback : {
+                       onExpand : zTreeOnExpand, //每次节点展开后触发的事件。
+                       onCollapse : zTreeOnCollapse,
+                       //onClick: zTreeOnClick
+               }
+       };
+       var probableCausesNodes;
+       
+       //获取告警码树数据
+       getProbableCausesTreeNodes("");
+       //创建告警码树
+       $.fn.zTree.init($("#probableCausesTree"), setting, probableCausesNodes);
+       //获取所有现有的tree节点
+       var treeObj = $.fn.zTree.getZTreeObj("probableCausesTree");
+       initDataAtTree();
+       function initDataAtTree(){
+               getAllNodesWithoutTypeEqual2("")                
+       };
+       
+       function getAllNodesWithoutTypeEqual2(parentId){
+               var treeNodes=treeObj.getNodesByParam("parentId", parentId, null);
+               for(var i=0;i<treeNodes.length;i++){
+                       if(treeNodes[i].type===0){
+                               getProbableCausesTreeNodes(treeNodes[i].id);
+                               addNodesToTree(treeNodes[i],"probableCausesTree");
+                               getAllNodesWithoutTypeEqual2(treeNodes[i].id);
+                       }
+               }
+       }
+
+       function zTreeOnExpand(event, treeId, treeNode) {
+               var childrenNodes = treeNode.children;
+               if (!childrenNodes) { //当没有子节点的时候才加载,否则会重复加载。
+                       getProbableCausesTreeNodes(treeNode.id);
+                       addNodesToTree(treeNode,treeId);
+               }
+       };
+       
+       function addNodesToTree(treeNode, treeId) {
+               var obj = $.fn.zTree.getZTreeObj(treeId);
+               var node=obj.getNodeByParam("id", treeNode.id, null)
+               obj.addNodes(node, probableCausesNodes);
+       };
+
+       function zTreeOnCollapse(event, treeId, treeNode) {};
+
+       //告警信息中的type为0、1是父节点,2为子节点
+       function isParentNode(type) {
+               if (type != 2)
+                       return true;
+               else
+                       return false;
+       };
+       
+       function constructProblemCauseName(node){
+               if(node.type===0){
+                       return node.desc;
+               }else{
+                       return node.desc + "(" + node.value + ")";
+               }
+       }
+
+       function getProbableCausesTreeNodes(alarmCodeParentId) {
+               probableCausesNodes = new Array();
+               var getData = {};
+               var request = {};
+               request.parentId = alarmCodeParentId;
+               getData.request = JSON.stringify(request);
+               $.ajax({
+                       async : false,
+                       "dataType" : 'json',
+                       "type" : "GET",
+                       "url" : "/api/umcfm/v1/probablecausestree",
+                       "data" : getData,
+                       "contentType" : 'application/json; charset=utf-8',
+                       "success" : function (res, textStatus, jqXHR) {
+                               var nodes = res;
+                               chkDisabled = false;
+                               if (nodes) {
+                                       for (var i = 0; i < nodes.length; i++) {
+                                               probableCausesNodes.push({
+                                                       id : nodes[i].id,
+                                                       pId : nodes[i].parentId,
+                                                       name : constructProblemCauseName(nodes[i]),
+                                                       chkDisabled : false,
+                                                       isParent : isParentNode(nodes[i].type),
+                                                       parentId : alarmCodeParentId,//treenode节点
+                                                       codeId : nodes[i].value,
+                                                       type : nodes[i].type
+                                               });
+                                       }
+                               }
+                       },
+                       "error" : function () {}
+               });
+       }
+}
+
+//初始化位置树
+alarmsUtil.initDeptTree = function () {
+       //zTree设置
+       var setting = {
+               view : {
+                       selectedMulti : false, //设置是否可以同时选中多个借点。
+                       showIcon : true, //不显示图标
+                       showLine : false, //是否显示节点之间的连线
+               },
+               data : {
+                       simpleData : {
+                               enable : true //如果设置为 true,请务必设置 setting.data.simpleData 内的其他参数: idKey / pIdKey / rootPId,并且让数据满足父子关系。
+                       }
+               },
+               callback : {
+                       onExpand : zTreeOnExpand, //每次节点展开后触发的事件。
+                       onCollapse : zTreeOnCollapse,
+                       //onClick: zTreeOnClick
+               }
+       };
+       var zNodes = [];
+       initDeptTree();
+       function initDeptTree() {
+               zNodes.push({
+                       id:"VDU",
+                       name:"VDU",
+                       isParent:true
+               },
+               {
+                       id:"HOST",
+                       name:"HOST",
+                       isParent:true
+               });
+               $.fn.zTree.init($("#deptTree"), setting, zNodes);
+               zNodes=[];
+       }
+       function getDeptTreeNode(alarmCodeParentId) {
+               if(alarmCodeParentId === "VDU"){
+                       url="/api/roc/v1/resource/vdus";
+               }else if(alarmCodeParentId === "HOST"){
+                       url="/api/roc/v1/resource/hosts";
+               }
+               $.ajax({
+                       async : false,
+                       "dataType" : 'json',
+                       "type" : "GET",
+                       "url" : url,
+                       "contentType" : 'application/json; charset=utf-8',
+                       "success" : function (res, textStatus, jqXHR) {
+                               var nodes = res.data;
+                               if (nodes) {
+                                       for (var i = 0; i < nodes.length; i++) {
+                                               zNodes.push({
+                                                       id : nodes[i].oid,
+                                                       parentId : alarmCodeParentId,//treenode节点
+                                                       name : nodes[i].name,
+                                                       isParent : false,
+                                                       oid:nodes[i].oid
+                                               });
+                                       }
+                               }
+                       },
+                       "error" : function () {}
+               });
+       }
+       function zTreeOnExpand(event, treeId, treeNode) {
+               getDeptTreeNode(treeNode.id);
+               addNodesToTree(treeNode,treeId);
+               zNodes=[];
+       };
+       function addNodesToTree(treeNode, treeId) {
+               var obj = $.fn.zTree.getZTreeObj(treeId);
+               var node=obj.getNodeByParam("id", treeNode.id, null)
+               obj.addNodes(node, zNodes);
+       };
+       function zTreeOnCollapse(event, treeId, treeNode) {};
+}
+
+//初始化所有的树
+alarmsUtil.initTree = function () {
+       //初始化告警码树和告警位置树
+       alarmsUtil.initProbableCausesTree();
+       alarmsUtil.initDeptTree();
+       
+       function initFormData(ruleType) {
+
+               $("#confirmAction").hide();
+               $("#filterType").hide();
+               $("#action").hide();
+               if (ruleType == "alarmFilter") {
+                       $("#filterType").show();
+               } else if (ruleType == "ack") {
+                       $("#confirmAction").show();
+               } else if (ruleType == "forward") {
+                       $("#action").show();
+               }
+
+       }
+
+       function getNumbers(rule) {
+
+               for (var i = 0; i < textValues.length; i++) {
+                       rule[textValues[i]] = $("input[name='" + textValues[i] + "']").val();
+               }
+
+       }
+
+       function getCheckboxs(rule) {
+
+               for (var i = 0; i < else_checkboxNames.length; i++) {
+                       rule[else_checkboxNames[i]] = $("input[name='" + else_checkboxNames[i] + "']").parent().hasClass('checked');
+               }
+               for (var item in checkboxNames_pair_spinnerIds) {
+                       rule[item] = $('#' + checkboxNames_pair_spinnerIds[item]).val();
+               }
+       }
+
+       function setCheckboxs(rule) {
+
+               for (var item in checkboxNames_pair_spinnerIds) {
+                       var value = 0;
+                       if (rule != "") {
+                               value = rule[item];
+                       }
+                       $('#' + item).val(value);
+                       setSpinnerIsEnable(item, value);
+               }
+               for (var i = 0; i < else_checkboxNames.length; i++) {
+                       $("input[name='" + else_checkboxNames[i] + "']").parent().iCheck(rule[else_checkboxNames[i]] ? 'check' : 'uncheck');
+               }
+       }
+}
+
+alarmsUtil.moveNode = function (item) {
+       if (item.hasClass("ict-arrowRight")) {
+               alarmsUtil.rightNode(item);
+       } else if (item.hasClass("ict-arrowLeft")) {
+               alarmsUtil.leftNode(item);
+       } else {
+               alarmsUtil.removeAll(item);
+       }
+}
+
+/*树添加信息到右侧的功能*/
+
+alarmsUtil.rightNode = function (item) {
+
+       var selecedNodeIds = [];
+       var treeType = item.attr('treeType');
+       var obj = $.fn.zTree.getZTreeObj(treeType);
+       var treeNodes = obj.getSelectedNodes();
+       var $table;
+
+       if (treeType == "deptTree") {
+               var $tds = $("#selectedDeptTreeTable  td");
+               $table = $("#selectedDeptTreeTable");
+               for (var i = 0; i < $tds.length; i++) {
+                       selecedNodeIds.push($tds.eq(i).attr('nodeid'));
+               }
+       } else if (treeType == "probableCausesTree") {
+               var $tds = $("#selectedProbableCausesTreeTable  td");
+               $table = $("#selectedProbableCausesTreeTable");
+               for (var i = 0; i < $tds.length; i++) {
+                       var systemTypeAndProbableCause={};
+                       systemTypeAndProbableCause.codeId=$tds.eq(i).attr('codeId');
+                       systemTypeAndProbableCause.parentid=$tds.eq(i).attr('parentid');
+                       systemTypeAndProbableCause.type=$tds.eq(i).attr('type');
+                       selecedNodeIds.push(systemTypeAndProbableCause);
+               }
+       }
+       
+       //树上被选中的元素
+       for (var i = 0; i < treeNodes.length; i++) {
+
+               var htmlStr = "";
+               var text = treeNodes[i].name;
+               var id = treeNodes[i].id;
+               var codeId = treeNodes[i].codeId;
+               var type;
+               var parentId;
+               if (treeType == "deptTree") {
+                       var oid = treeNodes[i].oid;
+                       htmlStr = "<tr><td nodeId=" + id + "  oid=" + oid + "  >" + text + "</td></tr>";
+               } else if (treeType == "probableCausesTree") {
+
+                       parentId = treeNodes[i].parentId;
+                       type = treeNodes[i].type;
+                       htmlStr = "<tr><td codeId=" + codeId + "  parentId=" + parentId + " type=" + type + "  >" + text + "</td></tr>";
+               }
+               
+               if(treeType == "probableCausesTree"){
+                       if(treeNodes[i].type === 2){
+                               for(i=0;i<selecedNodeIds.length;i++){
+                                       if(selecedNodeIds[i].codeId === codeId || selecedNodeIds[i].codeId === parentId){
+                                               bootbox.alert("此节点(子树)或其父子树已经被添加!", function () {});
+                                               return;
+                                       }
+                               }
+                       }else if(treeNodes[i].type === 1){
+                               $('#selectedProbableCausesTreeTable [parentid='+codeId+']').remove();
+                               for(i=0;i<selecedNodeIds.length;i++){
+                                       if(selecedNodeIds[i].codeId === codeId ){
+                                               bootbox.alert("此节点(子树)或其父子树已经被添加!", function () {});
+                                               return;
+                                       }
+                               }
+                       }else if(treeNodes[i].type === 0){
+                               bootbox.alert("不支持添加MOC", function () {});
+                               break;
+                       }
+               }
+
+               $table.append(htmlStr);
+
+       }
+
+       $('#selectedDeptTreeTable td').on("click", function () {
+
+               //获得所有选择的td
+               var $tds = $('#selectedDeptTree td');
+               //遍历改变样式
+               for (var i = 0; i < $tds.length; i++) {
+                       $tds.eq(i).removeClass('tallCellSelected');
+                       $tds.eq(i).parent().removeClass('checked');
+               }
+               //当前td设为选中
+               $(this).addClass('tallCellSelected');
+               $(this).parent().addClass("checked"); //tr 添加一个 checked 样式。
+       });
+
+       $('#selectedProbableCausesTreeTable td').on("click", function () {
+
+               //获得所有选择的td
+               var $tds = $('#selectedProbableCausesTreeTable td');
+               //遍历改变样式
+               for (var i = 0; i < $tds.length; i++) {
+                       $tds.eq(i).removeClass('tallCellSelected');
+                       $tds.eq(i).parent().removeClass('checked');
+               }
+               //当前td设为选中
+               $(this).addClass('tallCellSelected');
+               $(this).parent().addClass("checked"); //tr 添加一个 checked 样式。
+       });
+
+}
+
+
+
+alarmsUtil.leftNode = function (item) {
+
+       var treeType = item.attr('treeType');
+       if (treeType == "deptTree") {
+               $('#selectedDeptTreeTable').children().children(".checked").remove();
+       } else if (treeType == "probableCausesTree") {
+               $('#selectedProbableCausesTreeTable').children().children(".checked").remove();
+       }
+
+}
+
+alarmsUtil.removeAll = function (item) {
+
+       var treeType = item.attr('treeType');
+       if (treeType == "deptTree") { //如果是资源树
+               $('#selectedDeptTreeTable').children().remove();
+       } else if (treeType == "probableCausesTree") {
+               $('#selectedProbableCausesTreeTable').children().remove();
+       }
+}
+
+
+
+
+
+//调用datarangepicker组件 datarange 初始化
+
+alarmsUtil.setDateRange = function (dataRangeId, vm) {
+
+       var open = 'right';
+       var optionSet1 = {
+               startDate : "2015-08-02",
+               endDate : "2015-08-03",
+               format : 'YYYY-MM-DD h:mm A',
+               dateLimit : {
+                       days : 180
+               },
+               showWeekNumbers : false,
+               timePicker : true,
+               timePickerIncrement : 5,
+               opens : open,
+               separator : ' - ',
+               locale : {
+                       applyLabel : $.i18n.prop('ngict_fm_iui_curalarm_ok'),
+                       cancelLabel : $.i18n.prop('ngict_fm_iui_curalarm_cancel'),
+                       fromLabel : $.i18n.prop('ngict_fm_iui_curalarm_from'),
+                       toLabel : $.i18n.prop('ngict_fm_iui_curalarm_to'),
+                       daysOfWeek : [
+                               $.i18n.prop('ngict_fm_iui_curalarm_Sun'),
+                               $.i18n.prop('ngict_fm_iui_curalarm_Mon'),
+                               $.i18n.prop('ngict_fm_iui_curalarm_Tues'),
+                               $.i18n.prop('ngict_fm_iui_curalarm_Wed'),
+                               $.i18n.prop('ngict_fm_iui_curalarm_Thurs'),
+                               $.i18n.prop('ngict_fm_iui_curalarm_Fri'),
+                               $.i18n.prop('ngict_fm_iui_curalarm_Sat')
+                               ],
+                       monthNames : [$.i18n.prop('ngict_fm_iui_curalarm_January'), $.i18n.prop('ngict_fm_iui_curalarm_February'), $.i18n.prop('ngict_fm_iui_curalarm_March'), $.i18n.prop('ngict_fm_iui_curalarm_April'), $.i18n.prop('ngict_fm_iui_curalarm_May'), $.i18n.prop('ngict_fm_iui_curalarm_June'), $.i18n.prop('ngict_fm_iui_curalarm_July'), $.i18n.prop('ngict_fm_iui_curalarm_August'), $.i18n.prop('ngict_fm_iui_curalarm_September'), $.i18n.prop('ngict_fm_iui_curalarm_October'), $.i18n.prop('ngict_fm_iui_curalarm_November'), $.i18n.prop('ngict_fm_iui_curalarm_December')],
+                       firstDay : 1
+               }
+       };
+
+       //datarangepicker确认
+       $('input[id="' + dataRangeId + '"]').bind('apply.daterangepicker', function () {
+               //获取时间范围,查询
+               // 都设置为0点
+               setTime($(this));
+               // 更新tooltip内容
+               $(this).attr("data-original-title", $(this).val());
+       });
+
+       $('input[id="' + dataRangeId + '"]').daterangepicker(optionSet1);
+
+};
+
+//关闭打开datarangepicker选择器
+alarmsUtil.dateRangeEnableDisable = function (customDateRangeId) {
+
+       $('#' + customDateRangeId).on('ifChecked', function () {
+
+               if (customDateRangeId == "customAckTime") {
+                       vm.dataRangeLocationDisabled = false;
+                       if(vm.fmConds.ackTimeStarTime!=null && vm.fmConds.ackTimeEndTime!=null){
+                               vm.fmConds.ackTimeMode=0;
+                       }
+               } else if (customDateRangeId == "customRaisedTime") {
+                       vm.dataRangeTypeDisabled = false;
+                       if(vm.fmConds.alarmRaisedStartTime!=null && vm.fmConds.alarmRaisedEndTime!=null){
+                               vm.fmConds.alarmRaisedTimeMode=0;
+                       }
+               } else if (customDateRangeId == "customClearTime"){
+                       vm.dataRangeCodeDisabled = false;
+                       if(vm.fmConds.clearedTimeStartTime!=null && vm.fmConds.clearedTimeEndTime!=null){
+                               vm.fmConds.clearedTimeMode=0;
+                       }
+               }
+       });
+       //setTime($('#' + dataRangeId));
+
+       $('#' + customDateRangeId).on('ifUnchecked', function () {
+
+               if (customDateRangeId == "customAckTime") {
+
+                       vm.dataRangeLocationDisabled = true;
+                       vm.fmConds.ackTimeMode=null;
+
+               } else if (customDateRangeId == "customRaisedTime") {
+
+                       vm.dataRangeTypeDisabled = true;
+                       vm.fmConds.alarmRaisedTimeMode=null;
+                       
+               } else if (customDateRangeId == "customClearTime"){
+               
+                       vm.dataRangeCodeDisabled = true;
+                       vm.fmConds.clearedTimeMode=null;
+                       
+               }
+       });
+
+}
+
+//checkbox时间选择
+alarmsUtil.dateRangeCustom = function (vm) {
+
+       $("input[name=timeConfirm]").on("ifClicked", function () {
+               if ($(this).parent().hasClass("checked")) {
+                       $(this).iCheck('uncheck');
+               }
+       });
+
+       $("input[name=timeOccur]").on("ifClicked", function () {
+               if ($(this).parent().hasClass("checked")) {
+                       $(this).iCheck('uncheck');
+               }
+       });
+
+       $("input[name=timeClear]").on("ifClicked", function () {
+               if ($(this).parent().hasClass("checked")) {
+                       $(this).iCheck('uncheck');
+               }
+       });
+
+       $("input[cond_id=time]").on('ifChecked', function () {
+
+               var nowTime = (new Date()).toLocaleDateString();
+               var condDate = $(this).attr("cond_value");
+
+               if ($(this).attr("name") == "timeConfirm") {
+                       if (condDate == "1") {
+                               vm.fmConds.ackRelativeTime = 1 * 24 * 60 * 60 * 1000;
+                               vm.fmConds.ackTimeMode = 1;
+                       } else if (condDate == "2") {
+                               vm.fmConds.ackRelativeTime = 2 * 24 * 60 * 60 * 1000;
+                               vm.fmConds.ackTimeMode = 1;
+                       } else if (condDate == "7") {
+                               vm.fmConds.ackRelativeTime = 7 * 24 * 60 * 60 * 1000;
+                               vm.fmConds.ackTimeMode = 1;
+                       }
+               }
+
+               if ($(this).attr("name") == "timeOccur") {
+                       if (condDate == "1") {
+                               vm.fmConds.alarmRaisedRelativeTime = 1 * 24 * 60 * 60 * 1000;
+                               vm.fmConds.alarmRaisedTimeMode = 1;
+                       } else if (condDate == "2") {
+                               vm.fmConds.alarmRaisedRelativeTime = 2 * 24 * 60 * 60 * 1000;
+                               vm.fmConds.alarmRaisedTimeMode = 1;
+                       } else if (condDate == "7") {
+                               vm.fmConds.alarmRaisedRelativeTime = 7 * 24 * 60 * 60 * 1000;
+                               vm.fmConds.alarmRaisedTimeMode = 1;
+                       }
+               }
+
+               if ($(this).attr("name") == "timeClear") {
+                       if (condDate == "1") {
+                               vm.fmConds.clearedTimeRelativeTime =1 * 24 * 60 * 60 * 1000;
+                               vm.fmConds.clearedTimeMode = 1;
+                       } else if (condDate == "2") {
+                               vm.fmConds.clearedTimeRelativeTime =2 * 24 * 60 * 60 * 1000;
+                               vm.fmConds.clearedTimeMode = 1;
+                       } else if (condDate == "7") {
+                               vm.fmConds.clearedTimeRelativeTime =7 * 24 * 60 * 60 * 1000;
+                               vm.fmConds.clearedTimeMode = 1;
+                       }
+               }
+
+               //refreshByCond();
+       });
+       
+       $("input[cond_id=time]").on('ifUnchecked', function () {
+               if ($(this).attr("name") == "timeConfirm") {
+                       vm.fmConds.ackRelativeTime = null;
+                       vm.fmConds.ackTimeMode = null;
+               }else if ($(this).attr("name") == "timeOccur") {
+                       vm.fmConds.alarmRaisedRelativeTime = null;
+                       vm.fmConds.alarmRaisedTimeMode = null;
+               }else if ($(this).attr("name") == "timeClear") {
+                       vm.fmConds.clearedTimeRelativeTime = null;
+                       vm.fmConds.clearedTimeMode = null;
+               }
+       });
+
+}
+
+
+/*格式化日期*/
+Date.prototype.format = function (format) {
+
+       /*
+
+        * format="yyyy-MM-dd hh:mm:ss";
+
+        */
+       var o = {
+               "M+" : this.getMonth() + 1,
+               "d+" : this.getDate(),
+               "h+" : this.getHours(),
+               "m+" : this.getMinutes(),
+               "s+" : this.getSeconds(),
+               "q+" : Math.floor((this.getMonth() + 3) / 3),
+               "S" : this.getMilliseconds()
+       }
+       if (/(y+)/.test(format)) {
+               format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4
+                                        - RegExp.$1.length));
+       }
+       for (var k in o) {
+               if (new RegExp("(" + k + ")").test(format)) {
+                       format = format.replace(RegExp.$1, RegExp.$1.length == 1
+                                        ? o[k]
+                                        : ("00" + o[k]).substr(("" + o[k]).length));
+               }
+       }
+       return format;
+
+}
+
+//daterangepicker设置时间
+function setTime($obj) {
+
+       var title = $obj.attr('dtitle');
+       var arr = $obj.val().split(' - ');
+       //排除日历组件空字符串的情况。
+       if (arr[0] != '') {
+               var starTime = new Date(arr[0].replace(/-/g, "/")).getTime();
+               var endTime = new Date(arr[1].replace(/-/g, "/")).getTime();
+               if (title == "ackTime") {
+                       vm.fmConds.ackTimeStarTime = starTime;
+                       vm.fmConds.ackTimeEndTime = endTime;
+                       vm.fmConds.ackTimeMode=0;
+               } else if (title == "raisedTime") {
+                       vm.fmConds.alarmRaisedStartTime = starTime;
+                       vm.fmConds.alarmRaisedEndTime = endTime;
+                       vm.fmConds.alarmRaisedTimeMode=0;
+               } else if (title == "clearTime") {
+                       vm.fmConds.clearedTimeStartTime = starTime;
+                       vm.fmConds.clearedTimeEndTime = endTime;
+                       vm.fmConds.clearedTimeMode=0;
+               }
+       }
+}
+
+/*
+@param type 1 day 2 week  3 month  4 year
+ */
+function reduceDate(date, val, type) {
+
+       var d = new Date(date);
+       if (type == 'day') {
+               d.setDate(d.getDate() - val);
+       } else if (type == 'week') {
+               d.setDate(d.getDate() - val * 7);
+       } else if (type == 'month') {
+               d.setMonth(d.getMonth() - val);
+       } else if (type == 'year') {
+               d.setFullYear(d.getFullYear() - val);
+       }
+       var month = d.getMonth() + 1;
+       var day = d.getDate();
+       if (month < 10) {
+               month = "0" + month;
+       }
+       if (day < 10) {
+               day = "0" + day;
+       }
+       var val = d.getFullYear() + "-" + month + "-" + day;
+       return val;
+}
+
+alarmsUtil.condSave = function (cond, saveUrl, name) {
+
+       var conds = [];
+       if (cond.severity != null && cond.severity != "undefined" && cond.severity.length > 0) {
+               var severity = '{ "type": "Severity", "data": [{"severity": "' + cond.severity + '"}]}'; //级别
+               var severityObj = window.JSON.parse(severity)
+                       conds.push(severityObj);
+       }
+       if (cond.ackState != null && cond.ackState != "undefined") {
+               var ackState = '{ "type": "AckState", "data": [{"ackState": "' + cond.ackState + '"}]}'; //级别
+               var ackStateObj = window.JSON.parse(ackState)
+                       conds.push(ackStateObj);
+       }
+       if (cond.filterState != null && cond.filterState != "undefined") {
+               var filterState = '{ "type": "FilterState", "data": [{"filterState": "' + cond.filterState + '"}]}'; //级别
+               var filterStateObj = window.JSON.parse(filterState)
+                       conds.push(filterStateObj);
+       }
+
+       if (cond.ackTimeStarTime != null && cond.ackTimeStarTime != "undefined") {
+               var ackTime = '{ "type": "AckTime", "data": [{"mode":"0","start":"' + cond.ackTimeStarTime + '","end":"' + cond.ackTimeEndTime + '" }]}'; //级别
+               var ackTimeObj = window.JSON.parse(ackTime)
+                       conds.push(ackTimeObj);
+       }
+       if (cond.alarmRaisedStartTime != null && cond.alarmRaisedStartTime != "undefined") {
+               var alarmRaisedTime = '{ "type": "RaisedTime", "data": [{"mode":"0","start":"' + cond.alarmRaisedStartTime + '","end":"' + cond.alarmRaisedEndTime + '" }]}'; //级别
+               var alarmRaisedTimeObj = window.JSON.parse(alarmRaisedTime)
+                       conds.push(alarmRaisedTimeObj);
+       }
+
+       if (cond.clearedTimeStarTime != null && cond.clearedTimeStarTime != "undefined") {
+               var clearedTime = '{ "type": "ClearedTime", "data": [{"mode":"0","start":"' + cond.clearedTimeStarTime + '","end":"' + cond.clearedTimeEndime + '" }]}'; //级别
+               var severityObj = window.JSON.parse(clearedTime)
+                       conds.push(severityObj);
+       }
+       var resJsonObj = AlarmConds.parseActiveConds2JSon(conds);
+       resJsonObj.rule.name = name;
+       resJsonObj.rule.ruleType = vm.ruleType;
+       var resStr = window.JSON.stringify(resJsonObj);
+       var dataSource = "isc_AosRestDataSource_1";
+       var operationType = "add";
+       var data1 = {
+               dataSource : dataSource,
+               operationType : operationType,
+               data : resJsonObj,
+               oldValues : null
+       };
+       $.ajax({
+               dataType : "json",
+               type : "POST",
+               contentType : 'application/json; charset=utf-8',
+               url : saveUrl,
+               data : JSON.stringify(data1),
+               async : false,
+               success : function (msg) {
+                       $('#saveModalCancle').trigger("click");
+               }
+       });
+
+}
+
+Array.prototype.contains = function (item) {
+       return RegExp("(^|,)" + item.toString() + "($|,)").test(this);
+};
+
+/*
+@param  alarmsType  1当前告警  2历史告警
+@param  condRuleId  查询条件的RuleId
+ */
+alarmsUtil.queryByParma = function (alarmsType, condRuleId) {
+
+       //1.判断是当前告警还是历史告警。
+
+       var sourceUrl;
+       if (alarmsType == 1) { //当前告警
+               sourceUrl = '/web/rest/web/fm/curqueryview?' + 'data={"ruleType":1,"ruleSort":1}&isc_flag=smartClient&_operationType=fetch&_startRow=0&_endRow=75&_textMatchStyle=exact&_componentId=condList&_dataSource=isc_RestDataSource_7&isc_metaDataPrefix=_&isc_dataFormat=json';
+               vm.ruleType = 1;
+               vm.$queryAlarmsInfoUrl = "/ngict/rest/fm/curalarms";
+               vm.curalarmsType = "curalarms";
+               vm.showClear = true; //清除按钮
+
+       } else if(alarmsType == 2){ //历史告警
+
+               sourceUrl = '/web/rest/web/fm/curqueryview?' + 'data={"ruleType":2,"ruleSort":1}&isc_flag=smartClient&_operationType=fetch&_startRow=0&_endRow=75&_textMatchStyle=exact&_componentId=condList&_dataSource=isc_RestDataSource_7&isc_metaDataPrefix=_&isc_dataFormat=json';
+               vm.ruleType = 2;
+               vm.$queryAlarmsInfoUrl = "/ngict/rest/fm/hisalarms";
+               vm.hisalarmsType = "hisalarms";
+               vm.showClear = false; //清除按钮
+       }else if(alarmsType == 3){ //通知
+               sourceUrl = '/web/rest/web/fm/curqueryview?' + 'data={"ruleType":2,"ruleSort":1}&isc_flag=smartClient&_operationType=fetch&_startRow=0&_endRow=75&_textMatchStyle=exact&_componentId=condList&_dataSource=isc_RestDataSource_7&isc_metaDataPrefix=_&isc_dataFormat=json';
+               vm.ruleType = 3;
+               vm.$queryAlarmsInfoUrl = "/ngict/rest/fm/notify";
+               vm.notificationType = "notification";
+               vm.showClear = false; //清除按钮
+       }
+
+       //如果没传condRuleId 直接返回
+       if (condRuleId == null || condRuleId == "undefined") {
+               return;
+       }
+
+       //2.取出告警规则的数据。
+
+       $.ajax({
+               type : "get",
+               data : null,
+               url : sourceUrl,
+               async : false,
+               success : function (msg) {
+                       //1.遍历返回的条件数组确定是哪一个rule规则。
+                       var ruleCondArr = msg.response.data;
+                       var xmlData = "";
+                       for (var i = 0; i < ruleCondArr.length; i++) {
+                               if (ruleCondArr[i].ruleId == condRuleId) { //condRuleId
+                                       xmlData = "<xml>" + ruleCondArr[i].ruleData + "</xml>" //在jQuery裡,如果要直接将字串转成XML物件,记得前后方要加上<xml>及</xml>,才会被当成XML处理;
+                                               break;
+                               }
+                       };
+
+                       //3.解析数据的xml联动页面的组件。
+                       $(xmlData).find("CompoundCond").each(function () {
+                               //1.级别
+                               for (var i = 0; i < vm.severityTypes.length; i++) {
+                                       vm.severityTypes[i].value = false;
+                               }
+                               if ($(this).find("PerceivedSeverity").attr('value') != null && $(this).find("PerceivedSeverity ").attr('value') != 'undefined') {
+                                       var perceivedSeverityArr = $(this).find("PerceivedSeverity ").attr('value').split(',');
+                                       for (var i = 0; i < perceivedSeverityArr.length; i++) {
+                                               if (perceivedSeverityArr.contains(vm.severityTypes[i].id)) {
+                                                       vm.severityTypes[i].value = true;
+                                               }
+                                       };
+                               }
+
+                               //2.确认状态
+                               for (var i = 0; i < vm.ackStateTypes.length; i++) {
+                                       vm.ackStateTypes[i].value = false;
+                               };
+                               var ackStateV = $(this).find("AckState").attr('value');
+                               if (ackStateV != null && ackStateV != "undefined") {
+                                       var ackStateArr = ackStateV.split(',');
+                                       for (var i = 0; i < vm.ackStateTypes.length; i++) {
+                                               if (ackStateArr.contains(vm.ackStateTypes[i].id)) {
+                                                       vm.ackStateTypes[i].value = true;
+                                               }
+                                       };
+                               }
+
+                               //3.可见性
+                               if(vm.ruleType === 1){
+                                       for (var i = 0; i < vm.filterStateTypes.length; i++) {
+                                                       vm.filterStateTypes[i].value = false;
+                                               };
+                                       var filterStateV = $(this).find("FilterState").attr('value')
+                                               if (filterStateV != null && filterStateV != "undefined") {
+                                                       var filterStateArr = filterStateV.split(',');
+                                                       for (var i = 0; i < vm.filterStateTypes.length; i++) {
+                                                               if (filterStateArr.contains(vm.filterStateTypes[i].id)) {
+                                                                       vm.filterStateTypes[i].value = true;
+                                                               }
+                                                       };
+                                               }
+                               }
+                                       //4.确认时间
+
+                               var dataRangeAck = $('input[dtitle="ackTime"]'); //日历组件
+                               vm.fmConds.ackTimeStarTime = null;
+                               vm.fmConds.ackTimeEndTime = null;
+                               dataRangeAck.val('');
+                               var ackTimeStartMs = $(this).find("AckTime").attr('start');
+                               var ackTimeEndMs = $(this).find("AckTime").attr('end');
+                               if (ackTimeStartMs != null && ackTimeStartMs != "undefined" && ackTimeEndMs != null && ackTimeEndMs != "undefined") {
+                                       vm.fmConds.ackTimeStarTime = ackTimeStartMs; //确认时间
+                                       vm.fmConds.ackTimeEndTime = ackTimeEndMs;
+                                       var ackTimeStarTime = new Date(parseInt(ackTimeStartMs)).format('yyyy-MM-dd');
+                                       var ackTimeEndTime = new Date(parseInt(ackTimeEndMs)).format('yyyy-MM-dd');
+                                       dataRangeAck.val(ackTimeStarTime + ' - ' + ackTimeEndTime);
+                               }
+
+                               //5.发生时间
+                               vm.fmConds.alarmRaisedStartTime = null;
+                               vm.fmConds.alarmRaisedEndTime = null;
+                               var dataRangeRaised = $('input[dtitle="raisedTime"]'); //日历组件
+                               dataRangeRaised.val('');
+                               var raisedTimeStartMs = $(this).find("RaisedTime").attr('start');
+                               var raisedTimeEndMs = $(this).find("RaisedTime").attr('end');
+                               if (raisedTimeStartMs != null && raisedTimeStartMs != "undefined" && raisedTimeEndMs != null && raisedTimeEndMs != "undefined") {
+                                       vm.fmConds.alarmRaisedStartTime = raisedTimeStartMs; //发生时间
+                                       vm.fmConds.alarmRaisedEndTime = raisedTimeEndMs;
+                                       var raisedTimeStart = new Date(parseInt(raisedTimeStartMs)).format('yyyy-MM-dd');
+                                       var raisedTimeEnd = new Date(parseInt(raisedTimeEndMs)).format('yyyy-MM-dd');
+                                       dataRangeRaised.val(raisedTimeStart + ' - ' + raisedTimeEnd);
+                               }
+
+                               //6.清除时间
+
+
+                               //7.告警码
+
+                               vm.fmConds.probableCause = null;
+                               var probableCauseArr = $(this).find("ProbableCause").attr('value');
+                               if (probableCauseArr != null && probableCauseArr != "undefined") {
+                                       for (var i = 0; i < probableCauseArr.length; i++) {
+                                               vm.fmConds.probableCause = probableCauseArr;
+                                               // 联动
+                                       };
+                               }
+
+                               //8.告警位置
+                               vm.fmConds.probableCause = null;
+                               var newPositionCondArr = $(this).find("NewPositionCond").attr('value');
+                               if (newPositionCondArr != null && newPositionCondArr != "undefined")
+                                       for (var i = 0; i < newPositionCondArr.length; i++) {
+                                               // 联动
+                                       };
+
+                               //9.告警类型
+                               vm.fmConds.alarmType = null;
+                               var alarmTypeArr = $(this).find("AlarmType").attr('value');
+                               if (alarmTypeArr != null && alarmTypeArr != "undefined") {
+                                       for (var i = 0; i < alarmTypeArr.length; i++) {
+                                               vm.fmConds.alarmType = alarmTypeArr;
+                                       };
+                               }
+                       });
+               }
+       });
+}
+
+
+/*
+ 获取系统类型中的告警码数量
+*/
+alarmsUtil.getProbableCauseCountBySystemType=function(systemType){
+       
+       //"/ngict/rest/fm/probableCause?request={"systemTypes":[6,12]}"
+       var getData={};
+       var request={};
+       request.systemTypes=systemType;
+       getData.request = JSON.stringify(request);
+       $.ajax({
+               type : "get",
+               data : getData,
+               url : "/ngict/rest/fm/probableCause",
+               async : true,
+               success : function (msg) {
+                       vm.alarmCodeSelectedCount+=msg.length;
+               }});
+}
\ No newline at end of file
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/js/commonUtil.js b/openo-portal/portal-performance/src/main/webapp/performance/js/commonUtil.js
new file mode 100644 (file)
index 0000000..8ab957e
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var commonUtil = {};
+
+commonUtil.sendSynRequest = function(url){
+       var response;
+       $.ajax({
+               "type": 'get',
+               "url": url,
+               "dataType": "json",
+               "async": false,
+               success: function (resp) {
+                       response = resp;
+                        return response;
+               },
+               error: function(XMLHttpRequest, textStatus, errorThrown){
+               }
+       });
+};
+
+commonUtil.strToJson = function(str){
+       var json = eval('(' + str + ')');
+       return json;
+};
+
+commonUtil.arrayRemove = function(aryInstance, index){
+       if (aryInstance == undefined || aryInstance == null) {
+               return;
+       }
+       for (var i = 0, n = 0; i < aryInstance.length; i++) {
+               if (aryInstance[i] != aryInstance[dx]) {
+                       aryInstance[n++] = aryInstance[i];
+               }
+       }
+       aryInstance.length -= 1;
+};
+
+// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
+// (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
+commonUtil.parseDate = function(dateObj, format){
+       var o = {
+               "M+": dateObj.getMonth() + 1,
+               "d+": dateObj.getDate(),
+               "h+": dateObj.getHours(),
+               "m+": dateObj.getMinutes(),
+               "s+": dateObj.getSeconds(),
+               "q+": Math.floor((dateObj.getMonth() + 3) / 3),
+               "S": dateObj.getMilliseconds()
+       }
+       if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
+               (dateObj.getFullYear() + "").substr(4 - RegExp.$1.length));
+       for (var k in o)
+               if (new RegExp("(" + k + ")").test(format))
+                       format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] :
+                               ("00" + o[k]).substr(("" + o[k]).length));
+       return format;
+};
+
+commonUtil.strToJson = function(str){
+       var json = eval('(' + str + ')');
+       return json;
+};
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/js/curAlarmsController.js b/openo-portal/portal-performance/src/main/webapp/performance/js/curAlarmsController.js
new file mode 100644 (file)
index 0000000..9711e76
--- /dev/null
@@ -0,0 +1,445 @@
+/*
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var refreshByCond;
+var lang = 'en-US';
+
+avalon.config({
+       interpolate: ["<!--", "-->"]
+})
+
+refreshByCond = function(){
+       vm.$initTable();
+};
+
+var vm = avalon.define({
+       $id: "curAlarmsController",
+       logType: 'secLog',
+       severity: '',
+       ackState: '',
+       filterState: '',
+       ruleType: 1,
+       curalarmsType: 'curalarms',
+       moreCondBtn: false,
+       showClear: true,
+       dataRangeLocationDisabled:true,
+       dataRangeTypeDisabled:true,
+       dataRangeCodeDisabled:true,
+       alCodeTree_affirm:false,
+       alLocationTree_affirm:false,
+       alarmCodeSelectedCount: 0,
+       alarmLocationSelectedCount: 0,
+       alarmTypeSelectedCount: 0,
+       tempHide:false,
+       treeIcons: [
+               "ict-arrowRight",
+               "ict-arrowLeft",
+               "ict-selectLeft"
+       ],
+
+       severityTypes: [
+               {id: '1', name: $.i18n.prop("ngict_fm_iui_curalarm_critical"), value: true, type: "severityTypes", class: "alarm-serious"},
+               {id: '2', name: $.i18n.prop("ngict_fm_iui_curalarm_major"), value: true, type: "severityTypes", class: "alarm-important"},
+               {id: '3', name: $.i18n.prop("ngict_fm_iui_curalarm_minor"), value: true, type: "severityTypes", class: "alarm-secondary"},
+               {id: '4', name: $.i18n.prop("ngict_fm_iui_curalarm_warning"), value: true, type: "severityTypes", class: "alarm-slightly"}
+       ],
+
+       ackStateTypes: [
+               {id: '1', name: $.i18n.prop("ngict_fm_iui_curalarm_ackAlarm"), value: false, type: "ackStateTypes"},
+               {id: '2', name: $.i18n.prop("ngict_fm_iui_curalarm_unackAlarm"), value: true, type: "ackStateTypes"}
+       ],
+
+       filterStateTypes: [
+               {id: '1', name: $.i18n.prop("ngict_fm_iui_curalarm_visible"), value: true, type: "filterStateTypes"},
+               {id: '0', name: $.i18n.prop("ngict_fm_iui_curalarm_invisible"), value: false, type: "filterStateTypes"}
+       ],
+
+       alTypes:[
+               "Communications Alarm",
+               "Processing Error Alarm",
+               "Quality of Service Alarm",
+               "Equipment Alarm",
+               "Environmental Alarm",
+               "OMC Alarm",
+               "Integrity Violation",
+               "Operational Violation",
+               "Physical Violation",
+               "Security Violation",
+               "Time Domain Violation"
+       ],
+
+       $alarmsTableFields: {
+               curalarms: [
+                       {"mData": null,name: "<input id='dataTableCheckBox' type='checkBox'/>","sClass": 'details-check',"sWidth": '5%',"fnRender": alarmsUtil.checkBox},
+                       {"mData": "order", name: $.i18n.prop("ngict_fm_iui_curalarm_order"),"sClass": 'details-control', "sWidth": '6%'},
+                       {"mData": "id", sWidth : "10%",name: $.i18n.prop("ngict_fm_iui_curalarm_id"),"bVisible": true},
+                       {"mData": "position1DisplayName", sWidth : "10%",name:$.i18n.prop("ngict_fm_iui_curalarm_ne")},
+                       {"mData": "mocName",sWidth : "14%", name: $.i18n.prop("ngict_fm_iui_curalarm_moc")},
+                       {"mData": "probableCauseCodeNameAndCode",       sWidth : "14%",name: $.i18n.prop("ngict_fm_iui_curalarm_probableCauseCode")},
+                       {"mData": "alarmRaisedTime", sWidth : "15%",name: $.i18n.prop("ngict_fm_iui_curalarm_alarmRaisedTime"),"fnRender": alarmsUtil.timeRender},
+                       {"mData": "perceivedSeverity",sWidth : "10%", name: $.i18n.prop("ngict_fm_iui_curalarm_perceivedSeverity"),fnRender:alarmsUtil.Severity},
+                       {"mData": "alarmType",sWidth : "10%", name: $.i18n.prop("ngict_fm_iui_curalarm_alarmType"),"bVisible": false},
+                       {"mData": "ackState",sClass:"ackState",sWidth : "10%", name: $.i18n.prop("ngict_fm_iui_curalarm_ackState"),"fnRender":alarmsUtil.ackState},
+                       {"mData": "ackTime", sWidth : "13%",name: $.i18n.prop("ngict_fm_iui_curalarm_ackTime"),"fnRender": alarmsUtil.timeRender,"bVisible": false},
+                       {"mData": "position1", name: $.i18n.prop("ngict_fm_iui_curalarm_position1"),"bVisible": false},
+                       {"mData": "alarmChangedTime", name: $.i18n.prop("ngict_fm_iui_curalarm_alarmChangedTime"),"bVisible": false,"fnRender": alarmsUtil.timeRender},
+                       {"mData": "ackUserId", name: $.i18n.prop("ngict_fm_iui_curalarm_ackUserId"),"bVisible": false},
+                       {"mData": "ackSystemId", name: $.i18n.prop("ngict_fm_iui_curalarm_ackSystemId"),"bVisible": false},
+                       {"mData": "alarmClearedTime", name: $.i18n.prop("ngict_fm_iui_curalarm_alarmClearedTime"),"bVisible": false,"fnRender": alarmsUtil.timeRender},
+                       {"mData": "additionalText", name: $.i18n.prop("ngict_fm_iui_curalarm_additionalText"),"bVisible": false},
+                       {"mData": "ackSystemId", name: $.i18n.prop("ngict_fm_iui_curalarm_ackSystem"),"bVisible": false},
+                       {"mData": "clearUserId", name: $.i18n.prop("ngict_fm_iui_curalarm_clearUserId"),"bVisible": false},
+                       {"mData": "clearSystemId", name: $.i18n.prop("ngict_fm_iui_curalarm_clearSystemId"),"bVisible": false},
+                       {"mData": "clearType", name: $.i18n.prop("ngict_fm_iui_curalarm_clearType"),"bVisible": false},
+                       {"mData": "probableCauseCode", name: $.i18n.prop("ngict_fm_iui_curalarm_probableCauseCode"),"bVisible": false},
+                       {"mData": "specificProblem", name: $.i18n.prop("ngict_fm_iui_curalarm_specificProblem"),"bVisible": false},
+                       {"mData": "neIp", name: $.i18n.prop("ngict_fm_iui_curalarm_neIp"),"bVisible": false},
+                       {"mData": "pathIds", name: $.i18n.prop("ngict_fm_iui_curalarm_pathIds"),"bVisible": false},
+                       {"mData": "pathName", name: $.i18n.prop("ngict_fm_iui_curalarm_pathName"),"bVisible": false}
+               ],
+       },
+
+       $language: {
+               "sProcessing": "<img src='../common/thirdparty/data-tables/images/loading-spinner-grey.gif'/><span>&nbsp;&nbsp;处理中...</span>",
+               "sLengthMenu": $.i18n.prop("ngict-fm-iui-table-sLengthMenu"),
+               "sZeroRecords": $.i18n.prop("ngict-fm-iui-table-sZeroRecords"),
+               "sInfo": "<span class='seperator'></span>" + $.i18n.prop("ngict-fm-iui-table-sInfo"),
+               "sInfoEmpty": $.i18n.prop("ngict-fm-iui-table-sInfoEmpty"),
+               "sGroupActions": $.i18n.prop("ngict-fm-iui-table-sGroupActions"),
+               "sAjaxRequestGeneralError": $.i18n.prop("ngict-fm-iui-table-sAjaxRequestGeneralError"),
+               "sEmptyTable": $.i18n.prop("ngict-fm-iui-table-sEmptyTable"),
+               "oPaginate": {
+                       "sPrevious": $.i18n.prop("ngict-fm-iui-table-sPrevious"),
+                       "sNext": $.i18n.prop("ngict-fm-iui-table-sNext"),
+                       "sPage": $.i18n.prop("ngict-fm-iui-table-sPage"),
+                       "sPageOf": $.i18n.prop("ngict-fm-iui-table-sPageOf")
+               }
+       },
+
+       $queryAlarmsInfoUrl: '/api/umcfm/v1/curalarms',
+       $saveCondUrl: '/web/rest/web/fm/rules?isc_dataFormat=json',
+       fmConds: {},
+       $sunburstSetting: {width: 450, height: 400},
+
+       $getLogCond: function(){
+               var cond = {};
+               var severitys = [];
+               var ackState = [];
+               var filterState = [];
+               for (var i = 0; i < vm.severityTypes.length; i++) {
+                       vm.severityTypes[i].value ? severitys.push(vm.severityTypes[i].id) : null;
+               };
+               for (var i = 0; i < vm.ackStateTypes.length; i++) {
+                       vm.ackStateTypes[i].value ? cond.ackState = ackState.push(vm.ackStateTypes[i].id) : null;
+               };
+               for (var i = 0; i < vm.filterStateTypes.length; i++) {
+                       vm.filterStateTypes[i].value ? cond.filterState = filterState.push(vm.filterStateTypes[i].id) : null;
+               };
+               cond.severity = severitys;
+               cond.ackState = ackState;
+               cond.filterState = filterState;
+               cond.location=vm.fmConds.location;
+               cond.ackTimeStarTime = vm.fmConds.ackTimeStarTime;
+               cond.ackTimeEndTime = vm.fmConds.ackTimeEndTime;
+               cond.ackRelativeTime = vm.fmConds.ackRelativeTime;
+               cond.ackTimeMode = vm.fmConds.ackTimeMode;
+               cond.alarmRaisedStartTime = vm.fmConds.alarmRaisedStartTime;
+               cond.alarmRaisedEndTime = vm.fmConds.alarmRaisedEndTime;
+               cond.alarmRaisedRelativeTime = vm.fmConds.alarmRaisedRelativeTime;
+               cond.alarmRaisedTimeMode = vm.fmConds.alarmRaisedTimeMode;
+               cond.clearedTimeStarTime = vm.fmConds.clearedTimeStarTime;
+               cond.clearedTimeEndTime = vm.fmConds.clearedTimeEndTime;
+               cond.clearedTimeMode = vm.fmConds.clearedTimeMode;
+               cond.probableCause = vm.fmConds.probableCause;
+               cond.alarmType = vm.fmConds.alarmType;
+               cond.ruleType = vm.ruleType;
+               return cond;
+       },
+
+       $initRegister: function(){
+               $('#alCode .condSelect').click(function(){
+                       $('#alCodeTree').modal('show');
+               });
+
+               $('#alCodeTree').on('hide.bs.modal', function(){
+                       $table = $("#selectedProbableCausesTreeTable");
+                       if(vm.alCodeTree_affirm===false){
+                               $('#selectedProbableCausesTreeTable tbody').children().remove();
+                               for(i=0;i<alarmTemp.length;i++){
+                                       $table.append(alarmTemp[i]);
+                               }
+                       }
+                       vm.alCodeTree_affirm=false;
+               });
+
+               $('#alCodeTree').on('show.bs.modal', function(){
+                       vm.alCodeTree_affirm=false;
+                       alarmTemp=[];
+                       var $trs=$("#selectedProbableCausesTreeTable tr");
+                       if($trs.length!=0){
+                               for(var i=0;i<$trs.length;i++){
+                                       alarmTemp.push($trs.eq(i)[0].outerHTML);
+                               }
+                               $('#selectedProbableCausesTreeTable td').on("click", function(){
+                                       var $tds = $('#selectedProbableCausesTreeTable td');
+                                       for (var i = 0; i < $tds.length; i++) {
+                                               $tds.eq(i).removeClass('tallCellSelected');
+                                               $tds.eq(i).parent().removeClass('checked');
+                                       }
+                                       $(this).addClass('tallCellSelected');
+                                       $(this).parent().addClass("checked");
+                               });
+                       }       
+               })
+
+               $('#alType .condSelect').click(function(){
+                       $('#alTypeTree').modal('show');
+               });
+
+               //告警位置初始化
+               $('#alLocation .condSelect').click(function(){
+                       $('#alLocationTree').modal('show');
+               });
+
+               $('#alLocationTree').on('hide.bs.modal', function(){
+                       $table = $("#selectedDeptTreeTable");
+                       if(vm.alLocationTree_affirm===false){
+                               $('#selectedDeptTreeTable tbody').children().remove();
+                               for(i=0;i<alarmTemp.length;i++){
+                                       $table.append(alarmTemp[i]);
+                               }
+                       }
+                       vm.alLocationTree_affirm=false;
+               });
+
+               $('#alLocationTree').on('show.bs.modal', function(){
+                       vm.alLocationTree_affirm=false;
+                       alarmTemp=[];
+                       var $trs=$("#selectedDeptTreeTable tr");
+                       if($trs.length!=0){
+                               for(var i=0;i<$trs.length;i++){
+                                       alarmTemp.push($trs.eq(i)[0].outerHTML);
+                               }
+                       }
+                       $('#selectedDeptTreeTable td').on("click", function(){
+                               var $tds = $('#selectedDeptTreeTable td');
+                               for (var i = 0; i < $tds.length; i++) {
+                                       $tds.eq(i).removeClass('tallCellSelected');
+                                       $tds.eq(i).parent().removeClass('checked');
+                               }
+                               $(this).addClass('tallCellSelected');
+                               $(this).parent().addClass("checked");
+                       });
+               })
+
+               $(document).on("click", function(e){ 
+                       var target = $(e.target);
+                       if(target.closest("#alLocationTree").length == 0 && target.closest("#alLocation .condSelect").length==0){
+                               $("#alLocationTree").fadeOut();
+                       }
+                       if(target.closest("#alCodeTree").length == 0 && target.closest("#alCode .condSelect").length==0){
+                               $('#alCodeTree').fadeOut();
+                       }
+                       if(target.closest("#alTypeTree").length == 0 && target.closest("#alType .condSelect").length==0){
+                               $('#alTypeTree').fadeOut();
+                       }
+               });
+
+                //主表格确认
+               $('#affirm').hover(function(){
+                       $('#affirmTrip').show();
+               },function(){
+                       $('#affirmTrip').hide();
+               });
+
+               //主表格反确认
+               $('#unAffirm').hover(function(){
+                       $('#unAffirmTrip').show();
+               },function(){
+                       $('#unAffirmTrip').hide();
+               });
+
+                //初始化 checkBox
+                $('.confirmTime input[type="radio"]').iCheck({
+                       radioClass: 'iradio_square-aero',
+                       increaseArea: '20%'
+                });
+               //告警类型树的选项被选中时
+               $('#selectedAlTypeTable input[type="checkBox"]').on("ifChecked", function(){
+                       $(this).parent().parent().addClass('tallCellSelected');
+               });
+
+               //告警类型未被选中时
+                $('#selectedAlTypeTable input[type="checkBox"]').on("ifUnchecked", function(){
+                       $(this).parent().parent().removeClass('tallCellSelected');
+               });
+       },
+
+       $initTable: function(){
+               var setting = {};
+               setting.language = vm.$language;
+               setting.columns = vm.$alarmsTableFields[vm.curalarmsType];
+               setting.restUrl = vm.$queryAlarmsInfoUrl;
+               setting.tableId = "ict_alarms_table";
+               serverPageTable.initDataTable(setting, vm.$getLogCond(), 'ict_alarms_table_div');
+       },
+
+       condChange: function(){
+               refreshByCond();
+       },
+
+       moreCondClicked: function(){
+               $('#moreCond').fadeToggle();
+               var icon = $(this).children('span').eq(0);
+               if ($(this).hasClass('blueactive')) {
+                       vm.moreCondBtn = false;
+                       icon.removeClass('borderBottom');
+                       icon.addClass('borderBotTop');
+                       $("div.fliterline").show();
+               } else {
+                       vm.moreCondBtn = true;
+                       icon.removeClass('borderTop');
+                       icon.addClass('borderBottom');
+                       $("div.fliterline").hide();
+               }
+       },
+
+       alarmsCondSave: function(){
+               if ($('#saveCondId').val() != null && $.trim($('#saveCondId').val()) != '') {
+                       var name = $('#saveCondId').val();
+                       alarmsUtil.condSave(vm.$getLogCond(), vm.$saveCondUrl, name);
+               }
+       },
+
+       saveModal: function(){
+               $('#myModal').modal('show');
+       },
+
+       searchModal: function(){
+               refreshByCond();
+       },
+
+       tabClicked: function(modelItem, item){
+               if (!modelItem.value) {
+                       modelItem.value = true;
+               } else {
+                       modelItem.value = false;
+               }
+               refreshByCond();
+       },
+
+       moveTreeNode: function(item){
+                alarmsUtil.moveNode(item);
+       },
+
+       //告警位置——确认
+       deptTreeAffirm: function(){
+               var selectName="";
+               var locationObj=[];
+               var $tds= $("#selectedDeptTreeTable td");
+               for (var i = 0; i < $tds.length; i++) {
+                       var obj={};
+                       obj.id=$tds.eq(i).attr('nodeid');
+                       obj.oid=$tds.eq(i).attr('oid');
+                       locationObj.push(obj);
+                       if(i==0){
+                               selectName+=$tds.eq(i).text();
+                       }else{
+                               selectName+=","+$tds.eq(i).text();
+                       }
+               };
+               vm.fmConds.location=locationObj;
+               vm.alarmLocationSelectedCount=locationObj.length;
+               vm.alLocationTree_affirm=true;
+               $('#alLocationTree').modal('hide')
+       },
+
+       //告警码树 确认
+       probableCausesTreeAffirm: function(){
+               var selectName="";
+               var probableCause=[];
+               var $tds= $("#selectedProbableCausesTreeTable td");
+               var systemType=[];
+               for (var i = 0; i < $tds.length; i++) {
+                       var obj={};
+                       obj.codeid=$tds.eq(i).attr('codeid');
+                       obj.parentid=$tds.eq(i).attr('parentid');
+                       obj.type=$tds.eq(i).attr('type');
+                       probableCause.push(obj);
+               };
+               vm.fmConds.probableCause=probableCause;
+               vm.alarmCodeSelectedCount = probableCause.length;
+               vm.alCodeTree_affirm=true;
+               $('#alCodeTree').modal('hide');
+       },
+
+       //告警类型 确认
+       alTypeTreeAffirm: function(){
+               var selectName="";
+               var alType=[];
+               var $tds=$("#selectedAlTypeTable td.tallCellSelected");
+               for (var i = 0; i < $tds.length; i++) {
+                       var obj={};
+                       alType.push(obj);
+                       if(i==0){
+                               selectName+=$tds.eq(i).text();
+                       }else{
+                               selectName+=","+$tds.eq(i).text();
+                       }
+               };
+               vm.fmConds.alType=alType;
+               if(selectName!=""){
+                       $('#alType .condSelect :selected').text(selectName);
+               }else{
+                       $('#alType .condSelect :selected').text("请选择告警类型");
+               }
+               vm.alarmTypeSelectedCount = alType.length;
+               //$('#alTypeTree').fadeOut();
+               $('#alTypeTree').modal('hide')
+       }
+});
+
+//初始化 告警类型
+initAlTypeTable = function(){
+       var html = "";
+       for (var i = 0; i < vm.alTypes.length; i++) {
+               html += "<tr><td><input type='checkbox'>" + vm.alTypes[i] + "</td></tr>";
+       };
+       $('#selectedAlTypeTable').append(html);
+}
+
+initPage = function(){
+       bootbox.setDefaults({
+               locale: lang.replace("-", "_")
+       });
+       //自定义确认时间组件
+       alarmsUtil.setDateRange("daterangeConfirm", vm);
+       alarmsUtil.dateRangeEnableDisable("customAckTime");
+       //自定义发生时间组件
+       alarmsUtil.setDateRange("daterangeOccur", vm);
+       alarmsUtil.dateRangeEnableDisable("customRaisedTime");
+       //高级菜单界面中,对告警发生时间、确认时间、清除时间初始化
+       alarmsUtil.dateRangeCustom(vm);
+       //告警码树初始化
+       alarmsUtil.initTree();
+       //告警类型初始化
+       initAlTypeTable();
+       vm.$initRegister();
+       refreshByCond();
+       localStorage.setItem("curRuleDataId",0);
+}
+
+initPage();
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/js/performanceChart.js b/openo-portal/portal-performance/src/main/webapp/performance/js/performanceChart.js
new file mode 100644 (file)
index 0000000..9784042
--- /dev/null
@@ -0,0 +1,196 @@
+/*
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// draw the chart by performance datas
+function drawPerformanceChart() {
+    var chartType = "";
+    var titleText = document.getElementById("tableTitleText").innerHTML;
+    var subTitleText = "subTitleText";
+    var chartDataList = [];
+    var resourceNameList = [];
+    var timeList = [];
+
+    // get table datas
+    var tableObj = document.getElementById("ict_pm_data");
+    if (tableObj == null || tableObj.rows.length < 1) {
+        return;
+    }
+
+    // distinguish between chart types
+    var ratioType = tableObj.rows[0].cells[5].innerText;
+    if (ratioType.indexOf("CPU") > -1) {
+        chartType = "CPU";
+        subTitleText = "CPU USE RATIO";
+    } else if (ratioType.indexOf("RAM") > -1) {
+        chartType = "RAM";
+        subTitleText = "RAM USE RATIO";
+    } else if (ratioType.indexOf("VOLUME") > -1) {
+        chartType = "FILESYSTEM";
+        subTitleText = "LOGIC VOLUME FILESYSTEM USE RATIO";
+    } else if (ratioType.indexOf("NIC") > -1) {
+        chartType = "NIC";
+        subTitleText = "ERROR PACKET RATIO BY ONE COLLECT-PERIOD (SEND AND RECEIVED)";
+    } else {
+        return;
+    }
+    
+    // collect datas for chart horizontal axis
+    for (var i = 1; i < tableObj.rows.length; i++) {
+        var strTime = tableObj.rows[i].cells[0].innerText;
+
+        if (timeList.length == 0) {
+            // push the first start time into the x-axis
+            timeList.push(strTime);
+        } else {
+            // push the start times into the x-axis and sort them
+            for (var j = 0; j < timeList.length; j++) {
+                if (timeList[j] == strTime) {
+                    break;
+                } else if (timeList[j] > strTime) {
+                    timeList.splice(j, 0, strTime);
+                    break;
+                } else if (j + 1 == timeList.length && timeList[j] < strTime) {
+                    timeList.push(strTime);
+                    break;
+                }
+            }
+        }
+    }
+
+    // create chart resources
+    for (var i = 1; i < tableObj.rows.length; i++) {
+        var strTime = tableObj.rows[i].cells[0].innerText;
+        var ratioIndex = getListIndex(timeList, strTime);
+        var strName = "";
+        var strRatio = "";
+
+        if (chartType == "CPU" || chartType == "RAM") {
+            strName = tableObj.rows[i].cells[4].innerText;
+            strRatio = tableObj.rows[i].cells[5].innerText;
+        } else if (chartType == "FILESYSTEM") {
+            strName = tableObj.rows[i].cells[4].innerText + "(" + tableObj.rows[i].cells[6].innerText + ")";
+            strRatio = tableObj.rows[i].cells[9].innerText;
+        } else if (chartType == "NIC") {
+            strName = tableObj.rows[i].cells[4].innerText + "(" + tableObj.rows[i].cells[5].innerText + ")";
+            strRatio = parseFloat(tableObj.rows[i].cells[10].innerText) + parseFloat(tableObj.rows[i].cells[11].innerText);
+        }
+
+        if (chartDataList.length == 0) {
+            // create the first chart resource and push it into the chartlist
+            insertChartDataList(chartDataList, strName, strRatio, ratioIndex);
+        } else {
+            // update the chart resources which exist in chartlist
+            var existFlg = false;
+            for (var j = 0; j < chartDataList.length; j++) {
+                if (chartDataList[j].name == strName) {
+                    chartDataList[j].data[ratioIndex] = strRatio;
+                    existFlg = true;
+                    break;
+                }
+            }
+
+            // create a new chart resource and push it into the chartlist
+            if (!existFlg) {
+                insertChartDataList(chartDataList, strName, strRatio, ratioIndex);
+            }
+        }
+    }
+
+    for (var i = 0; i < chartDataList.length; i++) {
+        // complete length of datalist for each chart resource
+        if (chartDataList[i].data.length < timeList.length) {
+            chartDataList[i].data[timeList.length - 1] = "";
+        }
+
+        // create the name list of chart resources
+        resourceNameList.push(chartDataList[i].name);
+    }
+
+    // initialize the chart
+    var dom = document.getElementById("chartCanvasDiv");
+    var myChart = echarts.init(dom);
+    option = null;
+
+    // set the chart by collected chart resources
+    option = {
+        title: {
+            text: titleText,
+            subtext: subTitleText,
+            x: 'center'
+        },
+        tooltip: {
+            trigger: 'axis'
+        },
+        legend: {
+            data:resourceNameList,
+            top: '10%'
+        },
+        grid: {
+            top: '20%'
+        },
+        toolbox: {
+            show: true,
+            feature: {
+                magicType: {type: ['line', 'bar']},
+                restore: {},
+                saveAsImage: {}
+            }
+        },
+        xAxis: {
+            type: 'category',
+            boundaryGap: false,
+            data : timeList.map(function (str) {
+                    return str.replace(' ', '\n')
+                })
+        },
+        yAxis: {
+            name : 'percentage(%)',
+            type: 'value'
+        },
+        series: chartDataList
+    };
+
+    // draw the performance chart of all resources
+    if (option && typeof option === "object") {
+        myChart.setOption(option, true);
+    };
+};
+
+// define the struct of chart resource
+function chartData() {
+    this.name = "";
+    this.type = "line";
+    this.smooth = true;
+    this.data = [];
+};
+
+// create a new chart resource and push it into the chartlist
+function insertChartDataList(chartDataList, name, data, dataIndex) {
+    var cd = new chartData();
+    cd.name = name;
+    cd.data[dataIndex] = data;
+    chartDataList.push(cd);
+};
+
+// return the index of the specified element in the list
+function getListIndex(list, data) {
+    var dataIndex = 0;
+    for (var i = 0; i < list.length; i++) {
+        if (list[i] == data) {
+            return i;
+        }
+    }
+    return dataIndex;
+};
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/js/performanceQueryController.js b/openo-portal/portal-performance/src/main/webapp/performance/js/performanceQueryController.js
new file mode 100644 (file)
index 0000000..d0d6b2e
--- /dev/null
@@ -0,0 +1,858 @@
+/*
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var pm = {};
+pm.query = {};
+pm.query.vmPmQuery = avalon.define({
+       $id: "pmQueryController",
+       tableTitle:'',
+       pmDataVisable:true,
+       pmChartVisable:false,
+       tableIconVisable:false,
+       chartIconVisable:false,
+       queryRuleVisable:false,
+       boxVisible:true,
+       pmQueries:[],           
+       
+       $postData:{},
+       
+       beginTime: "",
+       endTime: "",
+       granularity:"",
+       
+       granularities: [
+        {id: '5', name: $.i18n.prop('com_zte_ums_ict_pm_query_5'), value: true},
+        {id: '15', name: $.i18n.prop('com_zte_ums_ict_pm_query_15'), value: false},            
+               {id: '60', name: $.i18n.prop('com_zte_ums_ict_pm_query_60'), value: false}
+    ],
+       
+       granularityClicked: function(modelItem, item){
+               if(modelItem.id =="5"){
+                       pm.query.vmPmQuery.granularity = "5*60";
+                       pm.query.vmPmQuery.granularities[0].value = true;  
+                       pm.query.vmPmQuery.granularities[1].value = false;  
+                       pm.query.vmPmQuery.granularities[2].value = false; 
+               }else if(modelItem.id =="15"){
+                       pm.query.vmPmQuery.granularity = "15*60";
+                       pm.query.vmPmQuery.granularities[0].value = false;  
+                       pm.query.vmPmQuery.granularities[1].value = true;  
+                       pm.query.vmPmQuery.granularities[2].value = false;
+               }else{
+                       pm.query.vmPmQuery.granularity = "60*60";
+                       pm.query.vmPmQuery.granularities[0].value = false;  
+                       pm.query.vmPmQuery.granularities[1].value = false;  
+                       pm.query.vmPmQuery.granularities[2].value = true;
+               }
+       },      
+       
+       resources: [
+               /* {id: 'vnfInstance', name: $.i18n.prop('ngict-pm-iui-name-vnfInstance'), value: "SSS"},
+               {id: 'host', name: $.i18n.prop('ngict-pm-iui-name-host'), value: ""} */
+       ],
+       
+       resourcesMap:{},
+       
+       resourceSlected:[],
+       
+       resourceSlectedObjs:[],
+       
+       rmSelectedResource: function(modelItem, elem){
+               $(elem).parent().remove();
+               pm.query.vmPmQuery.resourceSlected.splice(pm.query.vmPmQuery.resourceSlected.indexOf(modelItem.id), 1);
+       },
+       
+       initResources: function(resourceTypeId){
+               var that = this;
+               $.ajax({
+                       async: false,
+                       "dataType": 'json',
+                       "type": "GET",
+                       //"url": "/api/umcpm/v1/resources/" + resourceTypeId,
+                       "url": "/api/umcpm/v1/resources/",
+                       "contentType": 'application/json; charset=utf-8',
+                       "success": function (res, textStatus, jqXHR) {
+                               //var nodes = res.content;      
+                               var nodes = res;
+                               that.resources = [];
+                               for (var i = 0; i < nodes.length; i++) {
+                                       var resource = {
+                                               id: nodes[i].id,
+                                               name: nodes[i].name,
+                                               resType: nodes[i].resType
+                                       };
+                                       that.resources.push(resource);
+                                       //保存id和resource的映射关系
+                                       var resourceCopy = {
+                                               id: nodes[i].id,
+                                               name: nodes[i].name,
+                                               resType: nodes[i].resType
+                                       };
+                                       that.resourcesMap[nodes[i].id] = resourceCopy;
+                               }
+                               //过滤框注册
+                               $("input[id=resourcesToFilter]").keyup(function(){ 
+                                       $("table#resources tbody tr").hide().filter(":contains('"+( $(this).val() )+"')").show(); 
+                               }); 
+                       },
+                       "error": function () {
+                       }
+               });
+       },
+       
+       resTypeArray : [],
+       selectedResourceType : "",
+       selectedResourceTypeId : "",
+       
+       moTypeArray:[],
+       selectedMoType:"",
+       selectedMoTypeId:"",
+       
+       counterArray:[],
+       selectedCounter:[],
+       
+       resTypeSelectAction:function(){
+               var resourceTypeId = getIdFromName(pm.query.vmPmQuery.selectedResourceType,pm.query.vmPmQuery.resTypeArray);
+               pm.query.vmPmQuery.selectedResourceTypeId = resourceTypeId;
+               getMoTypeArray(resourceTypeId);
+               pm.query.vmPmQuery.counterArray=[];
+               pm.query.vmPmQuery.initResources(resourceTypeId);
+       },
+       moTypeSelectAction:function(obj){
+                var resourceTypeId=getIdFromName(pm.query.vmPmQuery.selectedResourceType,pm.query.vmPmQuery.resTypeArray);
+                //var moTypeId=$(obj).val();
+                var moTypeId = getIdFromName(pm.query.vmPmQuery.selectedMoType, pm.query.vmPmQuery.moTypeArray);       
+                pm.query.vmPmQuery.selectedMoTypeId = moTypeId;                 
+                getCounterArray(resourceTypeId,moTypeId);
+       },
+       /* counterSelectAction:function(obj){
+                var counterId=$(obj).val();
+                pm.query.vmPmQuery.selectedCounter=counterId;          
+                pm.query.vmPmQuery.indexDescription+=pm.query.vmPmQuery.selectedCounter;
+       }, */
+       returnQueryPage: function(){
+               pm.query.vmPmQuery.pmDataVisable=true;
+               pm.query.vmPmQuery.pmChartVisable=false;
+               pm.query.vmPmQuery.tableIconVisable=false;
+               pm.query.vmPmQuery.chartIconVisable=true;
+               pm.query.vmPmQuery.queryRuleVisable=false;
+               pm.query.vmPmQuery.clickDisplayGraphAlink();
+       },
+       
+       queryRuleView: function(event, el){
+               event.stopPropagation();
+               
+               pm.query.vmPmQuery.tableTitle=$.i18n.prop('com_zte_ums_ict_pm_query_edit');   
+               
+               //取得测量任务详情
+               var elem = {};
+               $.ajax({
+                       async: false,
+                       "dataType": 'json',
+                       "type": "GET",
+                       "url": "/api/umcpm/v1/meatasks/" + el.id,
+                       "data": null,
+                       "contentType": 'application/json; charset=utf-8',
+                       "success": function (res, textStatus, jqXHR) {
+                               elem = res;
+                       },
+                       "error": function () {
+                       }
+               });
+               
+               pm.query.vmPmQuery.pmDataVisable=false;
+               pm.query.vmPmQuery.pmChartVisable=false;
+               pm.query.vmPmQuery.tableIconVisable=false;
+               pm.query.vmPmQuery.chartIconVisable=false;
+               pm.query.vmPmQuery.queryRuleVisable=true;
+               
+               pm.query.vmPmQuery.beginTime = elem.beginTime;
+               pm.query.vmPmQuery.endTime = elem.endTime;
+               
+               var timetext = pmUtil.formatTime(pm.query.vmPmQuery.beginTime) + " - " + pmUtil.formatTime(pm.query.vmPmQuery.endTime);
+               $("#queryTimeRange").val(timetext);
+               
+               //选择粒度
+               pm.query.vmPmQuery.granularity = elem.granularity;
+               var granularity = pm.query.vmPmQuery.granularity / 60;
+               var granularities = pm.query.vmPmQuery.granularities;
+               for(var i=0;i<granularities.length;i++){
+                       if(granularity == granularities[i].id){
+                               granularities[i].value = true;
+                       }else{
+                               granularities[i].value = false;
+                       }
+               }               
+               
+               //展开相关资源类型              
+               pm.query.vmPmQuery.resTypeArray.push(elem.resourceType);
+               pm.query.vmPmQuery.selectedResourceTypeId = elem.resourceType.id;
+               pm.query.vmPmQuery.selectedResourceType = elem.resourceType.name;               
+               //pm.query.vmPmQuery.resTypeSelectAction();
+               pm.query.vmPmQuery.moTypeArray.push(elem.moType);
+               pm.query.vmPmQuery.selectedMoTypeId = elem.moType.id;
+               pm.query.vmPmQuery.selectedMoType = elem.moType.name;
+               //pm.query.vmPmQuery.moTypeSelectAction();
+               getCounterArray(elem.moType.id);                
+               pm.query.vmPmQuery.initResources(elem.resourceType.id);
+               
+               $("select#resourceTypes").attr("disabled", true);
+               $("select#moTypes").attr("disabled", true);
+               
+               //选中对象
+               pm.query.vmPmQuery.resourceSlected = [];
+               for(var j=0;j<elem.resources.length;j++){
+                       pm.query.vmPmQuery.resourceSlected.push(elem.resources[j].id);
+                       //pm.query.vmPmQuery.resourceSlected.push(elem.resources[j]);
+               }
+               
+               //$("a#upArrow").click();
+               pm.query.vmPmQuery.clickDisplayGraphAlink();
+               
+               $('.indexesAll').unbind().bind("change", function () {
+                       var table = $("table#indexes");
+                       var set = $('tbody > tr > td:nth-child(1) input[type="checkbox"]', table);
+                       var checked = $(this).is(":checked");
+                       $(set).each(function () {
+                               //$(this).attr("checked", checked);
+                               if(checked){
+                                       if(!$(this).is(":checked")){
+                                               $(this).click();
+                                       }
+                               }else{
+                                       if($(this).is(":checked")){
+                                               $(this).click();
+                                       }
+                               }               
+                       });
+               });
+               
+               $('.resourceAll').unbind().bind("change", function () {
+                       var table = $("table#resources");
+                       var set = $('tbody > tr > td:nth-child(1) input[type="checkbox"]', table);
+                       var checked = $(this).is(":checked");
+                       $(set).each(function () {
+                               //$(this).attr("checked", checked);
+                               if(checked){
+                                       if(!$(this).is(":checked")){
+                                               $(this).click();
+                                       }
+                               }else{
+                                       if($(this).is(":checked")){
+                                               $(this).click();
+                                       }
+                               }               
+                       });
+               });     
+               //国际化
+               var i18nItems = $("[name_i18n=com_zte_ums_ict_pm_query]");
+               for(var i=0;i<i18nItems.length;i++){
+                       var $item = $(i18nItems.eq(i));
+                       var itemId = $item.attr('id');
+                       var itemValue = $.i18n.prop(itemId);                                            
+                       if(typeof($item.attr("title"))!="undefined"){
+                               $item.attr("title", itemValue);
+                       }else if(typeof($item.attr("placeholder"))!="undefined"){
+                               $item.attr("placeholder", itemValue);
+                       }else{
+                               $item.text(itemValue);
+                       }
+               }       
+       },
+       
+       queryRuleChanged: function(){
+               
+               pm.query.vmPmQuery.pmDataVisable=true;
+               pm.query.vmPmQuery.pmChartVisable=false;
+               pm.query.vmPmQuery.tableIconVisable=false;
+               pm.query.vmPmQuery.chartIconVisable=true;
+               pm.query.vmPmQuery.queryRuleVisable=false;
+               pm.query.vmPmQuery.clickDisplayGraphAlink();
+               
+               var resourcesToPut = [];
+               for(var i=0;i<pm.query.vmPmQuery.resourceSlected.length;i++){
+                       for(var j=0;j<pm.query.vmPmQuery.resources.length;j++){
+                               if(pm.query.vmPmQuery.resourceSlected[i] == pm.query.vmPmQuery.resources[j].id){
+                                       resourcesToPut.push(pm.query.vmPmQuery.resources[j]);
+                                       break;
+                               }
+                       }
+               }
+               
+               var postData = {
+                 "resourceTypeId": pm.query.vmPmQuery.selectedResourceTypeId,        
+                 "moTypeId": pm.query.vmPmQuery.selectedMoTypeId,        
+                 //"resources": pm.query.vmPmQuery.resourceSlected,    
+             "resources": resourcesToPut,        
+                 "counterOrIndexId": pm.query.vmPmQuery.selectedCounter,
+                 "granularity": pm.query.vmPmQuery.granularity,
+                 "beginTime": pm.query.vmPmQuery.beginTime,
+                 "endTime": pm.query.vmPmQuery.endTime,
+                 "pageNo": 0,
+                 "pageSize": 10
+               }
+               pm.query.vmPmQuery.$postData = postData;
+               $.ajax({
+                       //async:false,
+                       "type": 'post',
+                       "url": "/api/umcpm/v1/historydataqueries",
+                       "dataType": "json",
+                       "data": JSON.stringify(postData),
+                       "contentType": 'application/json; charset=utf-8',
+                       "success": function (resp) {            
+                               //if(resp.content[0]){
+                               if(resp.data[0]){
+                                       //var datas = resp.content[0].datas;    
+                                       var datas = resp.data[0].datas;
+                                       //pm.query.vmPmQuery.$queryDataTableFields = pm.query.vmPmQuery.$queryDataTableFieldsBackup;
+                                       collectDataFields(datas);
+                                       //pm.query.vmPmQuery.postData = postData;
+                                       pm.query.vmPmQuery.$initTable();
+                               }else{
+                                       collectDataFields([]);                                  
+                                       pm.query.vmPmQuery.$initTable();
+                               }               
+                       },
+                       "error":function(resp){
+                       
+                       }
+               });                     
+       },
+       
+       queryTabClicked: function (el, item) {          
+       
+               //取得测量任务详情
+               var modelItem = {};
+               $.ajax({
+                       async: false,
+                       "dataType": 'json',
+                       "type": "GET",
+                       "url": "/api/umcpm/v1/meatasks/" + el.id,
+                       "data": null,
+                       "contentType": 'application/json; charset=utf-8',
+                       "success": function (res, textStatus, jqXHR) {
+                               modelItem = res;
+                       },
+                       "error": function () {
+                       }
+               });
+       
+               pm.query.vmPmQuery.pmDataVisable=true;
+               pm.query.vmPmQuery.pmChartVisable=false;
+               pm.query.vmPmQuery.tableIconVisable=false;
+               pm.query.vmPmQuery.chartIconVisable=true;
+               pm.query.vmPmQuery.queryRuleVisable=false;
+               //vmPmQuery.boxVisible= false;
+               pm.query.vmPmQuery.tableTitle=modelItem.name + " " + $.i18n.prop('com_zte_ums_ict_pm_query_result');   
+
+               //取得指标
+               var getData = [];
+               getData.push({
+                       name: "resourceTypeId",
+                       value: modelItem.resourceType.id
+               });
+               getData.push({
+                       name: "moTypeId",
+                       value: modelItem.moType.id
+               });
+               var counterOrIndexId = [];
+               var MoTypeId = modelItem.moType.id;
+               /* $.ajax({
+                       async: false,
+                       "dataType": 'json',
+                       "type": "GET",
+                       //"url": "/api/umcpm/v1/motypes/indexes",
+                       "url": "/api/umcpm/v1/indexes",
+                       "data": getData,
+                       "contentType": 'application/json; charset=utf-8',
+                       "success": function (res, textStatus, jqXHR) {
+                               for(var i=0;i<res.length;i++){
+                                       counterOrIndexId.push(res[i].id);
+                               }
+                       },
+                       "error": function () {
+                       }
+               }); */
+               var url="/api/umcpm/v1/motypes/" + MoTypeId + "/counters";
+               var data={};
+               data.moTypeId=MoTypeId;
+               $.ajax({
+                       "type": 'get',
+                       "url": url,
+                       "dataType": "json",
+                       data:data,
+                        "async": false,
+                       "success": function (res) {
+                               for(var i=0;i<res.length;i++){
+                                       counterOrIndexId.push(res[i].id);
+                               }
+                       },
+                       "error":function(res){
+                               counterOrIndexId=[];                            
+                       }
+               }); 
+               
+               var resources=[];
+               for(var i=0;i<modelItem.resources.length;i++){
+                       var resource = {};
+                       resource.id = modelItem.resources[i].id;
+                       resource.name = modelItem.resources[i].name;
+                       resource.resType = modelItem.resources[i].resType;
+                       resources.push(resource);
+               }
+               var postData = {
+                 "resourceTypeId": modelItem.resourceType.id,        
+                 "moTypeId": modelItem.moType.id,        
+                 "resources": resources,         
+                 "counterOrIndexId": counterOrIndexId,
+                 "granularity": modelItem.granularity,
+                 "beginTime": modelItem.beginTime,
+                 "endTime": modelItem.endTime,
+                 "pageNo": 0,
+                 "pageSize": 10
+               }
+               pm.query.vmPmQuery.$postData = postData;                
+               $.ajax({
+                       //async:false,
+                       "type": 'post',
+                       "url": "/api/umcpm/v1/historydataqueries",
+                       "dataType": "json",
+                       "data": JSON.stringify(postData),
+                       "contentType": 'application/json; charset=utf-8',
+                       "success": function (resp) {            
+                               //if(resp.content[0]){
+                               if(resp.data[0]){
+                                       //var datas = resp.content[0].datas;    
+                                       var datas = resp.data[0].datas;
+                                       //pm.query.vmPmQuery.$queryDataTableFields = pm.query.vmPmQuery.$queryDataTableFieldsBackup;                                    
+                                       collectDataFields(datas);                                       
+                                       pm.query.vmPmQuery.$initTable();
+                               }else{
+                                       collectDataFields([]);                                  
+                                       pm.query.vmPmQuery.$initTable();
+                               }               
+                       },
+                       "error":function(resp){
+                       
+                       }
+               });                             
+       },
+       clickSelectedCommonCond: function () {
+          //显示统计图;
+       },                      
+       clickDisplayGraphAlink: function () {
+               pm.query.vmPmQuery.boxVisible = !pm.query.vmPmQuery.boxVisible;
+       },      
+       showPerformanceChart: function () {
+               drawPerformanceChart();
+               pm.query.vmPmQuery.pmDataVisable=false;
+               pm.query.vmPmQuery.pmChartVisable=true;
+               pm.query.vmPmQuery.tableIconVisable=true;
+               pm.query.vmPmQuery.chartIconVisable=false;
+       },
+       showPerformanceTable: function () {
+               pm.query.vmPmQuery.pmDataVisable=true;
+               pm.query.vmPmQuery.pmChartVisable=false;
+               pm.query.vmPmQuery.tableIconVisable=false;
+               pm.query.vmPmQuery.chartIconVisable=true;
+       },
+       $queryDataTableFields: [                
+               {
+                       "mData": "beginTime",
+                       sWidth: "10%",
+                       name: $.i18n.prop('com_zte_ums_ict_pm_query_start_time'),
+                       "fnRender": pmUtil.timeRender
+               },
+               {
+                       "mData": "endTime",
+                       sWidth: "10%",
+                       name: $.i18n.prop('com_zte_ums_ict_pm_query_end_time'),
+                       "fnRender": pmUtil.timeRender
+               },              
+               {
+                       "mData": "granularity",
+                       sWidth: "10%",
+                       name: $.i18n.prop('com_zte_ums_ict_pm_query_granularity')
+               },
+               {
+                       "mData": "resourceType.name",
+                       sWidth: "15%",
+                       name: $.i18n.prop('com_zte_ums_ict_pm_query_resource_type')
+               },
+               {
+                       "mData": "resource.name",
+                       sWidth: "15%",
+                       name: $.i18n.prop('com_zte_ums_ict_pm_query_resource_name')
+               }
+       ] ,
+       $language: {
+               "sProcessing": "<img src='../common/thirdparty/data-tables/images/loading-spinner-grey.gif'/><span>&nbsp;&nbsp;处理中...</span>",
+               "sLengthMenu": $.i18n.prop("ngict-log-iui-table-sLengthMenu"),
+               "sZeroRecords": $.i18n.prop("ngict-log-iui-table-sZeroRecords"),
+               "sInfo": "<span class='seperator'>  </span>" + $.i18n.prop("ngict-log-iui-table-sInfo"),
+               "sInfoEmpty": $.i18n.prop("ngict-log-iui-table-sInfoEmpty"),
+               "sGroupActions": $.i18n.prop("ngict-log-iui-table-sGroupActions"),
+               "sAjaxRequestGeneralError":$.i18n.prop("ngict-log-iui-table-sAjaxRequestGeneralError"),
+               "sEmptyTable": $.i18n.prop("ngict-log-iui-table-sEmptyTable"),
+               "oPaginate": {
+                       "sPrevious": $.i18n.prop("ngict-log-iui-table-sPrevious"),
+                       "sNext": $.i18n.prop("ngict-log-iui-table-sNext"),
+                       "sPage": $.i18n.prop("ngict-log-iui-table-sPage"),
+                       "sPageOf": $.i18n.prop("ngict-log-iui-table-sPageOf")
+               }
+       },
+       $initTable: function () {
+               var setting = {};
+               setting.language = this.$language;
+               setting.columns = this.$queryDataTableFields;
+               setting.pageHtml="r<'table-scrollable't><'row page-info-bottom'<'col-md-12 col-sm-12'lip>>>";
+               //setting.restUrl ="/api/umcpm/v1/indexes";
+               //setting.restUrl ="../../json/thresholdList.json";
+               setting.restUrl = "/api/umcpm/v1/historydataqueries";
+               setting.tableId = "ict_pm_data";
+               serverPageTable.initDataTable(setting,  'ict_pm_data_div' );            
+       }
+});
+
+pm.query.vmPmQuery.resourceSlected.$watch("length", function(newValue, oldValue){
+   var resourceSlected = pm.query.vmPmQuery.resourceSlected;
+   //pm.query.vmPmQuery.resourceSlectedObjs = [];
+   var resourceSlectedObjs = [];
+   for(var i=0;i<resourceSlected.length;i++){
+               //var obj = getObjById(resourceSlected[i], pm.query.vmPmQuery.resources);
+               var obj = $.extend(true, {}, pm.query.vmPmQuery.resourcesMap[resourceSlected[i]]);
+               //pm.query.vmPmQuery.resourceSlectedObjs.push(obj);
+               resourceSlectedObjs.push(obj);
+   }
+   //给绑定变量一次性赋值,否则非常慢
+   //pm.query.vmPmQuery.resourceSlectedObjs = $.extend(true, [], resourceSlectedObjs);
+   pm.query.vmPmQuery.resourceSlectedObjs=[];
+   for(var j=0;j<resourceSlectedObjs.length;j++){
+          pm.query.vmPmQuery.resourceSlectedObjs.push(resourceSlectedObjs[j]);
+   }
+});
+
+function getObjById(id,array){
+   for(var i=0;i<array.length;i++){
+         if(array[i].id==id){
+                return array[i];
+         }
+   }
+}
+       
+avalon.scan();
+
+//取得任务列表
+var queryViewData;
+$.ajax({
+       async: false,
+       "dataType": 'json',
+       "type": "GET",
+       "url": "/api/umcpm/v1/meatasks",
+       //"url": "../../js/meatask/testList.json",
+       "data": null,
+       "contentType": 'application/json; charset=utf-8',
+       "success": function (res, textStatus, jqXHR) {
+               //queryViewData = res.content;
+               queryViewData = res;
+       },
+       "error": function () {
+       }
+});
+
+pm.query.vmPmQuery.pmQueries = transformQueryViewData(queryViewData, 8);
+
+/* var postData = {
+  "resourceTypeId": "vnf.cn.cscf",        
+  "moTypeId": "vnf.cn.cscf.metrictype",        
+  "resources": [
+       {
+         "id": "vnf.cn.cscf.001",
+         "name": "cscf001",
+         "resType": "vnf.cn.cscf"
+       }
+  ],     
+  "counterOrIndexId": [
+       "001"
+  ],
+  "granularity": 900,
+  "beginTime": 1449023738672,
+  "endTime": 1449023738672
+} */
+
+var queryDataTableFieldsBackup = [             
+       {
+               "mData": "beginTime",
+               sWidth: "10%",
+               name: $.i18n.prop('com_zte_ums_ict_pm_query_start_time'),
+               "fnRender": pmUtil.timeRender
+       },
+       {
+               "mData": "endTime",
+               sWidth: "10%",
+               name: $.i18n.prop('com_zte_ums_ict_pm_query_end_time'),
+               "fnRender": pmUtil.timeRender
+       },              
+       {
+               "mData": "granularity",
+               sWidth: "10%",
+               name: $.i18n.prop('com_zte_ums_ict_pm_query_granularity')
+       },
+       {
+               "mData": "resourceType.name",
+               sWidth: "15%",
+               name: $.i18n.prop('com_zte_ums_ict_pm_query_resource_type')
+       },
+       {
+               "mData": "resource.name",
+               sWidth: "15%",
+               name: $.i18n.prop('com_zte_ums_ict_pm_query_resource_name')
+       }
+];
+
+//pm.query.vmPmQuery.$initTable();
+function  fnServerData(sSource, aoData, fnCallback, oSettings) {
+       
+       var oPaging = oSettings.oInstance.fnPagingInfo();
+       var pageLength = oPaging.iLength;
+       var curPageNo = oPaging.iPage;
+       
+       pm.query.vmPmQuery.$postData.pageNo = curPageNo;
+       pm.query.vmPmQuery.$postData.pageSize = pageLength;
+       
+       oSettings.jqXHR = $.ajax({
+               "type": 'post',
+               //"type": 'get',
+               "url": sSource,
+               //"url": "../../js/meatask/testMulti1.json",
+               "dataType": "json",
+               "data": JSON.stringify(pm.query.vmPmQuery.$postData),
+               "contentType": 'application/json; charset=utf-8',
+               "success": function (resp) {
+                       oSettings.iDraw = oSettings.iDraw + 1;
+                       var data = {};
+                       //添加动态列
+                       //for(var i=0;i<resp.content.length;i++){
+                       for(var i=0;i<resp.data.length;i++){
+                               //var row = resp.content[i];
+                               var row = resp.data[i];
+                               for(var j=0;j<row.datas.length;j++){
+                                       row["counterOrIndex" + row.datas[j].counterOrIndexId] = row.datas[j].value;
+                               }
+                       }
+                       /* data.aaData = resp.content;                  
+                       data.iTotalRecords = resp.content.length;
+            data.iTotalDisplayRecords = resp.content.length; */
+                       data.aaData = resp.data;                        
+                       data.iTotalRecords = resp.totalCout;
+            data.iTotalDisplayRecords = resp.totalCout;
+                       data.sEcho = oSettings;                                 
+                       fnCallback(data);                       
+               },
+               "error":function(resp){
+               
+               }
+       });
+}
+
+/* var tableFieldsMap = {
+       beginTime: "开始时间",
+       endTime: "结束时间" 
+}; */
+
+function collectDataFields(datas){
+       pm.query.vmPmQuery.$queryDataTableFields = [];
+       for(var i=0;i<queryDataTableFieldsBackup.length;i++){
+               pm.query.vmPmQuery.$queryDataTableFields.push(queryDataTableFieldsBackup[i]);
+       }       
+       for(var i=0;i<datas.length;i++){
+               if(!datas[i].name){
+                       datas[i].name="测试列"
+               }               
+               pm.query.vmPmQuery.$queryDataTableFields.push({
+                               //"mData": "datas["+ i +"].value",
+                               //"mData": "datas.value",
+                               //"mData": "datas",
+                               "mData": "counterOrIndex" + datas[i].counterOrIndexId,
+                               sWidth: "10%",
+                               name: datas[i].counterOrIndexName
+                               //,fnRender: pmUtil.indexValue
+               });
+       }
+}
+
+/* function tranverseObjFields(obj){
+       for(var p in obj){ 
+               if(typeof(obj[p])!="function" && tableFieldsMap[p]){
+                       if(obj[p]){
+                               
+                       }
+                       pm.query.vmPmQuery.$queryDataTableFields.push({
+                               "mData": p,
+                               sWidth: "10%",
+                               name: tableFieldsMap[p]
+                       })
+               } 
+       } 
+} */
+
+function transformQueryViewData(queryViewData, pageSize) {
+    var newData = [];
+    var pageNo = Math.floor(queryViewData.length / pageSize) + 1;
+       if(queryViewData.length % pageSize == 0){
+               pageNo--;
+       }
+    for (var i = 0; i < pageNo; i++) {
+        newData.push({array: []});
+    }
+    for (var j = 0; j < queryViewData.length; j++) {
+        newData[Math.floor(j / pageSize)].array.push(queryViewData[j]);
+    }
+    return newData;
+}
+    
+setTimeout(function(){
+       $($(".item", $(".carousel-inner"))[0]).addClass("active");
+       pmUtil.setDateRange("queryTimeRange");
+}, 100);
+
+newIndexWizard = function (idx,action) {           
+          //获取资源类型
+               //getResTypeArray();
+               var resourceTypeId;
+               var moTypeId;
+         
+               //默认取资源第一个的测量类型
+               /* if(pm.query.vmPmQuery.resTypeArray && pm.query.vmPmQuery.resTypeArray.length>0){
+                       pm.query.vmPmQuery.selectedResourceType=pm.query.vmPmQuery.resTypeArray[0].name;
+                       resourceTypeId=pm.query.vmPmQuery.resTypeArray[0].id;
+                       pm.query.vmPmQuery.selectedDataType=pm.query.vmPmQuery.dataTypeArray[0].name;
+                       getMoTypeArray( pm.query.vmPmQuery.resTypeArray[0].id);
+                       getCounterArray(resourceTypeId,moTypeId);
+               } */
+}();
+
+function  getResTypeArray(){
+       var url="/api/umcpm/v1/resourcetypes";
+       $.ajax({
+               "type": 'get',
+               "url": url,
+               "dataType": "json",
+                "async": false,
+               "success": function (resp) {
+                       //pm.query.vmPmQuery.resTypeArray= resp.content;
+                       pm.query.vmPmQuery.resTypeArray= resp;
+               },
+               "error":function(resp){
+                 // pm.index.vm.ResTypeArray=resp; 
+               }
+       });
+}
+
+function  getMoTypeArray(resourceTypeId){
+       if(resourceTypeId){
+       //获取测量类型
+       var url="/api/umcpm/v1/motypes";
+       var data={};
+       data.resourceTypeId=resourceTypeId;
+       $.ajax({
+               "type": 'get',
+               "url": url,
+               data:data,
+               "dataType": "json",
+                "async": false,
+               "success": function (resp) {
+                       //pm.query.vmPmQuery.moTypeArray= resp.content;
+                       pm.query.vmPmQuery.moTypeArray= resp;
+               },
+               "error":function(resp){
+                       pm.query.vmPmQuery.moTypeArray=[]; 
+                       //for test
+                       /* var res = {"message":null,"content":[{"name":"性能KPI-1","id":"ns.cn.ims.metrictype"},{"name":"性能KPI-2","id":"ns.cn.ims.metrictype1"},{"name":"性能KPI-3","id":"ns.cn.ims.metrictype2"},{"name":"性能KPI-4","id":"ns.cn.ims.metrictype3"},{"name":"性能KPI-5","id":"ns.cn.ims.metrictype4"}],"status":0};
+                       pm.query.vmPmQuery.moTypeArray = res.content; */
+               }
+       }); 
+       }
+}
+
+function  getCounterArray(MoTypeId){
+       if(MoTypeId){
+               var url="/api/umcpm/v1/motypes/"+MoTypeId+"/counters";
+               var data={};
+               data.moTypeId=MoTypeId;
+               $.ajax({
+                       "type": 'get',
+                       "url": url,
+                       "dataType": "json",
+                       data:data,
+                        "async": false,
+                       "success": function (resp) {
+                               //pm.query.vmPmQuery.counterArray= resp.content;
+                               pm.query.vmPmQuery.counterArray= resp;
+                               //默认全选
+                               pm.query.vmPmQuery.selectedCounter = [];
+                               for(var i=0;i<resp.length;i++){
+                                       pm.query.vmPmQuery.selectedCounter.push(resp[i].id);
+                               }
+                       },
+                       "error":function(resp){
+                               pm.query.vmPmQuery.counterArray=[]; 
+                               //for test
+                               /* var res = {"message":null,"content":[{"dataType":null,"name":"总用户数","id":"ns.cn.epc.businesskpi.totalUsers"},{"dataType":null,"name":"总用户数","id":"ns.cn.ims.businesskpi.totalUsers"},{"dataType":null,"name":"平均CPU使用率%","id":"vnf.runtimeInfo.averageCpuUsage"},{"dataType":null,"name":"平均内存使用率%","id":"vnf.runtimeInfo.averageMemoryUsage"},{"dataType":null,"name":"总用户数","id":"vnf.cn.cscf.businesskpi.totalUsers"}],"status":0};
+                               pm.query.vmPmQuery.counterArray = res.content; */
+                       }
+               }); 
+       }
+}
+
+function getIdFromName(name,array){
+   for(var i=0;i<array.length;i++){
+         if(array[i].name==name){
+                return array[i].id;
+         }
+   }
+}
+function getNameFromId(id,array){
+   for(var i=0;i<array.length;i++){
+         if(array[i].id==id){
+                return array[i].name;
+         }
+   }
+}
+function getObjFromId(id,array){
+   for(var i=0;i<array.length;i++){
+         if(array[i].id==id){
+                return array[i];
+         }
+   }
+   return "";
+}
+function getObjFromName(name,array){
+   for(var i=0;i<array.length;i++){
+         if(array[i].name==name){
+                return array[i];
+         }
+   }
+}
+
+/* function allCheckbox(obj) {
+       var isChecked = obj.checked;
+       var tableId = $(obj).parents(".table").attr("id");
+       $('td.checkBoxInFirstCol', $("#" + tableId)).each(function() {
+               var temp = $(this).children('input');
+               temp[0].checked = isChecked;
+       });
+} */
+
+
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/js/pmUtil.js b/openo-portal/portal-performance/src/main/webapp/performance/js/pmUtil.js
new file mode 100644 (file)
index 0000000..2e993fe
--- /dev/null
@@ -0,0 +1,473 @@
+/*
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var pmUtil = {};
+function html_encode(str) {
+    vars = "";
+    if (str.length == 0)return "";
+    s = str.replace(/&/g, "&amp;");  //1
+    s = s.replace(/</g, "&lt;");
+    s = s.replace(/>/g, "&gt;");
+    s = s.replace(/ /g, "&nbsp;");
+    s = s.replace(/\'/g, "&#39;");
+    s = s.replace(/\"/g, "&quot;");
+    s = s.replace(/\n/g, "<br>");
+    return s;
+};
+pmUtil.indexOperate = function (obj) {
+    
+       var aIndex={};
+       aIndex.id=obj.aData.id;
+       aIndex.name=obj.aData.indexName;
+       aIndex.dataType=obj.aData.indexDataType;
+       aIndex.indexDes=obj.aData.indexDes;
+       aIndex.strExpression=obj.aData.strExpression;
+       aIndex.resourceType=obj.aData.resourceType;
+       aIndex.moType=obj.aData.moType;
+       var index = html_encode(JSON.stringify(aIndex));
+    var indexId = obj.aData.id;
+    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') +
+       "</a></span><span><a href='#' class=\"btn-xs grey btn-editable\" onclick=\"pmUtil.deleteIndex('" +
+       indexId + "','"+obj.aData.moType.id+"')\"><i class=\"ict-delete\"></i>" + $.i18n.prop('com_zte_ums_ict_pm_action_delete') + "</a></span></div>";        
+
+    return innerHtml;
+};
+pmUtil.dataTypeRender = function (obj) {
+    var record = obj.aData;
+       obj.aData.indexDataType=obj.aData.dataType;
+    var innerHtml = "<span>"+$.i18n.prop(record.dataType)+"</span>"
+    return innerHtml;
+};
+pmUtil.indexNameLink = function (obj) {
+       var index = html_encode(JSON.stringify(obj.aData));
+       obj.aData.indexName=obj.aData.name;
+       return "<a  id='indexName' href='#' onclick=\"pmUtil.queryIndex('"+index+"')\">" + obj.aData.name + "</a>";
+};
+pmUtil.queryIndex=function(index){
+    
+       newIndexWizard(commonUtil.strToJson(index),"query");
+          pm.index.vm.title="查看指标";
+          $(".form-group").attr("disabled",true);
+          pm.index.vm.viewVisible=false;
+          pm.index.vm.rtnVisible=true;
+       pm.index.vm.indexVisible=true;
+};
+pmUtil.addIndex=function(){
+    
+       newIndexWizard();
+          pm.index.vm.title="新建指标";
+          pm.index.vm.viewVisible=false;
+       pm.index.vm. indexVisible=true;
+};
+pmUtil.modifyIndex=function(index){
+    
+       newIndexWizard(commonUtil.strToJson(index));
+          pm.index.vm.title="修改指标";
+          pm.index.vm.viewVisible=false;
+       pm.index.vm.indexVisible=true;
+};
+pmUtil.deleteIndex=function(indexId,moTypeId){
+        bootbox.confirm($.i18n.prop('com_zte_ums_ict_sm_confirmToDeleteIndex'), function (result) { 
+               if (result) {
+                   var ids=[];
+                       var del={};
+                       ids.push(indexId);
+                       del.ids=ids;
+                       $.ajax({                        
+                       "dataType": 'json',
+                       "type": "DELETE",
+                       "url": "/api/umcpm/v1/motype/"+moTypeId+"/indexes",
+                       "data" : JSON.stringify(del),
+                       "contentType": 'application/json; charset=utf-8',
+                       "success": function (res, textStatus, jqXHR) {
+                               window.location.href="./indexView.html";
+                       },
+                       "error": function () {
+                       }
+               });
+               }
+       });
+}
+
+pmUtil.idLink = function (obj) {
+       var record = obj.aData;
+    var thresholdId = new String(record.id);
+       return "<a href='#' onclick=\"pm.threshold.vm.queryThreshold('" + thresholdId + "')\">" + thresholdId + "</a>";
+}
+
+pmUtil.congfirmDel = function (obj) {
+       bootbox.confirm($.i18n.prop('com_zte_ums_ict_sm_confirmToDeleteThreshold'), function (result) { 
+               if (result) {
+                       pm.threshold.vm.deleteThreshold(obj);
+               }
+       });
+}
+
+pmUtil.allOperate = function (obj) {
+       
+    var record = obj.aData;
+    var thresholdId = record.id;
+       //此时的id字段已经被渲染成html片段,如<a href="#" onclick="pm.threshold.vm.queryThreshold('10001')">10001</a>需要提取id
+       thresholdId = thresholdId.substring(thresholdId.indexOf("('") + 2, thresholdId.indexOf("')"));
+       
+    var innerHtml = "";
+       
+       innerHtml = "<div class='table-btn'><span class='modify_user'><a class=\"btn-xs grey btn-editable\" href='#' onclick=\"pm.threshold.vm.modifyThreshold('" +
+       thresholdId + "')\"><i class=\"ict-modify\"></i>" + $.i18n.prop('com_zte_ums_ict_pm_action_modify') +
+       "</a></span><span><a href='#' class=\"btn-xs grey btn-editable\" onclick=\"pmUtil.congfirmDel('" +
+       thresholdId + "')\"><i class=\"ict-delete\"></i>" + $.i18n.prop('com_zte_ums_ict_pm_action_delete') + "</a></span></div>";      
+
+    return innerHtml;
+}
+
+//获取QueryId
+pmUtil.getUrlParam=function(name){
+               var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
+               var search =decodeURIComponent(location.search.substring(1)); //decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。
+               var r =search.match(reg);  //匹配目标参数
+               if (r != null) return unescape(r[2]); //unescape() 函数可对通过 escape() 编码的字符串进行解码。
+               return null; //返回参数值
+}
+
+
+pmUtil.addMeatask = function() {
+    newMeataskWizard();
+    pm.meatask.vm.pageTitle="新建任务";
+    pm.meatask.vm.viewVisible=false;
+    pm.meatask.vm.createMeataskVisible=true;
+    pm.meatask.vm.queryMeataskVisible=false;
+}
+
+pmUtil.meataskOperate = function (obj) {
+    var record = obj.aData;
+    var meataskId = record.id;
+       //此时的id字段已经被渲染成html片段,如<a href="#" onclick="pm.threshold.vm.queryThreshold('10001')">10001</a>需要提取id
+       meataskId = meataskId.substring(meataskId.indexOf("('") + 2, meataskId.indexOf("')"));
+       
+    var innerHtml = "";
+       
+       innerHtml = 
+       [
+               "<div class=\"table-btn\">",
+                       "<span class=\"modify_user\">",
+                               "<a class=\"btn-xs grey btn-editable\" href=\"#\" onclick=\"pmUtil.queryMeatask('" + meataskId +
+                                       "')\"><i class=\"ict-Magnifier\"></i>",
+                                       $.i18n.prop('com_zte_ums_ict_pm_action_query'),
+                               "</a>",
+                       "</span>",
+                       "<span class=\"modify_user\">",
+                               "<a class=\"btn-xs grey btn-editable\" href=\"#\" onclick=\"pmUtil.modifyMeatask('" + meataskId + "'," + obj.iDataRow +
+                                       ")\"><i class=\"ict-modify\"></i>",
+                                       $.i18n.prop('com_zte_ums_ict_pm_action_modify'),
+                               "</a>",
+                       "</span>",
+                       "<span>",
+                               "<a href=\"#\" class=\"btn-xs grey btn-editable\" onclick=\"pmUtil.deleteMeatask('" + meataskId + "'," + obj.iDataRow +
+                                       ")\"><i class=\"ict-delete\"></i>",
+                                       $.i18n.prop('com_zte_ums_ict_pm_action_delete'),
+                               "</a>",
+                       "</span>",
+               "</div>"
+       ].join("\n");
+    return innerHtml;
+}
+
+pmUtil.getActiveStatus = function(obj) {
+       var meataskId = obj.aData.id;
+       meataskId = meataskId.substring(meataskId.indexOf("('") + 2, meataskId.indexOf("')"));
+       var activeStatus = obj.aData.activeStatus;
+
+       var prefixStr = "";             
+       var suffixStr = "";     
+       if(activeStatus == 0){
+           prefixStr = "<a  href='#' class=\"label label-sm label-danger\" onclick=\"pm.meatask.vm.changeActiveStatus('"; 
+           suffixStr = ")\">暂停</a>";
+       }else{
+           prefixStr = "<a href='#' class=\"label label-sm label-info\" onclick = \"pm.meatask.vm.changeActiveStatus('";
+           suffixStr = ")\">激活</a>";
+       }
+
+       var innerHtml = prefixStr + meataskId + "'," + activeStatus + "," + obj.iDataRow + suffixStr;
+
+       return innerHtml;
+}
+
+pmUtil.granularityRender = function(obj) {
+       var data = obj.aData;
+       switch(data.granularity){
+               case (300): 
+                       return "5分钟";
+               case (900): 
+                       return "15分钟";
+               case (3600): 
+                       return "1小时";
+       }
+       return "5分钟";
+}
+
+pmUtil.queryMeatask = function(meataskId) {
+       queryMeataskWizard("queryID");
+       pm.meatask.vm.pageTitle="查询任务";
+    pm.meatask.vm.viewVisible=false;
+    pm.meatask.vm.createMeataskVisible=false;
+    pm.meatask.vm.queryMeataskVisible=true;
+       
+       $("#queryMeataskSubmit").click(function() {
+        pm.meatask.vm.$showResultTable();
+    });
+}
+
+pmUtil.meataskIdLink = function(obj) {
+       var meatskId = obj.aData.id;
+       return "<a href='#' onclick=\"pmUtil.viewMeataskById('" + meatskId + "')\">" + meatskId + "</a>";
+}
+
+pmUtil.viewMeataskById = function(meatskId) {
+       newMeataskWizard(meatskId);
+    pm.meatask.vm.pageTitle="查看任务";
+    pm.meatask.vm.viewVisible=false;
+    pm.meatask.vm.createMeataskVisible=true;
+    pm.meatask.vm.queryMeataskVisible=false;
+}
+
+pmUtil.timeRender = function( obj ){
+    var time=obj.aData[obj.mDataProp];
+       if(time!="0"){
+    var date = new Date(obj.aData[obj.mDataProp]);
+    return commonUtil.parseDate(date , 'yyyy-MM-dd hh:mm:ss');
+       }
+};
+
+pmUtil.deleteMeatask=function(meataskId, row){
+       bootbox.confirm("确认删除此任务吗?", function (result) { 
+               if (result) {
+                       $("#ict_meatask_table_div tr:eq("+(row+1)+")").attr('style', 'display:none;');
+               }
+       });
+}
+
+pmUtil.modifyMeatask = function(meataskId, row) {
+       modifyMeataskWizard("modifyID");
+    pm.meatask.vm.pageTitle="修改任务";
+    pm.meatask.vm.viewVisible=false;
+    pm.meatask.vm.createMeataskVisible=true;
+    pm.meatask.vm.queryMeataskVisible=false;
+}
+
+pmUtil.randomCPU = function() {
+       var percent = Math.random()*100;
+       percent = Math.round(percent);
+       return percent + "%";
+}
+
+pmUtil.calculateTime = function(obj) {
+       var data = obj.aData;
+       var time = data.beginTime + data.granularity;
+
+       if(time!="0"){
+       var date = new Date(data.granularity * 1000 + obj.aData[obj.mDataProp]);
+       return commonUtil.parseDate(date , 'yyyy-MM-dd hh:mm:ss');
+       }
+}
+
+pmUtil.queryMeatask = function(meataskId) {
+       pm.meatask.vm.pageTitle="查询任务";
+    pm.meatask.vm.viewVisible=false;
+    pm.meatask.vm.createMeataskVisible=false;
+    pm.meatask.vm.queryMeataskVisible=true;
+}
+
+pmUtil.setDateRange = function (dataRangeId, vm) {
+
+       var open = 'right';
+
+       //var month = $.i18n.prop('ngict-iui-dateRange-month');
+
+       var optionSet1 = {
+
+               //startDate: moment().subtract(179, 'days'),
+
+               //endDate: moment(),
+
+               startDate : "2015-12-31",
+
+               endDate : "2016-12-31",
+
+               //format: 'YYYY-MM-DD',
+               format : 'YYYY-MM-DD h:mm A',
+
+               dateLimit : {
+                       days : 180
+               },
+
+               showWeekNumbers : false,
+
+               timePicker : true,
+               timePickerIncrement : 5,
+
+               opens : open,
+
+               separator : ' - ',
+
+               locale : {
+
+                       applyLabel : $.i18n.prop('ngict-iui-dateRange-applyLabel'),
+
+                       cancelLabel : $.i18n.prop('ngict-iui-dateRange-cancelLabel'),
+
+                       fromLabel : $.i18n.prop('ngict-iui-dateRange-fromLabel'),
+
+                       toLabel : $.i18n.prop('ngict-iui-dateRange-toLabel'),
+
+                       customRangeLabel : $.i18n.prop('ngict-iui-dateRange-customRangeLabel'),
+
+                       daysOfWeek : [
+
+                               $.i18n.prop('ngict-iui-dateRange-Sunday'),
+
+                               $.i18n.prop('ngict-iui-dateRange-Monday'),
+
+                               $.i18n.prop('ngict-iui-dateRange-Tuesday'),
+
+                               $.i18n.prop('ngict-iui-dateRange-Wednesday'),
+
+                               $.i18n.prop('ngict-iui-dateRange-Thursday'),
+
+                               $.i18n.prop('ngict-iui-dateRange-Friday'),
+
+                               $.i18n.prop('ngict-iui-dateRange-Saturday')],
+
+                       //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],
+                       
+                       //months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+                       
+                       monthNames: [$.i18n.prop('ngict-iui-dateRange-Jan'),
+                                                $.i18n.prop('ngict-iui-dateRange-Feb'),
+                                                $.i18n.prop('ngict-iui-dateRange-Mar'),
+                                                $.i18n.prop('ngict-iui-dateRange-Apr'),
+                                                $.i18n.prop('ngict-iui-dateRange-May'),
+                                                $.i18n.prop('ngict-iui-dateRange-Jun'),
+                                                $.i18n.prop('ngict-iui-dateRange-Jul'),
+                                                $.i18n.prop('ngict-iui-dateRange-Aug'),
+                                                $.i18n.prop('ngict-iui-dateRange-Sep'),
+                                                $.i18n.prop('ngict-iui-dateRange-Oct'),
+                                                $.i18n.prop('ngict-iui-dateRange-Nov'),
+                                                $.i18n.prop('ngict-iui-dateRange-Dec')],
+
+                       firstDay : 1
+
+               }
+
+       };
+
+       //datarangepicker确认
+       $('input[id="' + dataRangeId + '"]').bind('apply.daterangepicker', function () {
+
+               //获取时间范围,查询
+
+               // 都设置为0点
+
+               pmUtil.setTime($(this));
+
+               // 更新tooltip内容
+               //$(this).attr("data-original-title", $(this).val());
+
+       });
+
+       $('input[id="' + dataRangeId + '"]').daterangepicker(optionSet1);
+
+};
+
+//daterangepicker设置时间
+pmUtil.setTime = function setTime($obj) {
+
+       //var title = $obj.attr('dtitle');
+
+       var arr = $obj.val().split(' - ');
+
+       //排除日历组件空字符串的情况。
+
+       if (arr[0] != '') {
+
+               var beginTime = new Date(arr[0].replace(/-/g, "/")).getTime();
+
+               var endTime = new Date(arr[1].replace(/-/g, "/")).getTime();
+               
+               pm.query.vmPmQuery.beginTime = beginTime;
+
+               pm.query.vmPmQuery.endTime = endTime;           
+
+       }
+
+}
+
+pmUtil.formatTime = function formatTime(ms) {
+       var date = new Date(ms);
+       return date.format("yyyy-MM-dd hh:mm:ss");
+}
+
+/*格式化日期*/
+
+Date.prototype.format = function (format) {
+
+       /*
+
+        * format="yyyy-MM-dd hh:mm:ss";
+
+        */
+
+       var o = {
+
+               "M+" : this.getMonth() + 1,
+
+               "d+" : this.getDate(),
+
+               "h+" : this.getHours(),
+
+               "m+" : this.getMinutes(),
+
+               "s+" : this.getSeconds(),
+
+               "q+" : Math.floor((this.getMonth() + 3) / 3),
+
+               "S" : this.getMilliseconds()
+
+       }
+
+       if (/(y+)/.test(format)) {
+
+               format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4
+
+                                        - RegExp.$1.length));
+
+       }
+
+       for (var k in o) {
+
+               if (new RegExp("(" + k + ")").test(format)) {
+
+                       format = format.replace(RegExp.$1, RegExp.$1.length == 1
+
+                                        ? o[k]
+
+                                        : ("00" + o[k]).substr(("" + o[k]).length));
+
+               }
+
+       }
+
+       return format;
+
+}
\ No newline at end of file
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/js/serverPageTable.js b/openo-portal/portal-performance/src/main/webapp/performance/js/serverPageTable.js
new file mode 100644 (file)
index 0000000..a67c50e
--- /dev/null
@@ -0,0 +1,232 @@
+/*
+ * Copyright 2016, CMCC Technologies Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var serverPageTable = {};
+/* Bootstrap style full number pagination control */
+$.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings )
+{
+    return {
+        "iStart":         oSettings._iDisplayStart,
+        "iEnd":           oSettings.fnDisplayEnd(),
+        "iLength":        oSettings._iDisplayLength,
+        "iTotal":         oSettings.fnRecordsTotal(),
+        "iFilteredTotal": oSettings.fnRecordsDisplay(),
+        "iPage":          Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ),
+        "iTotalPages":    Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength )
+    };
+};
+
+$.extend( $.fn.dataTableExt.oPagination, {
+    "bootstrap_extended": {
+        "fnInit": function( oSettings, nPaging, fnDraw ) {
+            var oLang = oSettings.oLanguage.oPaginate;
+            var oPaging = oSettings.oInstance.fnPagingInfo();
+
+            var fnClickHandler = function ( e ) {
+                e.preventDefault();
+                if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) {
+                    fnDraw( oSettings );
+                }
+            };
+
+            $(nPaging).append(
+                '<div class="pagination-panel"> ' + oLang.sPage + ' ' +
+                '<a href="#" class="btn btn-sm default prev disabled" title="' + oLang.sPrevious + '"><i class="fa fa-angle-left"></i></a>' +
+                '<input type="text" class="pagination-panel-input input-mini input-inline input-sm" maxlenght="5" style="text-align:center; margin: 0 4px; border: 1px solid rgb(169, 169, 169);height: 28px;">' +
+                '<a href="#" class="btn btn-sm default next disabled" title="' + oLang.sNext + '"><i class="fa fa-angle-right"></i></a> ' +
+                oLang.sPageOf + ' <span class="pagination-panel-total"></span>' +
+                '</div>'
+            );
+
+            var els = $('a', nPaging);
+
+            $(els[0]).bind('click.DT', { action: "previous" }, fnClickHandler );
+            $(els[1]).bind('click.DT', { action: "next" }, fnClickHandler);
+
+            $('.pagination-panel-input', nPaging).bind('change.DT', function(e) {
+                var oPaging = oSettings.oInstance.fnPagingInfo();
+                e.preventDefault();
+                var page = parseInt($(this).val());
+                if (page > 0 && page < oPaging.iTotalPages) {
+                    if ( oSettings.oApi._fnPageChange(oSettings, page-1) ) {
+                        fnDraw( oSettings );
+                    }
+                } else {
+                    $(this).val(oPaging.iPage + 1);
+                }
+            });
+
+            $('.pagination-panel-input', nPaging).bind('keypress.DT', function(e) {
+                var oPaging = oSettings.oInstance.fnPagingInfo();
+                if (e.which == 13) {
+                    var page = parseInt($(this).val());
+                    if (page > 0 && page < oSettings.oInstance.fnPagingInfo().iTotalPages) {
+                        if ( oSettings.oApi._fnPageChange(oSettings, page-1) ) {
+                            fnDraw( oSettings );
+                        }
+                    } else {
+                        $(this).val(oPaging.iPage + 1);
+                    }
+                    e.preventDefault();
+                }
+            });
+        },
+
+        "fnUpdate": function ( oSettings, fnDraw ) {
+            var iListLength = 5;
+            var oPaging = oSettings.oInstance.fnPagingInfo();
+            var an = oSettings.aanFeatures.p;
+            var i, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2);
+
+            if ( oPaging.iTotalPages < iListLength) {
+                iStart = 1;
+                iEnd = oPaging.iTotalPages;
+            }
+            else if ( oPaging.iPage <= iHalf ) {
+                iStart = 1;
+                iEnd = iListLength;
+            } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) {
+                iStart = oPaging.iTotalPages - iListLength + 1;
+                iEnd = oPaging.iTotalPages;
+            } else {
+                iStart = oPaging.iPage - iHalf + 1;
+                iEnd = iStart + iListLength - 1;
+            }
+
+
+            for ( i=0, iLen=an.length ; i<iLen ; i++ ) {
+                var wrapper = $(an[i]).parents(".dataTables_wrapper");
+
+                if (oPaging.iTotalPages <= 0) {
+                    $('.pagination-panel, .dataTables_length', wrapper).hide();
+                } else {
+                    $('.pagination-panel, .dataTables_length', wrapper).show();
+                }
+
+                $('.pagination-panel-total', an[i]).html(oPaging.iTotalPages);
+                $('.pagination-panel-input', an[i]).val(oPaging.iPage + 1);
+
+                // Remove the middle elements
+                $('li:gt(1)', an[i]).filter(':not(.next)').remove();
+
+                // Add the new list items and their event handlers
+                for ( j=iStart ; j<=iEnd ; j++ ) {
+                    sClass = (j==oPaging.iPage+1) ? 'class="active"' : '';
+                    $('<li '+sClass+'><a href="#">'+j+'</a></li>')
+                        .insertBefore( $('li.next:first', an[i])[0] )
+                        .bind('click', function (e) {
+                            e.preventDefault();
+                            oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
+                            fnDraw( oSettings );
+                        } );
+                }
+
+                // Add / remove disabled classes from the static elements
+                if ( oPaging.iPage === 0 ) {
+                    $('a.prev', an[i]).addClass('disabled');
+                } else {
+                    $('a.prev', an[i]).removeClass('disabled');
+                }
+
+                if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
+                    $('a.next', an[i]).addClass('disabled');
+                } else {
+                    $('a.next', an[i]).removeClass('disabled');
+                }
+            }
+        }
+    }
+} );
+serverPageTable.initDataTable = function( setting , divId ,pageInfos) {
+    serverPageTable.pageInfo = pageInfos;
+    //转换colomn
+
+    var column = setting.columns;
+    //先把原来的表格清空
+    $('#'+ divId).children().remove();
+    var tableId = setting.tableId;
+    var tableEleStr = '<table class="table table-striped table-bordered table-hover" id= '+ tableId + '>'
+        + '<thead>'
+        +'<tr role="row" class="heading" >'
+        + '</tr>'
+        + '</thead>'
+        +'<tbody>'
+        +'</tbody>'
+        +'</table>';
+    $('#'+ divId).append(tableEleStr);
+    //$('#'+ tableId).append(' <thead><tr role="row" class="heading" ></tr></thead><tbody></tbody>');
+    var trEle = $('#'+ tableId  + ' > thead >tr');
+    //var dataTableColumn = [];
+    for ( var one in column){
+        var th = '<th>' + column[one].name + '</th>';
+        trEle.append(th);
+    }
+        serverPageTable.pageInfo = pageInfos;
+       if(!setting.pageHtml){
+          pageHtml="<'row'<'col-md-12 col-sm-12'lip>r><'table-scrollable't>>";
+       }else{
+         pageHtml=setting.pageHtml;
+       }
+    var table = $("#" + tableId).dataTable({
+        //"sDom" : "tr<'row'<'col-md-6 col-sm-12'><'col-md-6 col-sm-12'pli>>", // datatable layout
+        "sDom" : pageHtml,
+        "oLanguage": setting.language,//汉化
+        "bJQueryUI": true,
+        "bPaginate": true,// 分页按钮
+        "bFilter": false,// 搜索栏
+        "bAutoWidth":true,//自动设置列宽
+        "bLengthChange": true,// 每行显示记录数
+        "iDisplayLength": 10,// 每页显示行数
+        "bSort": false,// 排序
+        "bInfo": true,// Showing 1 to 10 of 23 entries 总记录数没也显示多少等信息
+        "bWidth": true,
+        "bScrollCollapse": true,
+        "sPaginationType": "bootstrap_extended", // 分页,一共两种样式 另一种为two_button // 是datatables默认
+        "bProcessing": true,
+        "bServerSide": true,
+        "bDestroy": true,
+        "bSortCellsTop": true,
+        "sAjaxSource": setting.restUrl,
+        "aoColumns": setting.columns,
+        "fnServerData": function (sSource, aoData, fnCallback, oSettings) {
+           fnServerData(sSource, aoData, fnCallback, oSettings);
+        }
+    });
+    $('#'+ tableId + '>tbody').on('click', 'td.details-control', function () {
+        var tr = $(this).closest('tr');
+        //var nTr = $(this).parents('tr')[0];
+        //var row = table.row( tr );
+        if ( table.fnIsOpen(tr[0]) ){
+            table.fnClose( tr[0] );
+        //if ( row.child.isShown() ) {
+            // This row is already open - close it
+            //row.child.hide();
+            tr.removeClass('shown');
+        }
+        else {
+            // Open this row
+            table.fnOpen( tr[0], format_Detail(table, tr[0],column) );
+            //row.child( format_Detail(row.data()) ).show();
+            tr.addClass('shown');
+        }
+    } );
+    return table; 
+
+
+};
+
+
+
+
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/performance_query_rule.html b/openo-portal/portal-performance/src/main/webapp/performance/performance_query_rule.html
new file mode 100644 (file)
index 0000000..2020c73
--- /dev/null
@@ -0,0 +1,156 @@
+<!--
+    Copyright 2016, CMCC Technologies Co., Ltd.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+            http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<div class="container-fluid" id="meatask_queryRule_body" style="height:650px;background-color:#FFF;overflow-x:hidden;overflow-y:auto">
+       <form action="#" class="form-horizontal" id="meatask_queryRule_submit">
+               <div>
+                       <div>
+                               <div>
+                                       <div class="form-title">
+                                               <span id="com_zte_ums_ict_pm_query_time" name_i18n="openo_performance_i18n"></span>
+                                       </div>
+                                       <div class="row">
+                                               <div class="form-group" id="">
+                                                       <label class="control-label col-xs-3">
+                                                               <span id="com_zte_ums_ict_pm_query_time" name_i18n="openo_performance_i18n"></span>
+                                                       </label>
+                                                       <div id="taskTimeDiv" class="col-xs-4">
+                                                               <input id="queryTimeRange"></input>
+                                                       </div>
+                                               </div>
+                                               <div class="form-group col-xs-12" id="">
+                                                       <label class="control-label col-xs-3">
+                                                               <span id="com_zte_ums_ict_pm_query_granularity" name_i18n="openo_performance_i18n"></span>
+                                                       </label>
+                                                       <div class="btn-group circleBtn col-xs-4">
+                                                               <div class="btn btnWhite circleBtn" ms-attr-id="el.id" ms-repeat-el="granularities" ms-class-blueActive="el.value" ms-click="granularityClicked(el ,this)">{{el.name}}</div>
+                                                       </div>
+                                               </div>
+                                       </div>
+                               </div>
+                               <div class="form-title">
+                                       <span id="com_zte_ums_ict_pm_query_resource_type" name_i18n="openo_performance_i18n"></span>
+                               </div>
+                               <div class="row">
+                                       <div class="form-group" id="">
+                                               <label class="control-label col-xs-3">
+                                                       <span id="com_zte_ums_ict_pm_query_resource_type" name_i18n="openo_performance_i18n"></span>
+                                               </label>
+                                               <div class="col-xs-4">
+                                                       <select id="resourceTypes" ms-duplex-String="selectedResourceType" class="selector-class" ms-change="resTypeSelectAction()">
+                                                               <option ms-repeat-el="resTypeArray">{{el.name}}</option>
+                                                       </select>
+                                               </div>
+                                       </div>
+                               </div>
+                               <div class="row">
+                                       <div class="form-group">
+                                               <label class="control-label col-xs-3">
+                                                       <span id="com_zte_ums_ict_pm_query_moType" name_i18n="openo_performance_i18n"></span>
+                                               </label>
+                                               <div class="col-xs-4">
+                                                       <select id="moTypes" ms-duplex-String="selectedMoType" class="selector-class" ms-change="moTypeSelectAction()">
+                                                               <option ms-repeat-el="moTypeArray">{{el.name}}</option>
+                                                       </select>
+                                               </div>
+                                       </div>
+                               </div>
+                               <div class="row">
+                                       <div class="form-group">
+                                               <label class="control-label col-xs-3"><span id="com_zte_ums_ict_pm_query_index" name_i18n="openo_performance_i18n"></span></label>
+                                               <div class="col-xs-6">
+                                                       <table class="table table-striped table-bordered table-hover" cellpadding="0" cellspacing="0" border="0" id="indexes">
+                                                               <thead>
+                                                                       <th role="row" width="3%" class="heading"><input type="checkbox" class="indexesAll"/></th>
+                                                                       <th role="row" class="heading"><span id="com_zte_ums_ict_pm_query_index" name_i18n="openo_performance_i18n"></span></th>
+                                                               </thead>
+                                                               <tbody>
+                                                                       <tr ms-repeat-elem="counterArray">
+                                                                               <td class="checkBoxInFirstCol">
+                                                                                       <input ms-duplex-string="selectedCounter" type="checkbox" ms-attr-value="elem.id"/>
+                                                                               </td>
+                                                                               <td>{{elem.name}}</td>
+                                                                       <tr>
+                                                               </tbody>
+                                                       </table>
+                                               </div>
+                                       </div>
+                               </div>
+                               <div class="form-title">
+                                       <span id="com_zte_ums_ict_pm_query_target_resource" name_i18n="openo_performance_i18n"></span>
+                               </div>
+                               <div class="row">
+                                       <div class="form-group">
+                                               <label class="control-label col-xs-3"><span id="com_zte_ums_ict_pm_query_resource" name_i18n="openo_performance_i18n"></span></label>
+                                               <div class="col-xs-6 resourceList">
+                                                       <table class="table table-striped table-bordered table-hover" cellpadding="0" cellspacing="0" border="0">
+                                                               <thead>
+                                                                       <th role="row" class="heading"><span id="com_zte_ums_ict_pm_query_selected_resource" name_i18n="openo_performance_i18n"></span></th>
+                                                               </thead>
+                                                               <tbody>
+                                                                       <tr>
+                                                                               <td class="row">
+                                                                                       <div class="col-xs-6 col-sm-4 col-md-4 col-lg-4" ms-repeat-elem="resourceSlectedObjs" data-repeat-rendered="clickSelectedCommonCond">
+                                                                                               <div class="deleteIcon ict-close" ms-click="rmSelectedResource(elem ,this)"></div>
+                                                                                               <div class="resourceObj">{{elem.name}}</div>
+                                                                                       </div>
+                                                                               </td>
+                                                                       </tr>
+                                                               </tbody>
+                                                       </table>
+                                               </div>
+                                       </div>
+                               </div>
+                               <div class="row">
+                                       <div class="form-group col-xs-12 filterDiv">
+                                               <div class="col-xs-offset-3 col-xs-6">
+                                                       <input id="resourcesToFilter" name="resourcesToFilter" placeholder="" name_i18n="openo_performance_i18n"/>
+                                               </div>
+                                       </div>
+                               </div>
+                               <div class="row">
+                                       <div class="form-group">
+                                               <div class="col-xs-offset-3 col-xs-6">
+                                                       <table class="table table-striped table-bordered table-hover" cellpadding="0" cellspacing="0" border="0" id="resources">
+                                                               <thead>
+                                                                       <th role="row" width="3%" class="heading"><input type="checkbox" class="resourceAll"/></th>
+                                                                       <th role="row" class="heading"><span id="com_zte_ums_ict_pm_threshold_resource_name" name_i18n="openo_performance_i18n"></span></th>
+                                                               </thead>
+                                                               <tbody>
+                                                                       <tr ms-repeat-elem="resources">
+                                                                               <td><input ms-duplex-string="resourceSlected" type="checkbox" ms-attr-value="elem.id" ms-attr-taskId="elem.id"/></td>
+                                                                               <td>{{elem.name}}</td>
+                                                                       <tr>
+                                                               </tbody>
+                                                       </table>
+                                               </div>
+                                       </div>
+                               </div>
+                               <div class="row">
+                                       <div class="form-group " id="">
+                                               <div class=" col-xs-offset-3 col-xs-4 form-actions btnGroup">
+                                                       <a id="submit_in_queryRuleChanged" href="javascript:;" class="btn blue1 radius_l button-submit" ms-click="queryRuleChanged()">
+                                                               <span id="com_zte_ums_ict_pm_action_query" name_i18n="openo_performance_i18n"></span>
+                                                       </a>
+                                                       <a href="javascript:;" ms-click="returnQueryPage()">
+                                                               <span id="com_zte_ums_ict_pm_back" name_i18n="openo_performance_i18n"></span>
+                                                       </a>
+                                               </div>
+                                       </div>
+                               </div>
+                       </div>
+               </div>
+       </form>
+</div>
diff --git a/openo-portal/portal-performance/src/main/webapp/performance/performance_view.html b/openo-portal/portal-performance/src/main/webapp/performance/performance_view.html
new file mode 100644 (file)
index 0000000..4b192c2
--- /dev/null
@@ -0,0 +1,125 @@
+<!--
+    Copyright 2016, CMCC Technologies Co., Ltd.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+            http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<!DOCTYPE html>
+<html>
+       <head>
+               <meta charset="UTF-8">
+               <link href="../common/thirdparty/font-awesome/css/font-awesome.min.css" rel="stylesheet" id="font_awesome"/>
+               <link href="../common/thirdparty/bootstrap/css/bootstrap.min.css" rel="stylesheet"/>
+               <link href="../common/thirdparty/uniform/css/uniform.default.css" rel="stylesheet"/>
+               <link href="../common/thirdparty/zTree/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" type="text/css">
+               <link href="../common/thirdparty/bootstrap-daterangepicker/daterangepicker-bs3.css" rel="stylesheet">
+               <link href="../common/css/plugins.css" rel="stylesheet" type="text/css">
+               <link href="../common/css/ZteIctIcons/style.css" rel="stylesheet" type="text/css"/>
+               <link href="../common/css/ngict-component.css" rel="stylesheet" type="text/css">
+               <link href="css/pmQueryBox.css" rel="stylesheet" type="text/css">
+               <link href="css/performanceQuery.css" rel="stylesheet" type="text/css"/>
+               <link href="css/performanceChart.css" rel="stylesheet" type="text/css"/>
+       </head>
+       <body>
+               <div ms-controller="pmQueryController" class="ms-controller">
+                       <div class="row" ms-visible="boxVisible">
+                               <div class="row" style="margin-left: 15px;">
+                                       <div class="col-xs-6 col-md-6 col-sm-6 col-lg-6 titlefont">
+                                               <span id="com_zte_ums_ict_pm_query_data" name_i18n="openo_performance_i18n"></span>
+                                       </div>
+                               </div>
+                               <div class = "separator-line"></div>
+                               <div class="row ruleNav" style="margin-left: 50px;width: 93%;">
+                                       <div id="carousel-example-generic" class="carousel slide" data-ride="carousel" data-interval="false">
+                                               <div class="carousel-inner" role="listbox">
+                                                       <div class="item " ms-repeat-el="pmQueries">
+                                                               <div class="col-xs-12" style=" padding-right: 20px; padding-top: 10px;">
+                                                                       <div class="col-xs-3 col-sm-3 col-md-3 col-lg-3 boxPadding" ms-repeat-elem="el.array" data-repeat-rendered="clickSelectedCommonCond" ms-click="queryTabClicked(elem ,this)">
+                                                                               <a href="#">
+                                                                                       <div class="box" ms-class="boxStyle{{$index % 4 + 1}}">
+                                                                                               <div class="subbox">
+                                                                                                       <div class="textImageStyle " ms-class="{{elem.textImage}}">
+                                                                                                               <span class="ict-cpu"></span>
+                                                                                                       </div>
+                                                                                                       <div class="set-title">{{elem.name}}</div>
+                                                                                                       <span class="ict-modify" ms-click="queryRuleView(event, elem)"></span>
+                                                                                               </div>
+                                                                                       </div>
+                                                                                       <div class="col-md-12 separator-line separator-line-visibilty" ms-class="boxStyle{{$index % 4 + 1}}"></div>
+                                                                               </a>
+                                                                       </div>
+                                                               </div>
+                                                       </div>
+                                               </div>
+                                               <a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
+                                                       <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
+                                                       <span class="sr-only">Previous</span>
+                                               </a>
+                                               <a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next" style="margin-right: -10px;">
+                                                       <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
+                                                       <span class="sr-only">Next</span>
+                                               </a>
+                                       </div>
+                               </div>
+                               <div class="row-fluid separator">
+                                       <div ms-visible="boxVisible" class="col-xs-12" style="margin-top: 10px;">
+                                               <a href="#" id="upArrow" ms-click="clickDisplayGraphAlink()"><img src="image/up.png"/></a>
+                                       </div>
+                               </div>
+                       </div>
+                       <div class="row-fluid separator">
+                               <div ms-visible="!boxVisible" class="col-xs-12">
+                                       <a href="#" ms-click="clickDisplayGraphAlink()"><img src="image/down.png"/></a>
+                               </div>
+                       </div>
+                       <div class="container-fluid">
+                               <div class="row" style=" margin-top: 15px;">
+                                       <div class="col-xs-6 col-md-6 col-sm-6 col-lg-6 titlefont">
+                                               <span id="tableTitleText">{{tableTitle}}</span>
+                                               <a href="#" ms-visible="tableIconVisable"><img id="tableImg" src="image/table_icon.png" ms-click="showPerformanceTable()"></a>
+                                               <a href="#" ms-visible="chartIconVisable"><img id="chartImg" src="image/chart_icon.png" ms-click="showPerformanceChart()"></a>
+                                       </div>
+                               </div>
+                               <div class = "separator-line"></div>
+                               <div class="row-fluid " data-name="table_zone">
+                                       <div ms-visible="pmChartVisable" id="chartCanvasDiv" style="width:1000px; height:600px;"></div>
+                                       <div ms-visible="pmDataVisable" id = 'ict_pm_data_div'></div>
+                                       <div ms-visible="queryRuleVisable" ms-include-src="'performance_query_rule.html'"></div>
+                               </div>
+                       </div>
+               </div>
+               <script src="../common/thirdparty/jquery/jquery-1.10.2.min.js"></script>
+               <script src="../common/thirdparty/jquery.i18n/jquery.i18n.properties-1.0.9.js"></script>
+               <script src="../common/js/international/loadi18n.js" type="text/javascript"></script>
+               <script src="../common/js/tools.js"></script>
+               <script>
+                       loadi18n_WebFramework('web-performance-i18n', 'i18n/', 'openo_performance_i18n');
+               </script>
+               <script src="../common/thirdparty/data-tables/jquery.dataTables.js"></script>
+               <script src="../common/thirdparty/bootbox/bootbox.min.js"type="text/javascript"></script>
+               <script src="../common/thirdparty/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
+               <script src="../common/thirdparty/jquery-validation/js/jquery.validate.js"></script>
+               <script src="../common/thirdparty/jquery-validation/js/additional-methods.min.js"></script>
+               <script src="../common/thirdparty/echarts/echarts-all.js" type="text/javascript"></script>
+               <script src="../common/thirdparty/bootstrap-daterangepicker/moment.js"></script>
+               <script src="../common/thirdparty/bootstrap-daterangepicker/daterangepicker.js"></script>
+               <script src="../common/thirdparty/avalon/avalon.js"></script>
+               <script src="../common/js/security/aes.js" type="text/javascript"></script>
+               <script src="../common/js/security/framework-util.js" type="text/javascript"></script>
+               <script src="../common/js/json2.js"></script>
+               <script src="js/serverPageTable.js"></script>
+               <script src="js/pmUtil.js"></script>
+               <script src="js/commonUtil.js"></script>
+               <script src="js/performanceQueryController.js"></script>
+               <script src="js/performanceChart.js"></script>
+       </body>
+</html>