Package com.sun.tools

Source Code of com.sun.tools.Mysqlstats

/* 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 2008-2009 Sun Microsystems Inc. All Rights Reserved
*/
package com.sun.tools;

import com.sun.faban.common.Command;
import com.sun.faban.common.CommandHandle;
import com.sun.faban.harness.ConfigurationException;
import com.sun.faban.harness.Context;
import com.sun.faban.harness.Configure;
import com.sun.faban.harness.RunContext;
import com.sun.faban.harness.tools.Postprocess;
import com.sun.faban.harness.Start;
import com.sun.faban.harness.Stop;

import com.sun.faban.harness.tools.ToolContext;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
* Mysqlstats implements a tool used for gathering the statistics from a
* MySQL instance.
*/
public class Mysqlstats {

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

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

    Command cmd;
    CommandHandle processRef;
    ArrayList<String> toolCmd;
    String toolName;
    String logfile, logfile1, logfile2;
    /**
     * Configures the MySQLStats.
     */
    @Configure public void config() throws ConfigurationException {
        toolName = ctx.getToolName();       
        String mysqlHome = ctx.getServiceProperty("serverHome");
        if(mysqlHome == null || mysqlHome.trim().length() <= 0) {
            throw new ConfigurationException("MySQL serverHome property is not provided");
        }
        String mysqlUser = ctx.getServiceProperty("user");
        if(mysqlUser == null || mysqlUser.trim().length() <= 0) {
            throw new ConfigurationException("MySQL user is not provided");
        }
        String mysqlPass = ctx.getServiceProperty("password");
        if(mysqlPass == null || mysqlPass.trim().length() <= 0) {
            throw new ConfigurationException("MySQL password is not provided");
        }

        if (mysqlHome.endsWith(File.separator))
            mysqlHome = mysqlHome.substring(0, mysqlHome.length() -
                                              File.separator.length());

        toolCmd = new ArrayList<String>();
        String mysqlCmd = "mysql";
        mysqlCmd = mysqlHome + File.separator + "bin" + File.separator + mysqlCmd;
        toolCmd.add(mysqlCmd);
        toolCmd.add("-u" + mysqlUser);
        toolCmd.add("-p" + mysqlPass);
        toolCmd.add("-B");
        toolCmd.add("-e");
        toolCmd.add("show global status");
        logger.fine("Setting up mysql command: " + toolCmd);
        cmd = new Command(toolCmd);
        logfile = ctx.getOutputFile();
        // We need two intermediate files for the begin/end snapshots
    logfile1 = logfile + "_1";
    logfile2 = logfile + "_2";
        logger.fine(toolName + " Configured with toolCmd " + toolCmd);

    }

    /**
     * Starts the MySQLStats.
     * @throws IOException Cannot execute the needed command
     * @throws InterruptedException Interrupted waiting for the stats commmand
     */
    @Start public void start() throws IOException, InterruptedException {
        logger.fine("Calling mysql show status at start");
        cmd.setOutputFile(Command.STDOUT, logfile1);
        cmd.setSynchronous(false);

        processRef = RunContext.exec(cmd);
        logger.fine(toolName + " Started with Cmd = " + toolCmd + " in start method");
    }

    /**
     * Stops the MySQLStats.
     */
    @Stop public void stop() {
        try {
            if(ctx.getToolStatus() == 1){
                logger.fine("Calling mysql show status at stop");
                cmd.setOutputFile(Command.STDOUT, logfile2);
                cmd.setSynchronous(false);
                processRef = RunContext.exec(cmd);
                logger.fine(toolName + " Started with Cmd = " + toolCmd + " in stop method");
            }
            logger.fine("Stopping tool " + this.toolCmd);
        } catch (IOException ex) {
            logger.log(Level.SEVERE, null, ex);
        } catch (InterruptedException ex) {
            logger.log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Get final report by diffing the two logfiles.
     */
    @Postprocess public void getReport() {
    String c = "mysql_diff_status.sh " + logfile1 + " " + logfile2 + " " + logfile;
        logger.fine("Calling " + c);
      Command diffCommand = new Command(c);
      try {
          RunContext.exec(diffCommand);
        } catch (IOException e) {
            logger.log(Level.SEVERE, "Error executing mysql_diff_status.sh", e);
        } catch (InterruptedException e) {
            logger.log(Level.SEVERE, "Interrupted executing mysql_diff_status.sh", e);
        }
    }
}
TOP

Related Classes of com.sun.tools.Mysqlstats

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.