/* The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * http://www.sun.com/cddl/cddl.html or * install_dir/legal/LICENSE * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at install_dir/legal/LICENSE. * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * $Id$ * * Copyright 2005-2009 Sun Microsystems Inc. All Rights Reserved */ package sample.driver; import com.sun.faban.driver.*; import com.sun.faban.driver.util.Random; import com.sun.faban.driver.util.ContentSizeStats; import javax.xml.xpath.XPathExpressionException; import java.io.IOException; import java.util.logging.Logger; /** * Simple web driver example. */ @BenchmarkDefinition ( name = "Sample Web Workload 101", version = "0.2" ) @BenchmarkDriver ( name = "WebDriver", threadPerScale = 1, percentiles = { "90", "95th", "99.9th%"} // Show different supported formats ) @MatrixMix ( operations = {"MyOperation1", "MyOperation2", "MyOperation3"}, mix = { @Row({ 0, 70, 30 }), @Row({ 60, 0, 40 }), @Row({ 50, 50, 0 }) }, deviation = 2 ) @NegativeExponential ( cycleType = CycleType.CYCLETIME, cycleMean = 5000, cycleDeviation = 2 ) public class WebDriver { /** The driver context for this instance. */ private DriverContext ctx; private HttpTransport http; private String url1, url2, url3; Logger logger; Random random; ContentSizeStats contentStats = null; /** * Constructs the web driver. * @throws XPathExpressionException An XPath error occurred */ public WebDriver() throws XPathExpressionException { ctx = DriverContext.getContext(); // HttpTransport.setProvider( // "com.sun.faban.driver.transport.hc3.ApacheHC3Transport"); http = HttpTransport.newInstance(); logger = ctx.getLogger(); random = ctx.getRandom(); String host = ctx.getXPathValue("/webBenchmark/serverConfig/host"); String port = ctx.getXPathValue("/webBenchmark/serverConfig/port"); //String dbhost = ctx.getXPathValue("/webBenchmark/dbServer/fa:hostConfig/fa:host"); String path1 = ctx.getProperty("path1"); String path2 = ctx.getProperty("path2"); String path3 = ctx.getProperty("path3"); url1 = "http://" + host + ':' + port + '/' + path1; url2 = "http://" + host + ':' + port + '/' + path2; url3 = "http://" + host + ':' + port + '/' + path3; contentStats = new ContentSizeStats(ctx.getOperationCount()); ctx.attachMetrics(contentStats); } /** * Tests the pre-run. */ @OnceBefore public void testPreRun() { try { Thread.sleep(5000); } catch (InterruptedException e) { } logger.info("Tested pre-run (sleep 5) done"); } /** * Tests the post-run. */ @OnceAfter public void testPostRun() { try { Thread.sleep(5000); } catch (InterruptedException e) { } logger.info("Tested post-run (sleep 5) done"); } /** * First operation. * @throws IOException An I/O or network error occurred. */ @BenchmarkOperation ( name = "MyOperation1", percentileLimits = { 0, 1.75, 2 }, timing = Timing.AUTO ) public void doMyOperation1() throws IOException { logger.finest("Accessing " + url1); http.fetchURL(url1); if (ctx.isTxSteadyState()) contentStats.sumContentSize[ctx.getOperationId()] += http.getContentSize(); } /** * Second operation. * @throws IOException An I/O or network error occurred. */ @BenchmarkOperation ( name = "MyOperation2", percentileLimits = { 0, 1.75, 2 }, timing = Timing.AUTO ) public void doMyOperation2() throws IOException { logger.finest("Accessing " + url2); http.fetchURL(url2); if (ctx.isTxSteadyState()) contentStats.sumContentSize[ctx.getOperationId()] += http.getContentSize(); } /** * Third operation. * @throws IOException An I/O or network error occurred. */ @BenchmarkOperation ( name = "MyOperation3", percentileLimits = { 0, 0, 2 }, timing = Timing.AUTO ) public void doMyOperation3() throws IOException { logger.finest("Accessing " + url3); http.fetchURL(url3); if (ctx.isTxSteadyState()) contentStats.sumContentSize[ctx.getOperationId()] += http.getContentSize(); } }