001 package jp.osdl.jbento2.report; 002 003 import java.io.BufferedWriter; 004 import java.io.File; 005 import java.io.FileFilter; 006 import java.io.FileWriter; 007 import java.util.ArrayList; 008 import java.util.Arrays; 009 import java.util.Collection; 010 import java.util.Collections; 011 import java.util.Comparator; 012 import java.util.Iterator; 013 import java.util.List; 014 import java.util.Map; 015 import java.util.TreeMap; 016 017 import jp.osdl.jbento2.PathUtils; 018 import jp.osdl.jbento2.RegexNameFileFilter; 019 020 import org.apache.commons.io.FileUtils; 021 import org.apache.commons.io.IOUtils; 022 import org.apache.commons.io.filefilter.FileFilterUtils; 023 import org.apache.velocity.Template; 024 import org.apache.velocity.VelocityContext; 025 import org.apache.velocity.app.Velocity; 026 027 public class SampleDetailBuilder extends AbstractReportBuilder { 028 public SampleDetailBuilder(File dataDir, File destDir, File destRootDir) { 029 super(dataDir, destDir, destRootDir); 030 } 031 032 public void execute() throws Exception { 033 buildSampleDetail(); 034 } 035 036 private void buildSampleDetail() throws Exception { 037 038 VelocityContext context = new VelocityContext(); 039 040 List tables = new ArrayList(); 041 042 tables 043 .add(createTableData(getDataDir(), "throughput.txt", 044 "Throughput")); 045 tables.add(createTableData(getDataDir(), "responseTime.txt", 046 "Response Time")); 047 048 context.put("title", "Sample Detail of " + getDataDir().getName()); 049 context.put("relativeRoot", getRelativeRoot()); 050 context.put("relativePath", getRelativePath()); 051 052 context.put("tables", tables); 053 054 List cpu = new ArrayList(); 055 056 Collection cpuImages = FileUtils.listFiles(getDataDir(), 057 new RegexNameFileFilter(".*\\.u\\.all\\.png"), FileFilterUtils 058 .trueFileFilter()); 059 for (Iterator it = cpuImages.iterator(); it.hasNext();) { 060 File f = (File) it.next(); 061 Map item = new TreeMap(); 062 item.put("machine", PathUtils.basename(f, ".u.all.png")); 063 item.put("img", PathUtils.calculateRelativePath(getDataDir(), f)); 064 cpu.add(item); 065 } 066 067 Collections.sort(cpu, new Comparator() { 068 public int compare(Object arg0, Object arg1) { 069 return ((String) ((Map) arg0).get("machine")) 070 .compareTo((String) ((Map) arg1).get("machine")); 071 }; 072 }); 073 context.put("cpu", cpu); 074 075 File[] machines = getDataDir().listFiles(new FileFilter() { 076 public boolean accept(File pathname) { 077 return pathname.isDirectory(); 078 } 079 }); 080 081 List machineNames = new ArrayList(); 082 for (Iterator it = Arrays.asList(machines).iterator(); it.hasNext();) { 083 File f = (File) it.next(); 084 machineNames.add(f.getName()); 085 } 086 Collections.sort(machineNames); 087 context.put("machines", machineNames); 088 089 BufferedWriter writer = null; 090 try { 091 Template template = Velocity 092 .getTemplate("jp/osdl/jbento2/report/sampleDetail.vm"); 093 094 writer = new BufferedWriter(new FileWriter(new File(getDestDir(), 095 getDestDir().getName() + ".html"))); 096 template.merge(context, writer); 097 writer.flush(); 098 } finally { 099 IOUtils.closeQuietly(writer); 100 } 101 102 } 103 104 private Map createTableData(File dir, String fileName, String title) 105 throws Exception { 106 File csvFile = new File(dir, fileName); 107 Map result = CsvReader.readData(csvFile); 108 result.put("title", title); 109 return result; 110 } 111 112 }