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

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