This repository has been archived by the owner on Jul 2, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
SessionDetector.java
82 lines (62 loc) · 2.2 KB
/
SessionDetector.java
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package rcms.utilities.daqaggregator.datasource;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.tuple.Triple;
import org.apache.log4j.Logger;
/**
* Detects changes in session
*
* @author Maciej Gladki (maciej.szymon.gladki@cern.ch)
*
*/
public class SessionDetector {
private final SessionRetriever sessionRetriever;
private final FlashlistRetriever flashlistRetriever;
public SessionDetector(SessionRetriever sessionRetriever, FlashlistRetriever flashlistRetriever) {
this.sessionRetriever = sessionRetriever;
this.flashlistRetriever = flashlistRetriever;
}
private Triple<String, Integer, Long> lastResult;
private static final Logger logger = Logger.getLogger(SessionDetector.class);
/**
* Detect new session
*
* @return true if new session or hardware configuration detected, false
* otherwise
*/
public boolean detectNewSession() {
boolean detectedChange = false;
long start = System.currentTimeMillis();
Pair<Flashlist, String> levelZeroRetrieveResult = flashlistRetriever
.retrieveFlashlist(FlashlistType.LEVEL_ZERO_FM_DYNAMIC);
Flashlist levelZeroDynamicFlashist = levelZeroRetrieveResult.getLeft();
Triple<String, Integer, Long> result = sessionRetriever.retrieveSession(levelZeroDynamicFlashist);
if (lastResult == null) {
logger.info("Detected first session " + result);
detectedChange = true;
} else {
if (!lastResult.getMiddle().equals(result.getMiddle())) {
logger.info("Detected new session: " + result.getMiddle());
detectedChange = true;
} else {
logger.trace("Session has not changed");
}
if (!lastResult.getLeft().equals(result.getLeft())) {
logger.info("Detected new HWCFG_KEY: " + result.getLeft());
detectedChange = true;
} else {
logger.trace("HWCFG_KEY has not changed");
}
}
long end = System.currentTimeMillis();
int timeToAutoDetect = (int) (end - start);
lastResult = result;
if (timeToAutoDetect > 1000 || detectedChange) {
logger.info("Auto-detecting session finished in " + timeToAutoDetect + " ms with detected change: "
+ detectedChange);
}
return detectedChange;
}
public Triple<String, Integer, Long> getResult() {
return lastResult;
}
}