1 | package de.uka.ipd.sdq.simucomframework.calculator; |
2 | |
3 | import java.util.Date; |
4 | |
5 | import de.uka.ipd.sdq.pipesandfilters.framework.MetaDataInit; |
6 | import de.uka.ipd.sdq.pipesandfilters.framework.PipesAndFiltersManager; |
7 | import de.uka.ipd.sdq.pipesandfilters.framework.recorder.sensorframework.ExecutionResultMetaDataInit; |
8 | import de.uka.ipd.sdq.pipesandfilters.framework.recorder.sensorframework.SensorFrameworkMetaDataInit; |
9 | import de.uka.ipd.sdq.pipesandfilters.framework.recorder.sensorframework.launch.SensorFrameworkConfig; |
10 | import de.uka.ipd.sdq.probespec.framework.calculator.Calculator; |
11 | import de.uka.ipd.sdq.probespec.framework.calculator.DemandBasedWaitingTimeCalculator; |
12 | import de.uka.ipd.sdq.probespec.framework.calculator.DemandCalculator; |
13 | import de.uka.ipd.sdq.probespec.framework.calculator.ExecutionResultCalculator; |
14 | import de.uka.ipd.sdq.probespec.framework.calculator.HoldTimeCalculator; |
15 | import de.uka.ipd.sdq.probespec.framework.calculator.ICalculatorFactory; |
16 | import de.uka.ipd.sdq.probespec.framework.calculator.ResponseTimeCalculator; |
17 | import de.uka.ipd.sdq.probespec.framework.calculator.StateCalculator; |
18 | import de.uka.ipd.sdq.probespec.framework.calculator.WaitingTimeCalculator; |
19 | import de.uka.ipd.sdq.reliability.core.FailureStatistics; |
20 | import de.uka.ipd.sdq.simucomframework.model.SimuComModel; |
21 | |
22 | /** |
23 | * TODO: This class still depends on SensorFramework. Try to remove the |
24 | * SensorFramework dependency. |
25 | * |
26 | * @author Philipp Merkle |
27 | * |
28 | */ |
29 | public class CalculatorFactory implements ICalculatorFactory { |
30 | |
31 | private SimuComModel model; |
32 | |
33 | private String experimentRunName; |
34 | |
35 | private ISetupDataSinkStrategy dataSink; |
36 | |
37 | public CalculatorFactory(SimuComModel model, ISetupDataSinkStrategy dataSink) { |
38 | experimentRunName = "Run " + new Date(); |
39 | this.model = model; |
40 | this.dataSink = dataSink; |
41 | } |
42 | |
43 | public Calculator buildResponseTimeCalculator(String calculatorName, |
44 | Integer startProbeSetID, Integer endProbeSetID) { |
45 | // Initialize calculator |
46 | Calculator calculator = new ResponseTimeCalculator(model.getProbeSpecContext(), startProbeSetID, endProbeSetID); |
47 | |
48 | // Initialize metadata |
49 | MetaDataInit metaData = new SensorFrameworkMetaDataInit(calculator |
50 | .getMeasurementMetrics(), (SensorFrameworkConfig) model |
51 | .getConfiguration().getRecorderConfig()); |
52 | metaData.setExperimentName(model.getConfiguration().getNameExperimentRun()); |
53 | metaData.setExperimentRunName(experimentRunName); |
54 | metaData.setMeasurementName("Response Time of " + calculatorName); |
55 | metaData.setMetricName("Response Time"); // TODO Hard coded value! |
56 | |
57 | PipesAndFiltersManager pipeManager = dataSink.setupDataSink(calculator, metaData); |
58 | this.model.getProbeSpecContext().getPipeManagerRegisty().register(pipeManager); |
59 | return calculator; |
60 | } |
61 | |
62 | public WaitingTimeCalculator buildDemandBasedWaitingTimeCalculator(String calculatorName, |
63 | Integer startWaitingProbeSetID, Integer stopProcessingProbeSetID) { |
64 | // Initialize calculator |
65 | WaitingTimeCalculator calculator = new DemandBasedWaitingTimeCalculator(model.getProbeSpecContext(), |
66 | startWaitingProbeSetID, stopProcessingProbeSetID); |
67 | |
68 | // Initialize metadata |
69 | MetaDataInit metaData = new SensorFrameworkMetaDataInit(calculator |
70 | .getMeasurementMetrics(), (SensorFrameworkConfig) model |
71 | .getConfiguration().getRecorderConfig()); |
72 | metaData.setExperimentName(model.getConfiguration().getNameExperimentRun()); |
73 | metaData.setExperimentRunName(experimentRunName); |
74 | metaData.setMeasurementName(model.getConfiguration().getNameExperimentRun() + ": Wait time at " + calculatorName); |
75 | metaData.setMetricName("Waiting Time"); // TODO Hard coded value! |
76 | |
77 | PipesAndFiltersManager pipeManager = dataSink.setupDataSink(calculator, metaData); |
78 | this.model.getProbeSpecContext().getPipeManagerRegisty().register(pipeManager); |
79 | |
80 | return calculator; |
81 | } |
82 | |
83 | public WaitingTimeCalculator buildWaitingTimeCalculator(String calculatorName, |
84 | Integer startWaitingProbeSetID, Integer stopWaitingProbeSetID) { |
85 | // Initialize calculator |
86 | WaitingTimeCalculator calculator = new WaitingTimeCalculator(model.getProbeSpecContext(), startWaitingProbeSetID, |
87 | stopWaitingProbeSetID); |
88 | |
89 | // Initialize metadata |
90 | MetaDataInit metaData = new SensorFrameworkMetaDataInit(calculator |
91 | .getMeasurementMetrics(), (SensorFrameworkConfig) model |
92 | .getConfig().getRecorderConfig()); |
93 | metaData.setExperimentName(model.getConfiguration().getNameExperimentRun()); |
94 | metaData.setExperimentRunName(experimentRunName); |
95 | metaData.setMeasurementName("Wait time at " + calculatorName); |
96 | metaData.setMetricName("Waiting Time"); // TODO Hard coded value! |
97 | |
98 | PipesAndFiltersManager pipeManager = dataSink.setupDataSink(calculator, metaData); |
99 | this.model.getProbeSpecContext().getPipeManagerRegisty().register(pipeManager); |
100 | |
101 | return calculator; |
102 | } |
103 | |
104 | public HoldTimeCalculator buildHoldTimeCalculator(String calculatorName, |
105 | Integer startHoldProbeSetID, Integer stopHoldProbeSetID) { |
106 | // Initialize calculator |
107 | HoldTimeCalculator calculator = new HoldTimeCalculator(model.getProbeSpecContext(), startHoldProbeSetID, |
108 | stopHoldProbeSetID); |
109 | |
110 | // Initialize metadata |
111 | MetaDataInit metaData = new SensorFrameworkMetaDataInit(calculator |
112 | .getMeasurementMetrics(), (SensorFrameworkConfig) model |
113 | .getConfiguration().getRecorderConfig()); |
114 | metaData.setExperimentName(model.getConfiguration().getNameExperimentRun()); |
115 | metaData.setExperimentRunName(experimentRunName); |
116 | metaData.setMeasurementName("Hold time at " + calculatorName); |
117 | metaData.setMetricName("Hold Time"); // TODO Hard coded value! |
118 | |
119 | PipesAndFiltersManager pipeManager = dataSink.setupDataSink(calculator, metaData); |
120 | this.model.getProbeSpecContext().getPipeManagerRegisty().register(pipeManager); |
121 | |
122 | return calculator; |
123 | } |
124 | |
125 | public StateCalculator buildStateCalculator(String calculatorName, Integer probeSetId) { |
126 | // Initialize calculator |
127 | StateCalculator calculator = new StateCalculator(model.getProbeSpecContext(), probeSetId); |
128 | |
129 | // Initialize metadata |
130 | MetaDataInit metaData = new SensorFrameworkMetaDataInit(calculator |
131 | .getMeasurementMetrics(), (SensorFrameworkConfig) model |
132 | .getConfiguration().getRecorderConfig()); |
133 | metaData.setExperimentName(model.getConfiguration().getNameExperimentRun()); |
134 | metaData.setExperimentRunName(experimentRunName); |
135 | metaData.setMeasurementName("Utilisation of " + calculatorName); |
136 | metaData.setMetricName("Utilisation"); // TODO Hard coded value! |
137 | |
138 | PipesAndFiltersManager pipeManager = dataSink.setupDataSink(calculator, metaData); |
139 | this.model.getProbeSpecContext().getPipeManagerRegisty().register(pipeManager); |
140 | |
141 | return calculator; |
142 | } |
143 | |
144 | public DemandCalculator buildDemandCalculator(String calculatorName, |
145 | Integer probeSetID) { |
146 | // Initialize calculator |
147 | DemandCalculator calculator = new DemandCalculator(model.getProbeSpecContext(), probeSetID); |
148 | |
149 | // Initialize metadata |
150 | MetaDataInit metaData = new SensorFrameworkMetaDataInit(calculator |
151 | .getMeasurementMetrics(), (SensorFrameworkConfig) model |
152 | .getConfiguration().getRecorderConfig()); |
153 | metaData.setExperimentName(model.getConfiguration().getNameExperimentRun()); |
154 | metaData.setExperimentRunName(experimentRunName); |
155 | metaData.setMeasurementName("Demanded time at " + calculatorName); |
156 | metaData.setMetricName("Demanded Time"); // TODO Hard coded value! |
157 | |
158 | PipesAndFiltersManager pipeManager = dataSink.setupDataSink(calculator, metaData); |
159 | this.model.getProbeSpecContext().getPipeManagerRegisty().register(pipeManager); |
160 | |
161 | return calculator; |
162 | } |
163 | |
164 | @Override |
165 | public StateCalculator buildOverallUtilizationCalculator( |
166 | String calculatorName, Integer probeSetId) { |
167 | // Initialize calculator |
168 | StateCalculator calculator = new StateCalculator(model.getProbeSpecContext(), probeSetId); |
169 | |
170 | // Initialize metadata |
171 | MetaDataInit metaData = new SensorFrameworkMetaDataInit(calculator |
172 | .getMeasurementMetrics(), (SensorFrameworkConfig) model |
173 | .getConfiguration().getRecorderConfig()); |
174 | metaData.setExperimentName(model.getConfiguration().getNameExperimentRun()); |
175 | metaData.setExperimentRunName(experimentRunName); |
176 | metaData.setMeasurementName("Overall Utilisation of " + calculatorName); |
177 | metaData.setMetricName("Overall Utilisation"); // TODO Hard coded value! |
178 | |
179 | PipesAndFiltersManager pipeManager = dataSink.setupDataSink(calculator, metaData); |
180 | this.model.getProbeSpecContext().getPipeManagerRegisty().register(pipeManager); |
181 | |
182 | return calculator; |
183 | } |
184 | |
185 | @Override |
186 | public ExecutionResultCalculator buildExecutionResultCalculator(String calculatorName, Integer probeSetId) { |
187 | |
188 | // Initialize calculator |
189 | ExecutionResultCalculator calculator = new ExecutionResultCalculator(model.getProbeSpecContext(), probeSetId); |
190 | |
191 | // Initialize metadata |
192 | MetaDataInit metaData = new ExecutionResultMetaDataInit(calculator.getMeasurementMetrics(), |
193 | (SensorFrameworkConfig) model.getConfiguration().getRecorderConfig(), FailureStatistics.getInstance() |
194 | .getExecutionResultTypes()); |
195 | metaData.setExperimentName(model.getConfiguration().getNameExperimentRun()); |
196 | metaData.setExperimentRunName(experimentRunName); |
197 | metaData.setMeasurementName("Execution result of " + calculatorName); |
198 | metaData.setMetricName("Execution Time"); // TODO Hard coded value! |
199 | |
200 | PipesAndFiltersManager pipeManager = dataSink.setupDataSink(calculator, metaData); |
201 | model.getProbeSpecContext().getPipeManagerRegisty().register(pipeManager); |
202 | |
203 | return calculator; |
204 | } |
205 | |
206 | } |