Package com.sun.faban.harness.tools

Source Code of com.sun.faban.harness.tools.CommandLineTool

/* 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]"
*
* Copyright 2005-2009 Sun Microsystems Inc. All Rights Reserved
*/
package com.sun.faban.harness.tools;

import com.sun.faban.common.Command;
import com.sun.faban.common.CommandHandle;
import com.sun.faban.harness.*;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;


/**
* This class handles the command line tools. Like, vmstat, mpstat, etc.
*
* @author Sheetal Patil
*/
public class CommandLineTool {

    private static Logger logger =
            Logger.getLogger(CommandLineTool.class.getName());

    /** The injected tool context. */
    @Context public ToolContext ctx;

    Command cmd;
    CommandHandle processRef;
    ArrayList<String> toolCmd;
    String toolName;
    String postCmd;
    List<String> toolArgs;
    protected long stopTime;

    /**
     * Configures the command line tool.
     * Tasks done in this method includes building the
     * toolCmd using the params from the tool context.
     */
    @Configure public void config() {
        toolName = ctx.getToolName();
        postCmd = toolName + "-post";
        toolArgs = ctx.getToolArgs();
        toolCmd = new ArrayList<String>();
        toolCmd.add(toolName);
        if (toolArgs != null)
            toolCmd.addAll(toolArgs);
        cmd = new Command(toolCmd);
        cmd.setSynchronous(false);
        logger.fine(toolName + " Configured with toolCmd " + toolCmd);

    }

    /**
     * This method is responsible for starting the command line tool.
     * @throws IOException Error starting the command
     * @throws InterruptedException Interrupted waiting for commands
     */
    @Start public void start() throws IOException, InterruptedException {
        // If we are going to postProcess this command's output, don't set the outputHandle
        if (RunContext.which(postCmd) != null) {
            logger.fine("Setting outputFile for " + toolCmd + " to be " + ctx.getOutputFile());
            cmd.setOutputFile(Command.STDOUT, ctx.getOutputFile());
            cmd.setStreamHandling(Command.STDOUT, Command.CAPTURE);
            processRef = ctx.exec(cmd, false);
        } else {
            processRef = ctx.exec(cmd, true);
        }
        logger.fine(toolName + " Started with Cmd = " + toolCmd);
    }

    /**
     * This method is responsible for stopping the command line tool.
     * @throws IOException Error stopping the command
     * @throws InterruptedException Interrupted waiting for commands
     */
    @Stop public void stop() throws IOException, InterruptedException {
        logger.fine("Stopping tool " + this.toolCmd);
        processRef.destroy();
        processRef.waitFor(10000);
        stopTime = System.currentTimeMillis();
    }

     /**
     * This method is responsible for post-processing. Command line tool
     * post-processing scripts will turn the output file into a xan format.
     * @throws IOException Error post-processing cpustat
     * @throws InterruptedException Interrupted waiting for commands
     */
    @Postprocess public void postprocess()
            throws IOException, InterruptedException {
        // Check if post-processing cmd exists. If not, quietly return
        logger.fine("In postprocess for " + toolName + " postCmd = " + postCmd);
        if (RunContext.which(postCmd) != null) {
            String rawFile = ctx.getOutputFile();
            String postFile = rawFile.replace(".out.", ".xan.");
            postCmd += " " + rawFile;
            ctx.setOutputFile("xan", postFile);
            logger.finer("postCmd = " + postCmd + ", postFile = " + postFile);
            long sleepTime = stopTime + 500 - System.currentTimeMillis();
            if (sleepTime > 0)
                Thread.sleep(sleepTime);
            cmd = new Command(postCmd);
            cmd.setStreamHandling(Command.STDOUT, Command.CAPTURE);
            cmd.setOutputFile(Command.STDOUT, postFile);
            ctx.exec(cmd, false);

            // We want both the raw output and xan output files
            ctx.setOutputFile("raw", rawFile);
        }
    }
    /**/
TOP

Related Classes of com.sun.faban.harness.tools.CommandLineTool

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.