/
tokustat.py
executable file
·121 lines (105 loc) · 2.87 KB
/
tokustat.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env python
import sys
import time
import re
import MySQLdb
def usage():
print "diff the tokudb engine status"
print "--host=HOSTNAME (default: localhost)"
print "--port=PORT"
print "--interations=MAX_ITERATIONS (default: forever)"
print "--interval=TIME_BETWEEN_SAMPLES (default: 10 seconds)"
print "--q='show engine tokudb status'"
print "--q='select * from information_schema.global_status'"
return 1
def convert(v):
if type(v) == type('str'):
try:
v = int(v)
except:
v = float(v)
return v
def printit(stats, rs, interval):
for t in rs:
l = len(t) # grab the last 2 fields in t
k = t[l-2]
v = t[l-1]
try:
v = convert(v)
except:
pass
if stats.has_key(k):
oldv = stats[k]
if v != oldv:
print k, "|", oldv, "|", v,
try:
d = v - oldv
if interval != 1:
if d >= interval:
e = d / interval
else:
e = float(d) / interval
print "|", d, "|", e
else:
print "|", d
except:
print
stats[k] = v
print
def main():
host = None
port = None
user = None
passwd = None
interval = 10
iterations = 0
q = 'show engine tokudb status'
for a in sys.argv[1:]:
if a == "-h" or a == "-?" or a == "--help":
return usage()
match = re.match("--(.*)=(.*)", a)
if match:
exec "%s='%s'" % (match.group(1),match.group(2))
continue
return usage()
iterations = int(iterations)
interval = int(interval)
connect_parameters = {}
if host is not None:
if host[0] == '/':
connect_parameters['unix_socket'] = host
else:
connect_parameters['host'] = host
if port is not None:
connect_parameters['port'] = int(port)
if user is not None:
connect_parameters['user'] = user
if passwd is not None:
connect_parameters['passwd'] = passwd
try:
db = MySQLdb.connect(**connect_parameters)
except:
print sys.exc_info()
return 1
print "connected"
stats = {}
i = 0
while iterations == 0 or i <= iterations:
i += 1
try:
c = db.cursor()
n = c.execute(q)
rs = c.fetchall()
db.commit()
c.close()
except:
print "db", sys.exc_info()
return 2
try:
printit(stats, rs, interval)
time.sleep(interval)
except:
print "printit", sys.exc_info()
return 3
return 0
sys.exit(main())