5 =head1 NAME $RCSfile: updateccstorage.pl,v $
15 Andrew DeFaria <Andrew@ClearSCM.com>
23 Mon Dec 13 09:13:27 EST 2010
27 $Date: 2011/06/16 15:12:50 $
33 Usage updateccstorage.pl: [-u|sage] [-ve|rbose] [-deb|ug]
34 [-view [<tag>|all]| -vob [<tag>|all]]
37 -u|sage: Displays usage
40 -deb|ug: Output debug messages
42 -view [<tag>|all] Update view storage (Default: all)
43 -vob [<tag>|all] Update vob storage (Default: all)
44 -region [<region>|all] Update region (Default: all)
48 This script will record the state of Clearcase storage
58 use lib "$FindBin::Bin/lib", "$FindBin::Bin/../lib";
71 my $VERSION = '$Revision: 1.29 $';
72 ($VERSION) = ($VERSION =~ /\$Revision: (.*) /);
74 my $clearadm = Clearadm->new;
78 # Given a view tag, snapshot the storage sizes
79 sub snapshotViewStorage($$) {
80 my ($tag, $region) = @_;
87 my $view = Clearcase::View->new($tag, $region);
89 $viewstorage{private} = $view->viewPrivateStorage;
90 $viewstorage{db} = $view->viewDatabase;
91 $viewstorage{admin} = $view->viewAdmin;
92 $viewstorage{total} = $view->viewSpace;
94 my ($err, $msg) = $clearadm->AddViewStorage(%viewstorage);
96 error $msg, $err if $err;
98 $total{'Views snapshotted'}++;
100 updateView($tag, $region);
103 } # snapshotVobStorage
105 # Given a vob tag, snapshot the storage sizes
106 sub snapshotVobStorage($$) {
107 my ($tag, $region) = @_;
114 my $vob = Clearcase::Vob->new($tag, $region);
116 $vobstorage{admin} = $vob->admsize;
117 $vobstorage{db} = $vob->dbsize;
118 $vobstorage{cleartext} = $vob->ctsize;
119 $vobstorage{derivedobj} = $vob->dosize;
120 $vobstorage{source} = $vob->srcsize;
121 $vobstorage{total} = $vob->size;
123 my ($err, $msg) = $clearadm->AddVobStorage(%vobstorage);
125 error $msg, $err, if $err;
127 $total{'VOBs snapshotted'}++;
129 updateVob($tag, $region);
132 } # snapshotVobStorage
135 my ($tag, $region) = @_;
137 my ($err, $msg, $error, @output, $graph);
139 my %vob = $clearadm->GetVob($tag, $region);
141 for my $graphType (qw(admin cleartext db derivedobj source total)) {
142 #for my $graphType (qw(derivedobj)) {
143 # Windows vob tags begin with "\", which is problematic. The solution is to
146 $vobtag =~ s/^\\/\\\\/;
148 my $cmd = "plotstorage.cgi generate=1 type=vob storage=$graphType region=$region scaling=Day points=7 tag=$vobtag";
150 $graph = "${graphType}small";
152 verbose "Generating $graph for VOB $tag (Region: $region)";
154 ($error, @output) = Execute("$cmd tiny=1 2>&1");
156 error "Unable to generate $graph" . join("\n", @output), $error if $error;
158 $vob{$graph} = join '', @output;
159 $total{'VOB Graphs generated'}++;
161 $graph = "${graphType}large";
163 verbose "Generating $graph for VOB $tag (Region: $region)";
165 ($error, @output) = Execute("$cmd 2>&1");
167 error "Unable to generate $graph" . join("\n", @output), $error if $error;
169 $vob{$graph} = join '', @output;
170 $total{'VOB Graphs generated'}++;
174 ($err, $msg) = $clearadm->UpdateVob(%vob);
176 error "Unable to update VOB $tag (Region: $region) - $msg", $err if $err;
178 $total{'VOBs updated'}++;
181 $vob{region} = $region;
183 ($err, $msg) = $clearadm->AddVob(%vob);
185 error "Unable to add VOB $tag (Region: $region) - $msg", $err if $err;
187 $total{'VOBs added'}++;
194 my ($tag, $region) = @_;
196 my ($err, $msg, $error, @output, $graph);
198 my %view = $clearadm->GetView($tag, $region);
200 for my $graphType (qw(private db admin total)) {
201 my $cmd = "plotstorage.cgi generate=1 type=view storage=$graphType region=$region scaling=Day points=7 tag=$tag";
203 $graph = "${graphType}small";
205 verbose "Generating $graph for View $tag (Region: $region)";
207 ($error, @output) = Execute("$cmd tiny=1 2>&1");
209 error "Unable to generate $graph" . join("\n", @output), $error if $error;
211 $total{'View Graphs generated'}++;
213 $view{$graph} = join '', @output;
215 $graph = "${graphType}large";
217 verbose "Generating $graph for View $tag (Region: $region)";
219 ($error, @output) = Execute("$cmd 2>&1");
221 error "Unable to generate $graph" . join("\n", @output), $error if $error;
223 $total{'View Graphs generated'}++;
225 $view{$graph} = join '', @output;
229 ($err, $msg) = $clearadm->UpdateView(%view);
231 error "Unable to update View $tag (Region: $region) - $msg", $err if $err;
233 $total{'Views updated'}++;
236 $view{region} = $region;
238 ($err, $msg) = $clearadm->AddView(%view);
240 error "Unable to add VOB $tag (Region: $region) - $msg", $err if $err;
242 $total{'Views added'}++;
251 my $startTime = time;
255 'usage' => sub { Usage },
256 'verbose' => sub { set_verbose },
257 'debug' => sub { set_debug },
261 ) or Usage "Invalid parameter";
263 Usage 'Extraneous options: ' . join ' ', @ARGV if @ARGV;
265 unless ($opts{view} or $opts{vob}) {
270 $opts{region} ||= 'all';
273 verbose "$FindBin::Script V$VERSION";
275 if ($opts{view} and $opts{view} =~ /all/i) {
276 if ($opts{region} =~ /all/i) {
277 for my $region ($Clearcase::CC->regions) {
278 my $views = Clearcase::Views->new($region);
280 for my $view ($views->views) {
281 verbose "Snapshotting view $view in region $region";
283 snapshotViewStorage $view, $region;
287 my $views = Clearcase::Views->new($opts{region});
289 for my $view ($views->views) {
290 verbose "Snapshotting view $view in region $opts{region}";
292 snapshotViewStorage $view, $opts{region};
295 } elsif ($opts{view}) {
296 if ($opts{region} =~ /all/i) {
297 for my $region ($Clearcase::CC->regions) {
298 verbose "Snapshotting view $opts{view} in region $region";
300 snapshotViewStorage $opts{view}, $region;
303 verbose "Snapshotting view $opts{view} in region $opts{region}";
305 snapshotViewStorage $opts{view}, $opts{region};
309 if ($opts{vob} and $opts{vob} =~ /all/i) {
310 if ($opts{region} =~ /all/i) {
311 for my $region ($Clearcase::CC->regions) {
312 my $vobs = Clearcase::Vobs->new(undef, $region);
314 for my $vob ($vobs->vobs) {
315 verbose "Snapshotting vob $vob in region $region";
317 snapshotVobStorage $vob, $region;
321 my $vobs = Clearcase::Vobs->new(undef, $opts{region});
323 for my $vob ($vobs->vobs) {
324 verbose "Snapshotting vob $vob in region $opts{region}";
326 snapshotVobStorage $vob, $opts{region};
329 } elsif ($opts{vob}) {
330 if ($opts{region} =~ /all/i) {
331 for my $region ($Clearcase::CC->regions) {
332 verbose "Snapshotting vob $opts{vob} in region $region";
334 snapshotVobStorage $opts{vob}, $region;
337 verbose "Snapshotting vob $opts{vob} in region $opts{region}";
339 snapshotVobStorage $opts{vob}, $opts{region};
345 display_duration $startTime;
350 =head1 CONFIGURATION AND ENVIRONMENT
352 DEBUG: If set then $debug is set to this level.
354 VERBOSE: If set then $verbose is set to this level.
356 TRACE: If set then $trace is set to this level.
364 L<Getopt::Long|Getopt::Long>
366 L<Net::Domain|Net::Domain>
368 =head2 ClearSCM Perl Modules
383 <a href="http://clearscm.com/php/scm_man.php?file=clearadm/lib/Clearadm.pm">Clearadm</a><br>
384 <a href="http://clearscm.com/php/scm_man.php?file=clearadm/lib/Clearcase/Vobs.pm">Clearcase::Vobs</a><br>
385 <a href="http://clearscm.com/php/scm_man.php?file=clearadm/lib/Clearcase/Vobs.pm">Clearcase::Vob</a><br>
386 <a href="http://clearscm.com/php/scm_man.php?file=clearadm/lib/Clearcase/Views.pm">Clearcase::Views</a><br>
387 <a href="http://clearscm.com/php/scm_man.php?file=clearadm/lib/Clearcase/View.pm">Clearcase::View</a><br>
388 <a href="http://clearscm.com/php/scm_man.php?file=lib/DateUtils.pm">DateUtils</a><br>
389 <a href="http://clearscm.com/php/scm_man.php?file=lib/Display.pm">Display</a><br>
390 <a href="http://clearscm.com/php/scm_man.php?file=lib/Utils.pm">Utils</a><br>
395 =head1 BUGS AND LIMITATIONS
397 There are no known bugs in this script
399 Please report problems to Andrew DeFaria <Andrew@ClearSCM.com>.
401 =head1 LICENSE AND COPYRIGHT
403 Copyright (c) 2010, ClearSCM, Inc. All rights reserved.