package simulator.stats.implementation.out; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import simulator.GridSchedulingSimulator; import simulator.stats.implementation.AccumulatedResourceStats; import simulator.stats.implementation.GSSAccumulatorsStats; import simulator.stats.implementation.JobStats; import simulator.stats.implementation.LinkStats; import simulator.stats.implementation.NetworkReservationStats; import simulator.stats.implementation.ResourceStats; import simulator.stats.implementation.ResourceUsageStats; import simulator.stats.implementation.TaskStats; /** * * @author Marcin Krystek, Jarek Szymczak * * This serializer needs correct implementation. Now it works as simple * StringSerializer. * */ public class FormatedStringSerializer extends AbstractStringSerializer { private Log log = LogFactory.getLog(FormatedStringSerializer.class); private String fieldSeparator = "; "; public String visit(TaskStats taskStats) { StringBuffer buffer = null; if(printedHeaders.add("taskStats")) { buffer = new StringBuffer(520); String[] headers = taskStats.getHeaders(); if (headers.length == 23) { buffer.append(String.format("%5s", headers[0])); buffer.append(fieldSeparator); buffer.append(String.format("%7s", headers[1])); buffer.append(fieldSeparator); buffer.append(String.format("%7s", headers[2])); buffer.append(fieldSeparator); buffer.append(String.format("%14s", headers[3])); buffer.append(fieldSeparator); buffer.append(String.format("%7s", headers[4])); buffer.append(fieldSeparator); buffer.append(String.format("%14s", headers[5])); buffer.append(fieldSeparator); buffer.append(String.format("%15s", headers[6])); buffer.append(fieldSeparator); buffer.append(String.format("%13s", headers[7])); buffer.append(fieldSeparator); buffer.append(String.format("%13s", headers[8])); buffer.append(fieldSeparator); buffer.append(String.format("%13s", headers[9])); buffer.append(fieldSeparator); if (this.useExtended) { buffer.append(String.format("%15s", headers[10])); buffer.append(fieldSeparator); buffer.append(String.format("%14s", headers[11])); buffer.append(fieldSeparator); buffer.append(String.format("%14s", headers[12])); buffer.append(fieldSeparator); buffer.append(String.format("%10s", headers[13])); buffer.append(fieldSeparator); buffer.append(String.format("%10s", headers[14])); buffer.append(fieldSeparator); buffer.append(String.format("%9s", headers[15])); buffer.append(fieldSeparator); buffer.append(String.format("%12s", headers[16])); buffer.append(fieldSeparator); buffer.append(String.format("%15s", headers[17])); buffer.append(fieldSeparator); buffer.append(String.format("%9s", headers[18])); buffer.append(fieldSeparator); buffer.append(String.format("%10s", headers[19])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[20])); buffer.append(fieldSeparator); buffer.append(String.format("%17s", headers[21])); buffer.append(fieldSeparator); buffer.append(String.format("%-17s", headers[22])); buffer.append(fieldSeparator); } } else { buffer.append(headers.toString()); } buffer.append(System.getProperty("line.separator")); } else { buffer = new StringBuffer(260); } buffer.append(String.format("%5s", taskStats.getJobID())); buffer.append(fieldSeparator); buffer.append(String.format("%7s", taskStats.getTaskID())); buffer.append(fieldSeparator); buffer.append(String.format("%7s", taskStats.getUserDN())); buffer.append(fieldSeparator); buffer.append(String.format("%14s", taskStats.getResName())); buffer.append(fieldSeparator); buffer.append(String.format("%7d", taskStats.getCpuCnt())); buffer.append(fieldSeparator); buffer.append(String.format("%14d", Double.valueOf(taskStats.getExecStartDate()).longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%15d", Double.valueOf(taskStats.getExecFinishDate()).longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%13d", Double.valueOf(taskStats.getExecEndDate()).longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%13d", Double.valueOf(taskStats.getGB_SubDate()).longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%13d", Double.valueOf(taskStats.getLB_SubDate()).longValue())); buffer.append(fieldSeparator); if (this.useExtended) { buffer.append(String.format("%15d", Double.valueOf(taskStats.getCompletionTime()).longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%14d", Double.valueOf(taskStats.getExecStartTime()).longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%14d", Double.valueOf(taskStats.getExecutionTime()).longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%10d", Double.valueOf(taskStats.getReadyTime()).longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%10d", Double.valueOf(taskStats.getStartTime()).longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%9d", Double.valueOf(taskStats.getFlowTime()).longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%12d", Double.valueOf(taskStats.getWaitingTime()).longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%15d", Double.valueOf(taskStats.getGQ_WaitingTime()).longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%9d", Double.valueOf(taskStats.getLateness()).longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%10d", Double.valueOf(taskStats.getTardiness()).longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%16d", Double.valueOf(taskStats.getReservationStartDate()) .longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%17d", Double.valueOf(taskStats.getReservationFinishDate()) .longValue())); buffer.append(fieldSeparator); buffer.append(String.format("%-17s", taskStats.getProcessorsName())); buffer.append(fieldSeparator); } return buffer.toString(); } public String visit(JobStats jobStats) { StringBuffer buffer = null; if(printedHeaders.add("jobStats")) { buffer = new StringBuffer(200); String[] headers = jobStats.getHeaders(); if (headers.length == 10) { buffer.append(String.format("%5s", headers[0])); buffer.append(fieldSeparator); buffer.append(String.format("%23s", headers[1])); buffer.append(fieldSeparator); buffer.append(String.format("%22s", headers[2])); buffer.append(fieldSeparator); buffer.append(String.format("%18s", headers[3])); buffer.append(fieldSeparator); buffer.append(String.format("%17s", headers[4])); buffer.append(fieldSeparator); buffer.append(String.format("%20s", headers[5])); buffer.append(fieldSeparator); buffer.append(String.format("%23s", headers[6])); buffer.append(fieldSeparator); buffer.append(String.format("%9s", headers[7])); buffer.append(fieldSeparator); buffer.append(String.format("%10s", headers[8])); buffer.append(fieldSeparator); buffer.append(String.format("%9s", headers[9])); buffer.append(fieldSeparator); } else { buffer.append(headers.toString()); } buffer.append(System.getProperty("line.separator")); } else { buffer = new StringBuffer(100); } buffer.append(String.format("%5s", jobStats.getJobID())); buffer.append(fieldSeparator); buffer.append(String.format("%23s", defaultNumberFormat.format(jobStats .getMeanTaskCompletionTime().getMean()))); buffer.append(fieldSeparator); buffer.append(String.format("%22s", defaultNumberFormat.format(jobStats .getMeanTaskExecutionTime().getMean()))); buffer.append(fieldSeparator); buffer.append(String.format("%18s", defaultNumberFormat.format(jobStats .getMeanTaskStartTime().getMean()))); buffer.append(fieldSeparator); buffer.append(String.format("%17s", defaultNumberFormat.format(jobStats .getMeanTaskFlowTime().getMean()))); buffer.append(fieldSeparator); buffer.append(String.format("%20s", defaultNumberFormat.format(jobStats .getMeanTaskWaitingTime().getMean()))); buffer.append(fieldSeparator); buffer.append(String.format("%23s", defaultNumberFormat.format(jobStats .getMeanTaskGQ_WaitingTime().getMean()))); buffer.append(fieldSeparator); buffer.append(String.format("%9s", defaultNumberFormat.format(jobStats.getTardiness().getMean()))); buffer.append(fieldSeparator); buffer.append(String.format("%10s", defaultNumberFormat.format(jobStats.getLateness().getMean()))); buffer.append(fieldSeparator); buffer.append(String.format("%9s", defaultNumberFormat.format(jobStats.getMakespan().getMean()))); buffer.append(fieldSeparator); return buffer.toString(); } public String visit(ResourceStats resourceStats) { StringBuffer buffer = null; if(printedHeaders.add("resourceStats")) { buffer = new StringBuffer(600); String[] headers = resourceStats.getHeaders(); if (headers.length == 7) { buffer.append(String.format("%-20s", headers[0])); buffer.append(fieldSeparator); buffer.append(String.format("%6s", headers[1])); buffer.append(fieldSeparator); buffer.append(String.format("%3s", headers[2])); buffer.append(fieldSeparator); buffer.append(String.format("%9s", headers[3])); buffer.append(fieldSeparator); buffer.append(String.format("%12s", headers[4])); buffer.append(fieldSeparator); buffer.append(String.format("%-120s", headers[5])); buffer.append(fieldSeparator); buffer.append(String.format("%-120s", headers[6])); buffer.append(fieldSeparator); } else { buffer.append(headers.toString()); } buffer.append(System.getProperty("line.separator")); } else { buffer = new StringBuffer(300); } buffer.append(String.format("%-20s", resourceStats.getResourceName())); buffer.append(fieldSeparator); buffer.append(String.format("%6d", resourceStats.getMemory())); buffer.append(fieldSeparator); buffer.append(String.format("%3d", resourceStats.getCpucnt())); buffer.append(fieldSeparator); buffer.append(String.format("%9d", resourceStats.getCpuspeed())); buffer.append(fieldSeparator); buffer.append(String.format("%-12s", GridSchedulingSimulator.DFAULT_NUMBER_FORMAT .format(resourceStats.getQueueLength()))); buffer.append(fieldSeparator); StringBuffer tempBuffer = new StringBuffer(); Map processorsLoad = resourceStats.getProcessorsLoad(); for (String processorName : processorsLoad.keySet()) { Double load = processorsLoad.get(processorName); tempBuffer.append(String.format("%-12s", processorName)); tempBuffer.append(" "); tempBuffer.append(String.format("%-5s", GridSchedulingSimulator.DFAULT_NUMBER_FORMAT .format(load))); tempBuffer.append(": "); } buffer.append(String.format("%-120s", tempBuffer.toString())); buffer.append(fieldSeparator); tempBuffer = new StringBuffer(); Map processorsReservationLoad = resourceStats .getProcessorsReservationLoad(); for (String processorName : processorsReservationLoad.keySet()) { Double reservationLoad = processorsReservationLoad .get(processorName); tempBuffer.append(String.format("%-12s", processorName)); tempBuffer.append(" "); tempBuffer.append(String.format("%-5s", GridSchedulingSimulator.DFAULT_NUMBER_FORMAT .format(reservationLoad))); tempBuffer.append(": "); } buffer.append(String.format("%-120s", tempBuffer.toString())); buffer.append(fieldSeparator); return buffer.toString(); } public String visit(AccumulatedResourceStats accResStats) { StringBuffer buffer = null; if(printedHeaders.add("accResStats")) { buffer = new StringBuffer(340); String[] headers = accResStats.getHeaders(); if (headers.length == 9) { buffer.append(String.format("%-27s", headers[0])); buffer.append(fieldSeparator); buffer.append(String.format("%-27s", headers[1])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[2])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[3])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[4])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[5])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[6])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[7])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[8])); buffer.append(fieldSeparator); } else { buffer.append(headers.toString()); } buffer.append(System.getProperty("line.separator")); } else { buffer = new StringBuffer(170); } buffer.append(String.format("%-27s", accResStats.getResourceName())); buffer.append(fieldSeparator); buffer.append(String.format("%-27s", "load")); buffer.append(accResStats.getResourceLoad().toFormatedString()); buffer.append(System.getProperty("line.separator")); buffer.append(String.format("%-27s", accResStats.getResourceName())); buffer.append(fieldSeparator); buffer.append(String.format("%-27s", "reservationload")); buffer.append(accResStats.getResourceReservationLoad() .toFormatedString()); buffer.append(System.getProperty("line.separator")); return buffer.toString(); } public Object visit(ResourceUsageStats resourceUsageStats) { Map resourceUsage = resourceUsageStats.getUsage(); int mapSize = resourceUsage.size(); /* * FIXME: Integer.MAX_VALUE = 2147483647. We assume, that each line * contains max 30 signs - this gives max 71582788 lines. If * resourceUsage map contains more elements then we have a problem, * because content of resourceUsage map will not fit in the buffer. This * will need further attention in the future. */ int maxSize = (Integer.MAX_VALUE / 30) - 1; if (mapSize >= maxSize) { log.error("Resource usage data is to long to fit in the buffer."); return null; } int size = 30 * resourceUsage.size(); StringBuffer buffer = null; if(printedHeaders.add(resourceUsageStats.getResourceType())) { buffer = new StringBuffer(size + 42); String[] headers = resourceUsageStats.getHeaders(); if (headers.length == 3) { buffer.append(String.format("%-20s", headers[0])); buffer.append(fieldSeparator); buffer.append(String.format("%15s", headers[1])); buffer.append(fieldSeparator); buffer.append(String.format("%5s", headers[2])); buffer.append(fieldSeparator); } else { buffer.append(headers.toString()); } buffer.append(System.getProperty("line.separator")); } else { buffer = new StringBuffer(size); } for (Long timestamp : resourceUsage.keySet()) { buffer.append(String.format("%-20s", resourceUsageStats.getResourceName())); buffer.append(fieldSeparator); Integer value = resourceUsage.get(timestamp); buffer.append(String.format("%15d", timestamp)); buffer.append(fieldSeparator); buffer.append(String.format("%5s", GridSchedulingSimulator.DFAULT_NUMBER_FORMAT.format(value))); buffer.append(fieldSeparator); buffer.append(System.getProperty("line.separator")); } return buffer.toString(); } public Object visit(LinkStats linkStats) { StringBuffer buffer = null; if(printedHeaders.add("linkStats")) { buffer = new StringBuffer(600); String[] headers = linkStats.getHeaders(); if (headers.length == 6) { buffer.append(String.format("%-27s", headers[0])); buffer.append(fieldSeparator); buffer.append(String.format("%18s", headers[1])); buffer.append(fieldSeparator); buffer.append(String.format("%10s", headers[2])); buffer.append(fieldSeparator); buffer.append(String.format("%35s", headers[3])); buffer.append(fieldSeparator); buffer.append(String.format("%10s", headers[4])); buffer.append(fieldSeparator); buffer.append(String.format("%18s", headers[5])); buffer.append(fieldSeparator); } else { buffer.append(headers.toString()); } buffer.append(System.getProperty("line.separator")); } else { buffer = new StringBuffer(300); } buffer.append(String.format("%-27s", linkStats.getLinkName())); buffer.append(fieldSeparator); buffer.append(String.format("%18s", GridSchedulingSimulator.NETWORK_NUMBER_FORMAT.format(linkStats .getStartBaduRate()))); buffer.append(fieldSeparator); buffer.append(String.format("%10s", GridSchedulingSimulator.NETWORK_NUMBER_FORMAT.format(linkStats .getDelay()))); buffer.append(fieldSeparator); buffer.append(String.format("%35s", GridSchedulingSimulator.NETWORK_NUMBER_FORMAT.format(linkStats .getFlowsSize()))); buffer.append(fieldSeparator); buffer.append(String.format("%10s", GridSchedulingSimulator.NETWORK_NUMBER_FORMAT.format(linkStats .getLoad()))); buffer.append(fieldSeparator); buffer.append(String.format("%18s", GridSchedulingSimulator.NETWORK_NUMBER_FORMAT.format(linkStats .getReservationLoad()))); buffer.append(fieldSeparator); return buffer.toString(); } public Object visit(NetworkReservationStats resStats) { resStats.getHeaders(); List route = resStats.getRoute(); // 20 signs for link name, 80 for string representation of numerical // values int size = route.size() * 20 + 80; StringBuffer buffer = null; if(printedHeaders.add("resStats")) { buffer = new StringBuffer(size*2); String[] headers = resStats.getHeaders(); if (headers.length == 8) { buffer.append(String.format("%15s", headers[0])); buffer.append(fieldSeparator); buffer.append(String.format("%-100s", headers[1])); buffer.append(fieldSeparator); buffer.append(String.format("%32s", headers[2])); buffer.append(fieldSeparator); buffer.append(String.format("%31s", headers[3])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[4])); buffer.append(fieldSeparator); buffer.append(String.format("%35s",headers[5])); buffer.append(fieldSeparator); buffer.append(String.format("%10s",headers[6])); buffer.append(fieldSeparator); buffer.append(String.format("%9s", headers[7])); buffer.append(fieldSeparator); } else { buffer.append(headers.toString()); } buffer.append(System.getProperty("line.separator")); } else { buffer = new StringBuffer(300); } buffer.append(String.format("%15s", resStats.getReservationID())); buffer.append(fieldSeparator); buffer.append(String.format("%-100s", route)); buffer.append(fieldSeparator); buffer.append(String.format("%32s", resStats.getStartTime())); buffer.append(fieldSeparator); buffer.append(String.format("%31s", resStats.getEndTime())); buffer.append(fieldSeparator); buffer.append(String.format("%16s", resStats.getBandwidth())); buffer.append(fieldSeparator); buffer.append(String.format("%35s", GridSchedulingSimulator.NETWORK_NUMBER_FORMAT.format(resStats .getFlowsSize()))); buffer.append(fieldSeparator); buffer.append(String.format("%10s", GridSchedulingSimulator.NETWORK_NUMBER_FORMAT.format(resStats .getLoad()))); buffer.append(fieldSeparator); buffer.append(String.format("%9s", resStats.getStatus())); buffer.append(fieldSeparator); return buffer.toString(); } public Object visit(GSSAccumulatorsStats accStats) { StringBuffer buffer = null; if(printedHeaders.add("accStats")) { buffer = new StringBuffer(2800); String[] headers = accStats.getHeaders(); if (headers.length == 8) { buffer.append(String.format("%-26s", headers[0])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[1])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[2])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[3])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[4])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[5])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[6])); buffer.append(fieldSeparator); buffer.append(String.format("%16s", headers[7])); buffer.append(fieldSeparator); } else { buffer.append(headers.toString()); } buffer.append(System.getProperty("line.separator")); } else { buffer = new StringBuffer(1400); } buffer.append(String.format("%-26s", "Delayed tasks")); buffer.append(accStats.delayedTasks.toFormatedString()); buffer.append(System.getProperty("line.separator")); buffer.append(String.format("%-26s", "Failed requests (tasks)")); buffer.append(accStats.failedRequests.toFormatedString()); buffer.append(System.getProperty("line.separator")); buffer.append(String.format("%-26s", "Makespan")); buffer.append(accStats.makespan.toFormatedString()); buffer.append(System.getProperty("line.separator")); buffer.append(String.format("%-26s", "Resources queue length")); buffer.append(accStats.meanQueueLength.toFormatedString()); buffer.append(System.getProperty("line.separator")); buffer.append(String.format("%-26s", "Resources total load")); buffer.append(accStats.meanTotalLoad.toFormatedString()); buffer.append(System.getProperty("line.separator")); buffer.append(String.format("%-26s", "Resources reservation load")); buffer.append(accStats.meanReservationLoad.toFormatedString()); buffer.append(System.getProperty("line.separator")); buffer.append(String.format("%-26s", "Energy usage")); buffer.append(accStats.meanEnergyUsage.toFormatedString()); buffer.append(System.getProperty("line.separator")); buffer.append(String.format("%-26s", "Task completion time")); buffer.append(accStats.meanTaskCompletionTime.toFormatedString()); buffer.append(System.getProperty("line.separator")); buffer.append(String.format("%-26s", "Task execution time")); buffer.append(accStats.meanTaskExecutionTime.toFormatedString()); buffer.append(System.getProperty("line.separator")); buffer.append(String.format("%-26s", "Task start time")); buffer.append(accStats.meanTaskStartTime.toFormatedString()); buffer.append(System.getProperty("line.separator")); buffer.append(String.format("%-26s", "Task flow time")); buffer.append(accStats.meanTaskFlowTime.toFormatedString()); buffer.append(System.getProperty("line.separator")); buffer.append(String.format("%-26s", "Task waiting time")); buffer.append(accStats.meanTaskWaitingTime.toFormatedString()); buffer.append(System.getProperty("line.separator")); buffer.append(String.format("%-26s", "Task lateness")); buffer.append(accStats.lateness.toFormatedString()); buffer.append(System.getProperty("line.separator")); buffer.append(String.format("%-26s", "Task tardiness")); buffer.append(accStats.tardiness.toFormatedString()); return buffer.toString(); } }