forked from plainblack/webgui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
diskUsage.pl
161 lines (129 loc) · 5.3 KB
/
diskUsage.pl
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
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2007 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 lib "../lib";
use Getopt::Long;
use strict;
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,
);
if ($help || !$configFile) {
print <<__EOH;
usage perl $0
Description: This utility is modeled after the *nix 'du' utility.
It displays the amount of disk space used by an asset and
it's descendants.
Options:
--assetId AssetId to use as starting point for calculating
disk usage. Defaults to the WebGUI default page
defined in the sites settings.
--assetUrl Relative asset URL to use as starting point for
calculating (i.e., /home) disk usage. Defaults to the
WebGUI default page defined in the sites settings.
--blockSize Numeric value to change the unit of measure for
the amount of disk space used. Defaults to 1
(bytes)
--help Display this help message
--norecurse Returns the disk space used by the starting asset only.
--quiet Display nothing but the amount of disk space used.
This value will respect the blockSize and recurse
parameters when calculating it's output.
--summary Display only the total amount of disk space used in a
human readable format.
--configFile WebGUI config file to use. This parameter is required.
__EOH
exit;
}
my $session = start();
du();
finish($session);
#-------------------------------------------------
sub start {
my $session = WebGUI::Session->open("../",$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;
}
}