فهرست منبع

fixed clean empty user records - removed corresponded device

rajven 3 سال پیش
والد
کامیت
2f4b48febf
3فایلهای تغییر یافته به همراه28 افزوده شده و 3 حذف شده
  1. 1 1
      html/admin/devices/index.php
  2. 15 0
      scripts/Rstat/mysql.pm
  3. 12 2
      scripts/garbage.pl

+ 1 - 1
html/admin/devices/index.php

@@ -36,7 +36,7 @@ if (!empty($sort_field) and !empty($order)) { $sort_sql = " ORDER BY $sort_field
 <td class="info" colspan=6> <?php  print WEB_device_type_show; print_devtypes_select($db_link, "devtypes", $f_devtype_id, "id<3"); ?>
 <?php print WEB_device_show_location; print_building_select($db_link, "building_id", $f_building_id); ?></td>
 <td class="info"><input type="submit" name="apply" value="<?php echo WEB_btn_show; ?>"></td>
-<td class="info"><input type="submit" onclick="return confirm('<?php echo WEB_msg_delete; ?>?')" name="remove_device" value="<?php echo WEB_btn_delete; ?>"></td>
+<td class="info" colspan=2><input type="submit" onclick="return confirm('<?php echo WEB_msg_delete; ?>?')" name="remove_device" value="<?php echo WEB_btn_delete; ?>"></td>
 </tr>
 <tr align="center">
 <td align=Center><input type="checkbox" onClick="checkAll(this.checked);"></td>

+ 15 - 0
scripts/Rstat/mysql.pm

@@ -52,6 +52,7 @@ init_db
 init_option
 insert_record
 IpToStr
+unbind_ports
 resurrection_auth
 new_auth
 StrToIp
@@ -333,6 +334,20 @@ return $row_ref;
 
 #---------------------------------------------------------------------------------------------------------------
 
+sub unbind_ports {
+my $db = shift;
+my $device_id = shift;
+return if (!$db);
+return if (!$device_id);
+my @target = get_records_sql($db, "SELECT U.target_port_id,U.id FROM device_ports U WHERE U.device_id=".$device_id);
+foreach my $row (@target) {
+        do_sql($db, "UPDATE device_ports SET target_port_id=0 WHERE target_port_id=".$row->{id});
+        do_sql($db, "UPDATE device_ports SET target_port_id=0 WHERE id=".$row->{id});
+    }
+}
+
+#---------------------------------------------------------------------------------------------------------------
+
 sub get_diff_rec {
 my $db = shift;
 my $table = shift;

+ 12 - 2
scripts/garbage.pl

@@ -17,6 +17,7 @@ use Rstat::mysql;
 use Rstat::net_utils;
 use DateTime;
 use Fcntl qw(:flock);
+
 open(SELF,"<",$0) or die "Cannot open $0 - $!";
 flock(SELF, LOCK_EX|LOCK_NB) or exit 1;
 
@@ -150,15 +151,24 @@ do_sql($dbh,"DELETE FROM connections WHERE id='".$c_id."'");
 db_log_verbose($dbh,"Remove dup connection $c_id: $c_port_id $c_auth_id");
 }
 
-##### clean empty user account ################
+##### clean empty user account and corresponded devices ################
 my $u_sql = "SELECT * FROM User_list as U WHERE (SELECT COUNT(*) FROM User_auth WHERE User_auth.deleted=0 AND User_auth.user_id = U.id)=0";
 my @u_ref = get_records_sql($dbh,$u_sql);
 foreach my $row (@u_ref) {
 do_sql($dbh,"DELETE FROM User_list WHERE id='".$row->{id}."'");
 db_log_verbose($dbh,"Remove empty user id: $row->{id} login: $row->{login}");
+#delete binded device
+my $user_device = get_record_sql($dbh,"SELECT * FROM devices WHERE user_id=".$row->{id});
+if (!$user_device) {
+    db_log_verbose($dbh,"Remove corresponded device id: $user_device->{id} name: $user_device->{device_name}");
+    unbind_ports($dbh, $user_device->{id});
+    do_sql($dbh, "DELETE FROM connections WHERE device_id=".$user_device->{id});
+    do_sql($dbh, "DELETE FROM device_l3_interfaces WHERE device_id=".$user_device->{id});
+    do_sql($dbh, "DELETE FROM device_ports WHERE device_id=".$user_device->{id});
+    delete_record($dbh, "devices", "id=".$user_device->{id});
+    }
 }
 
-
 ##### unknown mac clean ############
 $users_sql = "SELECT mac FROM User_auth WHERE deleted=0";
 @users_auth = get_records_sql($dbh,$users_sql);