فهرست منبع

fixed migration srctip for device and vendor tables

rajven 3 سال پیش
والد
کامیت
20d6d7b43b
1فایلهای تغییر یافته به همراه96 افزوده شده و 23 حذف شده
  1. 96 23
      docs/devices/import-system-dev.pl

+ 96 - 23
docs/devices/import-system-dev.pl

@@ -16,6 +16,7 @@ use Rstat::net_utils;
 use strict;
 use warnings;
 
+
 print "Stage 0: Read system devices\n";
 
 my @user_devices=();
@@ -23,13 +24,13 @@ my @user_devices=();
 if (-e "system-devs.csv") {
     my @nSQL=read_file("system-devs.csv");
     foreach my $row (@nSQL) {
-	my ($dev_id,$dev_model,$dev_vendor) = split(/;/,$row);
-	my $device;
-	$device->{id}=$dev_id;
-	$device->{model_name}=$dev_model;
-	$device->{vendor_id}=$dev_vendor;
-	push(@user_devices,$device);
-	}
+        my ($dev_id,$dev_model,$dev_vendor) = split(/;/,$row);
+        my $device;
+        $device->{id}=$dev_id;
+        $device->{model_name}=$dev_model;
+        $device->{vendor_id}=$dev_vendor;
+        push(@user_devices,$device);
+        }
     }
 
 print "Stage 1: Read system vendors\n";
@@ -38,46 +39,118 @@ my @user_vendors=();
 if (-e "system-vendors.csv") {
     my @nSQL=read_file("system-vendors.csv");
     foreach my $row (@nSQL) {
-	my ($vendor_id,$vendor_name) = split(/;/,$row);
-	my $vendor;
-	$vendor->{id}=$vendor_id;
-	$vendor->{name}=$vendor_name;
-	push(@user_vendors,$vendor);
-	}
+        my ($vendor_id,$vendor_name) = split(/;/,$row);
+        my $vendor;
+        $vendor->{id}=$vendor_id;
+        $vendor->{name}=$vendor_name;
+        push(@user_vendors,$vendor);
+        }
     }
 print "Done!\n";
 
 my %vendor_migration;
 
 print "Import Vendors\n";
