Przeglądaj źródła

add script for move user custom device models|vendors to hardcoded list
html: add edit vendor table
html: disable @delete action for device model table

root 5 lat temu
rodzic
commit
6165947675

+ 70 - 0
docs/addons/fix-device-models.pl

@@ -0,0 +1,70 @@
+#!/usr/bin/perl
+
+#
+# Copyright (C) Roman Dmitiriev, rnd@rajven.ru
+#
+
+use FindBin '$Bin';
+use lib "$Bin/";
+use Data::Dumper;
+use Rstat::config;
+use Rstat::main;
+use Rstat::mysql;
+use Rstat::net_utils;
+use strict;
+use warnings;
+
+print "Stage 1: Devices\n";
+
+#new models
+my @dev_models = get_records_sql($dbh,"SELECT * FROM device_models WHERE id>=10000");
+foreach my $row (@dev_models) {
+print "Dev: $row->{id} $row->{model_name}  =>";
+#search hardcoded models with some name
+my $model = get_record_sql($dbh,"SELECT * FROM device_models WHERE id <>".$row->{id}." AND model_name='".trim($row->{model_name})."'");
+if ($model) { 
+    print "... found id: $model->{id}. Migrated.";
+    do_sql($dbh,"DELETE FROM device_models WHERE id=".$row->{id});
+    do_sql($dbh,"UPDATE devices SET device_model_id=".$model->{id}." WHERE device_model_id=".$row->{id});
+    do_sql($dbh,"UDPATE User_auth SET device_model_id=".$model->{id}." WHERE device_model_id=".$row->{id});
+    next;
+    }
+
+my $max = get_record_sql($dbh,"SELECT MAX(id) as max_id FROM device_models WHERE id<10000");
+if ($max and $max->{max_id}) {
+    print ".. Moved to harcoded list\n";
+    $max->{max_id}++;
+    do_sql($dbh,"UPDATE device_models SET id=".$max->{max_id}." WHERE id=".$row->{id});
+    do_sql($dbh,"UPDATE devices SET device_model_id=".$max->{max_id}." WHERE device_model_id=".$row->{id});
+    do_sql($dbh,"UPDATE User_auth SET device_model_id=".$max->{max_id}." WHERE device_model_id=".$row->{id});
+    }
+}
+print "Done!\n";
+
+print "Stage 2: Vendors\n";
+#new vendors
+my @dev_vendors = get_records_sql($dbh,"SELECT * FROM vendors WHERE id>=10000");
+foreach my $row (@dev_vendors) {
+print "Dev: $row->{id} $row->{name}  =>";
+#search hardcoded vendors with some name
+my $vendor = get_record_sql($dbh,"SELECT * FROM vendors WHERE id <>".$row->{id}." AND name='".trim($row->{name})."'");
+if ($vendor) {
+    print "... found id: $vendor->{id}. Migrated.";
+    do_sql($dbh,"DELETE FROM vendors WHERE id=".$row->{id});
+    do_sql($dbh,"UPDATE device_models SET vendor_id=".$vendor->{id}." WHERE vendor_id=".$row->{id});
+    do_sql($dbh,"UDPATE devices SET vendor_id=".$vendor->{id}." WHERE vendor_id=".$row->{id});
+    next;
+    }
+
+my $max = get_record_sql($dbh,"SELECT MAX(id) as max_id FROM vendors WHERE id<10000");
+if ($max and $max->{max_id}) {
+    print ".. Moved to harcoded list\n";
+    $max->{max_id}++;
+    do_sql($dbh,"UPDATE vendors SET id=".$max->{max_id}." WHERE id=".$row->{id});
+    do_sql($dbh,"UPDATE device_models SET vendor_id=".$max->{max_id}." WHERE vendor_id=".$row->{id});
+    do_sql($dbh,"UPDATE devices SET vendor_id=".$max->{max_id}." WHERE vendor_id=".$row->{id});
+    }
+}
+print "Done!\n";
+
+exit;

+ 30 - 9
docs/mysql/stat_table_device_models.sql

