package com.plugtree.solrmeter.view; import com.google.inject.Inject; import com.plugtree.solrmeter.controller.UpdateExecutorController; import com.plugtree.solrmeter.model.SolrMeterConfiguration; import com.plugtree.solrmeter.model.UpdateExecutor; import com.plugtree.solrmeter.model.statistic.CommitHistoryStatistic; import com.plugtree.solrmeter.model.statistic.OperationRateStatistic; import java.util.ArrayList; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class HeadlessUpdateConsolePanel extends HeadlessConsolePanel { private UpdateExecutor updateExecutor; private CommitHistoryStatistic commitHistoryStatistic; private OperationRateStatistic operationRateStatistic; private UpdateExecutorController controller; private final long DEFAULT_INITIAL_DELAY_MS = 1000 * 10; private final long DEFAULT_NUM_UPDATES = 100; private boolean completed = false; @Inject public HeadlessUpdateConsolePanel(UpdateExecutor updateExecutor, CommitHistoryStatistic commitHistoryStatistic, OperationRateStatistic operationRatestatistic, UpdateExecutorController controller) { this.updateExecutor = updateExecutor; this.commitHistoryStatistic = commitHistoryStatistic; this.operationRateStatistic = operationRatestatistic; this.controller = controller; this.controller.addObserver(this); } private void scheduleUpdateOperations() { String updateDelay = SolrMeterConfiguration.getProperty("headless.updateInitialDelay", String.valueOf(DEFAULT_INITIAL_DELAY_MS)); new ScheduledThreadPoolExecutor(1).schedule(new Runnable() { @Override public void run() { controller.onStart(); } }, Long.valueOf(updateDelay), TimeUnit.MILLISECONDS); } private long getNumUpdates() { return Integer.valueOf(SolrMeterConfiguration.getProperty("headless.numUpdates", String.valueOf(DEFAULT_NUM_UPDATES))); } public void scheduleOperations() { if (SolrMeterConfiguration.getProperty("headless.performUpdateOperations", "").equalsIgnoreCase("true")) { if (getNumUpdates() > 0) { scheduleUpdateOperations(); } else { completed = true; } } else { completed = true; } } public void stopped() { completed = true; } public void started() {} public void refreshView() { ArrayList<String> lines = new ArrayList<String>(); lines.add("added documents:\t" + String.valueOf(commitHistoryStatistic.getTotalAddedDocuments())); lines.add("errors on update:\t" + String.valueOf(commitHistoryStatistic.getUpdateErrorCount())); lines.add("intended updates per minute:\t" + SolrMeterConfiguration.getProperty("solr.load.updatesperminute")); lines.add("update rate:\t" + String.valueOf(operationRateStatistic.getUpdateRate())); HeadlessUtils.outputData("updateConsolePanel.title", HeadlessConsoleFrame.getOutputDirectory(), lines); if(commitHistoryStatistic.getTotalAddedDocuments() >= getNumUpdates()) { controller.onStop(); } } public boolean operationsComplete() { return completed; } }