Big update of Clearadm
[clearscm.git] / lib / Clearcase / Server.pm
1 =pod
2
3 =head1 NAME $RCSfile: Server.pm,v $
4
5 Object oriented interface to a Clearcase Server
6
7 =head1 VERSION
8
9 =over
10
11 =item Author
12
13 Andrew DeFaria <Andrew@ClearSCM.com>
14
15 =item Revision
16
17 $Revision: 1.2 $
18
19 =item Created
20
21 Sat Dec 18 09:51:15 EST 2010
22
23 =item Modified
24
25 $Date: 2011/01/02 04:59:36 $
26
27 =back
28
29 =head2 SYNOPSIS
30
31 Provides access to information about a Clearcase Server.
32
33 =head2 DESCRIPTION
34
35 This module implements an object oriented interface to a Clearcase
36 Server.
37
38 =head2 ROUTINES
39
40 The following routines are exported:
41
42 =cut
43
44 package Clearcase::Server;
45
46 use strict;
47 use warnings;
48
49 use Clearcase;
50
51 =pod
52
53 =head2 new (tag)
54
55 Construct a new Clearcase View object. Note that not all members are
56 initially populated because doing so would be time consuming. Such
57 member variables will be expanded when accessed.
58
59 Parameters:
60
61 =for html <blockquote>
62
63 =over
64
65 =item tag
66
67 View tag to be instantiated. You can use either an object oriented call
68 (i.e. my $view = new Clearcase::View (tag => 'my_new_view')) or the
69 normal call (i.e. my $vob = new Clearcase::View ('my_new_view')). You
70 can also instantiate a new view by supplying a tag and then later
71 calling the create method.
72
73 =back
74
75 =for html </blockquote>
76
77 Returns:
78
79 =for html <blockquote>
80
81 =over
82
83 =item Clearcase View object
84
85 =back
86
87 =for html </blockquote>
88
89 =cut
90
91 sub new ($;$) {
92   my ($class, $name) = @_;
93
94   my $self = bless { name => $name }, $class;
95
96   $self->updateServerInfo($name);
97
98   return $self;
99 } # new
100   
101 sub name () {
102   my ($self) = @_;
103
104   return $self->{name};
105 } # name
106
107 sub ccVer () {
108   my ($self) = @_;
109
110   return $self->{ccVer};
111 } # ccVer
112
113 sub osVer () {
114   my ($self) = @_;
115
116   return $self->{osVer};
117 } # osVer
118
119 sub hardware () {
120   my ($self) = @_;
121
122   return $self->{hardware};
123 } # hardware
124
125 sub licenseHost () {
126   my ($self) = @_;
127
128   return $self->{licenseHost};
129 } # licenseHost
130
131 sub registryHost () {
132   my ($self) = @_;
133
134   return $self->{registryHost};
135 } # registryHost
136
137 sub registryRegion () {
138   my ($self) = @_;
139
140   return $self->{registryRegion};
141 } # registryRegion
142
143 sub mvfsBlocksPerDirectory () {
144   my ($self) = @_;
145
146   return $self->{mvfsBlocksPerDirectory};
147 } # mvfsBlocksPerDirectory
148
149 sub mvfsFreeMnodesCleartext() {
150   my ($self) = @_;
151  
152   return $self->{mvfsFreeMnodesCleartext};
153 } # mvfsFreeMnodesCleartext
154
155 sub mvfsDirectoryNames () {
156   my ($self) = @_;
157
158   return $self->{mvfsDirectoryNames};
159 } # mvfsDirectoryNames
160
161 sub mvfsFileNames () {
162   my ($self) = @_;
163
164   return $self->{mvfsFileNames};
165 } # mvfsFileNames
166
167 sub mvfsFreeMnodes () {
168   my ($self) = @_;
169
170   return $self->{mvfsFreeMnodes};
171 } # mvfsFreeMnodes
172
173 sub mvfsInitialMnodeTableSize () {
174   my ($self) = @_;
175
176   return $self->{mvfsInitialMnodeTableSize};
177 } # mvfsInitialMnodeTableSize
178
179 sub mvfsMinCleartextMnodes () {
180   my ($self) = @_;
181
182   return $self->{mvfsMinCleartextMnodes};
183 } # mvfsMinCleartextMnodes
184
185 sub mvfsMinFreeMnodes () {
186   my ($self) = @_;
187
188   return $self->{mvfsMinFreeMnodes};
189 } # mvfsMinFreeMnodes
190
191 sub mvfsNamesNotFound () {
192   my ($self) = @_;
193
194   return $self->{mvfsNamesNotFound};
195 } # mvfsNamesNotFound
196
197 sub mvfsRPCHandles () {
198   my ($self) = @_;
199
200   return $self->{mvfsRPCHandles};
201 } # mvfsRPCHandles
202
203 sub interopRegion () {
204   my ($self) = @_;
205
206   return $self->{interopRegion};
207 } # interopRegion
208
209 sub scalingFactor () {
210   my ($self) = @_;
211
212   return $self->{scalingFactor};
213 } # scalingFactor
214
215 sub cleartextIdleLifetime () {
216   my ($self) = @_;
217
218   return $self->{cleartextIdleLifetime};
219 } # cleartextIdleLifetime
220
221 sub vobHashTableSize () {
222   my ($self) = @_;
223
224   return $self->{vobHashTableSize};
225 } # vobHashTableSize
226
227 sub cleartextHashTableSize () {
228   my ($self) = @_;
229
230   return $self->{cleartextHashTableSize};
231 } # cleartextHashTableSize
232
233 sub dncHashTableSize () {
234   my ($self) = @_;
235
236   return $self->{dncHashTableSize};
237 } # dncHashTableSize
238
239 sub threadHashTableSize () {
240   my ($self) = @_;
241
242   return $self->{threadHashTableSize};
243 } # threadHashTableSize
244
245 sub processHashTableSize () {
246   my ($self) = @_;
247
248   return $self->{processHashTableSize};
249 } # processHashTableSize
250
251 sub updateServerInfo($) {
252   my ($self, $host) = @_;
253
254   my ($status, @output) = $Clearcase::CC->execute(
255     "hostinfo -long -properties -full $host"
256   );
257
258   for (@output) {
259     if (/Product: ClearCase (.*)/) {
260       $self->{ccVer} = $1;
261     } elsif (/Operating system: (.*)/) {
262       $self->{osVer} = $1;
263     } elsif (/Hardware type: (.*)/) {
264       $self->{hardware} = $1;
265     } elsif (/License host: (.*)/) {
266       $self->{licenseHost} = $1;
267     } elsif (/Registry host: (.*)/) {
268       $self->{registryHost} = $1;
269     } elsif (/Registry region: (.*)/) {
270       $self->{registryRegion} = $1;
271     } elsif (/Blocks per directory: (.*)/) {
272       $self->{mvfsBlocksPerDirectory} = $1;
273     } elsif (/Free mnodes for cleartext: (.*)/) {
274       $self->{mvfsFreeMnodesCleartext} = $1;
275     } elsif (/Directory names: (.*)/) {
276       $self->{mvfsDirectoryNames} = $1;
277     } elsif (/File names: (.*)/) {
278       $self->{mvfsFileNames} = $1;
279     } elsif (/Free mnodes: (.*)/) {
280       $self->{mvfsFreeMnodes} = $1;
281     } elsif (/Initial mnode table size: (.*)/) {
282       $self->{mvfsInitialMnodeTableSize} = $1;
283     } elsif (/Minimum free mnodes for cleartext: (.*)/) {
284       $self->{mvfsMinCleartextMnodes} = $1;
285     } elsif (/Mimimum free mnodes: (.*)/) {
286       $self->{mvfsMinFreeMnodes} = $1;
287     } elsif (/Names not found: (.*)/) {
288       $self->{mvfsNamesNotFound} = $1;
289     } elsif (/RPC handles: (.*)/) {
290       $self->{mvfsRPCHandles} = $1;
291     } elsif (/Scaling factor to initialize MVFS cache sizes: (.*)/) {
292       $self->{scalingFactor} = $1;
293     } elsif (/Cleartext idle lifetime: (.*)/) {
294       $self->{cleartextIdleLifetime} = $1;
295     } elsif (/VOB hash table size: (.*)/) {
296       $self->{vobHashTableSize} = $1;
297     } elsif (/Cleartext hash table size: (.*)/) {
298       $self->{cleartextHashTableSize} = $1;
299     } elsif (/Thread hash table size: (.*)/) {
300       $self->{threadHashTableSize} = $1;
301     } elsif (/DNC hash table size: (.*)/) {
302       $self->{dncHashTableSize} = $1;
303     } elsif (/Process hash table size: (.*)/) {
304       $self->{processHashTableSize} = $1;
305     } # if
306   } # for
307
308   return;
309 } # updateServerInfo
310
311 1;
312
313 =pod
314
315 =head2 DEPENDENCIES
316
317 =for html <p><a href="/php/scm_man.php?file=lib/Clearcase.pm">Clearcase</a></p>
318
319 =head2 INCOMPATABILITIES
320
321 None
322
323 =head2 BUGS AND LIMITATIONS
324
325 There are no known bugs in this module.
326
327 Please report problems to Andrew DeFaria <Andrew@ClearSCM.com>.
328
329 =head2 LICENSE AND COPYRIGHT
330
331 Copyright (c) 2007, ClearSCM, Inc. All rights reserved.
332
333 =cut