@@ -6,12 +6,14 @@
 CREATE TABLE `device_models` (
   `id` int(11) NOT NULL,
   `model_name` varchar(200) DEFAULT NULL,
-  `vendor_id` int(11) DEFAULT NULL,
+  `vendor_id` int(11) DEFAULT 1,
   `nagios_template` varchar(200) DEFAULT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
+
+TRUNCATE TABLE `device_models`;
 --
--- Дамп данных таблицы `device_models`
+-- Dumping data for table `device_models`
 --
 
 INSERT INTO `device_models` (`id`, `model_name`, `vendor_id`, `nagios_template`) VALUES
@@ -23,11 +25,9 @@ INSERT INTO `device_models` (`id`, `model_name`, `vendor_id`, `nagios_template`)
 (6, 'AT-GS950/24', 8, NULL),
 (7, 'CCR1009-7G-1C-1S+', 9, NULL),
 (8, 'CCR1036-8G-2S+', 9, NULL),
-(9, 'CCR1036-8G-2S+', 9, NULL),
 (10, 'CRS317-1G-16S+', 9, NULL),
 (11, 'CRS326-24S+2Q+', 9, NULL),
 (12, 'CRS328-24P-4S+', 9, NULL),
-(13, 'CRS328-24P-4S+', 9, NULL),
 (14, 'CRS328-4C-20S-4S+', 9, NULL),
 (15, 'DGS-3120-48TC', 7, NULL),
 (16, 'ES-2024', 4, NULL),
@@ -103,11 +103,32 @@ INSERT INTO `device_models` (`id`, `model_name`, `vendor_id`, `nagios_template`)
 (86, 'HWg-STE', 30, NULL),
 (87, 'Computer', 1, NULL),
 (88, 'Mobile Phone', 1, NULL),
-(89, 'Switch', 1, NULL);
+(89, 'Switch', 1, NULL),
+(90, 'Projectiondesign F22', 34, NULL),
+(91, 'MES2124P', 2, NULL),
+(92, 'MES2124P rev.C', 2, NULL),
+(93, 'MES2324B', 2, NULL),
+(94, 'MES2324P', 2, NULL),
+(95, 'MES-3528', 2, NULL),
+(96, 'ME-C6524GS-8S', 16, NULL),
+(97, 'SM3100-28TC', 17, NULL),
+(98, 'SM3200-50T', 17, NULL),
+(99, 'SM3200-52T', 17, NULL),
+(100, 'APC6000XL', 20, NULL),
+(101, 'MP RT 10K', 35, NULL),
+(102, 'LaserJet P2035n', 15, NULL),
+(103, 'MES3116F', 2, NULL),
+(104, 'MES2124M', 2, NULL),
+(105, 'RB750r2', 9, NULL),
+(106, 'DES-1210-52', 7, NULL),
+(107, 'DES-1210-52/ME', 7, NULL),
+(108, 'GS-4012F', 4, NULL),
+(109, 'MES2308', 2, NULL),
+(110, 'NanoBeam M5 16', 11, NULL),
+(111, 'MES2428B', 2, NULL),
+(112, 'CRS109-8G-1S-2HnD', 9, NULL),
+(113, 'MES2324', 2, NULL);
 
---
--- Индексы сохранённых таблиц
---
 
 --
 -- Индексы таблицы `device_models`
@@ -123,4 +144,4 @@ ALTER TABLE `device_models`
 -- AUTO_INCREMENT для таблицы `device_models`
 --
 ALTER TABLE `device_models`
-  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=89;
+  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10000;

+ 5 - 2
docs/mysql/stat_table_vendors.sql

@@ -47,9 +47,12 @@ INSERT INTO `vendors` (`id`, `name`) VALUES
 (31, 'Netping'),
 (32, 'Trassir'),
 (33, 'QSC'),
-(34, 'Projectiondesign');
+(34, 'Projectiondesign'),
+(35, 'Lenovo'),
+(36, 'SIPOWER');
+
 --
 ALTER TABLE `vendors`
   ADD PRIMARY KEY (`id`);
 ALTER TABLE `vendors`
-  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=33;
+  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10000;

+ 11 - 5
html/admin/devices/devmodels.php

@@ -1,15 +1,16 @@
 <?php
 
-$default_displayed=50;
+$default_displayed=25;
 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;
+        if (isset($val) and $val > 0 and $val < 10000) {
+            $new['device_model_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);
@@ -17,6 +18,7 @@ if (isset($_POST["remove"])) {
         }
     header("Location: " . $_SERVER["REQUEST_URI"]);
     }
+*/
 
 if (isset($_POST['save'])) {
     $saved = array();
@@ -25,6 +27,7 @@ if (isset($_POST['save'])) {
     for ($i = 0; $i < $len; $i ++) {
         $save_id = intval($_POST['save'][$i]);
         if ($save_id == 0) { continue;  }
+        if ($save_id <10000) { continue; }
         array_push($saved,$save_id);
         }
     //select box
@@ -33,6 +36,7 @@ if (isset($_POST['save'])) {
         for ($i = 0; $i < $len; $i ++) {
             $save_id = intval($_POST['f_id'][$i]);
             if ($save_id == 0) { continue; }
+            if ($save_id <10000) { continue; }
             if (!in_array($save_id, $saved)) { array_push($saved,$save_id); }
             }
         }
@@ -41,6 +45,7 @@ if (isset($_POST['save'])) {
     for ($i = 0; $i < $len; $i ++) {
         $save_id = intval($saved[$i]);
         if ($save_id == 0) { continue;  }
+        if ($save_id <10000) { 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; }
@@ -56,7 +61,10 @@ if (isset($_POST['save'])) {
 if (isset($_POST["create"])) {
     $model_name = $_POST["new_model"];
     if (isset($model_name)) {
+	$max_record = get_record_sql($db_link,"SELECT MAX(id) as max_id FROM device_models");
+	if (!isset($max_record) or $max_record['max_id']<10000) { $next_id = 10000; } else { $next_id = $max_record['max_id'] + 1; }
         $new['vendor_id']=1;
+        $new['id'] = $next_id;
         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);
@@ -103,7 +111,6 @@ print_navigation($page_url,$page,$displayed,$count_records[0],$total);
 <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>
 <?
 $t_ou = get_records_sql($db_link,'SELECT * FROM device_models '.$v_filter." ORDER BY vendor_id, model_name LIMIT $start,$displayed");
@@ -115,7 +122,6 @@ foreach ($t_ou as $row) {
     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";
 }
 ?>

+ 111 - 0
html/admin/devices/devvendors.php

@@ -0,0 +1,111 @@
+<?php
+
+$default_displayed=25;
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
+require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . $language . ".php");
+
+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;  }
+        if ($save_id<10000) { 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 ($save_id<10000) { 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;  }
+        if ($save_id<10000) { 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['name'] = $_POST['f_name'][$j];
+            update_record($db_link, "vendors", "id='{$save_id}'", $new);
+            }
+        }
+    header("Location: " . $_SERVER["REQUEST_URI"]);
+    }
+
+if (isset($_POST["create"])) {
+    $vendor_name = $_POST["new_vendor"];
+    if (isset($vendor_name)) {
+	$max_record = get_record_sql($db_link,"SELECT MAX(id) as max_id FROM vendors");
+	if (!isset($max_record) or $max_record['max_id']<10000) { $next_id = 10000; } else { $next_id = $max_record['max_id'] + 1; }
+        $new['id'] = $next_id;
+        $new['name'] = $vendor_name;
+        insert_record($db_link, "vendors", $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="devvendors.php" method="post">
+
+<table class="data">
+<tr>
+<td><b>Список вендоров</b></td>
+<td>Отображать:<?php print_row_at_pages('rows',$displayed); ?></td>
+<td><input type="submit" name="OK" value="Показать"></td>
+</tr>
+</table>
+
+<?php
+$countSQL="SELECT Count(*) FROM vendors";
+$res = mysqli_query($db_link, $countSQL);
+$count_records = mysqli_fetch_array($res);
+$total=ceil($count_records[0]/$displayed);
+if ($page>$total) { $page=$total; }
+if ($page<1) { $page=1; }
+$start = ($page * $displayed) - $displayed;
+print_navigation($page_url,$page,$displayed,$count_records[0],$total);
+
+?>
+<table class="data">
+<tr align="center">
+<td><input type="checkbox" onClick="checkAll(this.checked);"></td>
+<td><b>Id</b></td>
+<td><b>Производитель</b></td>
+<td><input type="submit" name='save' value="Сохранить"></td>
+</tr>
+<?
+$t_ou = get_records_sql($db_link,"SELECT * FROM vendors ORDER BY name LIMIT $start,$displayed");
+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\"><input type=\"text\" name='f_name[]' value='{$row['name']}'></td>\n";
+    print "<td class=\"data\"></td>\n";
+    print "</tr>\n";
+}
+?>
+</table>
+<table>
+<tr>
+<td><input type=text name=new_vendor 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");
+?>

+ 1 - 1
html/admin/users/edituser.php

@@ -185,7 +185,7 @@ if ($msg_error) {
 <tr>
 <td colspan=2><input type="text" name="f_login" value="<?php print $user_info["login"]; ?>" size=25></td>
 <td colspan=2><input type="text" name="f_fio" value="<?php print $user_info["fio"]; ?>" size=25></td>
-<td colspan=2><?php print_ou_select($db_link, 'f_ou', $user_info["ou_id"]); ?></td>
+<td colspan=2><?php print_ou_set($db_link, 'f_ou', $user_info["ou_id"]); ?></td>
 </tr>
 <tr>
 <td>Фильтр</td>

+ 1 - 0
html/admin/users/index.php

@@ -167,6 +167,7 @@ foreach ($users as $row) {
     print "<tr align=center>\n";
     print "<td class=\"$cl\" style='padding:0'><input type=checkbox name=fid[] value=".$row['id']."></td>\n";
     print "<td class=\"$cl\" ><input type=hidden name=\"id\" value=".$row['id'].">".$row['id']."</td>\n";
+    if (empty($row['login'])) { $row['login']=$row['id']; }
     print "<td class=\"$cl\" align=left><a href=edituser.php?id=".$row['id'].">" . $row['login'] . "</a></td>\n";
     print "<td class=\"$cl\">".$row['fio']."</td>\n";
     $rules_count = get_count_records($db_link,"auth_rules","user_id=".$row['id']);

+ 11 - 0
html/inc/common.php

@@ -420,6 +420,16 @@ function print_ou_select($db, $ou_name, $ou_value)
     print "</select>\n";
 }
 
+function print_ou_set($db, $ou_name, $ou_value)
+{
+    print "<select name=\"$ou_name\" class=\"js-select-single\">\n";
+    $t_ou = mysqli_query($db, "SELECT id,ou_name FROM OU WHERE id>=1 ORDER BY ou_name");
+    while (list ($f_ou_id, $f_ou_name) = mysqli_fetch_array($t_ou)) {
+	print_select_item($f_ou_name,$f_ou_id,$ou_value);
+    }
+    print "</select>\n";
+}
+
 function print_subnet_select($db, $subnet_name, $subnet_value)
 {
     print "<select name=\"$subnet_name\" >\n";
@@ -537,6 +547,7 @@ print_submenu_url('Пассивное оборудование','/admin/devices/
 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('Vendors','/admin/devices/devvendors.php',$current_page,0);
 print_submenu_url('Порты по вланам','/admin/devices/portsbyvlan.php',$current_page,1);
 print "</div>\n";
 }

+ 27 - 7
updates/20210330/stat_table_device_models.sql

@@ -10,8 +10,10 @@ CREATE TABLE `device_models` (
   `nagios_template` varchar(200) DEFAULT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
+
+TRUNCATE TABLE `device_models`;
 --
--- Дамп данных таблицы `device_models`
+-- Dumping data for table `device_models`
 --
 
 INSERT INTO `device_models` (`id`, `model_name`, `vendor_id`, `nagios_template`) VALUES
@@ -23,11 +25,9 @@ INSERT INTO `device_models` (`id`, `model_name`, `vendor_id`, `nagios_template`)
 (6, 'AT-GS950/24', 8, NULL),
 (7, 'CCR1009-7G-1C-1S+', 9, NULL),
 (8, 'CCR1036-8G-2S+', 9, NULL),
-(9, 'CCR1036-8G-2S+', 9, NULL),
 (10, 'CRS317-1G-16S+', 9, NULL),
 (11, 'CRS326-24S+2Q+', 9, NULL),
 (12, 'CRS328-24P-4S+', 9, NULL),
-(13, 'CRS328-24P-4S+', 9, NULL),
 (14, 'CRS328-4C-20S-4S+', 9, NULL),
 (15, 'DGS-3120-48TC', 7, NULL),
 (16, 'ES-2024', 4, NULL),
@@ -104,11 +104,31 @@ INSERT INTO `device_models` (`id`, `model_name`, `vendor_id`, `nagios_template`)
 (87, 'Computer', 1, NULL),
 (88, 'Mobile Phone', 1, NULL),
 (89, 'Switch', 1, NULL),
-(90, 'Projectiondesign F22',34,NULL);
+(90, 'Projectiondesign F22', 34, NULL),
+(91, 'MES2124P', 2, NULL),
+(92, 'MES2124P rev.C', 2, NULL),
+(93, 'MES2324B', 2, NULL),
+(94, 'MES2324P', 2, NULL),
+(95, 'MES-3528', 2, NULL),
+(96, 'ME-C6524GS-8S', 16, NULL),
+(97, 'SM3100-28TC', 17, NULL),
+(98, 'SM3200-50T', 17, NULL),
+(99, 'SM3200-52T', 17, NULL),
+(100, 'APC6000XL', 20, NULL),
+(101, 'MP RT 10K', 35, NULL),
+(102, 'LaserJet P2035n', 15, NULL),
+(103, 'MES3116F', 2, NULL),
+(104, 'MES2124M', 2, NULL),
+(105, 'RB750r2', 9, NULL),
+(106, 'DES-1210-52', 7, NULL),
+(107, 'DES-1210-52/ME', 7, NULL),
+(108, 'GS-4012F', 4, NULL),
+(109, 'MES2308', 2, NULL),
+(110, 'NanoBeam M5 16', 11, NULL),
+(111, 'MES2428B', 2, NULL),
+(112, 'CRS109-8G-1S-2HnD', 9, NULL),
+(113, 'MES2324', 2, NULL);
 
---
--- Индексы сохранённых таблиц
---
 
 --
 -- Индексы таблицы `device_models`