package com.plugtree.solrmeter.view; import com.google.inject.Inject; import com.plugtree.solrmeter.controller.OptimizeExecutorController; import com.plugtree.solrmeter.model.OptimizeExecutor; import com.plugtree.solrmeter.model.statistic.SimpleOptimizeStatistic; import org.apache.commons.io.FilenameUtils; import java.io.File; import java.util.ArrayList; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class HeadlessOptimizeConsolePanel extends HeadlessConsolePanel { private OptimizeExecutor executor; private SimpleOptimizeStatistic optimizeStatistic; private OptimizeExecutorController controller; @Inject public HeadlessOptimizeConsolePanel(SimpleOptimizeStatistic optimizeStatistic, OptimizeExecutor executor, OptimizeExecutorController controller) { this.executor = executor; this.optimizeStatistic = optimizeStatistic; this.controller = controller; init(); } private void init() { new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new Runnable() { @Override public void run() { if(shouldOptimize()) { controller.onOptimize(); } } }, 2, 2, TimeUnit.SECONDS); } private boolean shouldOptimize() { boolean optimize = false; File optimizeFile = new File(FilenameUtils.concat(HeadlessConsoleFrame.getOutputDirectory(), "directives/optimize")); if(optimizeFile.exists()) { optimize = true; optimizeFile.delete(); } return optimize; } public void stopped() { } public void started() { } public void refreshView() { ArrayList<String> lines = new ArrayList<String>(); if(executor.isOptimizing()) { lines.add("optimizing:\ttrue"); } else { lines.add("optimizing:\tfalse"); } lines.add("total optimizations:\t" + String.valueOf(optimizeStatistic.getOptimizationCount())); lines.add("last optimization time:\t" + String.valueOf(optimizeStatistic.getLastOptimizationTime())); lines.add("total optimization time:\t" + String.valueOf(optimizeStatistic.getTotalOptimizationTime())); lines.add("optimization time average:\t" + String.valueOf(optimizeStatistic.getAverageOptimizationTime())); if(optimizeStatistic.getLastOptimizationResult() != null) { lines.add("last optimization result:\t" + String.valueOf(optimizeStatistic.getLastOptimizationResult())); } lines.add("optimization error count:\t" + String.valueOf(optimizeStatistic.getOptimizeErrorCount())); HeadlessUtils.outputData("optimizeConsolePanel.title", HeadlessConsoleFrame.getOutputDirectory(), lines); } public void scheduleOperations() {} public boolean operationsComplete() { return true; } }