1
0

update_wiki.pl 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. use File::Find;
  15. use File::Basename;
  16. use Fcntl qw(:flock);
  17. open(SELF,"<",$0) or die "Cannot open $0 - $!";
  18. flock(SELF, LOCK_EX|LOCK_NB) or exit 1;
  19. if (!$config_ref{wiki_path}) { exit; }
  20. my %content;
  21. find( \&wanted, $config_ref{wiki_path});
  22. foreach my $fname (keys %content) {
  23. open (FF,"<$content{$fname}") or die "unable to open file $content{$fname}!" ;
  24. my @tmp=<FF>;
  25. close(FF);
  26. chomp(@tmp);
  27. my @wiki_dev=();
  28. my $ip;
  29. foreach my $row (@tmp) {
  30. if ($row=~/\%META\:FIELD\{name\=\"Description\"/) { next; }
  31. if ($row=~/\%META\:FIELD\{name\=\"Parent\"/) { next; }
  32. if ($row=~/\%META\:FIELD\{name\=\"ParentPort\"/) { next; }
  33. if ($row=~/\%META\:FIELD\{name\=\"DeviceIP\"/) {
  34. if ($row=~/value\=\"([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\"/) { $ip = $1; }
  35. }
  36. if ($row=~/\%META\:FIELD\{name\=\"Mac\"/) { next; }
  37. push(@wiki_dev,$row);
  38. }
  39. if (!$ip) { next; }
  40. my $auth = get_record_sql($dbh,"SELECT * FROM User_auth WHERE deleted=0 and ip='".$ip."'");
  41. if (!$auth) { next; }
  42. my $dSQL = "SELECT D.ip, D.building_id, D.user_id ,DP.port FROM devices AS D, device_ports AS DP, connections AS C WHERE D.deleted=0 and D.id = DP.device_id AND DP.id = C.port_id AND C.auth_id=".$auth->{id};
  43. my $device = get_record_sql($dbh,$dSQL);
  44. if (!$device or !$device->{user_id}) { next; }
  45. $dSQL = "SELECT * FROM User_auth WHERE WikiName IS NOT NULL AND user_id=".$device->{user_id}." AND deleted=0 AND ip='".$device->{ip}."'";
  46. my $device_auth = get_record_sql($dbh,$dSQL);
  47. if (!$device_auth) { next; }
  48. my $device_name = $device_auth->{WikiName};
  49. my $device_port = $device->{port};
  50. if ($auth->{comments}) { push(@wiki_dev,'%META:FIELD{name="Description" title="Description" value="'.$auth->{comments}.'"}%'); }
  51. push(@wiki_dev,'%META:FIELD{name="Parent" title="Parent" value="'.$device_name.'"}%');
  52. push(@wiki_dev,'%META:FIELD{name="ParentPort" title="Parent Port" value="'.$device_port.'"}%');
  53. push(@wiki_dev,'%META:FIELD{name="Mac" title="Mac" value="'.$auth->{mac}.'"}%');
  54. print "Found: $auth->{ip} $auth->{mac} $device_name $device_port \n";
  55. open (LG,">$content{$fname}") || die("Error open file $content{$fname}!!! die...");
  56. foreach my $row (@wiki_dev) {
  57. next if (!$row);
  58. print LG $row."\n";
  59. }
  60. close (LG);
  61. }
  62. print "Done!\n";
  63. exit;
  64. sub wanted {
  65. my $filename = $File::Find::name;
  66. my $dev_name = basename($filename);
  67. if ($filename =~/\.txt$/ and $filename=~/^(Device|Switch|Ups|Sensor)/) {
  68. $dev_name=~s/\.txt$//;
  69. $content{$dev_name}=$filename;
  70. }
  71. return;
  72. }
  73. exit;