Experiment.java
2.38 KB
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
83
84
85
86
87
88
89
90
91
92
93
package com.example.mina.client.base;
import java.time.ZonedDateTime;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public abstract class Experiment<T extends MatrixClient, O extends ExperimentOptions> extends Thread {
protected T client;
protected O options;
protected int iteratedTimes;
//this is used for stop the task manually
private volatile boolean isRunning;
protected ExperimentProgressListner progressListner;
public Experiment() {
}
public Experiment(T client, O options) {
this.client = client;
this.options = options;
this.setName(getExperimentTaskName());
this.iteratedTimes = 0;
}
private String getExperimentTaskName() {
return String.format("%s-%s", this.client.getDeviceType(), this.client.getDeviceName());
}
public void setRunning(boolean running) {
isRunning = running;
}
public void setClient(T t) {
this.client = t;
}
public void setOptions(O options) {
this.options = options;
}
public void setProgressListner(ExperimentProgressListner experimentProgressListner) {
this.progressListner = experimentProgressListner;
}
public String getExperimentId() {
return options.getExperimentId();
}
abstract public String getExperimentName();
abstract public void schedule();
public void sendCommand(MatrixCommand command) {
client.sendCommand(command);
}
public boolean isContinue() {
return iteratedTimes < options.getIterations() &&
ZonedDateTime.now().isBefore(options.getFinishAt()) &&
isRunning;
}
@Override
public void start() {
if (progressListner != null) {
progressListner.startExperiment(getExperimentId());
}
while (isContinue()) {
try {
schedule();
iteratedTimes++;
if (progressListner != null) {
progressListner.updateProgress(getExperimentId(), iteratedTimes);
}
Thread.sleep(options.getPause() * 1000);
} catch (Exception e) {
log.info("thread sleep error", e);
}
}
if (progressListner != null) {
progressListner.stopExperiment(getExperimentId());
}
}
public void finish() {
isRunning = false;
}
}