-foreach $vendor (@user_vendors) {
-#seach exists vendor
-my $vendor_exist = get_record_sql($dbh,"SELECT * FROM vendors WHERE LOWER(name)='".lc(trim($vendor->{name}))."'");
+foreach my $vendor (@user_vendors) {
+#seach exists vendor created by user
+my $vendor_exist = get_record_sql($dbh,"SELECT * FROM vendors WHERE id>=10000 and LOWER(name)='".lc(trim($vendor->{name}))."'");
+print "Check: $vendor->{name} id: $vendor->{id} ...";
+if ($vendor_exist) {
+    if ($vendor_exist->{id} == $vendor->{id}) { print "OK\n"; next; }
+    print " created by user. Switch to system pool.";
+    do_sql($dbh,"UPDATE vendors SET id=".$vendor->{id}." WHERE id=".$vendor_exist->{id});
+    do_sql($dbh,"UPDATE device_models SET vendor_id=".$vendor->{id}." WHERE vendor_id=".$vendor_exist->{id});
+    do_sql($dbh,"UPDATE devices SET vendor_id=".$vendor->{id}." WHERE vendor_id=".$vendor_exist->{id});
+    print " Migrated.\n";
+    next;
+    }
+#check system pool
+$vendor_exist = get_record_sql($dbh,"SELECT * FROM vendors WHERE id<10000 and LOWER(name)='".lc(trim($vendor->{name}))."'");
 if ($vendor_exist) {
-    next if ($vendor_exist->{id} = $vendor->{id});
+    if ($vendor_exist->{id} == $vendor->{id}) { print "OK\n"; next ; }
+    print "Warning! System vendor mismatch! ";
+    my $vendor2 = get_record_sql($dbh,"SELECT * FROM vendors WHERE id=$vendor->{id}");
+    if ($vendor2) {
+        print "Found another vendor with this id =>".$vendor2->{name};
+        my $last_id = get_record_sql($dbh,"SELECT MAX(id) as last FROM vendors");
+        my $new_vendor_id = $last_id->{'last'}+1;
+        if ($new_vendor_id <=10000 ) { $new_vendor_id = 10001; }
+        print " Move vendor $vendor2->{name} to user custom block. Run script again\n";
+        do_sql($dbh,"UPDATE vendors SET id=".$new_vendor_id." WHERE id=".$vendor2->{id});
+        do_sql($dbh,"UPDATE device_models SET vendor_id=".$new_vendor_id." WHERE vendor_id=".$vendor2->{id});
+        next;
+        }
     do_sql($dbh,"UPDATE vendors SET id=".$vendor->{id}." WHERE id=".$vendor_exist->{id});
     do_sql($dbh,"UPDATE device_models SET vendor_id=".$vendor->{id}." WHERE vendor_id=".$vendor_exist->{id});
     do_sql($dbh,"UPDATE devices SET vendor_id=".$vendor->{id}." WHERE vendor_id=".$vendor_exist->{id});
+    print "Fixed.\n";
+    next;
+    }
+#check another record with this id
+my $vendor2 = get_record_sql($dbh,"SELECT * FROM vendors WHERE id=$vendor->{id}");
+if ($vendor2) {
+    print "Found another vendor with this id =>".$vendor2->{name};
+    my $last_id = get_record_sql($dbh,"SELECT MAX(id) as last FROM vendors");
+    my $new_vendor_id = $last_id->{'last'}+1;
+    if ($new_vendor_id <=10000 ) { $new_vendor_id = 10001; }
+    print " Move vendor $vendor2->{name} to user custom block. Run script again\n";
+    do_sql($dbh,"UPDATE vendors SET id=".$new_vendor_id." WHERE id=".$vendor2->{id});
+    do_sql($dbh,"UPDATE device_models SET vendor_id=".$new_vendor_id." WHERE vendor_id=".$vendor2->{id});
     next;
     }
-print "id: $vendor->{name} Migrated.\n";
 insert_record($dbh,"vendors",$vendor);
+print " Imported.\n";
 }
 print "Done!\n";
 
 print "Import devices\n";
 
-foreach $device (@user_devices) {
-#seach exists device
-my $device_exist = get_record_sql($dbh,"SELECT * FROM device_models WHERE vendor_id=".$device->{vendor_id}." AND LOWER(model_name)='".lc(trim($device->{model_name}))."'");
+foreach my $device (@user_devices) {
+#seach exists device created by user
+print "Check id: $device->{id} name: $device->{model_name}..";
+my $device_exist = get_record_sql($dbh,"SELECT * FROM device_models WHERE id>=10000 AND vendor_id=".$device->{vendor_id}." AND LOWER(model_name)='".lc(trim($device->{model_name}))."'");
+if ($device_exist) {
+    if ($device_exist->{id} == $device->{id}) { print "OK\n"; next; }
+    do_sql($dbh,"UPDATE device_models SET id=".$device->{id}." WHERE id=".$device_exist->{id});
+    do_sql($dbh,"UPDATE devices SET device_model_id=".$device->{id}." WHERE device_model_id=".$device_exist->{id});
+    print "Migrated\n";
+    next;
+    }
+#system model table
+$device_exist = get_record_sql($dbh,"SELECT * FROM device_models WHERE id<10000 AND vendor_id=".$device->{vendor_id}." AND LOWER(model_name)='".lc(trim($device->{model_name}))."'");
 if ($device_exist) {
-    next if ($device_exist->{id} = $device->{id});
+    if ($device_exist->{id} == $device->{id}) { print "OK\n"; next; }
+    print "Warning! System device model mismatch! ";
+    my $device2 = get_record_sql($dbh,"SELECT * FROM device_models WHERE id=".$device->{id});
+    if ($device2) {
+        print "Found another device model with this id =>".$device2->{model_name};
+        my $last_id = get_record_sql($dbh,"SELECT MAX(id) as last FROM device_models");
+        my $new_model_id = $last_id->{'last'}+1;
+        if ($new_model_id <=10000 ) { $new_model_id = 10001; }
+        print " Move device model $device2->{model_name} to user custom block. Run script again\n";
+        do_sql($dbh,"UPDATE device_models SET id=".$new_model_id." WHERE id=".$device2->{id});
+        do_sql($dbh,"UPDATE devices SET device_model_id=".$new_model_id." WHERE device_model_id=".$device2->{id});
+        next;
+        }
     do_sql($dbh,"UPDATE device_models SET id=".$device->{id}." WHERE id=".$device_exist->{id});
     do_sql($dbh,"UPDATE devices SET device_model_id=".$device->{id}." WHERE device_model_id=".$device_exist->{id});
+    print "Migrated\n";
+    next;
+    }
+#check another record with this id
+my $device2 = get_record_sql($dbh,"SELECT * FROM device_models WHERE id=".$device->{id});
+if ($device2) {
+    print "Found another device model with this id =>".$device2->{model_name};
+    my $last_id = get_record_sql($dbh,"SELECT MAX(id) as last FROM device_models");
+    my $new_model_id = $last_id->{'last'}+1;
+    if ($new_model_id <=10000 ) { $new_model_id = 10001; }
+    print " Move device model $device2->{model_name} to user custom block. Run script again\n";
+    do_sql($dbh,"UPDATE device_models SET id=".$new_model_id." WHERE id=".$device2->{id});
+    do_sql($dbh,"UPDATE devices SET device_model_id=".$new_model_id." WHERE device_model_id=".$device2->{id});
     next;
     }
-print "id: $device->{model_name} Migrated.\n";
 insert_record($dbh,"device_models",$device);
+print " Imported.\n";
 }
 
 print "Done!\n";