فهرست منبع

first stage add nagios config for devices

Dmitriev Roman 5 سال پیش
والد
کامیت
f167c4d5a1

+ 0 - 6
docs/mysql/stat_extra.sql

@@ -213,12 +213,6 @@ ALTER TABLE `variables`
   ADD UNIQUE KEY `name` (`name`),
   ADD KEY `clear_time` (`clear_time`,`created`);
 
---
--- Индексы таблицы `vendors`
---
-ALTER TABLE `vendors`
-  ADD PRIMARY KEY (`id`);
-
 --
 -- AUTO_INCREMENT для сохранённых таблиц
 --

+ 3 - 3
docs/mysql/stat_table_OU.sql

@@ -16,7 +16,7 @@ CREATE TABLE `OU` (
 --
 
 INSERT INTO `OU` (`id`, `ou_name`, `nagios_dir`) VALUES
-(0, 'Все', '/etc/nagios/any'),
+(0, '!Всё', '/etc/nagios/any'),
 (1, 'Сервера', NULL),
 (2, 'Администраторы', NULL),
 (3, 'Пользователи', NULL),
@@ -31,5 +31,5 @@ INSERT INTO `OU` (`id`, `ou_name`, `nagios_dir`) VALUES
 (12, 'WiFi AP', '/etc/nagios/ap'),
 (13, 'Техподдержка', NULL),
 (14, 'POS-терминалы', NULL),
-(23, 'WiFi', NULL),
-(24, 'VPN', NULL);
+(15, 'WiFi', NULL),
+(16, 'VPN', NULL);

+ 31 - 0
docs/mysql/stat_table_device_models.sql

@@ -0,0 +1,31 @@
+
+--
+-- Структура таблицы `device_models`
+--
+
+CREATE TABLE `device_models` (
+  `id` int(11) NOT NULL,
+  `model_name` varchar(200) DEFAULT NULL,
+  `vendor_id` int(11) DEFAULT NULL,
+  `nagios_template` varchar(200) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+--
+-- Индексы сохранённых таблиц
+--
+
+--
+-- Индексы таблицы `device_models`
+--
+ALTER TABLE `device_models`
+  ADD PRIMARY KEY (`id`);
+
+--
+-- AUTO_INCREMENT для сохранённых таблиц
+--
+
+--
+-- AUTO_INCREMENT для таблицы `device_models`
+--
+ALTER TABLE `device_models`
+  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

+ 11 - 3
docs/mysql/stat_table_vendors.sql

@@ -1,6 +1,3 @@
-
--- --------------------------------------------------------
-
 --
 -- Структура таблицы `vendors`
 --
@@ -10,6 +7,11 @@ CREATE TABLE `vendors` (
   `name` varchar(40) NOT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
+--
+-- Очистить таблицу перед добавлением данных `vendors`
+--
+
+TRUNCATE TABLE `vendors`;
 --
 -- Дамп данных таблицы `vendors`
 --
@@ -44,3 +46,9 @@ INSERT INTO `vendors` (`id`, `name`) VALUES
 (30, 'HW-group'),
 (31, 'Netping'),
 (32, 'Trassir');
+
+--
+ALTER TABLE `vendors`
+  ADD PRIMARY KEY (`id`);
+ALTER TABLE `vendors`
+  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=33;

+ 114 - 0
html/admin/devices/devmodels.php

@@ -0,0 +1,114 @@
+<?php
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . $language . ".php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/vendorfilter.php");
+
+if (isset($_POST["remove"])) {
+    $fid = $_POST["f_id"];
+    foreach ($fid as $key => $val) {
+        if (isset($val) and $val > 0) {
+            $new['ou_id'] = 0;
+            update_record($db_link, "User_auth", "device_model_id=" . $val, $new);
+            update_record($db_link, "devices", "device_model_id=" . $val, $new);
+            delete_record($db_link, "device_models", "id=" . $val);
+            }
+        }
+    header("Location: " . $_SERVER["REQUEST_URI"]);
+    }
+
+if (isset($_POST['save'])) {
+    $saved = array();
+    //button save
+    $len = is_array($_POST['save']) ? count($_POST['save']) : 0;
+    for ($i = 0; $i < $len; $i ++) {
+        $save_id = intval($_POST['save'][$i]);
+        if ($save_id == 0) { continue;  }
+        array_push($saved,$save_id);
+        }
+    //select box
+    $len = is_array($_POST['f_id']) ? count($_POST['f_id']) : 0;
+    if ($len>0) {
+        for ($i = 0; $i < $len; $i ++) {
+            $save_id = intval($_POST['f_id'][$i]);
+            if ($save_id == 0) { continue; }
+            if (!in_array($save_id, $saved)) { array_push($saved,$save_id); }
+            }
+        }
+    //save changes
+    $len = is_array($saved) ? count($saved) : 0;
+    for ($i = 0; $i < $len; $i ++) {
+        $save_id = intval($saved[$i]);
+        if ($save_id == 0) { continue;  }
+        $len_all = is_array($_POST['id']) ? count($_POST['id']) : 0;
+        for ($j = 0; $j < $len_all; $j ++) {
+            if (intval($_POST['id'][$j]) != $save_id) { continue; }
+            $new['vendor_id'] = $_POST['f_vendor'][$j];
+            $new['model_name'] = $_POST['f_name'][$j];
+            $new['nagios_template'] = $_POST['f_nagios'][$j];
+            update_record($db_link, "device_models", "id='{$save_id}'", $new);
+            }
+        }
+    header("Location: " . $_SERVER["REQUEST_URI"]);
+    }
+
+if (isset($_POST["create"])) {
+    $model_name = $_POST["new_model"];
+    if (isset($model_name)) {
+        $new['vendor_id']=1;
+        if (isset($f_vendor_select) and $f_vendor_select>1) { $new['vendor_id']=$f_vendor_select; }
+        $new['model_name'] = $model_name;
+        insert_record($db_link, "device_models", $new);
+        }
+    header("Location: " . $_SERVER["REQUEST_URI"]);
+    }
+
+unset($_POST);
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
+print_device_submenu($page_url);
+
+?>
+<div id="cont">
+<form name="def" action="devmodels.php" method="post">
+<table class="data">
+<tr>
+<td colspan=3><b>Список моделей</b></td>
+<td colspan=2><?php print_vendor_select($db_link,'vendor_select',$f_vendor_select); ?></td>
+<td><input type="submit" name="OK" value="Показать"></td>
+</tr>
+<tr align="center">
+<td><input type="checkbox" onClick="checkAll(this.checked);"></td>
+<td><b>Id</b></td>
+<td><b>Производитель</b></td>
+<td><b>Название</b></td>
+<td><b>Шаблон Nagios</b></td>
+<td><input type="submit" name='save' value="Сохранить"></td>
+<td><input type="submit" name="remove" value="Удалить"></td>
+</tr>
+<?
+$v_filter='';
+if (!empty($f_vendor_select)) { $v_filter = "WHERE vendor_id=".$f_vendor_select; }
+$t_ou = get_records_sql($db_link,'SELECT * FROM device_models '.$v_filter.' ORDER BY vendor_id, model_name');
+foreach ($t_ou as $row) {
+    print "<tr align=center>\n";
+    print "<td class=\"data\" style='padding:0'><input type=checkbox name=f_id[] value='{$row['id']}'></td>\n";
+    print "<td class=\"data\"><input type=\"hidden\" name='id[]' value='{$row['id']}'>{$row['id']}</td>\n";
+    print "<td class=\"data\" width=150>"; print_vendor_set($db_link,'f_vendor[]',$row['vendor_id']); print "</td>\n";
+    print "<td class=\"data\"><input type=\"text\" name='f_name[]' value='{$row['model_name']}'></td>\n";
+    print "<td class=\"data\"><input type=\"text\" name='f_nagios[]' value='{$row['nagios_template']}'></td>\n";
+    print "<td class=\"data\"></td>\n";
+    print "<td class=\"data\"></td>\n";
+    print "</tr>\n";
+}
+?>
+</table>
+<table>
+<tr>
+<td><input type=text name=new_model value="Unknown"></td>
+<td><input type="submit" name="create" value="Добавить"></td>
+<td align="right"></td>
+</tr>
+</table>
+</form>
+<?php
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/footer.php");
+?>

+ 23 - 10
html/inc/common.php

@@ -471,7 +471,7 @@ foreach ($params_arr as $row) {
     $new_params.="&".$key."=".$value;
     }
 $new_params = preg_replace('/^&/','',$new_params);
-$new_url = $fpage."?".$new_params;
+if ($new_params === '=') { $new_url = $fpage; } else { $new_url = $fpage."?".$new_params; }
 return $new_url;
 }
 
@@ -535,6 +535,7 @@ print "<div id='submenu'>\n";
 print_submenu_url('Активное сетевое оборудование','/admin/devices/index.php',$current_page,0);
 print_submenu_url('Расположение','/admin/devices/building.php',$current_page,0);
 print_submenu_url('Удалённые','/admin/devices/deleted.php',$current_page,0);
+print_submenu_url('Модели устройств','/admin/devices/devmodels.php',$current_page,0);
 print_submenu_url('Порты по вланам','/admin/devices/portsbyvlan.php',$current_page,1);
 print "</div>\n";
 }
