Package com.sun.faban.driver

Source Code of com.sun.faban.driver.DriverContext

/* 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;

import com.sun.faban.driver.util.Random;
import com.sun.faban.driver.engine.NullContext;

import java.util.logging.Logger;

import org.w3c.dom.Element;

import javax.xml.xpath.XPathExpressionException;

/**
* DriverContext is the point of communication between the
* developer-provided driver and the Faban driver framework.
* Each thread has it's own context.<p>
* The only concrete implementation of this abstract class
* is in com.sun.faban.driver.engine.DriverContext.
*
* @author Akara Sucharitakul
*/
public abstract class DriverContext {

    /**
     * Obtains the DriverContext associated with this thread.
     * @return the associated DriverContext
     */
    public static DriverContext getContext() {
        DriverContext ctx =
                com.sun.faban.driver.engine.DriverContext.getContext();
        if (ctx != null)
            return ctx;
        return new NullContext();
    }

    /**
     * Obtains the scale or scaling rate of the current run.
     * @return the current run's scaling rate
     */
    public abstract int getScale();

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

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

    /**
     * Obtains the global agent thread id for this context's thread.
     * @return the global agent thread id
     */
    public abstract int getThreadId();

    /**
     * Obtains the agent id for this agent.
     * @return the current agent's id
     */
    public abstract int getAgentId();

    /**
     * Obtains the driver's name as annotated in the driver class.
     * @return the driver name
     */
    public abstract String getDriverName();

    /**
     * Obtains the logger to be used by the calling driver.
     * @return the appropriate logger
     */
    public abstract Logger getLogger();

    /**
     * Attaches a custom metrics object to the primary metrics.
     * 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 metrics The custom metrics to be replaced
     */
    public abstract void attachMetrics(CustomMetrics metrics);

    /**
     * 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
     */
    public abstract void attachMetrics(String name, CustomMetrics metrics);

    /**
     * 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
     */
    public abstract void attachMetrics(String name, CustomTableMetrics metrics);

    /**
     * Obtains the name of the operation currently executing.
     * @return the current operation's name
     */
    public abstract String getCurrentOperation();

    /**
     * Obtains the unique id assigned to the current operation type.
     * This id is commonly used to index into array structures containing
     * operation-specific information such as stats. The id ranges from 0 to
     * n where n is the number of operations in the driver less one.
     * @return The unique id assigned to this operation type.
     */
    public abstract int getOperationId();

    /**
     * Obtains the number of operations active in this driver.
     * @return The number of active operations
     */
    public abstract int getOperationCount();

    /**
     * Obtains the per-thread random value generator. Drivers
     * should use this random value generator and not instantiate
     * their own.
     * @return The random value generator
     */
    public abstract Random getRandom();

    /**
     * Checks whether the driver is currently in steady state or not.
     * This method needs to be called after the critical section of the
     * operation. The transaction times must have been recorded in order
     * to establish whether or not the transaction is in steady state.
     * @return True if in steady state, false if not.
     */
    public abstract boolean isTxSteadyState();

    /**
     * Resets the state of the current mix to start off at the beginning
     * of the mix. For stateless mixes such as FlatMix, this operation
     * does nothing.
     */
    public abstract void resetMix();

    /**
     * Records the start time and end of the critical section of an operation.
     * This operation may block until the appropriate start time for the
     * operation has arrived. There is no blocking for the end time.
     * @throws IllegalStateException if the operation uses auto timing
     */
    public abstract void recordTime();

    /**
     * Pauses the critical section so that operations made during the pause
     * do not count into the response time. If Timing.AUTO is used, the pause
     * ends automatically when the next request is sent to the server. For
     * manual timing, the next call to recordTime ends the pause.
     */
    public abstract void pauseTime();

    /**
     * Obtains a relative time, in milliseconds. This time is relative to
     * a certain time at the beginning of the benchmark run and does not
     * represent a wall clock time. All agents will have the same reference
     * time. Use this time to check time durations during the benchmark run.
     * @return The relative time of the benchmark run
     */
    public abstract int getTime();

    /**
     * Obtains the relative time - in milliseconds - that steady state starts,
     * if set. The if the time is not yet set, it will return 0.
     * @return The relative time steady state starts
     */
    public abstract int getSteadyStateStart();

    /**
     * Obtains a relative time, in nanosecs. This time is relative to
     * a certain time at the beginning of the benchmark run and does not
     * represent a wall clock time. All agents will have the same reference
     * time. Use this time to check time durations during the benchmark run.
     * @return The relative time of the benchmark run
     */
    public abstract long getNanoTime();

    /**
     * Obtains the relative time - in nanosecs - that steady state starts,
     * if set. The if the time is not yet set, it will return 0.
     * @return The relative time steady state starts
     */
    public abstract long getSteadyStateStartNanos();

    /**
     * Obtains the configured ramp up time.
     * @return The configured ramp up time, in seconds
     */
    public abstract int getRampUp();

    /**
     * Obtains the configured steady state time.
     * @return The configured steady state time, in seconds
     */
    public abstract int getSteadyState();

    /**
     * Obtains the configured ramp down time.
     * @return The configured ramp down time, in seconds
     */
    public abstract int getRampDown();



    /**
     * Obtains a single-value property from the configuration. If the name
     * of a multi-value property is given, only one value is returned.
     * It is undefined as to which value in the list is returned.
     * @param name The property name
     * @return The property value
     */
    public abstract String getProperty(String name);

    /**
     * Obtains a multiple-value property from the configuration. A
     * single-value property will be returned as an array of dimension 1.
     * @param name The property name
     * @return The property values
     */
    public abstract String[] getPropertyValues(String name);

    /**
     * Obtains the reference to the whole properties element as configured
     * in the driverConfig element of this driver in the config file. This
     * method allows custom free-form structures but the driver will need
     * to spend the effort walking the DOM tree.
     * @return The DOM tree representing the properties node
     */
    public abstract Element getPropertiesNode();

    /**
     * Reads the element or attribute by it's XPath. The XPath is evaluated
     * from the root of the configuration file.
     * @param xPath The XPath to evaluate.
     * @return The element or attribute value defined by the XPath
     * @exception XPathExpressionException If the given XPath has an error
     */
    public abstract String getXPathValue(String xPath)
            throws XPathExpressionException;

    /**
     * Obtains the base directory where the benchmark currently being run
     * is installed.
     * @return The benchmark's base directory
     */
    public abstract String getBaseDir();

    /**
     * Obtains the resource directory used for this benchmark, if exists.
     * @return The resource directory for this benchmark
     */
    public abstract String getResourceDir();
}
TOP

Related Classes of com.sun.faban.driver.DriverContext

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.