package com.meidusa.amoeba.mysql.benchmark;
import java.nio.channels.SocketChannel;
import java.util.concurrent.CountDownLatch;
import org.apache.log4j.Logger;
import com.meidusa.amoeba.benchmark.AbstractBenchmark;
import com.meidusa.amoeba.benchmark.AbstractBenchmarkClient;
import com.meidusa.amoeba.mysql.net.MysqlServerConnection;
import com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory;
import com.meidusa.amoeba.net.AuthingableConnection;
import com.meidusa.amoeba.net.BackendConnectionFactory;
import com.meidusa.amoeba.net.Connection;
import com.meidusa.amoeba.net.ConnectionFactory;
import com.meidusa.amoeba.util.CmdLineParser;
import com.meidusa.amoeba.util.CmdLineParser.StringOption;
public class MysqlBenchmark extends AbstractBenchmark{
private static Logger logger = Logger.getLogger(MysqlBenchmark.class);
protected static CmdLineParser.Option userOption = parser.addOption(new StringOption('u', "user",true,true,"root","mysql user name"));
protected static CmdLineParser.Option passwordOption = parser.addOption(new StringOption('p', "password",true,false,null,"mysql password"));
protected static CmdLineParser.Option sqlOption = parser.addOption(new StringOption('s', "sql",true,false,null,"query sql"));
public static void main(String[] args) throws Exception {
try {
parser.parse(args);
Boolean value = (Boolean)parser.getOptionValue(helpOption,false);
if(value != null && value.booleanValue()){
parser.printUsage();
System.exit(2);
}
parser.checkRequired();
}catch ( CmdLineParser.OptionException e ) {
System.err.println(e.getMessage());
parser.printUsage();
System.exit(2);
}
AbstractBenchmark.setBenchmark(new MysqlBenchmark());
AbstractBenchmark.main(args);
}
public AbstractBenchmarkClient<?> newBenchmarkClient(
Connection connection,CountDownLatch requestLatcher,CountDownLatch responseLatcher,TaskRunnable task) {
AuthingableConnection conn = (AuthingableConnection) connection;
if(conn.isAuthenticatedSeted() && !conn.isAuthenticated() && this.getBenchmarkClientList().size() ==0 ){
System.out.println("start benchmark error,could not cnnect to mysql");
System.exit(-1);
}
return new MysqlBenchmarkClient(connection,requestLatcher,responseLatcher,task);
}
private BackendConnectionFactory factory = new MysqlServerConnectionFactory(){
{
String user = (String)parser.getOptionValue(userOption);
this.setUser(user);
String password = (String)parser.getOptionValue(passwordOption);
this.setPassword(password);
}
protected Connection newConnectionInstance(SocketChannel channel,
long createStamp) {
MysqlServerConnection conn = new MysqlServerConnection(channel,createStamp);
return conn;
}
};
@Override
public ConnectionFactory getConnectionFactory() {
return factory;
}
}