peers2fdnMoniteurConfig.pl 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use XML::Twig;
  4. use POSIX qw(strftime);
  5. exit -1 unless (scalar(@ARGV) eq 1);
  6. my ($filename) = @ARGV;
  7. my $sessions = {};
  8. sub regSession {
  9. my ($t, $peer) = @_;
  10. my $name = $peer->first_child('name');
  11. $sessions->{$name->text} = []
  12. unless exists $sessions->{$name->text};
  13. push @{ $sessions->{$name->text} }, {
  14. 'pop' => $peer->{'att'}->{'ix'},
  15. 'ip' => $peer->first_child('ip')
  16. };
  17. }
  18. my $t = XML::Twig->new( twig_handlers => { 'peer' => \&regSession } );
  19. $t->parsefile($filename);
  20. print STDOUT "{\n";
  21. foreach my $peer (keys %{ $sessions }) {
  22. my @ps = @{ $sessions->{$peer} };
  23. print STDOUT " '$peer' => {\n";
  24. if (scalar(@ps) eq 1) {
  25. print STDOUT " 'sort' => 'single',\n";
  26. } else {
  27. print STDOUT " 'sort' => 'any',\n";
  28. }
  29. print STDOUT " 'sessions' => {\n";
  30. foreach my $pi (@ps) {
  31. if ($pi->{'ip'}->text !~ /:/) {
  32. print STDOUT " '".$pi->{'pop'}."' => ";
  33. print STDOUT "'".$pi->{'ip'}->text."',\n";
  34. }
  35. }
  36. print STDOUT " },\n";
  37. print STDOUT " },\n";
  38. }
  39. print STDOUT "}\n";
  40. exit 0;