Subversion Repositories computer_asset_manager_v1

Rev

Rev 1 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 rodolico 1
#!  /usr/bin/perl -w
2
 
3
# part of the command line tools for process_sysinfo. Will take a list of one or more
4
# directories and read the message in. These directories are assumed to be reports, possibly
5
# with e-mail headers. Will then search for the key [report date] in the file and, if found,
6
# adds the file name (and date) to the list of files to be processed.
7
# when the files to be processed has been created, will call process_sysinfo with each file
8
# as input
9
 
10
# v2.0 20121003
11
# changed SYSINFO to an array, allowing different processors for different formats of files
12
 
13
my $TESTING = 0;
14
my $saveDir;
15
my @mailDir;
16
my %SYSINFO;
17
my $output = ''; # place to store any error messages
18
my $startTime = `date`;
19
 
20
my $VERSION = '2.0';
21
 
22
# standard find and load configuration file
23
sub loadConfigurationFile {
24
   my $configuration_file = shift;
25
 
26
   use File::Basename;
27
   use Cwd qw(realpath);
28
 
29
   my $filename  = realpath($0); # get my real path
30
   my $directories;
31
   my $suffix;
32
   print "$configuration_file\n" if $TESTING;
33
   $configuration_file = $filename unless $configuration_file;
34
   print "$configuration_file\n" if $TESTING;
35
 
36
   if ( $configuration_file !~ m/\// ) { # no path information
37
      ($filename, $directories, $suffix) = fileparse($filename,qr/\.[^.]*/); # break filename apart
38
      #print "No Path Given\n";
39
   } else {
40
      ($filename, $directories, $suffix) = fileparse($configuration_file,qr/\.[^.]*/); # break filename apart
41
      $configuration_file = '';
42
      #print "Path included\n";
43
   }
44
   unless (-e $directories . ($configuration_file ? $configuration_file : $filename) . '.conf' ) {
45
      $lookingIn = $directories;
46
      while ($lookingIn) {
47
         $lookingIn =~ m/^(.*\/)[^\/]+\//;
48
         $lookingIn = $1;
49
         print "$lookingIn\n" if $TESTING;
50
         if (-e $lookingIn . ($configuration_file ? $configuration_file : $filename) . '.conf' ) {
51
            $directories = $lookingIn;
52
            $lookingIn = '';
53
         }
54
      }
55
   }
56
   $configuration_file = $directories . ($configuration_file ? $configuration_file : $filename) . '.conf'; # add the .conf
57
#   print "$configuration_file\n";
58
#   die;
59
   open CONFFILE, "<$configuration_file" or die "Can not open configuration file $configuration_file";
60
   my $confFileContents = join( '', <CONFFILE> );
61
   close CONFFILE;
62
   return $confFileContents;
63
}
64
 
65
sub readFile {
66
   my $filename = shift;
67
   open DATAFILE,"<$filename" or return ''; # open the file
68
   my @contents = <DATAFILE>;
69
   close DATAFILE;
70
   #while (@contents and ($contents[0] !~ m/^[\[<]sysinfo/)) { # skip past any header stuff
71
   #   shift @contents; # just throw it away
72
   #}
73
   return join('',@contents);
74
}
75
 
76
 
77
sub getReportDate {
78
   my $filename = shift;
79
   my $date = '';
80
   my $format;
81
   my $version;
82
   if (my $contents = &readFile( $filename )) {
83
      if ($contents =~ m/^\[report date\](\d+)$/m) {
84
         $date = $1;
85
         $format = 'winconf';
86
         $contents =~ m/^\s*version\s*=\s*([0-9.]+)/;
87
         $version = $1;
88
#         print "Old Style Format\n";
89
      } elsif ($contents =~ m/<report>.*<date>(\d{4}-\d{2}-\d{2} \d{2}:\d{2})<\/date>/s) {
90
         $date = $1;
91
         $date =~ s/[^0-9]//g;
92
         $format = 'xml';
93
         $contents =~ m/<version>([0-9.]+)<\/version>/;
94
         $version = $1;
95
#         print "XML Format $date\n";
96
      } elsif ($contents =~ m/^\s+date:\s+"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})"$/m) {
97
         $date = $1;
98
         $date =~ s/[^0-9]//g;
99
         $format = 'yaml';
100
         $contents =~ m/^\s+version:\s+([0-9.]+)$/m;
101
         $version = $1;
102
#         print "YAML format\n";
103
      }
104
   }
105
   return ($date, $format, $version);
106
}
107
 
