package com.plugtree.solrmeter.view.statistic; import com.google.inject.Inject; import com.plugtree.solrmeter.model.statistic.OperationTimeHistory; import com.plugtree.solrmeter.view.HeadlessConsoleFrame; import com.plugtree.solrmeter.view.HeadlessStatisticPanel; import com.plugtree.solrmeter.view.HeadlessUtils; import com.plugtree.solrmeter.view.I18n; import com.plugtree.stressTestScope.StressTestScope; import org.apache.commons.lang.StringUtils; import java.util.*; @StressTestScope public class HeadlessOperationTimeLineChartPanel extends HeadlessStatisticPanel { private final String PREFIX = "statistic.operationTimeLineChartPanel."; private OperationTimeHistory statistic; @Inject public HeadlessOperationTimeLineChartPanel(OperationTimeHistory statistic) { super(); this.statistic = statistic; } @Override public String getStatisticName() { return I18n.get(PREFIX + "title"); } @Override public void refreshView() { Map<Long, Long> commitTime = statistic.getCommitTime(); Map<Long, Long> queriesTime = statistic.getQueriesTime(); Map<Long, Long> updatesTime = statistic.getUpdatesTime(); Map<Long, Long> optimizeTime = statistic.getOptimizeTime(); Set<Long> executionInstants = new TreeSet<Long>(); executionInstants.addAll(commitTime.keySet()); executionInstants.addAll(optimizeTime.keySet()); executionInstants.addAll(queriesTime.keySet()); executionInstants.addAll(updatesTime.keySet()); ArrayList<String> lines = new ArrayList<String>(); lines.add("execution instant\tcommits\tqueries\tupdates\toptimizes"); for(long instant:executionInstants) { ArrayList<String> fields = new ArrayList<String>(); fields.add(String.valueOf(instant/1000.0)); fields.add(getFieldValue(instant, commitTime)); fields.add(getFieldValue(instant, queriesTime)); fields.add(getFieldValue(instant, updatesTime)); fields.add(getFieldValue(instant, optimizeTime)); lines.add(StringUtils.join(fields, "\t")); } HeadlessUtils.outputData(PREFIX + "title", HeadlessConsoleFrame.getStatisticsOutputDirectory(), lines); } private String getFieldValue(long executionInstant, Map<Long, Long> series) { String value = new String(); if(series.containsKey(executionInstant)) { return String.valueOf(series.get(executionInstant)); } else { return "-"; } } }