/usr/bin/wg-diskUsage is in webgui 7.10.29-3.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | #!/usr/bin/perl
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2009 Plain Black Corporation.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#-------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#-------------------------------------------------------------------
use strict;
use File::Basename ();
use File::Spec;
my $webguiRoot;
BEGIN {
$webguiRoot = '/usr/share/webgui';
unshift @INC, File::Spec->catdir($webguiRoot, 'lib');
}
use Getopt::Long;
use Pod::Usage;
use WebGUI::Session;
use WebGUI::Asset;
my $configFile;
my $quiet;
my $assetId;
my $assetUrl;
my $summarize = 0;
my $blockSize = 1;
my $recurse = 1;
my $help;
$| = 1; # No buffering
GetOptions(
'configFile=s'=>\$configFile, # WebGUI Config file
'assetId=s' =>\$assetId, # AssetId to start with (optional) uses default page if not specified.
'assetUrl=s' =>\$assetUrl, # AssetUrl to start with (optional) uses default page if not specified
'quiet' =>\$quiet, # No output except for numeric file size (default unit is bytes, will use blockSize if specified)
'summary!' =>\$summarize, # Displays total space used for asset and descendants (unless recurse flag is set to false in which case only the asset specified will be used)
'blockSize=i' =>\$blockSize, # Change units in which space used is specified, defaults to bytes.
'recurse!' =>\$recurse, # Flag indicating whether the disk space usage should consider asset and all descendants (default) or just the asset specified.
'help!' =>\$help,
);
pod2usage( verbose => 2 ) if $help;
pod2usage() unless $configFile;
my $session = start();
du();
finish($session);
#-------------------------------------------------
sub start {
my $session = WebGUI::Session->open($webguiRoot,$configFile);
$session->user({userId=>3});
return $session;
}
#-------------------------------------------------
sub finish {
my $session = shift;
$session->var->end();
$session->close();
}
#-------------------------------------------------------
sub du {
my $asset;
my $totalSize; # disk space used
if ($assetId) { # They specified an assetId to start with
$asset = WebGUI::Asset->newByDynamicClass($session,$assetId);
die ("Unable to instanciate asset $assetId") unless defined $asset;
print "\nStarting with asset $assetId...\n" unless $quiet;
}
elsif ($assetUrl) { # They specified an assetUrl to start with
$asset = WebGUI::Asset->newByUrl($session,$assetUrl);
die ("Unable to instanciate asset with URL $assetUrl") unless defined $asset;
print "\nStarting with asset url $assetUrl...\n" unless $quiet;
}
else { # No id specified, assume they want to start with the site's home page
$asset = WebGUI::Asset->getDefault($session);
die ("Unable to instanciate the WebGUI Default Page. Something is seriously broken.") unless defined $asset;
print "\nStarting with the Default Page...\n" unless $quiet;
}
my $lineage = ["self"];
push (@$lineage, "descendants") if $recurse;
my $descendants = $asset->getLineage($lineage,{returnObjects=>1});
foreach my $currentAsset (@$descendants) {
my $size = $currentAsset->get("assetSize");
$size = $size / $blockSize; # convert to blockSize specified
$totalSize += $size;
$size = sprintf("%.2f", $size) unless ($blockSize == 1); # No point in printing .00 after everything
print "$size\t".$currentAsset->getUrl."\n" unless ($quiet || $summarize);
}
# Format to a whole number unless the total is less than 1. If it's less than 1 attempt to display 2 digits of precision to avoid displaying a zero size.
unless ($totalSize < 1) {
$totalSize = sprintf("%.0f", $totalSize);
}
else {
$totalSize = sprintf("%.2f", $totalSize);
}
unless ($quiet) { # Human readable
# try to come up with an intellegible label for the output
my $units;
if ($blockSize == 1) { # bytes
$units = "bytes";
} elsif ($blockSize == 1000 || $blockSize == 1024) { # kilobytes
$units = "Kb";
} elsif ($blockSize == 1000*1000 || $blockSize == 1024*1024) { # megabytes
$units = "Mb";
} else { # Unknown units
$units = "units";
}
print "\nTotal Space used: $totalSize $units \n\n";
}
else { # return script friendly output of the size only.
print $totalSize;
}
}
__END__
=head1 NAME
diskUsage - Display amount of disk space used by a WebGUI asset
an its desecendants.
=head1 SYNOPSIS
diskUsage --configFile config.conf
[--assetId id]
[--assetUrl url]
[--blockSize bytes]
[--norecurse]
[--quiet]
[--summary]
diskUsage --help
=head1 DESCRIPTION
This WebGUI utility script displays the amount of disk space used by
an asset and it's descendants. It has been modeled after the *nix 'du'
utility.
=over
=item B<--configFile config.conf>
The WebGUI config file to use. Only the file name needs to be specified,
since it will be looked up inside WebGUI's configuration directory.
This parameter is required.
=item B<--assetId id>
Calculate disk usage starting from WebGUI's Asset identified by B<id>.
If this parameter is not supplied, calculations will start from
WebGUI's default page as defined in the Site settings.
=item B<--assetUrl url>
Calculate disk usage starting from the particular URL given by B<url>,
which must be relative to the server (e.g. B</home> instead of
B<http://your.server/home>). If this parameter is not supplied, calculations
will start from WebGUI's default page as defined in the Site settings.
=item B<--blockSize bytes>
Use B<bytes> as scaling factor to change the units in which disk space
will be reported. If this parameter is not supplied, it defaults to B<1>,
hence the results will be expressed in bytes. If you want to have kb,
use B<--blockSize 1024>.
=item B<--norecurse>
Prevent recursive calculation of disk space. This effectively computes
the used disk space for the starting Asset only, without including
its descendants.
=item B<--quiet>
Just display the total amount of disk space as a raw value.
=item B<--summary>
Just display the total amount of disk space in a human readable format.
=item B<--help>
Shows this documentation, then exits.
=back
=head1 AUTHOR
Copyright 2001-2009 Plain Black Corporation.
=cut
|