108
#print join "\n", @ARGV;
109
while (@ARGV) {
110
   push @mailDir, shift;
111
}
112
#@mailDir = @ARGV if @ARGV;
113
 
114
BEGIN{
115
   # load the configuration file
116
   eval ( &loadConfigurationFile('process_sysinfo') );
117
   push @INC, $LIBRARIES;
118
}
119
 
120
#@@mailDir = @ARGV if @ARGV;
121
 
122
#print '[' . join("\n",@mailDir) . ']';
123
#die;
124
my @fileList;  # global that will hold the list of all files, formatted datetime\tfilename
125
while ( $directory = shift @mailDir ) { # while the user has passed in a directory to process
126
   #print "Processing $directory\n";
127
   #next;
128
   opendir (DATADIR,$directory)  || die "can't opendir $directory: $!"; # read the directory
129
   while ( my $thisFile = readdir(DATADIR) ) { # for each file
130
      #print "Looking at $thisFile\n";
131
      next if $thisFile =~ m/^\./; # skip if it is a "dot" file
132
      #print "It is not a dot file\n";
133
      next unless -f "$directory/$thisFile";
134
      $thisFile = $directory . '/' . $thisFile; # ok, get fully qualified path/filename
135
      print "Checking $thisFile\n" if $TESTING;
136
      my ($date, $format, $version) = &getReportDate($thisFile);
137
      unless ( $date && $format && $version ) {
138
         print "Skipping file $thisFile\n";
139
         next;
140
      }
141
      print "[$thisFile]\t[$date]\t[$format]\t[$version]\n" if $TESTING;
142
      push @fileList,"$date\t$thisFile\t$format\t$version"; # create an entry to be processed
143
   }
144
   closedir(DATADIR);
145
} # while
146
 
147
#print join( "\n", sort @fileList ) . "\n";
148
#die "\n";
149
 
150
#qx(mysql -u root computer_asset_manager < ./create_table.sql);
151
my $fileCount = @fileList;
152
my $thisFileNumber = 0;
153
my $tempFile = '/tmp/process_sysinfo.log';
154
unlink $tempFile if -e $tempFile;
155
foreach my $thisFile ( sort @fileList ) {
156
   exit if $thisFileNumber >= 5 and $TESTING > 4;
157
   print "Processing file $thisFileNumber of $fileCount [$thisFile]\n" if $TESTING;
158
 
159
   $thisFileNumber++;
160
   my ($date,$filename,$format, $version) = split ("\t", $thisFile);
161
   if ( my $SYSINFO = $SYSINFO{$format} ) {
162
      if ( $TESTING ) {
163
         print "\tProcessing with $SYSINFO\n";
164
         next;
165
      }
166
      open( SYSINFO, "|$SYSINFO >> $tempFile" ) or die "Could not open sysinfo at $SYSINFO\n";
167
      print SYSINFO &readFile($filename);
168
      close SYSINFO;
169
      if ( $? ) {# it worked
170
         &postProcess( $filename );
171
      }
172
   } else {
173
      warn "Error, no SYSINFO entry for format [$format]\n";
174
   }
175
   #my $messages = qx($SYSINFO < $filename);
176
   #$output .= $messages;
177
   #if ($messages !~ m/^ERROR:/) { # only post_process the file if no error occurred
178
   #   &postProcess( $filename );
179
   #}
180
}
181
 
182
my $endTime = `date`;
183
chomp $endTime;
184
chomp $startTime;
185
print "\nBegan Processing at $startTime\nFinished at $endTime\n$fileCount files processed";
186
open LOG, "<$tempFile" or die "Could not read Log File $tempFile: $!";
187
while (my $line = <LOG>) {
188
   print $line;
189
}
190
close LOG;
191
 
192
1;