@@ -731,7 +732,19 @@ function print_enabled_select($qa_name, $qa_value)
 
 function print_vendor_select($db, $qa_name, $qa_value)
 {
-    print "<select name=\"$qa_name\" class=\"js-select-single\">\n";
+    print "<select name=\"$qa_name\" class=\"js-select-single\" style=\"width: 100%\">\n";
+    $sSQL = "SELECT id,`name` FROM `vendors` order by `name`";
+    $vendors = mysqli_query($db, $sSQL);
+    print_select_item('Всё',0,$qa_value);
+    while (list ($v_id, $v_name) = mysqli_fetch_array($vendors)) {
+	print_select_item($v_name,$v_id,$qa_value);
+    }
+    print "</select>\n";
+}
+
+function print_vendor_set($db, $qa_name, $qa_value)
+{
+    print "<select name=\"$qa_name\" class=\"js-select-single\" style=\"width: 100%\">\n";
     $sSQL = "SELECT id,`name` FROM `vendors` order by `name`";
     $vendors = mysqli_query($db, $sSQL);
     while (list ($v_id, $v_name) = mysqli_fetch_array($vendors)) {
@@ -856,7 +869,7 @@ function print_device_port_select($db, $field_name, $device_id, $target_id)
 
 function print_device_select($db, $field_name, $device_id)
 {
-    print "<select name=\"$field_name\" class=\"js-select-single\">\n";
+    print "<select name=\"$field_name\" class=\"js-select-single\" >\n";
     $d_sql = "SELECT D.device_name, D.id FROM devices AS D Where D.deleted=0 order by D.device_name ASC";
     $t_device = mysqli_query($db, $d_sql);
     print_select_item('Все',0,$device_id);
@@ -882,7 +895,7 @@ function print_vlan_select($db, $field_name, $vlan)
 
 function print_device_select_ip($db, $field_name, $device_ip)
 {
-    print "<select name=\"$field_name\" class=\"js-select-single\">\n";
+    print "<select name=\"$field_name\" class=\"js-select-single\" >\n";
     $d_sql = "SELECT D.device_name, D.ip FROM devices AS D Where D.deleted=0 order by D.device_name ASC";
     $t_device = mysqli_query($db, $d_sql);
     print_select_item('Все','',$device_ip);
@@ -894,7 +907,7 @@ function print_device_select_ip($db, $field_name, $device_ip)
 
 function print_syslog_device_select($db, $field_name, $syslog_filter, $device_ip)
 {
-    print "<select name=\"$field_name\" class=\"js-select-single\">\n";
+    print "<select name=\"$field_name\" class=\"js-select-single\" >\n";
     $d_sql = "SELECT R.ip, D.device_name FROM (SELECT DISTINCT ip FROM remote_syslog WHERE $syslog_filter) AS R LEFT JOIN (SELECT ip, device_name FROM devices WHERE deleted=0) AS D ON R.ip=D.ip ORDER BY R.ip ASC";
     $t_device = mysqli_query($db, $d_sql);
     print_select_item('Все','',$device_ip);
@@ -1504,7 +1517,7 @@ function write_log($db, $msg, $level)
 
 function print_year_select($year_name, $year)
 {
-    print "<select name=\"$year_name\" class=\"js-select-single\">\n";
+    print "<select name=\"$year_name\" class=\"js-select-single\" >\n";
     for ($i = $year - 10; $i <= $year + 10; $i ++) {
 	print_select_item($i,$i,$year);
     }
@@ -1515,7 +1528,7 @@ function print_date_select($dd, $mm, $yy)
 {
     if ($dd >= 1) {
         print "<b>День</b>\n";
-        print "<select name=\"day\" class=\"js-select-single\">\n";
+        print "<select name=\"day\" class=\"js-select-single\" >\n";
         for ($i = 1; $i <= 31; $i ++) {
 	    print_select_item($i,$i,$dd);
         }
@@ -1524,7 +1537,7 @@ function print_date_select($dd, $mm, $yy)
 
     if ($mm >= 1) {
         print "<b>Месяц</b>\n";
-        print "<select name=\"month\" class=\"js-select-single\">\n";
+        print "<select name=\"month\" class=\"js-select-single\" >\n";
         for ($i = 1; $i <= 12; $i ++) {
             $month_name = strftime("%B", strtotime("$i/01/$yy"));
 	    print_select_item($month_name,$i,$mm);
@@ -1540,7 +1553,7 @@ function print_date_select2($dd, $mm, $yy)
 {
     if ($dd >= 1) {
         print "<b>День</b>\n";
-        print "<select name=\"day2\" class=\"js-select-single\">\n";
+        print "<select name=\"day2\" class=\"js-select-single\" >\n";
         for ($i = 1; $i <= 31; $i ++) {
 	    print_select_item($i,$i,$dd);
         }
@@ -1549,7 +1562,7 @@ function print_date_select2($dd, $mm, $yy)
 
     if ($mm >= 1) {
         print "<b>Месяц</b>\n";
-        print "<select name=\"month2\" class=\"js-select-single\">\n";
+        print "<select name=\"month2\" class=\"js-select-single\" >\n";
         for ($i = 1; $i <= 12; $i ++) {
             $month_name = strftime("%B", strtotime("$i/01/$yy"));
 	    print_select_item($month_name,$i,$mm);

+ 10 - 0
html/inc/vendorfilter.php

@@ -0,0 +1,10 @@
+<?php
+if (! defined("CONFIG")) die("Not defined");
+if (isset($_POST['vendor_select']) or isset($_GET['vendor_select'])) {
+    if (isset($_GET['vendor_select'])) { $f_vendor_select = $_GET['vendor_select']*1; }
+    if (isset($_POST['vendor_select'])) { $f_vendor_select = $_POST['vendor_select']*1; }
+    } else {
+    if (isset($_SESSION[$page_url]['vendor_select'])) { $f_vendor_select=$_SESSION[$page_url]['vendor_select']; } else { $f_vendor_select = 0; }
+    }
+$_SESSION[$page_url]['vendor_select']=$f_vendor_select;
+?>

+ 16 - 0
updates/20210330/db-patch-mysql-ou.sql

@@ -0,0 +1,16 @@
+ALTER TABLE `devices` ADD `device_model_id` INT NULL DEFAULT NULL AFTER `device_type`;
+ALTER TABLE `User_auth` ADD `device_model_id` INT NULL DEFAULT NULL AFTER `month_quota`;
+ALTER TABLE `OU` ADD `nagios_template` VARCHAR(50) NULL DEFAULT NULL AFTER `nagios_dir`, ADD `nagios_ping` BOOLEAN NOT NULL DEFAULT TRUE AFTER `nagios_template`;
+ALTER TABLE `OU` ADD `nagios_default_service` VARCHAR(100) NOT NULL DEFAULT 'local-service' AFTER `nagios_ping`;
+UPDATE `OU` SET `ou_name` = '!Всё' WHERE `OU`.`id` = 0;
+UPDATE `OU` SET `nagios_template` = 'voip' WHERE `OU`.`id` = 4;
+UPDATE `OU` SET `nagios_template` = 'generic-host' WHERE `OU`.`id` = 0;
+UPDATE `OU` SET `nagios_ping` = '0' WHERE `OU`.`id` = 5;
+UPDATE `OU` SET `nagios_template` = 'ip-cam' WHERE `OU`.`id` = 5;
+UPDATE `OU` SET `nagios_default_service` = 'printer-service' WHERE `OU`.`id` = 6;
+UPDATE `OU` SET `nagios_template` = 'printers' WHERE `OU`.`id` = 6;
+UPDATE `OU` SET `nagios_template` = 'switches' WHERE `OU`.`id` = 7;
+UPDATE `OU` SET `nagios_template` = 'ups' WHERE `OU`.`id` = 8;
+UPDATE `OU` SET `nagios_template` = 'security' WHERE `OU`.`id` = 9;
+UPDATE `OU` SET `nagios_template` = 'routers' WHERE `OU`.`id` = 10;
+UPDATE `OU` SET `nagios_template` = 'ap' WHERE `OU`.`id` = 12;

+ 31 - 0
updates/20210330/stat_table_device_models.sql

@@ -0,0 +1,31 @@
+
+--
+-- Структура таблицы `device_models`
+--
+
+CREATE TABLE `device_models` (
+  `id` int(11) NOT NULL,
+  `model_name` varchar(200) DEFAULT NULL,
+  `vendor_id` int(11) DEFAULT NULL,
+  `nagios_template` varchar(200) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+--
+-- Индексы сохранённых таблиц
+--
+
+--
+-- Индексы таблицы `device_models`
+--
+ALTER TABLE `device_models`
+  ADD PRIMARY KEY (`id`);
+
+--
+-- AUTO_INCREMENT для сохранённых таблиц
+--
+
+--
+-- AUTO_INCREMENT для таблицы `device_models`
+--
+ALTER TABLE `device_models`
+  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;