PageRenderTime 26ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/libs/ABT/Modules.pm

http://another-backup-tool.googlecode.com/
Perl | 151 lines | 130 code | 7 blank | 14 comment | 19 complexity | 70ab5f3bf55dd16f374e7f634af9da90 MD5 | raw file
  1. # $Id: Modules.pm 459 2012-03-23 17:36:53Z marc@mguyard.com $
  2. package ABT::Modules;
  3. use Exporter;
  4. our @ISA = qw(Exporter);
  5. our @EXPORT = qw(&questions &verify_ip &verify_folder &newest_file &diff_file &write_config &ssh_or_telnet);
  6. use strict;
  7. no strict "refs";
  8. use FindBin;
  9. use lib "$FindBin::Bin/../libs";
  10. use ABT::Global;
  11. use warnings;
  12. use Data::Validate::IP qw(is_ipv4 is_ipv6);
  13. use File::DirList;
  14. use Data::Dumper;
  15. use File::Compare;
  16. use Switch;
  17. ########################
  18. # Modules functions #
  19. ########################
  20. ## Function who make question for modules
  21. sub questions {
  22. my $Question = $_[0];
  23. my $DefaultReply = $_[1];
  24. my $ResponseNeed = $_[2];
  25. my $ResponseTest = $_[3];
  26. my $valid = 0;
  27. my $Response;
  28. $logger->debug("Question : ".$Question."\n\t\t\tDefault Reply : ".$DefaultReply."\n\t\t\tResponseNeed : ".$ResponseNeed."\n\t\t\tResponseTest : ".$ResponseTest) if $verbose;
  29. while ( $valid eq 0 ) {
  30. # Modidy the question to specify the default reply if exist
  31. if ( $DefaultReply eq "" ) {
  32. print "QUESTION : ".$Question." : ";
  33. } else {
  34. print "QUESTION : ".$Question." [".$DefaultReply."]: ";
  35. }
  36. # Parse $Response
  37. $Response = <STDIN>;
  38. chomp($Response);
  39. # If $Response is empty and defined $DefaultReply then $Reponse = $DefaultReply
  40. if (( ! $Response )&&( $DefaultReply ne "")) {
  41. $Response = $DefaultReply
  42. }
  43. # If $Response is not empty and $ResponseNeed is defined, the $Response isn't valid
  44. if ((! $Response )&&($ResponseNeed eq 1)) {
  45. $logger->error("A response is need");
  46. $valid = 0;
  47. # If $ResponseTest is defined, i test it
  48. } elsif ( $ResponseTest eq "" ) {
  49. $valid = 1;
  50. } elsif ( &{$ResponseTest}($Response) ) {
  51. $valid = 1;
  52. }
  53. }
  54. # Return $Response to module
  55. $logger->debug("Question : ".$Question." / Response : ".$Response) if $verbose;
  56. return $Response;
  57. }
  58. sub ssh_or_telnet {
  59. my $transport = $_[0];
  60. switch ($transport) {
  61. case "SSH" { return 1; }
  62. case "Telnet" { return 1; }
  63. else {
  64. $logger->error("The transport type entered (".$transport.") isn't valid (SSH or Telnet)");
  65. return 0;
  66. }
  67. }
  68. }
  69. ## Function who verify the IP validity specify in parameter ($_[0])
  70. sub verify_ip {
  71. my $IP_toverify = $_[0];
  72. $logger->debug("IP : ".$IP_toverify) if $verbose;
  73. if ( is_ipv4($IP_toverify) || is_ipv6($IP_toverify) ) {
  74. return 1;
  75. } else {
  76. $logger->error("The IP entered isn't valid");
  77. return 0;
  78. }
  79. }
  80. ## Function who verify the folder existence specify in parameter ($_[0])
  81. sub verify_folder {
  82. # to verify storage path is existent and writable
  83. my $Folder = $_[0];
  84. if ( -d $Folder && -W $Folder ) {
  85. return 1
  86. } else {
  87. $logger->error("The directory specify isn't a directory or not writtable.");
  88. return 0
  89. }
  90. }
  91. ## Function who verify the retention
  92. sub verify_retention {
  93. my $retention = $_[0];
  94. if ($retention ne "" ) {
  95. if ( $retention =~ /^\d+$/ ) {
  96. return 1;
  97. } else {
  98. $logger->error("The retention specifiy isn't a valid number.");
  99. return 0;
  100. }
  101. } else {
  102. return 1;
  103. }
  104. }
  105. ## Fonction who find the newer file in a folder
  106. sub newest_file {
  107. my $folder = $_[0];
  108. my $pattern = $_[1];
  109. my $newest_file;
  110. my $valid = 0;
  111. my @list = File::DirList::list($folder, 'Mn', "1", "1", "0");
  112. $logger->debug("NewerFile Dump Global\n****************\n".Dumper(@list)."\n\n\n") if $verbose;
  113. foreach my $tab (@{ $list[0] }) {
  114. $logger->debug("NewerFile Dump by Elements\n****************\n".Dumper($tab)."\n\n\n") if $verbose;
  115. my @config = @{$tab};
  116. if ( ($config[14] eq "0") && ($config[13] =~ /$pattern/) ) {
  117. $logger->debug("The file (".$config[13].") match pattern ".$pattern) if $verbose;
  118. $newest_file = $config[13];
  119. last;
  120. } else {
  121. $logger->debug("The file (".$config[13].") don't match pattern ".$pattern) if $verbose;
  122. }
  123. }
  124. return $folder."/".$newest_file if ($newest_file);
  125. }
  126. ## Function who diff configuration text
  127. sub diff_file {
  128. my $ConfigFile = $_[0];
  129. my $oldfile = $_[1];
  130. my $newfile = $_[2];
  131. # On compare les deux fichiers
  132. if (compare($oldfile,$newfile) == 0) {
  133. # Les contenu sont les m??mes
  134. return 0;
  135. } else {
  136. # Les contenu sont diff?Šrents
  137. return 1;
  138. }
  139. }
  140. 1;