Package com.sun.faban.driver.engine

Source Code of com.sun.faban.driver.engine.NullContext

/* 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 com.sun.faban.driver.engine;

import com.sun.faban.driver.CustomMetrics;
import com.sun.faban.driver.CustomTableMetrics;
import com.sun.faban.driver.DriverContext;
import com.sun.faban.driver.util.Random;
import org.w3c.dom.Element;

import javax.xml.xpath.XPathExpressionException;
import java.util.logging.Logger;

/**
* The null context is used for testing driver code for the Faban driver
* framework without actually running the agents. It ensures that the same
* driver code can be tested in it's own main method.
*
* @author Akara Sucharitakul
*/
public class NullContext extends DriverContext {
    private Logger logger;
    private Random random;
    private long baseMillis = System.currentTimeMillis();
    private long baseNanos = System.nanoTime();


    /**
     * Obtains the scale of this run. This implementation always return 0.
     * @return Always 0
     * @see com.sun.faban.driver.DriverContext#getScale()
     */
  public int getScale() {
        return 0;
    }

    /**
     * Obtains the number of client threads in this agent.
     * @return the number of client threads
     */
    public int getClientsInAgent() {
        return 0;
    }

    /**
     * Obtains the total number of clients threads for this driver.
     * @return the number of client threads for this driver
     */
    public int getClientsInDriver() {
        return 0;
    }

    /**
     * Obtains the current thread id. This implementation always returns 0.
     * @return Always 0
     * @see com.sun.faban.driver.DriverContext#getThreadId()
     */
  public int getThreadId() {
        return 0;
    }


    /**
     * Obtains the agent id. This implementation always returns 0.
     * @return Always returns 0
     * @see com.sun.faban.driver.DriverContext#getAgentId()
     */
  public int getAgentId() {
        return 0;
    }


    /**
     * Returns the driver name. In this case a dummy driver name
     * "DriverTestNullContext".
     * @return The dummy driver name.
     * @see com.sun.faban.driver.DriverContext#getDriverName()
     */
  public String getDriverName() {
        return "DriverTestNullContext";
    }

    /**
     * Obtains the logger for this driver thread. The logger name
     * is always "faban.test."
     * @return The logger for this thread.
     * @see com.sun.faban.driver.DriverContext#getLogger()
     */
  public Logger getLogger() {
        if (logger == null) {
      logger = Logger.getLogger("faban.test");
    }
        return logger;
    }

    /**
     * Attaches a custom metrics as the miscellaneous stats.
     * This implementation does nothing.
     * @param metrics The metrics to attach
     * @see com.sun.faban.driver.DriverContext#attachMetrics(com.sun.faban.driver.CustomMetrics)
     */
  public void attachMetrics(CustomMetrics metrics) {
        // Noop.
    }

    /**
     * Attaches a custom metrics object to the primary metrics,
     * given a name or description. The name/description must be unique.
     * This should be done by the driver at initialization time.
     * Only one custom metrics can be attached. Subsequent calls
     * to this method replaces the previously attached metrics.
     * @param name    The name or description of this metrics
     * @param metrics The custom metrics to be replaced
     */
    @Override
    public void attachMetrics(String name, CustomMetrics metrics) {
        // Noop.
    }

    /**
     * Attaches a custom table metrics object to the primary metrics,
     * given a name or description. The name/description must be unique.
     * This should be done by the driver at initialization time.
     * Only one custom metrics can be attached. Subsequent calls
     * to this method replaces the previously attached metrics.
     * @param name    The name or description of this metrics
     * @param metrics The custom table metrics to be replaced
     */

    @Override
    public void attachMetrics(String name, CustomTableMetrics metrics) {
        // Noop.
    }

    /**
     * Returns the current operation. For the null context, it is a dummy
     * name "DriverTestNullContext."
     * @return The dummy name of the current operation.
     * @see com.sun.faban.driver.DriverContext#getCurrentOperation()
     */
  public String getCurrentOperation() {
        return "DriverTestNullContext";
    }

    /**
     * Obtains the operation id of the current operation. This implementation
     * always returns 0.
     * @return Always 0
     * @see com.sun.faban.driver.DriverContext#getOperationId()
     */
  public int getOperationId() {
        return 0;
    }


    /**
     * Gets the current count of the operations done by this thread.
     * @return Always 1 for this implementation
     * @see com.sun.faban.driver.DriverContext#getOperationCount()
     */
  public int getOperationCount() {
        return 1;
    }

    /**
     * Obtains the random value generator for this thread.
     * @return Always the same random value generator
     * @see com.sun.faban.driver.DriverContext#getRandom()
     */
  public Random getRandom() {
        if (random == null) {
      random = new Random();
    }
        return random;
    }

    /**
     * Records the start and end of time measurement. This implemenation does
     * nothing.
     * @see com.sun.faban.driver.DriverContext#recordTime()
     */
  public void recordTime() {
        // Noop
    }

