1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.bitrepository.audittrails.collector;
26
27 import java.util.Date;
28 import java.util.HashMap;
29 import java.util.Map;
30 import java.util.Timer;
31 import java.util.TimerTask;
32
33 import access.getaudittrails.AuditTrailClient;
34 import org.bitrepository.audittrails.store.AuditTrailStore;
35 import org.bitrepository.common.ArgumentValidator;
36 import org.bitrepository.common.settings.Settings;
37 import org.bitrepository.common.utils.SettingsUtils;
38 import org.bitrepository.common.utils.TimeUtils;
39 import org.bitrepository.settings.repositorysettings.Collection;
40 import org.slf4j.Logger;
41 import org.slf4j.LoggerFactory;
42
43
44
45
46 public class AuditTrailCollector {
47 private Logger log = LoggerFactory.getLogger(getClass());
48
49 private final Map<String, AuditTrailCollectionTimerTask> collectorTasks = new HashMap<String,
50 AuditTrailCollectionTimerTask>();
51
52 private Timer timer;
53 private final Settings settings;
54
55
56 private static final int DEFAULT_GRACE_PERIOD = 0;
57
58
59
60
61
62
63 public AuditTrailCollector(Settings settings, AuditTrailClient client, AuditTrailStore store) {
64 ArgumentValidator.checkNotNull(settings, "settings");
65 ArgumentValidator.checkNotNull(client, "AuditTrailClient client");
66 ArgumentValidator.checkNotNull(store, "AuditTrailStore store");
67
68 this.settings = settings;
69 this.timer = new Timer(true);
70 long collectionInterval = settings.getReferenceSettings().getAuditTrailServiceSettings().getCollectAuditInterval();
71
72 for(Collection c : settings.getRepositorySettings().getCollections().getCollection()) {
73 IncrementalCollector collector = new IncrementalCollector(c.getID(),
74 settings.getReferenceSettings().getAuditTrailServiceSettings().getID(),
75 client, store,
76 settings.getReferenceSettings().getAuditTrailServiceSettings().getMaxNumberOfEventsInRequest());
77 AuditTrailCollectionTimerTask collectorTask = new AuditTrailCollectionTimerTask(
78 collector, collectionInterval);
79 log.info("Will start collection of audit trail every " +
80 TimeUtils.millisecondsToHuman(collectionInterval) + ", " +
81 "after a grace period of " + TimeUtils.millisecondsToHuman(getGracePeriod()));
82 timer.scheduleAtFixedRate(collectorTask, getGracePeriod(), collectionInterval/10);
83 collectorTasks.put(c.getID(), collectorTask);
84 }
85 }
86
87
88
89
90 public void collectNewestAudits(String collectionID) {
91 collectorTasks.get(collectionID).runCollection();
92 }
93
94
95
96
97
98 private int getGracePeriod() {
99 if (settings.getReferenceSettings().getAuditTrailServiceSettings().isSetGracePeriod()) {
100 return settings.getReferenceSettings().getAuditTrailServiceSettings().getGracePeriod().intValue();
101 } else {
102 return DEFAULT_GRACE_PERIOD;
103 }
104 }
105
106
107
108
109 public void close() {
110 for(AuditTrailCollectionTimerTask atctt : collectorTasks.values()) {
111 atctt.cancel();
112 }
113 timer.cancel();
114 }
115
116
117
118
119 private class AuditTrailCollectionTimerTask extends TimerTask {
120
121 private final long interval;
122
123 private Date nextRun;
124 private final IncrementalCollector collector;
125
126
127
128
129 private AuditTrailCollectionTimerTask(IncrementalCollector collector, long interval) {
130 this.collector = collector;
131 this.interval = interval;
132 nextRun = new Date(System.currentTimeMillis() + getGracePeriod());
133 log.info("Scheduled next collection of audit trails for " + nextRun);
134 }
135
136
137
138
139 public synchronized void runCollection() {
140 collector.performCollection(SettingsUtils.getAuditContributorsForCollection(collector.getCollectionID()));
141 nextRun = new Date(System.currentTimeMillis() + interval);
142 log.info("Scheduled next collection of audit trails for " + nextRun);
143 }
144
145 @Override
146 public void run() {
147 if(nextRun.getTime() < System.currentTimeMillis()) {
148 runCollection();
149 }
150 }
151 }
152 }