package com.plugtree.solrmeter.view.statistic; import com.google.inject.Inject; import com.plugtree.solrmeter.model.statistic.FullQueryStatistic; import com.plugtree.solrmeter.model.statistic.QueryLogStatistic; 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.log4j.Logger; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; @StressTestScope public class HeadlessFullQueryStatisticPanel extends HeadlessStatisticPanel { private final static Logger logger = Logger.getLogger(HeadlessFullQueryStatisticPanel.class); private final String PREFIX = "statistic.fullQueryStatistic."; private static final int DOUBLE_SCALE = 2; private FullQueryStatistic fullQueryStatistic; private QueryLogStatistic queryLogStatistic; @Inject public HeadlessFullQueryStatisticPanel(FullQueryStatistic fullQueryStatistic, QueryLogStatistic queryLogStatistic) { super(); this.fullQueryStatistic = fullQueryStatistic; this.queryLogStatistic = queryLogStatistic; } private String getString(Double number) { return new BigDecimal(number).setScale(DOUBLE_SCALE, BigDecimal.ROUND_HALF_DOWN).toString(); } private String prepareData(String str) { return str.replace(",", "\t") .replace("false", "ok") .replace("true", "error"); } @Override public String getStatisticName() { return I18n.get(PREFIX + "title"); } @Override public void refreshView() { logger.debug("refreshing Full Query Statistics"); ArrayList<String> lines = new ArrayList<String>(); lines.add("median:\t" + getString(fullQueryStatistic.getMedian())); lines.add("mode:\t" + fullQueryStatistic.getMode().toString()); lines.add("variance:\t" + getString(fullQueryStatistic.getVariance())); lines.add("standard deviation:\t" + getString(fullQueryStatistic.getStandardDeviation())); lines.add("total average:\t" + fullQueryStatistic.getTotaAverage().toString()); lines.add("last minute average:\t" + fullQueryStatistic.getLastMinuteAverage().toString()); lines.add("last ten minute average:\t" + fullQueryStatistic.getLastTenMinutesAverage().toString()); if(fullQueryStatistic.getLastErrorTime() != null) { lines.add("last error time:\t" + SimpleDateFormat.getInstance().format(fullQueryStatistic.getLastErrorTime())); } else { lines.add("last error time:\t-"); } lines.add("status\tquery\tfilter query\tfacet query\tquery time\tresult count"); List<QueryLogStatistic.QueryLogValue> queries = queryLogStatistic.getLastQueries(); for(QueryLogStatistic.QueryLogValue value:queries) { lines.add(prepareData(value.getCSV())); } HeadlessUtils.outputData(PREFIX + "title", HeadlessConsoleFrame.getStatisticsOutputDirectory(), lines); } }