📄 mysqlchecker.py
字号:
# -*- coding: UTF-8 -*-## Copyright 2007 University of Troms酶## This file is part of Network Administration Visualized (NAV)## NAV 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; either version 2 of the License, or# (at your option) any later version.## NAV 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 NAV; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA### $Id: MysqlChecker.py 3966 2007-04-12 12:00:06Z mortenv $# Author: Ole Martin Bj酶rndalen <olemb@cc.uit.no>#import socketfrom nav.statemon.abstractChecker import AbstractCheckerfrom nav.statemon.event import Eventclass MysqlError(Exception): passclass MysqlConnection: """ Very minimal implementation of MySQL protocol. (Packet layer only.) Error messages from the server raise MysqlError exceptions. """ def __init__(self, addr, timeout=None): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) if timeout != None: sock.settimeout(timeout) sock.connect(addr) self.file = sock.makefile('r+') self.seqno = 0 def read_packet(self): header = self.file.read(4) ll = ord(header[0]) mm = ord(header[1]) hh = ord(header[2]) size = hh << 16 | mm << 8 | ll seqno = ord(header[3]) self.seqno = seqno data = self.file.read(size) if data.startswith('\xff'): raise MysqlError(data[3:]) return data def write_packet(self, data): size = len(data) ll = size >> 16 mm = (size >> 8) & 0xff hh = size & 0xff seqno = self.seqno = (self.seqno + 1) % 256 header = '%c%c%c%c' % (hh, mm, ll, seqno) self.file.write(header + data) self.file.flush() def write_auth_packet(self, username): data = '\x85\xa4\x00\x00\x00%s\x00\x00' % username self.write_packet(data) def close(self): self.write_packet(chr(1)) # Send COM_QUIT self.file.close() class MysqlChecker(AbstractChecker): def __init__(self,service, **kwargs): AbstractChecker.__init__(self, "mysql", service, port=3306, **kwargs) def execute(self): try: # # Connect and read handshake packet. # conn = MysqlConnection(self.getAddress(), self.getTimeout()) data = conn.read_packet() # # Get server version from handshake # version = data[1:].split('\0')[0] # Null terminated string self.setVersion(version) # # Send authentication packet to make server happy. # (If we don't do this, the server will be angry at # us for a while.) # conn.write_auth_packet('navmon') try: conn.read_packet() except MysqlError, err: pass # Ignore login error conn.close() return Event.UP, 'OK' except MysqlError, err: return Event.DOWN, str(err) def getRequiredArgs(): """ Returns a list of required arguments """ requiredArgs = [] return requiredArgs
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -