浏览代码

OP task #619 | add SNMP

Avetisyan Karen 5 年之前
父节点
当前提交
399e1d8c73

二进制
web_interface/dist/wui-9/main.js


二进制
web_interface/dist/wui-9/role.js


二进制
web_interface/dist/wui-9/snmp.html


+ 3 - 0
web_interface/src/wui-9/main.js

@@ -416,6 +416,9 @@ function updatepage(){
   case 'settings':
     setTimeout(settingsGET, 1000);
     break;
+  case 'snmp':
+    createSNMP('snmp_list');
+    break;
   case 'history':
     getPage($('currentpage').value);
     break;

+ 151 - 3
web_interface/src/wui-9/role.js

@@ -36,7 +36,7 @@ function createMainNavigation() {
   var nav = [
     {name: 'Параметры', link: 'index.html', child:['/index.html', '/'], access: 2},
     {name: 'Настройки', link: 'settings.html', child: '/settings.html', access: 1},
-    // {name: 'Уведомления', link: 'snmp.html', access: 1},
+    {name: 'Уведомления', link: 'snmp.html', child: '/snmp.html', access: 1},
     {name: 'Информация', link: 'info.html', child: '/info.html', access: 2},
     {name: 'Журнал', link: 'history.html', child: ['/history.html', '/ups_history.html'], access: 2}
   ];
@@ -254,6 +254,154 @@ function getParam(e,x) {
   }
 }
 
+var snmpArray = [];
+function snmpPush(e){
+  var index = snmpArray.indexOf(e);
+  if (index !== -1) {
+    snmpArray.splice(index, 1);
+  } else {
+    snmpArray.push(e);
+  }
+  if (snmpArray.length > 0){
+    $('sa').style.height = 'auto';
+    $('sa').style.opacity = 1;
+    $('sa_length').textContent = snmpArray.length;
+  } else {
+    $('sa').style.height = 0;
+    $('sa').style.opacity = 0;
+  }
+  checkAllStates();
+}
+
+function rowsToSubmit(array){
+  var rows = [];
+  for (var i = 0; i < array.length; i++) {
+    var parent = $(array[i]).parentNode.parentNode;
+    array[i];
+    var index = rows.indexOf(parent.id);
+    if (index !== -1) {
+      rows[index] = parent.id;
+    } else {
+      rows.push(parent.id);
+    }
+  }
+  return rows;
+}
+
+function createSNMP(id){
+  getJSON('snmp.cgi', function(data) {
+    $(id).innerHTML = '';
+    for (var i = 0; i < data.params.length; i++) {
+      var param = data.params[i];
+      var param_row = document.createElement('tr');
+      param_row.id = param.name;
+      var param_name = document.createElement('td');
+      param_name.textContent = param.label;
+      param_row.appendChild(param_name);
+      for (var x = 0; x < 1; x++) {
+        var cb_td = document.createElement('td');
+        var cb_input = document.createElement('input');
+        cb_input.type = 'checkbox';
+        cb_input.checked = getParam(param,x);
+        cb_input.id = 'cb'+x+param.name;
+        cb_input.className = 'checkbox';
+        cb_input.setAttribute('onchange', 'snmpPush(this.id)');
+        cb_td.appendChild(cb_input);
+        param_row.appendChild(cb_td);
+      }
+      var param_snmp = document.createElement('td');
+      $(id).appendChild(param_row);
+    }
+    utcParam = data.utc;
+    // clockinit(data.utm);
+    checkAllStates();
+    setCookie('netsettings_changed', data.netsettings_changed);
+    setCookie('profilaction_changed', data.profilaction_changed);
+    setCookie('need_confirm', data.need_confirm);
+    checkNotify();
+  }, function(error){});
+}
+
+function snmpSaSubmit(){
+  var url = 'snmp.cgi?';
+  var string = '';
+  for (var i = 0; i < rowsToSubmit(snmpArray).length; i++) {
+    if(i == rowsToSubmit(snmpArray).length-1) {
+      string+= $(rowsToSubmit(snmpArray)[i]).id + '=' + arrayToBitMask(rowsToSubmit(snmpArray)[i]);
+    } else {
+      string+= $(rowsToSubmit(snmpArray)[i]).id + '=' + arrayToBitMask(rowsToSubmit(snmpArray)[i]) + '&';
+    }
+  }
+  if (string){
+    loadXMLDoc( url + string, 'GET', updatepage);
+  } else {
+    updatepage();
+  }
+  $('sa').style.height = 0;
+  $('sa').style.opacity = 0;
+  snmpArray = [];
+  return false;
+}
+
+function snmpChangeCancel(){
+  updatepage();
+  $('sa').style.height = 0;
+  $('sa').style.opacity = 0;
+  snmpArray = [];
+}
+
+function checkAll(e,id){
+  var rows = $('snmp_list').getElementsByTagName('tr');
+  if (!$(id).checked && $(id).indeterminate){
+    for (var i = 0; i < rows.length; i++) {
+      var input = rows[i].children[e].getElementsByTagName('input')[0];
+      input.checked = true;
+      snmpPush(input.id);
+    }
+  } else if (!$(id).checked && !$(id).indeterminate) {
+    for (var i = 0; i < rows.length; i++) {
+      var input = rows[i].children[e].getElementsByTagName('input')[0];
+      input.checked = false;
+      snmpPush(input.id);
+    }
+  } else if ($(id).checked) {
+    for (var i = 0; i < rows.length; i++) {
+      var input = rows[i].children[e].getElementsByTagName('input')[0];
+      input.checked = true;
+      snmpPush(input.id);
+    }
+  }
+}
+
+function checkAllStates(){
+  allCheckboxStates(1,'cb_snmp');
+  // allCheckboxStates(2,'cb_sms');
+  // allCheckboxStates(3,'cb_email');
+}
+
+function allCheckboxStates(e,id){
+  var rows = $('snmp_list').getElementsByTagName('tr');
+  var c = [];
+  var nc = [];
+  for (var i = 0; i < rows.length; i++) {
+    var input = rows[i].children[e].getElementsByTagName('input')[0];
+    if (input.checked){
+      c.push(input.id);
+    } else {
+      nc.push(input.id);
+    }
+  }
+  if (c.length && nc.length) {
+    $(id).indeterminate = true;
+  } else if (c.length == rows.length) {
+    $(id).checked = true;
+    $(id).indeterminate = false;
+  } else {
+    $(id).checked = false;
+    $(id).indeterminate = false;
+  }
+}
+
 function decimalToBinary(decimal) {
   return (decimal >>> 0).toString(2);
 }
@@ -270,9 +418,9 @@ function cbToBit(id, n){
 function arrayToBitMask(id){
   // var parent = $(id).id;
   var snmp = cbToBit('cb0'+id, 0);
-  var sms = cbToBit('cb1'+id, 1);
+  // var sms = cbToBit('cb1'+id, 1);
   // var email = cbToBit('cb2'+id, 2);
-  return binaryToDecimal( decimalToBinary( (snmp | sms) ) );
+  return binaryToDecimal( decimalToBinary( (snmp) ) );
 }
 
 function NotificationBox (id, options) {

+ 135 - 0
web_interface/src/wui-9/snmp.cgi

@@ -0,0 +1,135 @@
+#!C:\Python34\python.exe
+# -*- coding: utf-8 -*-
+import json
+import time
+print("Content-Type: text/html")
+print("")
+JSON = ({
+  "params": [
+    {
+      "name":"0",
+      "label":"Нормализация напряжения на АКБ",
+      "snmp":"true",
+      "sms":"true",
+      "email":"false"
+    },
+    {
+      "name":"1",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"2",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"3",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"4",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"5",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"6",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"7",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"8",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"9",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"10",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"11",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"12",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"13",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"14",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"15",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    },
+    {
+      "name":"16",
+      "label":"Занижение напряжения на АКБ",
+      "snmp":"true",
+      "sms":"false",
+      "email":"false"
+    }
+  ],
+  "utc": "3.0",
+  "utm": time.time(),
+  "netsettings_changed": "false",
+  "profilaction_changed":"false",
+  "need_confirm":"false",
+})
+print(json.dumps(JSON))

+ 53 - 0
web_interface/src/wui-9/snmp.html

@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html lang="">
+<head>
+<meta charset="utf-8">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+<title>Уведомления</title>
+<link href="main.css" rel="stylesheet">
+<script type="text/javascript" src="role.js"></script>
+</head>
+<body>
+  <div class="navbar navbar-default navbar-fixed-top">
+    <div class="navbar-header">
+      <div><a href="index.html" class="logo"></a></div>
+    </div>
+    <a href="#" id="menu-icon"></a>
+    <ul class="nav navbar-nav" id="nav">
+      <script>createMainNavigation();</script>
+    </ul>
+  </div>
+<div class="wrapper" id="content">
+<!--START-->
+<h1>Уведомления</h1>
+<table class="table wrapper-default">
+  <thead>
+    <tr>
+      <th class="ph">Описание</th>
+      <th class="ph"><input type="checkbox" id="cb_snmp" onclick="checkAll(1, this.id)">&nbsp;SNMP</th>
+      <!-- <th class="ph"><input type="checkbox" id="cb_sms" onclick="checkAll(2, this.id)">&nbsp;SMS</th> -->
+      <!-- <th class="ph"><input type="checkbox" id="cb_email" onclick="checkAll(3, this.id)">&nbsp;E-Mail</th> -->
+    </tr>
+  </thead>
+  <tbody id="snmp_list"></tbody>
+  <script>createSNMP('snmp_list');</script>
+</table>
+<!--END-->
+</div>
+<div class="float-reminder" id="sa">
+  <div class="wrapper">
+    <p style="display:inline-block;">Параметров: <span id="sa_length">0</span></p>
+    <div style="float: right; margin:8px 0;" class="btn-group">
+    <button class="btn btn-primary-inverted" onclick="snmpSaSubmit();">Сохранить</button>
+    <button class="btn btn-danger-inverted" onclick="snmpChangeCancel();">Отмена</button>
+
+    </div>
+  </div>
+</div>
+</body>
+<script type="text/javascript" src="main.js"></script>
+<script type="text/javascript">
+// snmpGET();
+</script>
+</html>