Disk usage module checkin
authorJamie Cameron <jcameron@webmin.com>
Fri, 14 Jan 2011 19:14:54 +0000 (11:14 -0800)
committerJamie Cameron <jcameron@webmin.com>
Fri, 14 Jan 2011 19:14:54 +0000 (11:14 -0800)
25 files changed:
disk-usage/close.cgi [new file with mode: 0755]
disk-usage/config [new file with mode: 0644]
disk-usage/config-*-linux [new file with mode: 0644]
disk-usage/config-freebsd [new file with mode: 0644]
disk-usage/config-netbsd [new file with mode: 0644]
disk-usage/config-openbsd [new file with mode: 0644]
disk-usage/config-solaris [new file with mode: 0644]
disk-usage/config.info [new file with mode: 0644]
disk-usage/config.info.de [new file with mode: 0644]
disk-usage/config.info.es [new file with mode: 0644]
disk-usage/edit_sched.cgi [new file with mode: 0755]
disk-usage/images/.xvpics/icon.gif [new file with mode: 0644]
disk-usage/images/close.gif [new file with mode: 0644]
disk-usage/images/icon.gif [new file with mode: 0644]
disk-usage/images/open.gif [new file with mode: 0644]
disk-usage/images/smallicon.gif [new file with mode: 0644]
disk-usage/index.cgi [new file with mode: 0755]
disk-usage/lang/de [new file with mode: 0644]
disk-usage/lang/en [new file with mode: 0644]
disk-usage/lang/es [new file with mode: 0644]
disk-usage/module.info [new file with mode: 0644]
disk-usage/open.cgi [new file with mode: 0755]
disk-usage/run.cgi [new file with mode: 0755]
disk-usage/save_sched.cgi [new file with mode: 0755]
disk-usage/usage.pl [new file with mode: 0755]

