fix-device-models.pl 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #!/usr/bin/perl
  2. #
  3. # Copyright (C) Roman Dmitiriev, rnd@rajven.ru
  4. #
  5. use FindBin '$Bin';
  6. use lib "$Bin/";
  7. use Data::Dumper;
  8. use Rstat::config;
  9. use Rstat::main;
  10. use Rstat::mysql;
  11. use Rstat::net_utils;
  12. use strict;
  13. use warnings;
  14. print "Stage 1: Devices\n";
  15. #new models
  16. my @dev_models = get_records_sql($dbh,"SELECT * FROM device_models WHERE id>=10000");
  17. foreach my $row (@dev_models) {
  18. print "Dev: $row->{id} $row->{model_name} =>";
  19. #search hardcoded models with some name
  20. my $model = get_record_sql($dbh,"SELECT * FROM device_models WHERE id <>".$row->{id}." AND model_name='".trim($row->{model_name})."'");
  21. if ($model) {
  22. print "... found id: $model->{id}. Migrated.";
  23. do_sql($dbh,"DELETE FROM device_models WHERE id=".$row->{id});
  24. do_sql($dbh,"UPDATE devices SET device_model_id=".$model->{id}." WHERE device_model_id=".$row->{id});
  25. do_sql($dbh,"UDPATE User_auth SET device_model_id=".$model->{id}." WHERE device_model_id=".$row->{id});
  26. next;
  27. }
  28. my $max = get_record_sql($dbh,"SELECT MAX(id) as max_id FROM device_models WHERE id<10000");
  29. if ($max and $max->{max_id}) {
  30. print ".. Moved to harcoded list\n";
  31. $max->{max_id}++;
  32. do_sql($dbh,"UPDATE device_models SET id=".$max->{max_id}." WHERE id=".$row->{id});
  33. do_sql($dbh,"UPDATE devices SET device_model_id=".$max->{max_id}." WHERE device_model_id=".$row->{id});
  34. do_sql($dbh,"UPDATE User_auth SET device_model_id=".$max->{max_id}." WHERE device_model_id=".$row->{id});
  35. }
  36. }
  37. print "Done!\n";
  38. print "Stage 2: Vendors\n";
  39. #new vendors
  40. my @dev_vendors = get_records_sql($dbh,"SELECT * FROM vendors WHERE id>=10000");
  41. foreach my $row (@dev_vendors) {
  42. print "Dev: $row->{id} $row->{name} =>";
  43. #search hardcoded vendors with some name
  44. my $vendor = get_record_sql($dbh,"SELECT * FROM vendors WHERE id <>".$row->{id}." AND name='".trim($row->{name})."'");
  45. if ($vendor) {
  46. print "... found id: $vendor->{id}. Migrated.";
  47. do_sql($dbh,"DELETE FROM vendors WHERE id=".$row->{id});
  48. do_sql($dbh,"UPDATE device_models SET vendor_id=".$vendor->{id}." WHERE vendor_id=".$row->{id});
  49. do_sql($dbh,"UDPATE devices SET vendor_id=".$vendor->{id}." WHERE vendor_id=".$row->{id});
  50. next;
  51. }
  52. my $max = get_record_sql($dbh,"SELECT MAX(id) as max_id FROM vendors WHERE id<10000");
  53. if ($max and $max->{max_id}) {
  54. print ".. Moved to harcoded list\n";
  55. $max->{max_id}++;
  56. do_sql($dbh,"UPDATE vendors SET id=".$max->{max_id}." WHERE id=".$row->{id});
  57. do_sql($dbh,"UPDATE device_models SET vendor_id=".$max->{max_id}." WHERE vendor_id=".$row->{id});
  58. do_sql($dbh,"UPDATE devices SET vendor_id=".$max->{max_id}." WHERE vendor_id=".$row->{id});
  59. }
  60. }
  61. print "Done!\n";
  62. exit;