/** * Copyright 2011 Intuit Inc. All Rights Reserved */ package com.intuit.tank.reporting.rest; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.intuit.tank.client.v1.report.ReportServiceClientV1; import com.intuit.tank.reporting.api.ResultsReporter; import com.intuit.tank.reporting.api.TPSInfoContainer; import com.intuit.tank.results.TankResult; import com.intuit.tank.vm.settings.TankConfig; /** * DatabaseResultsReporter * * @author dangleton * */ public class RestResultsReporter implements ResultsReporter { private static final Logger LOG = LogManager.getLogger(RestResultsReporter.class); private static final ThreadPoolExecutor EXECUTOR = new ThreadPoolExecutor(10, 50, 60, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(50), Executors.defaultThreadFactory(), new ThreadPoolExecutor.DiscardOldestPolicy()); private ReportServiceClientV1 client; /** * @{inheritDoc */ @Override public void sendTpsResults(final String jobId, final String instanceId, final TPSInfoContainer container, boolean async) { Runnable task = new Runnable() { public void run() { try { getClient().postTpsResults(jobId, instanceId, container); } catch (Exception t) { LOG.error("Error adding results: " + t.getMessage(), t); throw new RuntimeException(t); } } }; if (async) { EXECUTOR.execute(task); } else { task.run(); } } /** * @{inheritDoc */ @Override public void sendTimingResults(final String jobId, final String instanceId, List<TankResult> results, boolean asynch) { if (results != null && !results.isEmpty()) { final List<TankResult> list = new ArrayList<TankResult>(results); Runnable task = new Runnable() { public void run() { try { getClient().postTimingResults(jobId, instanceId, list); } catch (Exception t) { LOG.error("Error adding results: " + t.getMessage(), t); throw new RuntimeException(t); } } }; if (asynch) { EXECUTOR.execute(task); } else { task.run(); } } } @Override public void config(HierarchicalConfiguration config) { try { } catch (Exception e) { LOG.error("Config not correct. Using default options."); } } private ReportServiceClientV1 getClient() { if (client == null) { TankConfig config = new TankConfig(); config.getControllerBase(); client = new ReportServiceClientV1(config.getControllerBase()); } return client; } }