    /**
     * Pauses the time measurement. This implementation does nothing.
     * @see com.sun.faban.driver.DriverContext#pauseTime()
     */
  public void pauseTime() {
        //Noop
    }

    /**
     * Obtains the relative current time.
     * @return The current relative time
     * @see com.sun.faban.driver.DriverContext#getTime()
     */
  public int getTime() {
        return (int) (System.currentTimeMillis() - baseMillis);
    }

    /**
     * Obtains the relative time steady state starts. This implementation
     * always returns the relative time, 5 seconds from the current time
     * which is in the future.
     * @return The steady state start time
     * @see com.sun.faban.driver.DriverContext#getSteadyStateStart()
     */
  public int getSteadyStateStart() {
        return (int) (System.currentTimeMillis() - baseMillis + 5000l);
    }

    /**
     * Obtain the current nano time offset from the base time.
     * @return The current nano time
     * @see com.sun.faban.driver.DriverContext#getNanoTime()
     */
    public long getNanoTime() {
        return System.nanoTime() - baseNanos;
    }

    /**
     * Obtain the nano time offset where steady state starts.
     * @return A dummy time 5 seconds after the base time
     * @see com.sun.faban.driver.DriverContext#getSteadyStateStartNanos()
     */
    public long getSteadyStateStartNanos() {
        return System.nanoTime() - baseNanos + 5000000000l;
    }

    /**
     * Obtains the rampup time. This implementation always returns 0.
     * @return The rampup time which is 0
     * @see com.sun.faban.driver.DriverContext#getRampUp()
     */
  public int getRampUp() {
        return 0;
    }

    /**
     * Obtains the steady state time. This implementation returns a very large
     * dummy number of Integer.MAX_VALUE / 2.
     * @return A dummy steady state time
     * @see com.sun.faban.driver.DriverContext#getSteadyState()
     */
  public int getSteadyState() {
        // Just provide a very high number.
        return Integer.MAX_VALUE / 2;
    }

    /**
     * Obtains the ramp down time. This implementation returns 0.
     * @return A dummy ramp down time of 0.
     * @see com.sun.faban.driver.DriverContext#getRampDown()
     */
  public int getRampDown() {
        return 0;
    }

    /**
     * Resets the mix. We don't use mixes with the null context so
     * this implementation does nothing.
     * @see com.sun.faban.driver.DriverContext#resetMix()
     */
  public void resetMix() {
        //noop
    }

    /**
     * Checks whether we're in the steady state. This implementation
     * always return true.
     * @return Always true
     * @see com.sun.faban.driver.DriverContext#isTxSteadyState()
     */
  public boolean isTxSteadyState() {
        return true;
    }
    /**
     * Gets the driver property. This implementation gets the property from
     * the java properties.
     * @param name The name of the property
     * @return The property value, or null if it does not exist
     * @see com.sun.faban.driver.DriverContext#getProperty(java.lang.String)
     */
  public String getProperty(String name) {
        return System.getProperty(name);
    }

    /**
     * Gets the driver properties by name. This implementation gets the
     * property from the java properties and returns an array of size 1 at
     * most. If the property is not set, returns null.
     * @param name The name of the property
     * @return An array of size 1 containing the value, or null if not exist
     * @see com.sun.faban.driver.DriverContext#getPropertyValues(java.lang.String)
     */
  public String[] getPropertyValues(String name) {
        String[] ret = null;
        String v = System.getProperty(name);
        if (v != null) {
            ret = new String[1];
            ret[0] = v;
        }
        return ret;
    }

    /**
     * Gets the properties node from the dom tree. NullContext does not
     * use a run configuration so this will always return null.
     * @return Always null.
     * @see com.sun.faban.driver.DriverContext#getPropertiesNode()
     */
  public Element getPropertiesNode() {
        return null;
    }

   
    /**
     * Returns a value matching the given xpath in the configuration file.
     * NullContext does not use a run configuration so this will always return
     * null.
     * @param xPath The xpath
     * @return Always null
     * @see com.sun.faban.driver.DriverContext#getXPathValue(java.lang.String)
     */
    @SuppressWarnings("unused")
  public String getXPathValue(String xPath) {
        return null;
    }


    /**
     * Obtains the base directory where the benchmark currently being run
     * is installed.
     *
     * @return The benchmark's base directory
     */
    public String getBaseDir() {
        return System.getProperty("faban.driver.base");
    }

    /**
     * Obtains the resource directory used for this benchmark, if exists.
     * @return The resource directory for this benchmark
     */
    public String getResourceDir() {
        String driverBase = System.getProperty("faban.driver.base");
        if (driverBase == null)
            return null;
        return driverBase + "/resources";
    }
}
TOP

Related Classes of com.sun.faban.driver.engine.NullContext

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.