View Javadoc

1   /*
2    * Licensed under the Apache License, Version 2.0 (the "License");
3    * you may not use this file except in compliance with the License.
4    * You may obtain a copy of the License at
5    *
6    * http://www.apache.org/licenses/LICENSE-2.0
7    *
8    * Unless required by applicable law or agreed to in writing, software
9    * distributed under the License is distributed on an "AS IS" BASIS,
10   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11   * See the License for the specific language governing permissions and
12   * limitations under the License.
13   */
14  
15  package net.sourceforge.basher;
16  
17  /**
18   * Defines the context parameters for a performance or testing run.
19   *
20   * @author Johan Lindquist
21   * @version $Revision$
22   */
23  public class BasherContext
24  {
25      private boolean manuallyControlled = false;
26      
27      private long setupDuration = 10;
28      private long warmupDuration = 0;
29      private long runDuration = 0;
30      private long cooldownDuration = 10;
31      private long teardownDuration = 0;
32  
33      private long startCollectionFrom = 0;
34      private long stopCollectionAfter = 0;
35  
36      private int initialNumberThreads = 10;
37      private int maxNumberThreads = 0;
38      private int threadIncrementCount = 0;
39      private int threadIncrementInterval = 0;
40  
41      private int taskMinDelay = 0;
42      private int taskMaxDelay = 0;
43  
44      private long markAverageInterval = 10;
45  
46      private String beanShellScriptDirectory = "src/test/basher-scripts";
47  
48      private String runIdentifier;
49  
50      private String reportDirectory = "target/basher-reports";
51  
52      private ExecutionType executionType;
53  
54      private String name;
55  
56      private String includes;
57  
58      private String excludes;
59  
60      private ProfilerContext profilerContext;
61  
62      /**
63       * Retrieves the includes expression for tasks to be included in the run defined by this context.  Defined
64       * as a comma separated strings of task names (fully qualified package + task name).  Wild-cards allowed.
65       * e.g. An expression of <i>net.sourceforge.*</i> would retrieve all tasks under the <i>net.sourceforge</i> package
66       *
67       * @return The include expression
68       */
69      public String getIncludes()
70      {
71          return includes;
72      }
73  
74      /**
75       * Sets the includes expression for tasks to be included in the run defined by this context.  Defined
76       * as a comma separated strings of task names (fully qualified package + task name).  Wild-cards allowed.
77       * e.g. An expression of <i>net.sourceforge.*</i> would retrieve all tasks under the <i>net.sourceforge</i> package
78       *
79       * @param includes The include expression
80       */
81      public void setIncludes( final String includes )
82      {
83          this.includes = includes;
84      }
85  
86      /**
87       * Sets the includes expression for tasks to be included in the run defined by this context.  Defined
88       * as a comma separated strings of task names (fully qualified package + task name).  Wild-cards allowed.
89       * e.g. An expression of <i>net.sourceforge.*</i> would retrieve all tasks under the <i>net.sourceforge</i> package
90       *
91       * @return The exclude expression
92       */
93      public String getExcludes()
94      {
95          return excludes;
96      }
97  
98      /**
99       * Sets the includes expression for tasks to be included in the run defined by this context.  Defined
100      * as a comma separated strings of task names (fully qualified package + task name).  Wild-cards allowed.
101      * e.g. An expression of <i>net.sourceforge.*</i> would retrieve all tasks under the <i>net.sourceforge</i> package
102      *
103      * @return The exclude expression
104      */
105     public void setExcludes( final String excludes )
106     {
107         this.excludes = excludes;
108     }
109 
110     /**
111      * Retrieves the duration (in seconds) of the warm-up run.  The length defined here defines how long tasks (and the JVM) are
112      * run as part of warm-up.<br/>
113      * If not set, this default to 0 seconds (no warm-up).
114      *
115      * @return The duration (in seconds) of the setup run
116      */
117     public long getWarmupDuration()
118     {
119         return warmupDuration;
120     }
121 
122     /**
123      * Sets the duration (in seconds) of the warm-up run.  The length defined here defines how long tasks (and the JVM) are
124      * run as part of the warm-up phase.<br/>
125      * If not set, this default to 0 seconds (no warm-up).
126      *
127      * @param warmupDuration The duration (in seconds) of the setup run
128      */
129     public void setWarmupDuration( final long warmupDuration )
130     {
131         this.warmupDuration = warmupDuration;
132     }
133 
134     /**
135      * Sets the duration (in seconds) of the tear-down run.  The length defined here defines how long tasks (and the JVM) are
136      * run as part of the tear-down phase.<br/>
137      * If not set, this default to 0 seconds (no tear-down).
138      *
139      * @return The duration (in seconds) of the setup run
140      */
141     public long getTeardownDuration()
142     {
143         return teardownDuration;
144     }
145 
146     /**
147      * Sets the duration (in seconds) of the tear-down run.  The length defined here defines how long tasks (and the JVM) are
148      * run as part of the tear-down phase.<br/>
149      * If not set, this default to 0 seconds (no tear-down).
150      *
151      * @param teardownDuration The duration (in seconds) of the setup run
152      */
153     public void setTeardownDuration( final long teardownDuration )
154     {
155         this.teardownDuration = teardownDuration;
156     }
157 
158     /**
159      * Retrieves the Beanshell directory that should be used for initialization scripts.  This is relative to the working
160      * directory or a full path.<br/>
161      * If not set, this defaults to 'src/test/basher-scripts'.
162      *
163      * @return The path of the Beanshell directory
164      */
165     public String getBeanShellScriptDirectory()
166     {
167         return beanShellScriptDirectory;
168     }
169 
170     /**
171      * Sets the Beanshell directory that should be used for initialization scripts.  This is relative to the working
172      * directory or a full path.<br/>
173      * If not set, this defaults to 'src/test/basher-scripts'.
174      *
175      * @param beanShellScriptDirectory The BeanShell directory to use
176      */
177     public void setBeanShellScriptDirectory( final String beanShellScriptDirectory )
178     {
179         this.beanShellScriptDirectory = beanShellScriptDirectory;
180     }
181 
182     /**
183      * Retrieves the time (in seconds) when statistics collection should begin.  This time is relative to the start of the
184      * run.
185      *
186      * @return The time, relative from the start of the run, when collection should start
187      */
188     public long getStartCollectionFrom()
189     {
190         return startCollectionFrom;
191     }
192 
193     /**
194      * Sets the time (in seconds) when statistics collection should begin.  This time is relative to the start of the
195      * run.
196      *
197      * @param startCollectionFrom The time, relative from the start of the run, when collection should start
198      */
199     public void setStartCollectionFrom( final long startCollectionFrom )
200     {
201         this.startCollectionFrom = startCollectionFrom;
202     }
203 
204     /**
205      * Retrieves the time (in seconds) when statistics collection should stop.  This time is relative to the start of the
206      * run.
207      *
208      * @return The time, relative from the start of the run, when collection should stop
209      */
210     public long getStopCollectionAfter()
211     {
212         return stopCollectionAfter;
213     }
214 
215     /**
216      * Sets the time (in seconds) when statistics collection should stop.  This time is relative to the start of the
217      * run.
218      *
219      * @param stopCollectionAfter The time, relative from the start of the run, when collection should stop
220      */
221     public void setStopCollectionAfter( final long stopCollectionAfter )
222     {
223         this.stopCollectionAfter = stopCollectionAfter;
224     }
225 
226     /**
227      * Retrieves the number of threads which the run should start with.  Defaults to 10
228      *
229      * @return The number of threads the run should start with
230      */
231     public int getInitialNumberThreads()
232     {
233         return initialNumberThreads;
234     }
235 
236     /**
237      * Sets the number of threads which the run should start with.<br/>
238      * If not set, this defaults to 10
239      *
240      * @param initialNumberThreads The number of threads the run should start with
241      */
242     public void setInitialNumberThreads( final int initialNumberThreads )
243     {
244         this.initialNumberThreads = initialNumberThreads;
245     }
246 
247     /**
248      * Retrieves the maximum number of threads allowed in the run.  Defaults to 0 (unlimited).  This is mainly taken
249      * into account in combination with {@link net.sourceforge.basher.BasherContext#setThreadIncrementCount(int)} and
250      * {@link net.sourceforge.basher.BasherContext#setThreadIncrementInterval(int)}.
251      *
252      * @return The number of threads the run should start with
253      */
254     public int getMaxNumberThreads()
255     {
256         return maxNumberThreads;
257     }
258 
259     /**
260      * Sets the maximum number of threads allowed in the run. This is mainly taken
261      * into account in combination with {@link net.sourceforge.basher.BasherContext#setThreadIncrementCount(int)} and
262      * {@link net.sourceforge.basher.BasherContext#setThreadIncrementInterval(int)}.<br/>
263      * If not set, this defaults to 0 (unlimited).
264      *
265      * @param maxNumberThreads The number of threads the run should start with
266      */
267     public void setMaxNumberThreads( final int maxNumberThreads )
268     {
269         this.maxNumberThreads = maxNumberThreads;
270     }
271 
272     /**
273      * Sets the number of threads should be added for each <i>threadIncrementInterval</i> allowed in the run.<br/>
274      * If not set, this defaults to 0 (don't add any)
275      *
276      * @return The number of threads to add
277      */
278     public int getThreadIncrementCount()
279     {
280         return threadIncrementCount;
281     }
282 
283     /**
284      * Retrieves the number of threads should be added for each <i>threadIncrementInterval</i> allowed in the run.<br/>
285      * If not set, this defaults to 0 (don't add any)
286      *
287      * @param threadIncrementCount The number of threads to add
288      */
289     public void setThreadIncrementCount( final int threadIncrementCount )
290     {
291         this.threadIncrementCount = threadIncrementCount;
292     }
293 
294     /**
295      * Retrieves the interval (in seconds) between each attempt at adding more threads.  This will be done up till the
296      * <i>maxNumberThreads</i> is reached.<br/>
297      * If not set, this defaults to 0 (don't increment)
298      *
299      * @return The interval between adding threads (in seconds)
300      */
301     public int getThreadIncrementInterval()
302     {
303         return threadIncrementInterval;
304     }
305 
306     /**
307      * Sets the interval (in seconds) between each attempt at adding more threads.  This will be done, adding <i></i>
308      * number of threads each time, until the <i>maxNumberThreads</i> limit is reached.<br/>
309      * If not set, this defaults to 0 (don't increment)
310      *
311      * @param threadIncrementInterval The interval between adding threads (in seconds)
312      */
313     public void setThreadIncrementInterval( final int threadIncrementInterval )
314     {
315         this.threadIncrementInterval = threadIncrementInterval;
316     }
317 
318     /**
319      * Retrieves the minimum delay between running tasks.  This is mainly used to stagger the tasks.<br/>
320      * If not set, this defaults to 0 (no delay).
321      *
322      * @return The minimum task delay (in milliseconds)
323      */
324     public int getTaskMinDelay()
325     {
326         return taskMinDelay;
327     }
328 
329     /**
330      * Sets the minimum delay between running tasks.  This is mainly used to stagger the tasks.<br/>
331      * If not set, this defaults to 0 (no delay).
332      *
333      * @param taskMinDelay The maximum task delay (in milliseconds)
334      */
335     public void setTaskMinDelay( final int taskMinDelay )
336     {
337         this.taskMinDelay = taskMinDelay;
338     }
339 
340     /**
341      * Retrieves the maximum delay between running tasks.  This is mainly used to stagger the tasks.<br/>
342      * If not set, this defaults to 0 (no delay).
343      *
344      * @return The maximum task delay (in milliseconds)
345      */
346     public int getTaskMaxDelay()
347     {
348         return taskMaxDelay;
349     }
350 
351     /**
352      * Sets the maximum delay between running tasks.  This is mainly used to stagger the tasks.<br/>
353      * If not set, this defaults to 0 (no delay).
354      *
355      * @param taskMaxDelay The maximum task delay (in milliseconds)
356      */
357     public void setTaskMaxDelay( final int taskMaxDelay )
358     {
359         this.taskMaxDelay = taskMaxDelay;
360     }
361 
362     /**
363      * Retrieves the interval between average calculations (in seconds).
364      *
365      * @return The time between average calculations (in seconds)
366      */
367     public long getMarkAverageInterval()
368     {
369         return markAverageInterval;
370     }
371 
372     /**
373      * Sets the interval between average calculations (in seconds).
374      *
375      * @param markAverageInterval The time between average calculations (in seconds)
376      */
377     public void setMarkAverageInterval( final long markAverageInterval )
378     {
379         this.markAverageInterval = markAverageInterval;
380     }
381 
382 
383     /**
384      * Retrieves the name of this Basher context.
385      *
386      * @return The name of the context
387      */
388     public String getName()
389     {
390         return name;
391     }
392 
393     /**
394      * Sets the name of this Basher context.
395      *
396      * @param name The name of the Basher context
397      */
398     public void setName( final String name )
399     {
400         this.name = name;
401     }
402 
403     /**
404      * Retrieves the report directory to be used for the running.<br/>
405      * If not set, this defaults to 'target/basher-reports'.
406      *
407      * @return The report directory
408      */
409     public String getReportDirectory()
410     {
411         return reportDirectory;
412     }
413 
414     /**
415      * Sets the report directory to be used for the running.<br/>
416      * If not set, this defaults to 'target/basher-reports'.
417      *
418      * @param reportDirectory The report directory
419      */
420     public void setReportDirectory( final String reportDirectory )
421     {
422         this.reportDirectory = reportDirectory;
423     }
424 
425     /**
426      * Retrieves the duration (in seconds) of the setup run.  The length defined here defines how long tasks (and the JVM) are
427      * run (and how 'warmed up' the JVM could be before starting statistics collection).<br/>
428      * If not set, this default to 10 seconds.
429      *
430      * @return The duration (in seconds) of the setup run
431      */
432     public long getSetupDuration()
433     {
434         return setupDuration;
435     }
436 
437     /**
438      * Sets the duration (in seconds) of the setup run.  The length defined here defines how long tasks (and the JVM) are
439      * run (and how 'warmed up' the JVM could be before starting statistics collection).<br/>
440      * If not set, this default to 10 seconds.
441      *
442      * @param setupDuration The duration (in seconds) of the setup run
443      */
444     public void setSetupDuration( final long setupDuration )
445     {
446         this.setupDuration = setupDuration;
447     }
448 
449     /**
450      * Retrieves the duration (in seconds) of the run.  The length defined here defines how long statistics are
451      * collected for.<br/>
452      *
453      * @return The duration (in seconds) of the run
454      */
455     public long getRunDuration()
456     {
457         return runDuration;
458     }
459 
460     /**
461      * Sets the duration (in seconds) of the run.  The length defined here defines how long statistics are
462      * collected for.<br/>
463      *
464      * @param runDuration The duration (in seconds) of the run
465      */
466     public void setRunDuration( final long runDuration )
467     {
468         this.runDuration = runDuration;
469     }
470 
471     /**
472      * Retrieves the duration (in seconds) of the cooldown run.  The length defined here defines how long tasks are
473      * run for after stopping collection.<br/>
474      * If not set, this default to 10 seconds.
475      *
476      * @return The duration (in seconds) of the setup run
477      */
478     public long getCooldownDuration()
479     {
480         return cooldownDuration;
481     }
482 
483     /**
484      * Sets the duration (in seconds) of the cooldown run.  The length defined here defines how long tasks are
485      * run for after stopping collection.<br/>
486      * If not set, this default to 10 seconds.
487      *
488      * @param cooldownDuration The duration (in seconds) of the setup run
489      */
490     public void setCooldownDuration( final long cooldownDuration )
491     {
492         this.cooldownDuration = cooldownDuration;
493     }
494 
495     /**
496      * @return
497      */
498     public ExecutionType getExecutionType()
499     {
500         return executionType;
501     }
502 
503     /**
504      * @param executionType
505      */
506     public void setExecutionType( final ExecutionType executionType )
507     {
508         this.executionType = executionType;
509     }
510 
511     /** Retrieves the run identifier to use.  If not specified, one will be generated.
512      * @return The run identifier
513      */
514     public String getRunIdentifier()
515     {
516         return runIdentifier;
517     }
518 
519     /** Specifies the run identifier to use.  If not set, one will be generated
520      * @param runIdentifier The run identifier
521      */
522     public void setRunIdentifier( final String runIdentifier )
523     {
524         this.runIdentifier = runIdentifier;
525     }
526 
527     /** Flag indicating whether or not the run is controlled by the user, through the APIs or BeanShell.  This
528      * defaults to false, runs being controlled by Basher.
529      *
530      * @return True if the user controls the runs, otherwise false
531      */
532     public boolean isManuallyControlled()
533     {
534         return manuallyControlled;
535     }
536 
537     /** Flag indicating whether or not the run is controlled by the user.  This defaults to false, runs being controlled by Basher.
538      *
539      * @param manuallyControlled True if the user should control the runs, otherwise false
540      */
541     public void setManuallyControlled( final boolean manuallyControlled )
542     {
543         this.manuallyControlled = manuallyControlled;
544     }
545 
546     /**
547      *
548      * @return
549      */
550     public ProfilerContext getProfilerContext()
551     {
552         return profilerContext;
553     }
554 
555     /**
556      *
557      * @param profilerContext
558      */
559     public void setProfilerContext(final ProfilerContext profilerContext)
560     {
561         this.profilerContext = profilerContext;
562     }
563 
564     @Override
565     public boolean equals(final Object o)
566     {
567         if (this == o)
568         {
569             return true;
570         }
571         if (o == null || getClass() != o.getClass())
572         {
573             return false;
574         }
575 
576         final BasherContext that = (BasherContext) o;
577 
578         if (cooldownDuration != that.cooldownDuration)
579         {
580             return false;
581         }
582         if (initialNumberThreads != that.initialNumberThreads)
583         {
584             return false;
585         }
586         if (manuallyControlled != that.manuallyControlled)
587         {
588             return false;
589         }
590         if (markAverageInterval != that.markAverageInterval)
591         {
592             return false;
593         }
594         if (maxNumberThreads != that.maxNumberThreads)
595         {
596             return false;
597         }
598         if (runDuration != that.runDuration)
599         {
600             return false;
601         }
602         if (setupDuration != that.setupDuration)
603         {
604             return false;
605         }
606         if (startCollectionFrom != that.startCollectionFrom)
607         {
608             return false;
609         }
610         if (stopCollectionAfter != that.stopCollectionAfter)
611         {
612             return false;
613         }
614         if (taskMaxDelay != that.taskMaxDelay)
615         {
616             return false;
617         }
618         if (taskMinDelay != that.taskMinDelay)
619         {
620             return false;
621         }
622         if (teardownDuration != that.teardownDuration)
623         {
624             return false;
625         }
626         if (threadIncrementCount != that.threadIncrementCount)
627         {
628             return false;
629         }
630         if (threadIncrementInterval != that.threadIncrementInterval)
631         {
632             return false;
633         }
634         if (warmupDuration != that.warmupDuration)
635         {
636             return false;
637         }
638         if (beanShellScriptDirectory != null ? !beanShellScriptDirectory.equals(that.beanShellScriptDirectory) : that.beanShellScriptDirectory != null)
639         {
640             return false;
641         }
642         if (excludes != null ? !excludes.equals(that.excludes) : that.excludes != null)
643         {
644             return false;
645         }
646         if (executionType != null ? !executionType.equals(that.executionType) : that.executionType != null)
647         {
648             return false;
649         }
650         if (includes != null ? !includes.equals(that.includes) : that.includes != null)
651         {
652             return false;
653         }
654         if (name != null ? !name.equals(that.name) : that.name != null)
655         {
656             return false;
657         }
658         if (profilerContext != null ? !profilerContext.equals(that.profilerContext) : that.profilerContext != null)
659         {
660             return false;
661         }
662         if (reportDirectory != null ? !reportDirectory.equals(that.reportDirectory) : that.reportDirectory != null)
663         {
664             return false;
665         }
666         if (runIdentifier != null ? !runIdentifier.equals(that.runIdentifier) : that.runIdentifier != null)
667         {
668             return false;
669         }
670 
671         return true;
672     }
673 
674     @Override
675     public String toString()
676     {
677         return "BasherContext{" +
678                 "manuallyControlled=" + manuallyControlled +
679                 ", setupDuration=" + setupDuration +
680                 ", warmupDuration=" + warmupDuration +
681                 ", runDuration=" + runDuration +
682                 ", cooldownDuration=" + cooldownDuration +
683                 ", teardownDuration=" + teardownDuration +
684                 ", startCollectionFrom=" + startCollectionFrom +
685                 ", stopCollectionAfter=" + stopCollectionAfter +
686                 ", initialNumberThreads=" + initialNumberThreads +
687                 ", maxNumberThreads=" + maxNumberThreads +
688                 ", threadIncrementCount=" + threadIncrementCount +
689                 ", threadIncrementInterval=" + threadIncrementInterval +
690                 ", taskMinDelay=" + taskMinDelay +
691                 ", taskMaxDelay=" + taskMaxDelay +
692                 ", markAverageInterval=" + markAverageInterval +
693                 ", beanShellScriptDirectory='" + beanShellScriptDirectory + '\'' +
694                 ", runIdentifier='" + runIdentifier + '\'' +
695                 ", reportDirectory='" + reportDirectory + '\'' +
696                 ", executionType=" + executionType +
697                 ", name='" + name + '\'' +
698                 ", includes='" + includes + '\'' +
699                 ", excludes='" + excludes + '\'' +
700                 ", profilerContext=" + profilerContext +
701                 '}';
702     }
703 }