source: DCWoRMS/trunk/src/simulator/stats/implementation/out/StringSerializer.java @ 543

Revision 543, 15.6 KB checked in by wojtekp, 12 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package simulator.stats.implementation.out;
2
3
4import java.util.Map;
5
6import org.apache.commons.logging.Log;
7import org.apache.commons.logging.LogFactory;
8
9import simulator.DataCenterWorkloadSimulator;
10import simulator.stats.implementation.AccumulatedResourceStats;
11import simulator.stats.implementation.GSSAccumulatorsStats;
12import simulator.stats.implementation.JobStats;
13import simulator.stats.implementation.ResourceAirFlowStats;
14import simulator.stats.implementation.ResourcePowerStats;
15import simulator.stats.implementation.ResourceStats;
16import simulator.stats.implementation.ResourceUsageStats;
17import simulator.stats.implementation.TaskStats;
18
19/**
20 *
21 * @author Marcin Krystek, Jarek Szymczak
22 *
23 */
24public class StringSerializer extends AbstractStringSerializer {
25
26        private Log log = LogFactory.getLog(StringSerializer.class);
27
28        public String visit(TaskStats taskStats) {
29                StringBuffer buffer = null;
30
31                if(printedHeaders.add("taskStats")) {
32                        buffer = new StringBuffer(520);
33                        String[] headers = taskStats.getHeaders();
34                        if (headers.length >= 10) {
35
36                                for(int i = 0; i < 10; i++)
37                                {
38                                        buffer.append(headers[i]);
39                                        buffer.append(fieldSeparator);
40                                }
41                               
42                                if (this.useExtended) {
43                                       
44                                        for(int i = 10; i < headers.length; i++)
45                                        {
46                                                buffer.append(headers[i]);
47                                                buffer.append(fieldSeparator);
48                                        }
49                                       
50                                }
51
52                        } else {
53                                buffer.append(headers.toString());
54                        }
55                        buffer.append(System.getProperty("line.separator"));
56                } else {
57                        buffer = new StringBuffer(260);
58                }
59               
60                buffer.append(taskStats.getJobID());
61                buffer.append(fieldSeparator);
62                buffer.append(taskStats.getTaskID());
63                buffer.append(fieldSeparator);
64                buffer.append(taskStats.getUserDN());
65                buffer.append(fieldSeparator);
66                buffer.append(taskStats.getResName());
67                buffer.append(fieldSeparator);
68                buffer.append(taskStats.getCpuCnt());
69                buffer.append(fieldSeparator);
70                buffer.append(Double.valueOf(taskStats.getExecStartDate()).longValue());
71                buffer.append(fieldSeparator);
72                buffer.append(Double.valueOf(taskStats.getExecFinishDate()).longValue());
73                buffer.append(fieldSeparator);
74                buffer.append(Double.valueOf(taskStats.getExecEndDate()).longValue());
75                buffer.append(fieldSeparator);
76                buffer.append(Double.valueOf(taskStats.getGB_SubDate()).longValue());
77                buffer.append(fieldSeparator);
78                buffer.append(Double.valueOf(taskStats.getLB_SubDate()).longValue());
79                buffer.append(fieldSeparator);
80                if (this.useExtended) {
81                        buffer.append(Double.valueOf(taskStats.getCompletionTime())
82                                        .longValue());
83                        buffer.append(fieldSeparator);
84                        buffer.append(Double.valueOf(taskStats.getExecStartTime()).longValue());
85                        buffer.append(fieldSeparator);
86                        buffer.append(Double.valueOf(taskStats.getExecutionTime()).longValue());
87                        buffer.append(fieldSeparator);
88                        buffer.append(Double.valueOf(taskStats.getReadyTime()).longValue());
89                        buffer.append(fieldSeparator);
90                        buffer.append(Double.valueOf(taskStats.getStartTime()).longValue());
91                        buffer.append(fieldSeparator);
92                        buffer.append(Double.valueOf(taskStats.getFlowTime()).longValue());
93                        buffer.append(fieldSeparator);
94                        buffer.append(Double.valueOf(taskStats.getWaitingTime()).longValue());
95                        buffer.append(fieldSeparator);
96                        buffer.append(Double.valueOf(taskStats.getGQ_WaitingTime())
97                                        .longValue());
98                        buffer.append(fieldSeparator);
99                        buffer.append(Double.valueOf(taskStats.getLateness()).longValue());
100                        buffer.append(fieldSeparator);
101                        buffer.append(Double.valueOf(taskStats.getTardiness()).longValue());
102                        buffer.append(fieldSeparator);
103                        buffer.append(Double.valueOf(taskStats.getReservationStartDate())
104                                        .longValue());
105                        buffer.append(fieldSeparator);
106                        buffer.append(Double.valueOf(taskStats.getReservationFinishDate())
107                                        .longValue());
108                        buffer.append(fieldSeparator);
109                        buffer.append(taskStats.getProcessorsName());
110                        buffer.append(fieldSeparator);
111                }
112               
113               
114                return buffer.toString();
115        }
116
117        public String visit(JobStats jobStats) {
118               
119                StringBuffer buffer = null;
120
121                if(printedHeaders.add("jobStats")) {
122                        buffer = new StringBuffer(200);
123                        String[] headers = jobStats.getHeaders();
124                        for(int i = 0; i < headers.length; i++)
125                        {
126                                buffer.append(headers[i]);
127                                buffer.append(fieldSeparator);
128                        }
129                        buffer.append(System.getProperty("line.separator"));
130                } else {
131                        buffer = new StringBuffer(100);
132                }
133               
134                buffer.append(jobStats.getJobID());
135                buffer.append(fieldSeparator);
136                buffer.append(defaultNumberFormat
137                                .format(jobStats.getMeanTaskCompletionTime().getMean()));
138                buffer.append(fieldSeparator);
139                buffer.append(defaultNumberFormat
140                                .format(jobStats.getMeanTaskExecutionTime().getMean()));
141                buffer.append(fieldSeparator);
142                buffer.append(defaultNumberFormat
143                                .format(jobStats.getMeanTaskStartTime().getMean()));
144                buffer.append(fieldSeparator);
145                buffer.append(defaultNumberFormat
146                                .format(jobStats.getMeanTaskFlowTime().getMean()));
147                buffer.append(fieldSeparator);
148                buffer.append(defaultNumberFormat
149                                .format(jobStats.getMeanTaskWaitingTime().getMean()));
150                buffer.append(fieldSeparator);
151                buffer.append(defaultNumberFormat
152                                .format(jobStats.getMeanTaskGQ_WaitingTime().getMean()));
153                buffer.append(fieldSeparator);
154                buffer.append(defaultNumberFormat
155                                .format(jobStats.getTardiness().getMean()));
156                buffer.append(fieldSeparator);
157                buffer.append(defaultNumberFormat
158                                .format(jobStats.getLateness().getMean()));
159                buffer.append(fieldSeparator);
160                buffer.append(defaultNumberFormat
161                                .format(jobStats.getMakespan().getMean()));
162                buffer.append(fieldSeparator);
163               
164                return buffer.toString();
165        }
166       
167        public String visit(ResourceStats resourceStats){
168               
169                StringBuffer buffer = null;
170
171                if(printedHeaders.add("resourceStats")) {
172                        buffer = new StringBuffer(600);
173                        String[] headers = resourceStats.getHeaders();
174                        for(int i = 0; i < headers.length; i++)
175                        {
176                                buffer.append(headers[i]);
177                                buffer.append(fieldSeparator);
178                        }
179                        buffer.append(System.getProperty("line.separator"));
180                } else {
181                        buffer = new StringBuffer(300);
182                }
183               
184                buffer.append(resourceStats.getResourceName());
185                buffer.append(fieldSeparator);
186
187                buffer.append(resourceStats.getMemory());
188                buffer.append(fieldSeparator);
189
190                buffer.append(resourceStats.getCpucnt());
191                buffer.append(fieldSeparator);
192
193                buffer.append(resourceStats.getCpuspeed());
194                buffer.append(fieldSeparator);
195
196                buffer.append(DataCenterWorkloadSimulator.DFAULT_NUMBER_FORMAT
197                                .format(resourceStats.getQueueLength()));
198                buffer.append(fieldSeparator);
199
200                /*Map<String, Double> processorsLoad = resourceStats.getProcessorsLoad();
201                for (String processorName : processorsLoad.keySet()) {
202
203                        Double load = processorsLoad.get(processorName);
204                        buffer.append(processorName);
205                        buffer.append(" ");
206                        buffer.append(GridSchedulingSimulator.DFAULT_NUMBER_FORMAT
207                                                        .format(load));
208                        buffer.append(":");
209
210                }*/
211
212                buffer.append(fieldSeparator);
213                Map<String, Double> processorsReservationLoad = resourceStats
214                                .getProcessorsReservationLoad();
215                for (String processorName : processorsReservationLoad.keySet()) {
216
217                        Double reservationLoad = processorsReservationLoad
218                                        .get(processorName);
219                        buffer.append(processorName);
220                        buffer.append(" ");
221                        buffer.append(DataCenterWorkloadSimulator.DFAULT_NUMBER_FORMAT
222                                        .format(reservationLoad));
223                        buffer.append(":");
224                }
225                buffer.append(fieldSeparator);
226                return buffer.toString();
227        }
228       
229        public String visit(AccumulatedResourceStats accResStats){
230               
231                StringBuffer buffer = null;
232
233                if(printedHeaders.add("accResStats")) {
234                        buffer = new StringBuffer(340);
235                        String[] headers = accResStats.getHeaders();
236                        for(int i = 0; i < headers.length; i++)
237                        {
238                                buffer.append(headers[i]);
239                                buffer.append(fieldSeparator);
240                        }
241                        buffer.append(System.getProperty("line.separator"));
242                } else {
243                        buffer = new StringBuffer(170);
244                }
245               
246                buffer.append(accResStats.getResourceName());
247                buffer.append(fieldSeparator);
248                buffer.append("load");
249                buffer.append(accResStats.getResourceLoad().toString());
250                buffer.append(System.getProperty("line.separator"));
251                buffer.append(accResStats.getResourceName());
252                buffer.append(fieldSeparator);
253                buffer.append("reservationload");
254                buffer.append(accResStats.getResourceReservationLoad().toString());
255                buffer.append(System.getProperty("line.separator"));
256               
257                return buffer.toString();
258        }
259
260        public Object visit(ResourceUsageStats resourceUsageStats) {
261                Map<Long, Double> resourceUsage = resourceUsageStats.getHistory();
262               
263                int mapSize = resourceUsage.size();
264                /*
265                 * FIXME:
266                 * Integer.MAX_VALUE = 2147483647. We assume, that each line contains
267                 * max 30 signs - this gives max 71582788 lines. If resourceUsage map
268                 * contains more elements then we have a problem, because content of
269                 * resourceUsage map will not fit in the buffer.
270                 * This will need further attention in the future.
271                 */
272                int maxSize = (Integer.MAX_VALUE / 30 ) - 1;
273                if(mapSize >= maxSize){
274                        log.error("Resource usage data is to long to fit in the buffer.");
275                        return null;
276                }
277               
278                int size = 30 * resourceUsage.size();
279               
280                StringBuffer buffer = null;
281
282                if(printedHeaders.add(resourceUsageStats.getUsageType())) {
283                        buffer = new StringBuffer(size + 42);
284                        String[] headers = resourceUsageStats.getHeaders();
285                        for(int i = 0; i < headers.length; i++)
286                        {
287                                buffer.append(headers[i]);
288                                buffer.append(fieldSeparator);
289                        }
290                        buffer.append(System.getProperty("line.separator"));
291                } else {
292                        buffer = new StringBuffer(size);
293                }
294               
295               
296                for (Long timestamp : resourceUsage.keySet()) {
297                       
298                        buffer.append(resourceUsageStats.getResourceName());
299                        buffer.append(fieldSeparator);
300                        Double value = resourceUsage.get(timestamp);
301                        buffer.append(timestamp);
302                        buffer.append(fieldSeparator);
303                        buffer.append(DataCenterWorkloadSimulator.DFAULT_NUMBER_FORMAT
304                                        .format(value));
305                        buffer.append(fieldSeparator);
306                        buffer.append(System.getProperty("line.separator"));
307
308                }
309                if(resourceUsage.size() > 0){
310                        buffer.append("mean: " + resourceUsageStats.getMeanValue());
311                        buffer.append(System.getProperty("line.separator"));   
312                }
313                return buffer.toString();
314        }
315
316        public Object visit(ResourcePowerStats resourceEnergyStats) {
317                Map<Long, Double> resourceEnergy = resourceEnergyStats.getHistory();
318               
319                int mapSize = resourceEnergy.size();
320                /*
321                 * FIXME:
322                 * Integer.MAX_VALUE = 2147483647. We assume, that each line contains
323                 * max 30 signs - this gives max 71582788 lines. If resourceUsage map
324                 * contains more elements then we have a problem, because content of
325                 * resourceUsage map will not fit in the buffer.
326                 * This will need further attention in the future.
327                 */
328                int maxSize = (Integer.MAX_VALUE / 30 ) - 1;
329                if(mapSize >= maxSize){
330                        log.error("Resource usage data is to long to fit in the buffer.");
331                        return null;
332                }
333               
334                int size = 30 * resourceEnergy.size();
335               
336                StringBuffer buffer = null;
337
338                if(printedHeaders.add(resourceEnergyStats.getUsageType())) {
339                        buffer = new StringBuffer(size + 42);
340                        String[] headers = resourceEnergyStats.getHeaders();
341                        for(int i = 0; i < headers.length; i++)
342                        {
343                                buffer.append(headers[i]);
344                                buffer.append(fieldSeparator);
345                        }
346                        buffer.append(System.getProperty("line.separator"));
347                } else {
348                        buffer = new StringBuffer(size);
349                }
350               
351               
352                for (Long timestamp : resourceEnergy.keySet()) {
353                       
354                        buffer.append(resourceEnergyStats.getResourceName());
355                        buffer.append(fieldSeparator);
356                        Double value = resourceEnergy.get(timestamp);
357                        buffer.append(timestamp);
358                        buffer.append(fieldSeparator);
359                        buffer.append(DataCenterWorkloadSimulator.DFAULT_NUMBER_FORMAT
360                                        .format(value));
361                        buffer.append(fieldSeparator);
362                        buffer.append(System.getProperty("line.separator"));
363
364                }
365               
366                if(resourceEnergy.size() > 0) {
367                        buffer.append("mean: "+resourceEnergyStats.getMeanValue() + " sum: " +resourceEnergyStats.getSumValue());
368                        buffer.append(System.getProperty("line.separator"));   
369                }
370
371                return buffer.toString();
372        }
373
374        public Object visit(ResourceAirFlowStats resourceAirFlowStats) {
375                Map<Long, Double> resourceAirFlow = resourceAirFlowStats.getHistory();
376               
377                int mapSize = resourceAirFlow.size();
378                /*
379                 * FIXME:
380                 * Integer.MAX_VALUE = 2147483647. We assume, that each line contains
381                 * max 30 signs - this gives max 71582788 lines. If resourceUsage map
382                 * contains more elements then we have a problem, because content of
383                 * resourceUsage map will not fit in the buffer.
384                 * This will need further attention in the future.
385                 */
386                int maxSize = (Integer.MAX_VALUE / 30 ) - 1;
387                if(mapSize >= maxSize){
388                        log.error("Resource usage data is to long to fit in the buffer.");
389                        return null;
390                }
391               
392                int size = 30 * resourceAirFlow.size();
393               
394                StringBuffer buffer = null;
395
396                if(printedHeaders.add(resourceAirFlowStats.getUsageType())) {
397                        buffer = new StringBuffer(size + 42);
398                        String[] headers = resourceAirFlowStats.getHeaders();
399                        for(int i = 0; i < headers.length; i++)
400                        {
401                                buffer.append(headers[i]);
402                                buffer.append(fieldSeparator);
403                        }
404                        buffer.append(System.getProperty("line.separator"));
405                } else {
406                        buffer = new StringBuffer(size);
407                }
408               
409               
410                for (Long timestamp : resourceAirFlow.keySet()) {
411                       
412                        buffer.append(resourceAirFlowStats.getResourceName());
413                        buffer.append(fieldSeparator);
414                        Double value = resourceAirFlow.get(timestamp);
415                        buffer.append(timestamp);
416                        buffer.append(fieldSeparator);
417                        buffer.append(DataCenterWorkloadSimulator.DFAULT_NUMBER_FORMAT
418                                        .format(value));
419                        buffer.append(fieldSeparator);
420                        buffer.append(System.getProperty("line.separator"));
421
422                }
423               
424                if(resourceAirFlow.size() > 0) {
425                        buffer.append("mean: "+resourceAirFlowStats.getMeanValue() + " sum: " +resourceAirFlowStats.getSumValue());
426                        buffer.append(System.getProperty("line.separator"));   
427                }
428
429                return buffer.toString();
430        }
431
432        public Object visit(GSSAccumulatorsStats accStats) {
433
434                StringBuffer buffer = null;
435
436                if(printedHeaders.add("accStats")) {
437                        buffer = new StringBuffer(2800);
438                        String[] headers = accStats.getHeaders();
439                        for(int i = 0; i < headers.length; i++)
440                        {
441                                buffer.append(headers[i]);
442                                buffer.append(fieldSeparator);
443                        }
444                        buffer.append(System.getProperty("line.separator"));
445                } else {
446                        buffer = new StringBuffer(1400);
447                }
448               
449                buffer.append("Delayed tasks");
450                buffer.append(accStats.delayedTasks);
451                buffer.append(System.getProperty("line.separator"));
452                buffer.append("Failed requests (tasks)");
453                buffer.append(accStats.failedRequests);
454                buffer.append(System.getProperty("line.separator"));
455                buffer.append("Makespan");
456                buffer.append(accStats.makespan);
457                buffer.append(System.getProperty("line.separator"));
458                buffer.append("Resources queue length");
459                buffer.append(accStats.meanQueueLength);
460                buffer.append(System.getProperty("line.separator"));
461                buffer.append("Resources total load");
462                buffer.append(accStats.meanTotalLoad);
463                buffer.append(System.getProperty("line.separator"));
464                buffer.append("Energy usage");
465                buffer.append(accStats.meanEnergyUsage);
466                buffer.append(System.getProperty("line.separator"));
467                buffer.append("Task completion time");
468                buffer.append(accStats.meanTaskCompletionTime);
469                buffer.append(System.getProperty("line.separator"));
470                buffer.append("Task execution time");
471                buffer.append(accStats.meanTaskExecutionTime);
472                buffer.append(System.getProperty("line.separator"));
473                buffer.append("Task start time");
474                buffer.append(accStats.meanTaskStartTime);
475                buffer.append(System.getProperty("line.separator"));
476                buffer.append("Task flow time");
477                buffer.append(accStats.meanTaskFlowTime);
478                buffer.append(System.getProperty("line.separator"));
479                buffer.append("Task waiting time");
480                buffer.append(accStats.meanTaskWaitingTime);
481                buffer.append(System.getProperty("line.separator"));
482                buffer.append("Task lateness");
483                buffer.append(accStats.lateness);
484                buffer.append(System.getProperty("line.separator"));
485                buffer.append("Task tardiness");
486                buffer.append(accStats.tardiness);
487               
488                return buffer.toString();
489        }
490
491}
Note: See TracBrowser for help on using the repository browser.