diff --git a/disk-usage/close.cgi b/disk-usage/close.cgi
new file mode 100755 (executable)
index 0000000..106aad6
--- /dev/null
@@ -0,0 +1,10 @@
+#!/usr/local/bin/perl
+# Remove some directory from the open list
+
+require './disk-usage-lib.pl';
+&ReadParse();
+@heiropen = &get_heiropen();
+@heiropen = grep { $_ ne $in{'what'} } @heiropen;
+&save_heiropen(\@heiropen);
+&redirect("index.cgi#$in{'what'}");
+
diff --git a/disk-usage/config b/disk-usage/config
new file mode 100644 (file)
index 0000000..4308aab
--- /dev/null
@@ -0,0 +1,4 @@
+dirs=/tmp
+units=1048576
+min=0
+xdev=0
diff --git a/disk-usage/config-*-linux b/disk-usage/config-*-linux
new file mode 100644 (file)
index 0000000..a538548
--- /dev/null
@@ -0,0 +1,6 @@
+dirs=/tmp
+units=1048576
+min=0
+xdev=0
+bsize=512
+fs=nfs nfs4 smbfs proc devpty devfs usbdevfs sysfs rpc_pipefs autofs
diff --git a/disk-usage/config-freebsd b/disk-usage/config-freebsd
new file mode 100644 (file)
index 0000000..b5f9c15
--- /dev/null
@@ -0,0 +1,6 @@
+dirs=/tmp
+units=1048576
+min=0
+xdev=0
+bsize=512
+fs=nfs procfs kernfs linprocfs portal smbfs
diff --git a/disk-usage/config-netbsd b/disk-usage/config-netbsd
new file mode 100644 (file)
index 0000000..b5f9c15
--- /dev/null
@@ -0,0 +1,6 @@
+dirs=/tmp
+units=1048576
+min=0
+xdev=0
+bsize=512
+fs=nfs procfs kernfs linprocfs portal smbfs
diff --git a/disk-usage/config-openbsd b/disk-usage/config-openbsd
new file mode 100644 (file)
index 0000000..b5f9c15
--- /dev/null
@@ -0,0 +1,6 @@
+dirs=/tmp
+units=1048576
+min=0
+xdev=0
+bsize=512
+fs=nfs procfs kernfs linprocfs portal smbfs
diff --git a/disk-usage/config-solaris b/disk-usage/config-solaris
new file mode 100644 (file)
index 0000000..fe95892
--- /dev/null
@@ -0,0 +1,6 @@
+dirs=/tmp
+units=1048576
+min=0
+xdev=0
+bsize=512
+fs=nfs devfs ctfs proc mntfs objfs fs autofs
diff --git a/disk-usage/config.info b/disk-usage/config.info
new file mode 100644 (file)
index 0000000..a05fc24
--- /dev/null
@@ -0,0 +1,7 @@
+dirs=Directories to index,9,50,5,\t
+skip=Directories to skip,9,50,3,\t
+fs=Filesystem types to skip,0
+units=Minumum units for sizes,1,1-bytes,1024-kB,1048576-MB,1073741824-GB
+min=Minimum directory size to display,0,10,,bytes
+xdev=Limit search to one filesystem?,1,1-Yes,0-No
+bsize=Filesystem block size (in bytes),3,Unknown
diff --git a/disk-usage/config.info.de b/disk-usage/config.info.de
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/disk-usage/config.info.es b/disk-usage/config.info.es
new file mode 100644 (file)
index 0000000..3143923
--- /dev/null
@@ -0,0 +1,7 @@
+dirs=Directorios a indexar,9,50,5,\t
+skip=Directorios a ignorar,9,50,3,\t
+fs=Tipos de sistemas de archivos a ignorar,0
+units=Unidades m&#237;nimas para tama&#241;os,1,1-bytes,1024-kB,1048576-MB,1073741824-GB
+min=Tama&#241;o m&#237;nimo de directorio a mostrar,0,10,,bytes
+xdev=&#191;Limitar b&#250;squeda a un sistema de archivos?,1,1-S&#237;,0-No
+bsize=Tama&#241;o de bloque de sistema de archivos (en bytes),3,Desconocido
diff --git a/disk-usage/edit_sched.cgi b/disk-usage/edit_sched.cgi
new file mode 100755 (executable)
index 0000000..944703f
--- /dev/null
@@ -0,0 +1,29 @@
+#!/usr/local/bin/perl
+# Show a form for setting up scheduled collection
+
+require './disk-usage-lib.pl';
+&foreign_require("cron", "cron-lib.pl");
+&ui_print_header(undef, $text{'sched_title'}, "");
+$job = &find_cron_job();
+
+print &ui_form_start("save_sched.cgi");
+print &ui_table_start($text{'sched_header'}, "width=100%", 2);
+
+print &ui_table_row($text{'sched_enabled'},
+                   &ui_radio("enabled", $job ? 1 : 0,
+                             [ [ 0, $text{'no'} ],
+                               [ 1, $text{'sched_at'} ] ]));
+
+print "<tr> <td colspan=2><table border width=100%>\n";
+$job ||= { 'mins' => 0,
+          'hours' => 0,
+          'days' => '*',
+          'months' => '*',
+          'weekdays' => '*' };
+&cron::show_times_input($job);
+print "</table></td> </tr>\n";
+
+print &ui_table_end();
+print &ui_form_end([ [ "save", $text{'save'} ] ]);
+
+&ui_print_footer("", $text{'index_return'});
diff --git a/disk-usage/images/.xvpics/icon.gif b/disk-usage/images/.xvpics/icon.gif
new file mode 100644 (file)
index 0000000..05cad8b
Binary files /dev/null and b/disk-usage/images/.xvpics/icon.gif differ
diff --git a/disk-usage/images/close.gif b/disk-usage/images/close.gif
new file mode 100644 (file)
index 0000000..c3c8522
Binary files /dev/null and b/disk-usage/images/close.gif differ
diff --git a/disk-usage/images/icon.gif b/disk-usage/images/icon.gif
new file mode 100644 (file)
index 0000000..2d9464d
Binary files /dev/null and b/disk-usage/images/icon.gif differ
diff --git a/disk-usage/images/open.gif b/disk-usage/images/open.gif
new file mode 100644 (file)
index 0000000..a7d096a
Binary files /dev/null and b/disk-usage/images/open.gif differ
diff --git a/disk-usage/images/smallicon.gif b/disk-usage/images/smallicon.gif
new file mode 100644 (file)
index 0000000..fe26190
Binary files /dev/null and b/disk-usage/images/smallicon.gif differ
diff --git a/disk-usage/index.cgi b/disk-usage/index.cgi
new file mode 100755 (executable)
index 0000000..362e0de
--- /dev/null
@@ -0,0 +1,65 @@
+#!/usr/local/bin/perl
+# Show the disk usage tree
+
+require './disk-usage-lib.pl';
+@dirs = split(/\t+/, $config{'dirs'});
+$fors = &text(@dirs > 1 ? 'index_fors' : 'index_for',
+             join(" ", map { "<tt>$_</tt>" } @dirs));
+&ui_print_header($fors, $module_info{'desc'}, "", undef, 1, 1);
+
+$tree = &get_usage_tree();
+if ($tree) {
+       # Show it
+       %open = map { $_, 1 } &get_heiropen();
+       $open{"/"} = 1;
+       print "<table width=100%>\n";
+       print "<tr>\n";
+       print "<td width=10%><b>$text{'index_total'}</b></td>\n";
+       print "<td width=10%><b>$text{'index_files'}</b></td>\n";
+       print "<td width=80%><b>$text{'index_dir'}</b></td>\n";
+       print "</tr>\n";
+       &traverse($tree, 0);
+       print "</table>\n";
+       }
+else {
+       print "<b>$text{'index_none'}</b><p>\n";
+       }
+
+print "<hr>\n";
+print &ui_buttons_start();
+print &ui_buttons_row("edit_sched.cgi",
+                     $text{'index_sched'}, $text{'index_scheddesc'});
+print &ui_buttons_row("run.cgi",
+                     $text{'index_run'}, $text{'index_rundesc'});
+print &ui_buttons_end();
+
+&ui_print_footer("/", $text{'index'});
+
+sub traverse
+{
+local ($node, $indent) = @_;
+return if ($node->{'total'} < $config{'min'});
+print "<tr>\n";
+print "<td>",&nice_size($node->{'total'}, $config{'units'}),"</td>\n";
+print "<td>",&nice_size($node->{'files'}, $config{'units'}),"</td>\n";
+print "<td>", "&nbsp;" x ($indent*3);
+if ($node->{'dir'} ne "/") {
+       print "<a name=\"$node->{'dir'}\">\n";
+       $act = $open{$node->{'dir'}} ? "close" : "open";
+       print "<a href=\"$act.cgi?what=",&urlize($node->{'dir'}),"\">";
+       print "<img border=0 src=images/$act.gif></a>\n";
+       }
+else {
+       print "<img src=images/close.gif>\n";
+       }
+print "<tt>$node->{'dir'}</tt></td>\n";
+print "</tr>\n";
+if ($open{$node->{'dir'}}) {
+       # Do sub-directories too
+       foreach my $subdir (sort { $b->{'total'} <=> $a->{'total'} }
+                                @{$node->{'subs'}}) {
+               &traverse($subdir, $indent+1);
+               }
+       }
+}
+
diff --git a/disk-usage/lang/de b/disk-usage/lang/de
new file mode 100644 (file)
index 0000000..509b980
--- /dev/null
@@ -0,0 +1,16 @@
+index_dir=Verzeichnis
+index_files=Dateien
+index_for=F&#252;r Verzeichnis &#167;1
+index_fors=F&#252;r Verzeichnisse $1
+index_none=Es ist noch kein Festplattenverbrauch analysiert. Erstellen Sie entweder eine geplante Analyse oder dr&#252;cken Sie auf den Button unten.
+index_run=Analysiere jetzt
+index_sched=Erstelle geplante Analyse
+index_total=Gesamt
+run_doing=Analysiere jetzt Festplattenplatz ...
+run_done=... Fertig!
+run_title=Analysiere Festplattenplatz
+sched_at=Ja, zu den unten gew&#228;hlten Einstellungen.
+sched_enabled=Geplante Analyse aktiviert?
+sched_header=Optionen
+sched_title=Geplante Analyse
+shed_err=Fehler bei der Analyse
diff --git a/disk-usage/lang/en b/disk-usage/lang/en
new file mode 100644 (file)
index 0000000..80df46e
--- /dev/null
@@ -0,0 +1,22 @@
+index_none=No disk usage data has been collected yet. Either set up scheduled collection, or use the button below to collect data now.
+index_sched=Setup Scheduled Collection
+index_scheddesc=Click this button to set up the automatic scheduled collection of disk usage data for the configured directories.
+index_run=Collect Usage Now
+index_rundesc=Click here to scan the configured directories immediately to compute their disk usage.
+index_for=For directory $1
+index_fors=For directories $1
+index_return=usage tree
+index_dir=Directory
+index_total=Total
+index_files=Files
+
+run_title=Collect Usage
+run_doing=Now collecting disk usage ..
+run_done=.. done.
+
+sched_title=Scheduled Collection
+sched_header=Scheduled disk usage collection options
+sched_enabled=Scheduled collection enabled?
+sched_at=Yes, at times selected below ..
+sched_err=Failed to save scheduled collection
+__norefs=1
diff --git a/disk-usage/lang/es b/disk-usage/lang/es
new file mode 100644 (file)
index 0000000..d1455b7
--- /dev/null
@@ -0,0 +1,19 @@
+index_dir=Directorio
+index_files=Archivos
+index_for=Para directorio $1
+index_fors=Para directorios $1
+index_none=A&#250;n no se han recogido datos de uso de disco. Puede configurar una recogida de datos planificada, o utilizar el bot&#243;n inferior para recoger datos ahora.
+index_return=arbol de uso
+index_run=Recoger Uso Ahora
+index_rundesc=Pulse aqu&#237; para recorrer los directorios configurados inmediatamente y calcular su uso de disco.
+index_sched=Configurar Recogida Planificada
+index_scheddesc=Pulse este bot&#243;n para configurar la recogida planificada autom&#225;tica de datos de uso de disco para los directorios configurados.
+index_total=Total
+run_doing=Recogiendo uso de disco ..
+run_done=.. hecho
+run_title=Recoger Uso
+sched_at=Si, a las horas seleccionadas abajo ..
+sched_enabled=&#191;Recogida planificada habilitada?
+sched_err=Fallo al salvar recogida planificada
+sched_header=Opciones de recogida planificada de datos de uso de disco
+sched_title=Recogida Planificada
diff --git a/disk-usage/module.info b/disk-usage/module.info
new file mode 100644 (file)
index 0000000..9c72da0
--- /dev/null
@@ -0,0 +1,5 @@
+desc=Disk Usage
+depends=cron
+version=1.1
+desc_es=Uso de Disco
+desc_de=Festplattenverbrauch
diff --git a/disk-usage/open.cgi b/disk-usage/open.cgi
new file mode 100755 (executable)
index 0000000..ebf4c93
--- /dev/null
@@ -0,0 +1,10 @@
+#!/usr/local/bin/perl
+# Add some directory to the open list
+
+require './disk-usage-lib.pl';
+&ReadParse();
+@heiropen = &get_heiropen();
+push(@heiropen, $in{'what'});
+&save_heiropen(\@heiropen);
+&redirect("index.cgi#$in{'what'}");
+
diff --git a/disk-usage/run.cgi b/disk-usage/run.cgi
new file mode 100755 (executable)
index 0000000..f115753
--- /dev/null
@@ -0,0 +1,13 @@
+#!/usr/local/bin/perl
+# Build the usage tree now
+
+require './disk-usage-lib.pl';
+&ui_print_unbuffered_header(undef, $text{'run_title'}, "");
+
+print $text{'run_doing'},"<br>\n";
+$root = &build_root_usage_tree([ split(/\t+/, $config{'dirs'}) ]);
+&save_usage_tree($root);
+print $text{'run_done'},"<p>\n";
+
+&ui_print_footer("", $text{'index_return'});
+
diff --git a/disk-usage/save_sched.cgi b/disk-usage/save_sched.cgi
new file mode 100755 (executable)
index 0000000..5b01d05
--- /dev/null
@@ -0,0 +1,28 @@
+#!/usr/local/bin/perl
+# Create, update or edit the scheduled checking job
+
+require './disk-usage-lib.pl';
+&foreign_require("cron", "cron-lib.pl");
+&error_setup($text{'sched_err'});
+$oldjob = $job = &find_cron_job();
+&ReadParse();
+
+if ($in{'enabled'}) {
+       # Validate inputs
+       $job ||= { 'user' => 'root',
+                  'command' => $cron_cmd,
+                  'active' => 1 };
+       &cron::parse_times_input($job, \%in);
+       if ($oldjob) {
+               &cron::change_cron_job($job);
+               }
+       else {
+               &cron::create_cron_job($job);
+               }
+       &cron::create_wrapper($cron_cmd, $module_name, "usage.pl");
+       }
+else {
+       &cron::delete_cron_job($job) if ($job);
+       }
+&redirect("");
+
diff --git a/disk-usage/usage.pl b/disk-usage/usage.pl
new file mode 100755 (executable)
index 0000000..dfd37d1
--- /dev/null
@@ -0,0 +1,9 @@
+#!/usr/local/bin/perl
+# Count up usage for selected directories
+
+$no_acl_check = 1;
+require './disk-usage-lib.pl';
+
+$root = &build_root_usage_tree([ split(/\t+/, $config{'dirs'}) ]);
+&save_usage_tree($root);
+