2 ################################################################################
6 # Description: Checks Clearcase's "pulse" by attempting to some rudimentary
7 # Clearcase operations and timing them. Timing data is logged
8 # for historical purposes.
9 # Author: Andrew@DeFaria.com
10 # Created: Thu Dec 29 12:07:59 PST 2005
11 # Modified: 2007/05/17 07:45:48
14 # (c) Copyright 2005, Andrew@DeFaria.com, all rights reserved
16 ################################################################################
25 my $lib_path = $^O =~ /MSWin/ ? "\\\\brcm-irv\\dfs\\projects\\ccase\\SCM\\lib"
26 : "/projects/ccase/SCM/lib";
28 # Extract relative path and basename from script name.
29 $0 =~ /(.*)[\/\\](.*)/;
31 my $abs_path = (!defined $1) ? "." : File::Spec->rel2abs ($1);
32 $me = (!defined $2) ? $0 : $2;
35 # Add the appropriate path to our modules to @INC array.
36 unshift @INC, "$lib_path";
37 unshift @INC, $ENV {SITE_PERL_LIBPATH} if defined $ENV {SITE_PERL_LIBPATH};
38 unshift @INC, "$abs_path";
47 use Clearcase::Element;
52 # We need a view context. We'll create this view if necessary.
55 # Which vob are we going to use
56 my $vobtag = "perftest";
58 # We need an element to check out and in
59 my $element_name = "testelement";
61 # How long is too long?
62 my $too_long = 60; # seconds;
64 # How many times will we perform the checkout/in?
67 # Some options that we use
86 # Path to logs directory
87 my $logdir = "$scm_base$/logs";
89 error "Logdir $logdir does not exist - $!", 1 if !-d $logdir;
91 my $cc = Clearcase->new;
96 display "ERROR: $msg\n" if defined $msg;
98 display "Usage:\t$me (v$version) [-u] [-v] [-d] [-view <viewtag>] [-vob <vobtag>]
99 \t[-element <element>] [-t <n>] [-i <n>]
104 -v: Turn on verbose mode
105 -d: Turn on debug mode
106 -view: View tag to create/use (Default: $tag)
107 -vob: Vob tag to use (Default $vobtag)
108 -element: Vob relative path to element to checkout/in (Default: $element_name)
109 -t <n>: Threshold of what is \"too long\" (Default $too_long seconds)
110 -i <n>: Number of iterations (default $iterations)
117 name => $cc->sitename . "." . $me,
119 timestamped => "true",
126 verbose "Setting u p view $tag";
127 $view = Clearcase::View->new (tag => $tag);
133 verbose "Setting up vob $vobtag";
134 my $vob = Clearcase::Vob->new (tag => $vobtag);
136 $log->err ("Vob $Clearcase::VOBTAG_PREFIX$vobtag doesn't exist", 1) if !$vob;
140 chdir "$Clearcase::VIEWTAG_PREFIX/$tag$Clearcase::VOBTAG_PREFIX$vobtag"
141 or $log->err ("Unable to chdir to vob root", 1);
144 verbose "Creating element $element_name";
146 my $meg = 1024 * 1024;
148 my $bytes_to_write = $size * $meg;
149 my $bytes_written = 0;
151 # Can we make a file in tmp?
152 open ELEMENT, ">$element_name"
153 or error "Unable to create element $element_name - $!", 1;
155 while ($bytes_written < $bytes_to_write) {
156 my $data = "." x $buf;
159 $bytes_written += $buf;
164 verbose "Setup complete";
166 return Clearcase::Element->create ($element_name);
173 verbose "Unchecking out $element->{name}";
174 $element->uncheckout (%rm);
175 verbose "Removing $element->{name}";
176 $element->remove (%force);
178 my $parent = Clearcase::Element->new (name => ".");
180 verbose "Canceling checkout of parent directory";
187 verbose "Checking in $element->{name}";
188 $element->checkin (%identical);
190 verbose "Checking out $element->{name}";
191 $element->checkout (%nc);
195 if ($ARGV [0] eq "-v") {
196 Display::set_verbose;
197 } elsif ($ARGV [0] eq "-d") {
199 } elsif ($ARGV [0] eq "-u") {
201 } elsif ($ARGV [0] eq "-view") {
206 Usage "Need to specify view after -view";
208 } elsif ($ARGV [0] eq "-vob") {
211 $too_long = $ARGV [0];
213 Usage "Need to specify vob after -vob";
215 } elsif ($ARGV [0] eq "-element") {
218 $too_long = $ARGV [0];
220 Usage "Need to specify vob relative path to element after -element";
222 } elsif ($ARGV [0] eq "-t") {
225 $too_long = $ARGV [0];
227 Usage "Need to specify number of seconds after -t";
229 } elsif ($ARGV [0] eq "-i") {
232 $too_long = $ARGV [0];
234 Usage "Need to specify number of iterations after -i";
237 Usage "Invalid argument: $ARGV [0]";
245 $log->err ("Unable to setup environment", 1) if !$element;
247 $step_start_time = time;
249 $log->msg ("Performing $iterations checkout/ins in view $tag vob $vobtag of element " . $element->name);
250 for (my $i = 0; $i < $iterations; $i++) {
251 verbose "Iteration #" . ($i + 1);
252 Checkout_in $element;
257 display_duration $step_start_time, $log;
259 if (($end_time - $step_start_time) > $too_long) {
260 my $msg = "Taking too long to perform $iterations checkout/ins\nShould take less than $too_long seconds";