/*
* Copyright (c) 2013, OpenCloudDB/MyCAT and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software;Designed and Developed mainly by many Chinese
* opensource volunteers. you can redistribute it and/or modify it under the
* terms of the GNU General Public License version 2 only, as published by the
* Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Any questions about this component can be directed to it's project Web address
* https://code.google.com/p/opencloudb/.
*
*/
package org.opencloudb.response;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.opencloudb.config.Fields;
import org.opencloudb.manager.ManagerConnection;
import org.opencloudb.mysql.PacketUtil;
import org.opencloudb.net.mysql.EOFPacket;
import org.opencloudb.net.mysql.FieldPacket;
import org.opencloudb.net.mysql.ResultSetHeaderPacket;
import org.opencloudb.net.mysql.RowDataPacket;
import org.opencloudb.util.StringUtil;
/**
* 打印CobarServer所支持的语句
*
* @author mycat
* @author mycat
*/
public final class ShowHelp {
private static final int FIELD_COUNT = 2;
private static final ResultSetHeaderPacket header = PacketUtil.getHeader(FIELD_COUNT);
private static final FieldPacket[] fields = new FieldPacket[FIELD_COUNT];
private static final EOFPacket eof = new EOFPacket();
static {
int i = 0;
byte packetId = 0;
header.packetId = ++packetId;
fields[i] = PacketUtil.getField("STATEMENT", Fields.FIELD_TYPE_VAR_STRING);
fields[i++].packetId = ++packetId;
fields[i] = PacketUtil.getField("DESCRIPTION", Fields.FIELD_TYPE_VAR_STRING);
fields[i++].packetId = ++packetId;
eof.packetId = ++packetId;
}
public static void execute(ManagerConnection c) {
ByteBuffer buffer = c.allocate();
// write header
buffer = header.write(buffer, c,true);
// write fields
for (FieldPacket field : fields) {
buffer = field.write(buffer, c,true);
}
// write eof
buffer = eof.write(buffer, c,true);
// write rows
byte packetId = eof.packetId;
for (String key : keys) {
RowDataPacket row = getRow(key, helps.get(key), c.getCharset());
row.packetId = ++packetId;
buffer = row.write(buffer, c,true);
}
// write last eof
EOFPacket lastEof = new EOFPacket();
lastEof.packetId = ++packetId;
buffer = lastEof.write(buffer, c,true);
// post write
c.write(buffer);
}
private static RowDataPacket getRow(String stmt, String desc, String charset) {
RowDataPacket row = new RowDataPacket(FIELD_COUNT);
row.add(StringUtil.encode(stmt, charset));
row.add(StringUtil.encode(desc, charset));
return row;
}
private static final Map<String, String> helps = new HashMap<String, String>();
private static final List<String> keys = new ArrayList<String>();
static {
// show
helps.put("show @@time.current", "Report current timestamp");
helps.put("show @@time.startup", "Report startup timestamp");
helps.put("show @@version", "Report Mycat Server version");
helps.put("show @@server", "Report server status");
helps.put("show @@threadpool", "Report threadPool status");
helps.put("show @@database", "Report databases");
helps.put("show @@datanode", "Report dataNodes");
helps.put("show @@datanode where schema = ?", "Report dataNodes");
helps.put("show @@datasource where dataNode = ?", "Report dataSources");
helps.put("show @@datasource", "Report dataSources");
helps.put("show @@processor", "Report processor status");
helps.put("show @@command", "Report commands status");
helps.put("show @@connection", "Report connection status");
helps.put("show @@backend", "Report backend connection status");
helps.put("show @@connection.sql", "Report connection sql");
helps.put("show @@sql.execute", "Report execute status");
helps.put("show @@sql.detail where id = ?", "Report execute detail status");
helps.put("show @@sql where id = ?", "Report specify SQL");
helps.put("show @@sql.slow", "Report slow SQL");
helps.put("show @@parser", "Report parser status");
helps.put("show @@router", "Report router status");
helps.put("show @@heartbeat", "Report heartbeat status");
helps.put("show @@slow where schema = ?", "Report schema slow sql");
helps.put("show @@slow where datanode = ?", "Report datanode slow sql");
// switch
helps.put("switch @@datasource name:index", "Switch dataSource");
// kill
helps.put("kill @@connection id1,id2,...", "Kill the specified connections");
// stop
helps.put("stop @@heartbeat name:time", "Pause dataNode heartbeat");
// reload
helps.put("reload @@config", "Reload all config from file");
helps.put("reload @@route", "Reload route config from file");
helps.put("reload @@user", "Reload user config from file");
// rollback
helps.put("rollback @@config", "Rollback all config from memory");
helps.put("rollback @@route", "Rollback route config from memory");
helps.put("rollback @@user", "Rollback user config from memory");
// offline/online
helps.put("offline", "Change MyCat status to OFF");
helps.put("online", "Change MyCat status to ON");
// clear
helps.put("clear @@slow where schema = ?", "Clear slow sql by schema");
helps.put("clear @@slow where datanode = ?", "Clear slow sql by datanode");
// list sort
keys.addAll(helps.keySet());
Collections.sort(keys);
}
}