[root@ecs-7b55 lua]#cat admin.lua--[[$%BEGINLICENSE%$

Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.

This program is free software; you can redistribute it and/or

modify it under the terms of the GNU General Public License as

published by the Free Software Foundation; version 2 of the

License.

This program 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 for more details.

You should have received a copy of the GNU General Public License

along with this program; if not, write to the Free Software

Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA

02110-1301 USA

$%ENDLICENSE%$ --]]

functionset_error(errmsg)

proxy.response={type =proxy.MYSQLD_PACKET_ERR,

errmsg= errmsg or "error"}end

functionread_query(packet)if packet:byte() ~= proxy.COM_QUERY thenset_error("[admin] we only handle text-based queries (COM_QUERY)")returnproxy.PROXY_SEND_RESULTend

local query = packet:sub(2)local rows ={ }local fields ={ }if query:lower() == "select * from backends" thenfields={

{ name= "backend_ndx",type =proxy.MYSQL_TYPE_LONG },

{ name= "address",type =proxy.MYSQL_TYPE_STRING },

{ name= "state",type =proxy.MYSQL_TYPE_STRING },

{ name= "type",type =proxy.MYSQL_TYPE_STRING },

{ name= "uuid",type =proxy.MYSQL_TYPE_STRING },

{ name= "connected_clients",type =proxy.MYSQL_TYPE_LONG },

}for i = 1, #proxy.global.backends do

local states ={"unknown","up","down"}local types ={"unknown","rw","ro"}local b =proxy.global.backends[i]

rows[#rows + 1] ={

i,

b.dst.name,--configured backend address

states[b.state + 1], --the C-id is pushed down starting at 0

types[b.type + 1], --the C-id is pushed down starting at 0

b.uuid, --the MySQL Server's UUID if it is managed

b.connected_clients --currently connected clients

}end

elseif query:lower() == "select * from help" thenfields={

{ name= "command",type =proxy.MYSQL_TYPE_STRING },

{ name= "description",type =proxy.MYSQL_TYPE_STRING },

}

rows[#rows + 1] = { "SELECT * FROM help", "shows this help"}

rows[#rows + 1] = { "SELECT * FROM backends", "lists the backends and their state"}elseset_error("use 'SELECT * FROM help' to see the supported commands")returnproxy.PROXY_SEND_RESULTendproxy.response={type =proxy.MYSQLD_PACKET_OK,

resultset={

fields=fields,

rows=rows

}

}returnproxy.PROXY_SEND_RESULTend

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