1 package org.apachi.onami.lifecycle.warmup;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import javax.inject.Inject;
23 import javax.inject.Singleton;
24
25 import java.util.ArrayList;
26 import java.util.HashSet;
27 import java.util.List;
28 import java.util.Set;
29
30 @Singleton
31 public class Recorder
32 {
33
34 private final List<String> recordings = new ArrayList<String>();
35
36 private final List<String> interruptions = new ArrayList<String>();
37
38 private final RecorderSleepSettings recorderSleepSettings;
39
40 private final Set<Set<String>> concurrents = new HashSet<Set<String>>();
41
42 private final Set<String> activeConcurrents = new HashSet<String>();
43
44 @Inject
45 public Recorder( RecorderSleepSettings recorderSleepSettings )
46 {
47 this.recorderSleepSettings = recorderSleepSettings;
48 }
49
50 public synchronized void record( String s )
51 throws InterruptedException
52 {
53
54 recordings.add( s );
55
56 long sleepMs = recorderSleepSettings.getSleepMsFor( s );
57
58 activeConcurrents.add( s );
59 try
60 {
61 concurrents.add( new HashSet<String>( activeConcurrents ) );
62 Thread.sleep( sleepMs );
63 }
64 catch ( InterruptedException e )
65 {
66 interruptions.add( s );
67 throw e;
68 }
69 finally
70 {
71 activeConcurrents.remove( s );
72 }
73 }
74
75 public synchronized List<String> getRecordings()
76 {
77 return new ArrayList<String>( recordings );
78 }
79
80 public synchronized List<String> getInterruptions()
81 {
82 return new ArrayList<String>( interruptions );
83 }
84
85 public synchronized Set<Set<String>> getConcurrents()
86 {
87 return new HashSet<Set<String>>( concurrents );
88 }
89
90 }