source: xssim/src/simulator/utils/WorkloadCalculator.java @ 104

Revision 104, 4.4 KB checked in by wojtekp, 13 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package simulator.utils;
2
3import java.io.File;
4import java.util.Calendar;
5import java.util.HashMap;
6import java.util.Iterator;
7import java.util.Set;
8
9import org.apache.commons.logging.Log;
10import org.apache.commons.logging.LogFactory;
11
12import simulator.workload.reader.archive.swf.SWFFields;
13import simulator.workload.reader.archive.swf.SWFParser;
14import simulator.workload.writer.swf.Grms3SWFJobWriter;
15
16/**
17 *
18 * @author Marcin Krystek
19 *
20 */
21public class WorkloadCalculator {
22
23        protected static Log log = LogFactory.getLog(WorkloadCalculator.class);
24       
25        public static void main(String args[]){
26       
27                WorkloadCalculator workloadCalculator = new WorkloadCalculator();
28                try {
29                        throw new RuntimeException("Nieladnie tak uruchamiac w ciemno ;). " +
30                                        "Wybierz funkcje, ktora ma zostac wywolana");
31                       
32                        //workloadCalculator.normalizeSubmitTime(args[0]);
33                        //workloadCalculator.removeIncorrectTasks(args[0]);
34                       
35                } catch (Exception e) {
36                        e.printStackTrace();
37                }
38        }
39       
40        /**
41         * Rewrites swf file. Submit time of all tasks will be scaled down.
42         * @param swfFileName
43         */
44        public void normalizeSubmitTime(String swfFileName) throws Exception{
45                log.info("Start workload submit time normalization for "+swfFileName);
46               
47                File file = new File(swfFileName);
48                String dirName = file.getParent();
49                String fileName = file.getName();
50               
51                File newFile = new File(dirName, Calendar.getInstance().getTimeInMillis()+"_"+fileName);
52                file.renameTo(newFile);
53               
54               
55                Grms3SWFJobWriter writer = new Grms3SWFJobWriter(dirName, fileName);
56                // write swf filed description
57                writer.writeFieldDescriptionHeader();
58               
59                SWFParser parser = new SWFParser(newFile.getAbsolutePath());
60               
61                // rewrite swf header
62                HashMap<String, String> header = parser.loadHeader();
63                Set<String> keys = header.keySet();
64                Iterator<String> itr = keys.iterator();
65                while(itr.hasNext()){
66                        String key = itr.next();
67                        writer.writeComment(key, header.get(key));
68                }
69               
70                // rewrite tasks
71                String task[] = parser.readTask();
72                long submitTimeOffset = Long.valueOf(task[SWFFields.DATA_SUBMIT_TIME]);
73                task[SWFFields.DATA_SUBMIT_TIME] = "0";
74                writer.writeLine(task);
75               
76                while((task = parser.readTask()) != null){
77                        long submitTime = Long.valueOf(task[SWFFields.DATA_SUBMIT_TIME]) - submitTimeOffset;
78                        task[SWFFields.DATA_SUBMIT_TIME] = String.valueOf(submitTime);
79                        writer.writeLine(task);
80                }
81               
82                parser.close();
83                writer.close();
84               
85                newFile.delete();
86               
87                log.info("End workload submit time normalization");
88        }
89       
90        /**
91         * Rewrites swf file and deletes all tasks which parameter RUN_TIME or REQUESTED_TIME or
92         * number of ALLOCATED PRCESSORS or number of REQUESTED PROCESSORS equals -1.
93         * @param swf file name
94         */
95        public void removeIncorrectTasks(String swfFileName) throws Exception{
96                log.info("Start removing incorrect tasks for "+swfFileName);
97               
98                File file = new File(swfFileName);
99                String dirName = file.getParent();
100                String fileName = file.getName();
101               
102                File newFile = new File(dirName, Calendar.getInstance().getTimeInMillis()+"_"+fileName);
103                file.renameTo(newFile);
104               
105               
106                Grms3SWFJobWriter writer = new Grms3SWFJobWriter(dirName, fileName);
107                // write swf filed description
108                writer.writeFieldDescriptionHeader();
109               
110                SWFParser parser = new SWFParser(newFile.getAbsolutePath());
111               
112                // rewrite swf header
113                HashMap<String, String> header = parser.loadHeader();
114                Set<String> keys = header.keySet();
115                Iterator<String> itr = keys.iterator();
116                while(itr.hasNext()){
117                        String key = itr.next();
118                        writer.writeComment(key, header.get(key));
119                }
120               
121                // rewrite tasks
122                String task[] = null;
123               
124                while((task = parser.readTask()) != null){
125                        if("-1".equals(task[SWFFields.DATA_RUN_TIME])) {
126                                log.info("Removing task "+task[SWFFields.DATA_JOB_NUMBER] + ",  RUN_TIME = -1");
127                                continue;       
128                        }
129                               
130                        if("-1".equals(task[SWFFields.DATA_REQUESTED_TIME])) {
131                                log.info("Removing task "+task[SWFFields.DATA_JOB_NUMBER] + ",  REQUESTED_TIME = -1");
132                                continue;
133                        }
134                        if("-1".equals(task[SWFFields.DATA_NUMBER_OF_ALLOCATED_PROCESSORS])){
135                                log.info("Removing task "+task[SWFFields.DATA_JOB_NUMBER] + ",  NUMBER_OF_ALLOCATED_PROCESSORS = -1");
136                                continue;
137                        }
138                        if("-1".equals(task[SWFFields.DATA_REQUESTED_NUMBER_OF_PROCESSORS])){
139                                log.info("Removing task "+task[SWFFields.DATA_JOB_NUMBER] + ",  REQUESTED_NUMBER_OF_PROCESSORS = -1");
140                                continue;
141                        }
142
143                        writer.writeLine(task);
144                }
145               
146                parser.close();
147                writer.close();
148               
149                newFile.delete();
150               
151                log.info("End removing incorrect tasks");
152        }
153       
154}
Note: See TracBrowser for help on using the repository browser.