source: xssim/trunk/src/simulator/stats/implementation/out/StringSerializer.java @ 228

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