source: DCWoRMS/branches/coolemall/src/simulator/stats/implementation/out/CoolEmAllStringSerializer.java @ 1556

Revision 1556, 14.2 KB checked in by wojtekp, 9 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package simulator.stats.implementation.out;
2
3import java.text.DecimalFormat;
4import java.util.Map;
5
6import org.apache.commons.logging.Log;
7import org.apache.commons.logging.LogFactory;
8
9import schedframe.resources.CoolEmAllResourceType;
10import schedframe.resources.ResourceHistoryItem;
11import schedframe.resources.StandardResourceType;
12import simulator.stats.implementation.MetricsStats;
13import simulator.stats.implementation.ResourceAirflowStats;
14import simulator.stats.implementation.ResourceAvailabilityStats;
15import simulator.stats.implementation.ResourceHistoryStats;
16import simulator.stats.implementation.ResourcePowerStats;
17import simulator.stats.implementation.ResourceTemperatureStats;
18import simulator.stats.implementation.ResourceUsageStats;
19import simulator.stats.implementation.ResourceUsefulWorkStats;
20
21public class CoolEmAllStringSerializer extends StringSerializer {
22
23        private Log log = LogFactory.getLog(CoolEmAllStringSerializer.class);
24
25        public Object visit(ResourceUsageStats resourceUsageStats) {
26                Map<Long, Double> resourceUsage = resourceUsageStats.getHistory();
27                //String metricName = "cpu_load";
28                String metricName = resourceUsageStats.getUsageType();
29                int mapSize = resourceUsage.size();
30                /*
31                 * FIXME:
32                 * Integer.MAX_VALUE = 2147483647. We assume, that each line contains
33                 * max 30 signs - this gives max 71582788 lines. If resourceUsage map
34                 * contains more elements then we have a problem, because content of
35                 * resourceUsage map will not fit in the buffer.
36                 * This will need further attention in the future.
37                 */
38                int maxSize = (Integer.MAX_VALUE / 30 ) - 1;
39                if(mapSize >= maxSize){
40                        log.error("Resource usage data is to long to fit in the buffer.");
41                        return null;
42                }
43               
44                int size = 30 * resourceUsage.size();
45               
46                StringBuffer buffer = null;
47
48                if(printedHeaders.add(resourceUsageStats.getUsageType())) {
49                        buffer = new StringBuffer(size + 42);
50                } else {
51                        buffer = new StringBuffer(size);
52                }
53               
54                if(!resourceUsageStats.getResourceType().getName().equals(StandardResourceType.Core.getName()) && !resourceUsageStats.getResourceType().getName().equals(CoolEmAllResourceType.Core.getName())){
55                        for (Long timestamp : resourceUsage.keySet()) {
56                               
57                                buffer.append(metricName);
58                                buffer.append(fieldSeparator);
59                                if(resourceUsageStats.getResourceName().startsWith("/"))
60                                        buffer.append(resourceUsageStats.getResourceName().substring(1));
61                                else buffer.append(resourceUsageStats.getResourceName());
62                                buffer.append(fieldSeparator);
63                                Double value = resourceUsage.get(timestamp);
64                                buffer.append(timestamp);
65                                buffer.append(fieldSeparator);
66                                //buffer.append(DataCenterWorkloadSimulator.DFAULT_NUMBER_FORMAT
67                                //              .format(value));
68                                buffer.append(value);
69                                buffer.append(fieldSeparator);
70                                buffer.append(System.getProperty("line.separator"));
71                        }
72                }
73
74                int lastIdx = buffer.lastIndexOf(System.getProperty("line.separator"));
75                if(lastIdx != -1){
76                        //buffer.deleteCharAt(lastIdx);
77                }
78
79                return buffer.toString();
80        }
81
82        public Object visit(ResourcePowerStats resourceEnergyStats) {
83                Map<Long, Double> resourceEnergy = resourceEnergyStats.getHistory();
84                //String nodeMetricName = "power";
85                String metricName = resourceEnergyStats.getUsageType();
86                int mapSize = resourceEnergy.size();
87                /*
88                 * FIXME:
89                 * Integer.MAX_VALUE = 2147483647. We assume, that each line contains
90                 * max 30 signs - this gives max 71582788 lines. If resourceUsage map
91                 * contains more elements then we have a problem, because content of
92                 * resourceUsage map will not fit in the buffer.
93                 * This will need further attention in the future.
94                 */
95                int maxSize = (Integer.MAX_VALUE / 30 ) - 1;
96                if(mapSize >= maxSize){
97                        log.error("Resource usage data is to long to fit in the buffer.");
98                        return null;
99                }
100               
101                int size = 30 * resourceEnergy.size();
102               
103                StringBuffer buffer = null;
104
105                if(printedHeaders.add(resourceEnergyStats.getUsageType())) {
106                        buffer = new StringBuffer(size + 42);
107                } else {
108                        buffer = new StringBuffer(size);
109                }
110                //if(resourceEnergyStats.getResourceType().getName().equals(StandardResourceType.ComputingNode.getName()) || resourceEnergyStats.getResourceType().getName().equals(CoolEmAllResourceType.Node.getName()) ||
111                                //resourceEnergyStats.getResourceType().getName().equals(StandardResourceType.Inlet.getName())  || resourceEnergyStats.getResourceType().getName().equals(StandardResourceType.Outlet.getName()) ||
112                //              resourceEnergyStats.getResourceType().getName().equals(StandardResourceType.Heatsink.getName())){
113               
114                        for (Long timestamp : resourceEnergy.keySet()) {
115                               
116                                buffer.append(metricName);
117                                buffer.append(fieldSeparator);
118                                if(resourceEnergyStats.getResourceName().startsWith("/"))
119                                        buffer.append(resourceEnergyStats.getResourceName().substring(1));
120                                else buffer.append(resourceEnergyStats.getResourceName());
121                                buffer.append(fieldSeparator);
122                                Double value = resourceEnergy.get(timestamp);
123                                buffer.append(timestamp);
124                                buffer.append(fieldSeparator);
125                                //buffer.append(DataCenterWorkloadSimulator.DFAULT_NUMBER_FORMAT
126                                //              .format(value));
127                                buffer.append(value);
128                                buffer.append(fieldSeparator);
129                                buffer.append(System.getProperty("line.separator"));
130                        }
131        //      }
132
133                int lastIdx = buffer.lastIndexOf(System.getProperty("line.separator"));
134                if(lastIdx != -1){
135                        //buffer.deleteCharAt(lastIdx);
136                }
137
138                return buffer.toString();
139        }
140
141        public Object visit(ResourceAirflowStats resourceAirFlowStats) {
142                Map<Long, Double> resourceAirFlow = resourceAirFlowStats.getHistory();
143                //String nodeMetricName = "airflow_volume";
144                String metricName = resourceAirFlowStats.getUsageType();
145                int mapSize = resourceAirFlow.size();
146                /*
147                 * FIXME:
148                 * Integer.MAX_VALUE = 2147483647. We assume, that each line contains
149                 * max 30 signs - this gives max 71582788 lines. If resourceUsage map
150                 * contains more elements then we have a problem, because content of
151                 * resourceUsage map will not fit in the buffer.
152                 * This will need further attention in the future.
153                 */
154                int maxSize = (Integer.MAX_VALUE / 30 ) - 1;
155                if(mapSize >= maxSize){
156                        log.error("Resource usage data is to long to fit in the buffer.");
157                        return null;
158                }
159               
160                int size = 30 * resourceAirFlow.size();
161               
162                StringBuffer buffer = null;
163
164                if(printedHeaders.add(resourceAirFlowStats.getUsageType())) {
165                        buffer = new StringBuffer(size + 42);
166                } else {
167                        buffer = new StringBuffer(size);
168                }
169
170                if(resourceAirFlowStats.getResourceType().getName().equals(StandardResourceType.Inlet.getName()) || resourceAirFlowStats.getResourceType().getName().equals(StandardResourceType.Outlet.getName()) || resourceAirFlowStats.getResourceType().getName().equals(StandardResourceType.Fan.getName())){
171                        for (Long timestamp : resourceAirFlow.keySet()) {
172                                buffer.append(metricName);
173                                buffer.append(fieldSeparator);
174                                if(resourceAirFlowStats.getResourceName().startsWith("/"))
175                                        buffer.append(resourceAirFlowStats.getResourceName().substring(1));
176                                else buffer.append(resourceAirFlowStats.getResourceName());
177                                buffer.append(fieldSeparator);
178                                Double value = resourceAirFlow.get(timestamp);
179                                buffer.append(timestamp);
180                                buffer.append(fieldSeparator);
181                                //buffer.append(DataCenterWorkloadSimulator.DFAULT_NUMBER_FORMAT
182                                //              .format(value));
183                                buffer.append(value);
184                                buffer.append(fieldSeparator);
185                                buffer.append(System.getProperty("line.separator"));
186                        }
187                }
188
189                int lastIdx = buffer.lastIndexOf(System.getProperty("line.separator"));
190                if(lastIdx != -1){
191                        //buffer.deleteCharAt(lastIdx);
192                }
193
194                return buffer.toString();
195        }
196       
197        public Object visit(ResourceTemperatureStats resourceTemperatureStats) {
198                Map<Long, Double> resourceTemperature = resourceTemperatureStats.getHistory();
199                //String nodeMetricName = "temperature";
200                //String cpuMetricName = "temperature";
201               
202                String metricName = resourceTemperatureStats.getUsageType();
203
204                int mapSize = resourceTemperature.size();
205                /*
206                 * FIXME:
207                 * Integer.MAX_VALUE = 2147483647. We assume, that each line contains
208                 * max 30 signs - this gives max 71582788 lines. If resourceUsage map
209                 * contains more elements then we have a problem, because content of
210                 * resourceUsage map will not fit in the buffer.
211                 * This will need further attention in the future.
212                 */
213                int maxSize = (Integer.MAX_VALUE / 30 ) - 1;
214                if(mapSize >= maxSize){
215                        log.error("Resource temperature data is to long to fit in the buffer.");
216                        return null;
217                }
218               
219                int size = 30 * resourceTemperature.size();
220               
221                StringBuffer buffer = null;
222
223                if(printedHeaders.add(resourceTemperatureStats.getUsageType())) {
224                        buffer = new StringBuffer(size + 42);
225                } else {
226                        buffer = new StringBuffer(size);
227                }
228               
229                if(resourceTemperatureStats.getResourceType().getName().equals(StandardResourceType.Node.getName()) || resourceTemperatureStats.getResourceType().getName().equals(StandardResourceType.Processor.getName())){
230                        /*String metricName = null;
231                        if(resourceTemperatureStats.getResourceType().equals(StandardResourceType.ComputingNode) || resourceTemperatureStats.getResourceType().equals(CoolEmAllResourceType.Node)){
232                                metricName = nodeMetricName;
233                        } else if(resourceTemperatureStats.getResourceType().equals(StandardResourceType.Processor) || resourceTemperatureStats.getResourceType().equals(CoolEmAllResourceType.Processor)){
234                                metricName = cpuMetricName;
235                        }*/
236                        for (Long timestamp : resourceTemperature.keySet()) {
237                               
238                                buffer.append(metricName);
239                                buffer.append(fieldSeparator);
240                                if(resourceTemperatureStats.getResourceName().startsWith("/"))
241                                        buffer.append(resourceTemperatureStats.getResourceName().substring(1));
242                                else buffer.append(resourceTemperatureStats.getResourceName());
243                                buffer.append(fieldSeparator);
244                                Double value = resourceTemperature.get(timestamp);
245                                buffer.append(timestamp);
246                                buffer.append(fieldSeparator);
247                                //buffer.append(DataCenterWorkloadSimulator.DFAULT_NUMBER_FORMAT
248                                //              .format(value));
249                                buffer.append(value);
250                                buffer.append(fieldSeparator);
251                                buffer.append(System.getProperty("line.separator"));
252                        }
253                }
254               
255                int lastIdx = buffer.lastIndexOf(System.getProperty("line.separator"));
256                if(lastIdx != -1){
257                        //buffer.deleteCharAt(lastIdx);
258                }
259
260                return buffer.toString();
261        }
262
263        public Object visit(MetricsStats metricsStats) {
264                StringBuffer buffer = null;
265
266                if(printedHeaders.add("metrics")) {
267                        buffer = new StringBuffer(600);
268                        /*String[] headers = metricsStats.getHeaders();
269                        for(int i = 0; i < headers.length; i++)
270                        {
271                                buffer.append(headers[i]);
272                                buffer.append(fieldSeparator);
273                        }
274                        buffer.append(System.getProperty("line.separator"));*/
275                } else {
276                        buffer = new StringBuffer(300);
277                }
278                DecimalFormat df = new DecimalFormat();
279                df.setMaximumFractionDigits(3);
280                df.setGroupingUsed(false);
281               
282                buffer.append(metricsStats.getMetricName());
283                buffer.append(fieldSeparator);
284                buffer.append(metricsStats.getResourceName());
285                buffer.append(fieldSeparator);
286                buffer.append(metricsStats.getTimestamp());
287                buffer.append(fieldSeparator);
288                buffer.append(df.format(metricsStats.getValue()));
289                buffer.append(fieldSeparator);
290
291                return buffer.toString();
292        }
293       
294        public Object visit(ResourceHistoryStats arg) {
295                StringBuffer buffer = null;
296
297                if(printedHeaders.add("metrics")) {
298                        buffer = new StringBuffer(600);
299                        /*String[] headers = metricsStats.getHeaders();
300                        for(int i = 0; i < headers.length; i++)
301                        {
302                                buffer.append(headers[i]);
303                                buffer.append(fieldSeparator);
304                        }
305                        buffer.append(System.getProperty("line.separator"));*/
306                } else {
307                        buffer = new StringBuffer(300);
308                }
309                DecimalFormat df = new DecimalFormat();
310                df.setMaximumFractionDigits(3);
311                df.setGroupingUsed(false);
312               
313                for(ResourceHistoryItem rhc: arg.getResourceHistory()){
314                        buffer.append(rhc.getTimestamp());
315                        buffer.append(fieldSeparator);
316                        buffer.append(rhc.getResourceName());
317                        buffer.append(fieldSeparator);
318                        buffer.append(rhc.getAction());
319                        buffer.append(fieldSeparator);
320                        buffer.append(rhc.getParamter());
321                        buffer.append(fieldSeparator);
322                        buffer.append(System.getProperty("line.separator"));
323                }
324
325                return buffer.toString();
326        }
327
328        public Object visit(ResourceUsefulWorkStats resourceUsefulWorkStats) {
329                       
330                String metricName = resourceUsefulWorkStats.getUsageType();
331               
332                StringBuffer buffer = null;
333
334                if(printedHeaders.add("metrics")) {
335                        buffer = new StringBuffer(600);
336                        /*String[] headers = metricsStats.getHeaders();
337                        for(int i = 0; i < headers.length; i++)
338                        {
339                                buffer.append(headers[i]);
340                                buffer.append(fieldSeparator);
341                        }
342                        buffer.append(System.getProperty("line.separator"));*/
343                } else {
344                        buffer = new StringBuffer(300);
345                }
346                DecimalFormat df = new DecimalFormat();
347                df.setMaximumFractionDigits(3);
348                df.setGroupingUsed(false);
349                if(!resourceUsefulWorkStats.getResourceType().getName().equals(StandardResourceType.Core.getName()) && !resourceUsefulWorkStats.getResourceType().getName().equals(CoolEmAllResourceType.Core.getName())){
350
351                        buffer.append(metricName);
352                        buffer.append(fieldSeparator);
353                        buffer.append(resourceUsefulWorkStats.getResourceName());
354                        buffer.append(fieldSeparator);
355                        buffer.append(resourceUsefulWorkStats.getTimestamp());
356                        buffer.append(fieldSeparator);
357                        buffer.append(df.format(resourceUsefulWorkStats.getValue()));
358                        buffer.append(fieldSeparator);
359                        buffer.append(System.getProperty("line.separator"));
360                }
361                return buffer.toString();
362        }
363       
364
365        public Object visit(ResourceAvailabilityStats resourceAvailabilityStats) {
366               
367                String metricName = resourceAvailabilityStats.getUsageType();
368               
369                StringBuffer buffer = null;
370
371                if(printedHeaders.add("metrics")) {
372                        buffer = new StringBuffer(600);
373                        /*String[] headers = metricsStats.getHeaders();
374                        for(int i = 0; i < headers.length; i++)
375                        {
376                                buffer.append(headers[i]);
377                                buffer.append(fieldSeparator);
378                        }
379                        buffer.append(System.getProperty("line.separator"));*/
380                } else {
381                        buffer = new StringBuffer(300);
382                }
383                DecimalFormat df = new DecimalFormat();
384                df.setMaximumFractionDigits(3);
385                df.setGroupingUsed(false);
386                if(resourceAvailabilityStats.getResourceType().getName().equals(CoolEmAllResourceType.NodeGroup.getName())){
387
388                        buffer.append(metricName);
389                        buffer.append(fieldSeparator);
390                        buffer.append(resourceAvailabilityStats.getResourceName());
391                        buffer.append(fieldSeparator);
392                        buffer.append(resourceAvailabilityStats.getTimestamp());
393                        buffer.append(fieldSeparator);
394                        buffer.append(df.format(resourceAvailabilityStats.getValue()));
395                        buffer.append(fieldSeparator);
396                        buffer.append(System.getProperty("line.separator"));
397                }
398                return buffer.toString();
399        }
400}
Note: See TracBrowser for help on using the repository browser.