Removed /usr/local from CDPATH
[clearscm.git] / clearadm / vobservers.cgi
1 #!/usr/local/bin/perl
2
3 =pod
4
5 =head1 NAME $RCSfile: vobservers.cgi,v $
6
7 View Details
8
9 =head1 VERSION
10
11 =over
12
13 =item Author
14
15 Andrew DeFaria <Andrew@ClearSCM.com>
16
17 =item Revision
18
19 $Revision: 1.9 $
20
21 =item Created:
22
23 Mon Oct 25 11:10:47 PDT 2008
24
25 =item Modified:
26
27 $Date: 2011/01/02 15:25:42 $
28
29 =back
30
31 =head1 SYNOPSIS
32
33  Usage vobservers.cgi: [-u|sage] [-r|egion <region>]
34                        [-ve|rbose] [-d|ebug]
35
36  Where:
37    -u|sage:           Displays usage
38    -r|egion <region>: Region to use when looking for the view
39
40    -ve|rbose:         Be verbose
41    -d|ebug:           Output debug messages
42
43 =head1 DESCRIPTION
44
45 This script display the details for all vob servers in the region
46
47 =cut
48
49 use strict;
50 use warnings;
51
52 use FindBin;
53 use Getopt::Long;
54 use CGI qw(:standard :cgi-lib *table start_Tr end_Tr start_ol end_ol);
55 use CGI::Carp 'fatalsToBrowser';
56
57 use lib "$FindBin::Bin/lib", "$FindBin::Bin/../lib";
58
59 use ClearadmWeb;
60 use Clearcase;
61 use Clearcase::Server;
62 use Clearcase::Vobs;
63 use Clearcase::Vob;
64 use Display;
65 use Utils;
66
67 my %opts = Vars;
68
69 $opts{region} ||= $Clearcase::CC->region if $Clearcase::CC;
70
71 my $subtitle = 'Vob Servers';
72
73 my $VERSION  = '$Revision: 1.9 $';
74   ($VERSION) = ($VERSION =~ /\$Revision: (.*) /);
75
76 sub DisplayVobs($) {
77   my ($server) = @_;
78
79   display h3 {
80     -class => 'center',
81   }, "Vobs on " . $server->name;
82
83   display start_table;
84
85   display start_Tr;
86     display th {
87       -class => 'labelCentered',
88       }, '#';
89     display th {
90     -class => 'labelCentered',
91       }, 'Tag';
92     display th {
93       -class => 'labelCentered',
94       }, 'Type';
95     display th {
96       -class => 'labelCentered',
97       }, 'Active';
98     display th {
99       -class => 'labelCentered',
100       }, 'Access Path';
101     display th {
102       -class => 'labelCentered',
103       }, 'Attributes';
104   display end_Tr;
105
106   my $i = 0;
107
108   my $vobs = Clearcase::Vobs->new($server->name);
109
110   for (sort $vobs->vobs) {
111     my $vob = Clearcase::Vob->new($_);
112
113     display start_Tr;
114       display td {
115         -class => 'dataCentered',
116       }, ++$i;
117       display td {
118         -class => 'data',
119       }, a {-href => "vobdetails.cgi?tag=" . $vob->tag}, $vob->tag;
120       display td {
121         -class => 'dataCentered',
122       }, $vob->access;
123       display td {
124         -class => 'dataCentered',
125       }, $vob->active;
126       display td {
127         -class => 'data',
128       }, $vob->access_path;
129       display td {
130         -class => 'data',
131       }, $vob->vob_registry_attributes;
132     display end_Tr;
133   } # for
134
135   display end_table;
136 } # DisplayVob
137
138 sub DisplayTable(@) {
139   my (@vobServers) = @_;
140
141   my $unknown = font {-class => 'unknown'}, 'Unknown';
142
143   display start_table {
144     -cellspacing    => 1,
145     -class          => 'main',
146   };
147
148   display start_Tr;
149     display th {
150       -class => 'labelCentered',
151       }, '#';
152     display th {
153       -class => 'labelCentered',
154       }, 'Server';
155     display th {
156       -class => 'labelCentered',
157       }, 'CC Version';
158     display th {
159       -class => 'labelCentered',
160       }, 'OS Version';
161     display th {
162       -class => 'labelCentered',
163       }, 'Hardware';
164     display th {
165       -class => 'labelCentered',
166       }, 'Registry Host';
167     display th {
168       -class => 'labelCentered',
169       }, 'Region';
170     display th {
171       -class => 'labelCentered',
172       }, 'License Host';
173   display end_Tr;
174
175   my $i = 0;
176
177   my $server;
178
179   for (@vobServers) {
180     $server = Clearcase::Server->new($_, $opts{region});
181
182     display start_Tr;
183       display td {
184         -class => 'dataCentered',
185       }, ++$i;
186       display td {
187         -class   => 'dataCentered',
188       }, a {-href => "systemdetails.cgi?system=" . $server->name}, $server->name;
189       display td {
190         -class => 'dataCentered',
191       }, $server->ccVer;
192       display td {
193         -class => 'dataCentered',
194       }, $server->osVer;
195       display td {
196         -class => 'dataCentered',
197       }, $server->hardware;
198       display td {
199         -class => 'dataCentered',
200       }, a {-href => "systemdetails.cgi?system=" . $server->registryHost}, $server->registryHost;
201       display td {
202         -class => 'dataCentered',
203       }, $server->registryRegion;
204       display td {
205         -class => 'dataCentered',
206       }, $server->licenseHost;
207     display end_Tr;
208
209     display start_Tr;
210       display th {
211         -class => 'labelCentered',
212         }, 'MVFS';
213       display th {
214         -class => 'labelCentered',
215         }, 'Scaling';
216       display th {
217         -class => 'labelCentered',
218         }, 'Free Mnodes';
219       display th {
220         -class => 'labelCentered',
221         }, 'Free Mnodes Cleartext';
222       display th {
223         -class => 'labelCentered',
224         }, 'File names';
225       display th {
226         -class => 'labelCentered',
227         }, 'Directory names';
228       display th {
229         -class => 'labelCentered',
230         }, 'Blocks Per Directory';
231       display th {
232         -class => 'labelCentered',
233         }, 'Names not found';
234     display end_Tr;
235
236     display start_Tr;
237       display td {
238         -class => 'dataCentered',
239       }, '&nbsp;';
240       display td {
241         -class   => 'dataCentered',
242       }, $server->scalingFactor;
243       display td {
244         -class   => 'dataRight',
245       }, $server->mvfsFreeMnodes;
246       display td {
247         -class => 'dataRight',
248       }, $server->mvfsFreeMnodesCleartext;
249       display td {
250         -class => 'dataRight',
251       }, $server->mvfsFileNames;
252       display td {
253         -class => 'dataRight',
254       }, $server->mvfsDirectoryNames;
255       display td {
256         -class => 'dataRight',
257       }, $server->mvfsBlocksPerDirectory;
258       display td {
259         -class => 'dataRight',
260       }, $server->mvfsNamesNotFound;
261     display end_Tr;
262
263     display start_Tr;
264       display th {
265         -class => 'labelCentered',
266         }, 'RPC Handles';
267       display th {
268         -class => 'labelCentered',
269         }, 'Cleartext Idle Lifetime';
270       display th {
271         -class => 'labelCentered',
272         }, 'VOB HTS';
273       display th {
274         -class => 'labelCentered',
275         }, 'Cleartext HTS';
276       display th {
277         -class => 'labelCentered',
278         }, 'Thread HTS';
279       display th {
280         -class => 'labelCentered',
281         }, 'DNC HTS';
282       display th {
283         -class => 'labelCentered',
284         }, 'Process HTS';
285       display th {
286         -class => 'labelCentered',
287         }, 'Initial Mnode Table Size';
288     display end_Tr;
289
290     display start_Tr;
291       display td {
292         -class => 'dataRight',
293       }, $server->mvfsRPCHandles;
294       display td {
295         -class => 'dataRight',
296       }, $server->cleartextIdleLifetime;
297       display td {
298         -class   => 'dataRight',
299       }, $server->vobHashTableSize;
300       display td {
301         -class   => 'dataRight',
302       }, $server->cleartextHashTableSize;
303       display td {
304         -class => 'dataRight',
305       }, $server->threadHashTableSize;
306       display td {
307         -class => 'dataRight',
308       }, $server->dncHashTableSize;
309       display td {
310         -class => 'dataRight',
311       }, $server->processHashTableSize;
312       display td {
313         -class => 'dataRight',
314       }, $server->mvfsInitialMnodeTableSize;
315     display end_Tr;
316     display end_table;
317   } # for
318   
319   display p;
320   DisplayVobs $server;
321
322   return;
323 } # DisplayTable
324
325 # Main
326 GetOptions(
327   \%opts,
328   'usage'        => sub { Usage },
329   'verbose'      => sub { set_verbose },
330   'debug'        => sub { set_debug },
331   'region=s',
332 ) or Usage "Invalid parameter";
333
334 # Announce ourselves
335 verbose "$FindBin::Script v$VERSION";
336
337 heading $subtitle;
338
339 display h1 {
340   -class => 'center',
341 }, $subtitle;
342
343 my ($status, @output) = $Clearcase::CC->execute (
344   "lsvob -region $opts{region} -long"
345 );
346
347 error "Unable to list all vobs in the region $opts{region}"
348     . join("\n", @output), 1 if $status;
349
350 my %vobServers;
351
352 for (@output) {
353   if (/Server host: (.*)/) {
354     $vobServers{$1} = undef;
355   } # if
356 } # for
357
358 DisplayTable sort(keys(%vobServers));
359
360 footing;
361
362 =pod
363
364 =head1 CONFIGURATION AND ENVIRONMENT
365
366 DEBUG: If set then $debug is set to this level.
367
368 VERBOSE: If set then $verbose is set to this level.
369
370 TRACE: If set then $trace is set to this level.
371
372 =head1 DEPENDENCIES
373
374 =head2 Perl Modules
375
376 L<CGI>
377
378 L<CGI::Carp|CGI::Carp>
379
380 L<FindBin>
381
382 L<Getopt::Long|Getopt::Long>
383
384 =head2 ClearSCM Perl Modules
385
386 =begin man 
387
388  ClearadmWeb
389  Clearcase
390  Clearcase::Server
391  Display
392  Utils
393
394 =end man
395
396 =begin html
397
398 <blockquote>
399 <a href="http://clearscm.com/php/scm_man.php?file=clearadm/lib/ClearadmWeb.pm">ClearadmWeb</a><br>
400 <a href="http://clearscm.com/php/scm_man.php?file=lib/Clearcase.pm">Clearcase</a><br>
401 <a href="http://clearscm.com/php/scm_man.php?file=lib/Clearcase/Server.pm">Clearcase::Server</a><br>
402 <a href="http://clearscm.com/php/scm_man.php?file=lib/Display.pm">Display</a><br>
403 <a href="http://clearscm.com/php/scm_man.php?file=lib/Utils.pm">Utils</a><br>
404 </blockquote>
405
406 =end html
407
408 =head1 BUGS AND LIMITATIONS
409
410 There are no known bugs in this script
411
412 Please report problems to Andrew DeFaria <Andrew@ClearSCM.com>.
413
414 =head1 LICENSE AND COPYRIGHT
415
416 Copyright (c) 2010, ClearSCM, Inc. All rights reserved.
417
418 =cut