1
0

fix-device-models.pl 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #!/usr/bin/perl
  2. #
  3. # Copyright (C) Roman Dmitiriev, rnd@rajven.ru
  4. #
  5. #Скрипт нужен для переноса юзеровских девайсов в системные. НЕ ЗАПУСКАТЬ В ПОЛЬЗОВАТЕЛЬСКОЙ ИНСТАЛЛЯЦИИ!!!
  6. #Запуск в пользовательской инсталляции приведёт к ошибкам при следующем обновлении версии БД
  7. use FindBin '$Bin';
  8. use lib "$Bin/";
  9. use Data::Dumper;
  10. use Rstat::config;
  11. use Rstat::main;
  12. use Rstat::mysql;
  13. use Rstat::net_utils;
  14. use strict;
  15. use warnings;
  16. print "Stage 1: Devices\n";
  17. #new models
  18. my @dev_models = get_records_sql($dbh,"SELECT * FROM device_models WHERE id>=10000");
  19. foreach my $row (@dev_models) {
  20. print "Dev: $row->{id} $row->{model_name} =>";
  21. #search hardcoded models with some name
  22. my $model = get_record_sql($dbh,"SELECT * FROM device_models WHERE id <>".$row->{id}." AND LOWER(model_name)='".lc(trim($row->{model_name}))."'");
  23. if ($model) {
  24. print "... found id: $model->{id}. Migrated.";
  25. do_sql($dbh,"DELETE FROM device_models WHERE id=".$row->{id});
  26. do_sql($dbh,"UPDATE devices SET device_model_id=".$model->{id}." WHERE device_model_id=".$row->{id});
  27. do_sql($dbh,"UDPATE User_auth SET device_model_id=".$model->{id}." WHERE device_model_id=".$row->{id});
  28. next;
  29. }
  30. my $max = get_record_sql($dbh,"SELECT MAX(id) as max_id FROM device_models WHERE id<10000");
  31. if ($max and $max->{max_id}) {
  32. print ".. Moved to harcoded list\n";
  33. $max->{max_id}++;
  34. do_sql($dbh,"UPDATE device_models SET id=".$max->{max_id}." WHERE id=".$row->{id});
  35. do_sql($dbh,"UPDATE devices SET device_model_id=".$max->{max_id}." WHERE device_model_id=".$row->{id});
  36. do_sql($dbh,"UPDATE User_auth SET device_model_id=".$max->{max_id}." WHERE device_model_id=".$row->{id});
  37. }
  38. }
  39. print "Done!\n";
  40. print "Stage 2: Vendors\n";
  41. #new vendors
  42. my @dev_vendors = get_records_sql($dbh,"SELECT * FROM vendors WHERE id>=10000");
  43. foreach my $row (@dev_vendors) {
  44. print "Dev: $row->{id} $row->{name} =>";
  45. #search hardcoded vendors with some name
  46. my $vendor = get_record_sql($dbh,"SELECT * FROM vendors WHERE id <>".$row->{id}." AND LOWER(name)='".lc(trim($row->{name}))."'");
  47. if ($vendor) {
  48. print "... found id: $vendor->{id}. Migrated.";
  49. do_sql($dbh,"DELETE FROM vendors WHERE id=".$row->{id});
  50. do_sql($dbh,"UPDATE device_models SET vendor_id=".$vendor->{id}." WHERE vendor_id=".$row->{id});
  51. do_sql($dbh,"UDPATE devices SET vendor_id=".$vendor->{id}." WHERE vendor_id=".$row->{id});
  52. next;
  53. }
  54. my $max = get_record_sql($dbh,"SELECT MAX(id) as max_id FROM vendors WHERE id<10000");
  55. if ($max and $max->{max_id}) {
  56. print ".. Moved to harcoded list\n";
  57. $max->{max_id}++;
  58. do_sql($dbh,"UPDATE vendors SET id=".$max->{max_id}." WHERE id=".$row->{id});
  59. do_sql($dbh,"UPDATE device_models SET vendor_id=".$max->{max_id}." WHERE vendor_id=".$row->{id});
  60. do_sql($dbh,"UPDATE devices SET vendor_id=".$max->{max_id}." WHERE vendor_id=".$row->{id});
  61. }
  62. }
  63. print "Done!\n";
  64. exit;