Allow patterns in check file monitor
authorJamie Cameron <jcameron@webmin.com>
Fri, 26 Mar 2010 07:42:21 +0000 (00:42 -0700)
committerJamie Cameron <jcameron@webmin.com>
Fri, 26 Mar 2010 07:42:21 +0000 (00:42 -0700)
status/CHANGELOG
status/file-monitor.pl
status/lang/en

index 45f01c0..5d7b152 100644 (file)
@@ -70,3 +70,5 @@ Added a button to the main page for refreshing only selected monitors, thanks to
 ---- Changes since 1.500 ----
 Added an option to the Disk Space monitor to alert based on percentage free, as an alternative to a threshold in bytes.
 Put back the option to use Cingular as an SMS carrier.
+---- Changes since 1.510 ----
+The Check File or Directory monitor can now use a pattern like /tmp/* to check sizes for all files in a directory.
index d7b68f9..51a2fe5 100755 (executable)
@@ -3,42 +3,66 @@
 
 sub get_file_status
 {
-local @st = stat($_[0]->{'file'});
-local $size;
-if ($_[0]->{'test'} >= 2) {
-       $size = -d $_[0]->{'file'} ? &disk_usage_kb($_[0]->{'file'})*1024
-                                  : $st[7];
+local @files;
+if ($_[0]->{'file'} =~ /\*|\?/) {
+       @files = glob($_[0]->{'file'});
        }
-if ($_[0]->{'test'} == 0) {
-       $up = @st ? 1 : 0;
+else {
+       @files = ( $_[0]->{'file'} );
        }
-elsif ($_[0]->{'test'} == 1) {
-       $up = @st ? 0 : 1;
+my $allup = 1;
+foreach my $f (@files) {
+       local @st = stat($f);
+       local $size;
+       if ($_[0]->{'test'} >= 2) {
+               $size = -d $f ? &disk_usage_kb($f)*1024 : $st[7];
+               }
+       if ($_[0]->{'test'} == 0) {
+               $up = @st ? 1 : 0;
+               }
+       elsif ($_[0]->{'test'} == 1) {
+               $up = @st ? 0 : 1;
+               }
+       elsif ($_[0]->{'test'} == 2) {
+               $up = $size > $_[0]->{'greater'} ? 1 : 0;
+               }
+       elsif ($_[0]->{'test'} == 3) {
+               $up = $size < $_[0]->{'lesser'} ? 1 : 0;
+               }
+       if (!$up) {
+               $allup = 0;
+               push(@allfiles, $f);
+               }
        }
-elsif ($_[0]->{'test'} == 2) {
-       $up = $size > $_[0]->{'greater'} ? 1 : 0;
+my $desc;
+if (@files > 1 && @allfiles) {
+       $desc = join(" ", @allfiles);
+       if ($_[0]->{'test'} == 2) {
+               $desc = &text('file_esmall', $desc);
+               }
+       elsif ($_[0]->{'test'} == 3) {
+               $desc = &text('file_elarge', $desc);
+               }
        }
-elsif ($_[0]->{'test'} == 3) {
-       $up = $size < $_[0]->{'lesser'} ? 1 : 0;
-       }
-return { 'up' => $up };
+return { 'up' => $up,
+        'desc' => $desc };
 }
 
 sub show_file_dialog
 {
 print &ui_table_row($text{'file_file'},
-       &ui_textbox("file", $_[0]->{'file'}, 50), 3);
+&ui_textbox("file", $_[0]->{'file'}, 50), 3);
 
 print &ui_table_row($text{'file_test'},
-       &ui_radio("test", int($_[0]->{'test'}),
-               [ [ 0, $text{'file_test_0'}."<br>" ],
-                 [ 1, $text{'file_test_1'}."<br>" ],
-                 [ 2, $text{'file_test_2'}.
-                      &ui_textbox("greater", $_[0]->{'greater'}, 10)." ".
-                      $text{'file_bytes'}."<br>" ],
-                 [ 3, $text{'file_test_3'}.
-                      &ui_textbox("lesser", $_[0]->{'lesser'}, 10)." ".
-                      $text{'file_bytes'}."<br>" ] ]), 3);
+&ui_radio("test", int($_[0]->{'test'}),
+       [ [ 0, $text{'file_test_0'}."<br>" ],
+         [ 1, $text{'file_test_1'}."<br>" ],
+         [ 2, $text{'file_test_2'}.
+              &ui_textbox("greater", $_[0]->{'greater'}, 10)." ".
+              $text{'file_bytes'}."<br>" ],
+         [ 3, $text{'file_test_3'}.
+              &ui_textbox("lesser", $_[0]->{'lesser'}, 10)." ".
+              $text{'file_bytes'}."<br>" ] ]), 3);
 }
 
 sub parse_file_dialog
@@ -47,7 +71,7 @@ $in{'file'} || &error($text{'file_efile'});
 $_[0]->{'file'} = $in{'file'};
 $_[0]->{'test'} = $in{'test'};
 $in{'greater'} =~ /^\d*$/ && $in{'lesser'} =~ /^\d*$/ ||
-       &error($text{'file_esize'});
+&error($text{'file_esize'});
 $_[0]->{'greater'} = $in{'greater'};
 $_[0]->{'lesser'} = $in{'lesser'};
 }
index 7347573..c0d2e0b 100644 (file)
@@ -216,7 +216,7 @@ proc_easuser=User for process to run as does not exist
 exec_cmd=Command to check exit status of
 exec_ecmd=Missing command
 
-file_file=File or directory to check
+file_file=File, directory or pattern to check
 file_test=Test to perform
 file_test_0=Must exist
 file_test_1=Must not exist
@@ -225,6 +225,8 @@ file_test_3=Size must be smaller than
 file_bytes=bytes
 file_efile=Missing file or directory name to check
 file_esize=Invalid file size
+file_elarge=Files too large : $1
+file_esmall=Files too small : $1
 
 traffic_iface=Interface to monitor
 traffic_bytes=Maximum bytes/second