Line 0
Link Here
|
|
|
1 |
--- bin/hatop.orig 2019-12-03 21:58:07 UTC |
2 |
+++ bin/hatop |
3 |
@@ -414,16 +414,16 @@ class Socket: |
4 |
# Enter the interactive socket mode. This requires HAProxy 1.4+ and |
5 |
# allows us to error out early if connected to an older version. |
6 |
try: |
7 |
- self.send('prompt') |
8 |
+ self.send(b'prompt') |
9 |
self.wait() |
10 |
- self.send('set timeout cli %d' % HAPROXY_CLI_TIMEOUT) |
11 |
+ self.send(b'set timeout cli %d' % HAPROXY_CLI_TIMEOUT) |
12 |
self.wait() |
13 |
except SocketError: |
14 |
raise SocketError('error while initializing interactive mode') |
15 |
|
16 |
def close(self): |
17 |
try: |
18 |
- self.send('quit') |
19 |
+ self.send(b'quit') |
20 |
except: |
21 |
pass |
22 |
try: |
23 |
@@ -432,7 +432,7 @@ class Socket: |
24 |
pass |
25 |
|
26 |
def send(self, cmdline): |
27 |
- self._socket.sendall('%s\n' % cmdline) |
28 |
+ self._socket.sendall(b'%s\n' % cmdline) |
29 |
|
30 |
def wait(self): |
31 |
# Wait for the prompt and discard data. |
32 |
@@ -495,7 +495,7 @@ class SocketData: |
33 |
raise ValueError('invalid proxy filter: %s' % filter) |
34 |
|
35 |
# Convert proxy filters into more efficient stat filters |
36 |
- self.socket.send('show stat') |
37 |
+ self.socket.send(b'show stat') |
38 |
pxstat, pxcount, svcount = parse_stat(self.socket.recv()) |
39 |
|
40 |
proxy_iid_map = {} # {pxname: iid, ...} |
41 |
@@ -514,11 +514,11 @@ class SocketData: |
42 |
raise RuntimeError('proxy not found: %s' % pxname) |
43 |
|
44 |
# Register filters |
45 |
- for iid in proxy_iid_map.itervalues(): |
46 |
+ for iid in proxy_iid_map.values(): |
47 |
self._filters.add((iid, -1, -1)) |
48 |
|
49 |
def update_info(self): |
50 |
- self.socket.send('show info') |
51 |
+ self.socket.send(b'show info') |
52 |
iterable = self.socket.recv() |
53 |
self.info = parse_info(iterable) |
54 |
|
55 |
@@ -535,7 +535,7 @@ class SocketData: |
56 |
|
57 |
if self._filters: |
58 |
for filter in self._filters: |
59 |
- self.socket.send('show stat %d %d %d' % filter) |
60 |
+ self.socket.send(b'show stat %d %d %d' % filter) |
61 |
filter_stat, filter_pxcount, filter_svcount = \ |
62 |
parse_stat(self.socket.recv()) |
63 |
|
64 |
@@ -546,7 +546,7 @@ class SocketData: |
65 |
self.svcount += filter_svcount |
66 |
self.stat.update(filter_stat) |
67 |
else: |
68 |
- self.socket.send('show stat') |
69 |
+ self.socket.send(b'show stat') |
70 |
self.stat, self.pxcount, self.svcount = \ |
71 |
parse_stat(self.socket.recv()) |
72 |
|
73 |
@@ -716,7 +716,7 @@ class ScreenCLI: |
74 |
self.ibuf = list(self.ihist[-1]) |
75 |
self.mvend() |
76 |
|
77 |
- def next(self): |
78 |
+ def __next__(self): |
79 |
if len(self.ihist) == 0: |
80 |
return |
81 |
self.ihist.rotate(-1) |
82 |
@@ -854,7 +854,7 @@ class ScreenCLI: |
83 |
def execute_cmdline(self, cmdline): |
84 |
self.obuf.append('* %s' % time.ctime()) |
85 |
self.obuf.append('> %s' % cmdline) |
86 |
- self.screen.data.socket.send(cmdline) |
87 |
+ self.screen.data.socket.send(cmdline.encode()) |
88 |
self.obuf.extend(self.screen.data.socket.recv()) |
89 |
self.update_screenlines() |
90 |
|
91 |
@@ -1087,7 +1087,7 @@ class Screen: |
92 |
self.data.update_info() |
93 |
try: |
94 |
self.data.update_stat() |
95 |
- except RuntimeWarning, x: |
96 |
+ except RuntimeWarning as x: |
97 |
self.exceptions.append(x) |
98 |
|
99 |
def update_bars(self): |
100 |
@@ -1438,19 +1438,19 @@ class StatusBar: |
101 |
# ------------------------------------------------------------------------- # |
102 |
|
103 |
def human_seconds(numeric): |
104 |
- for minval, prefix in sorted(PREFIX_TIME.items(), reverse=True): |
105 |
+ for minval, prefix in sorted(list(PREFIX_TIME.items()), reverse=True): |
106 |
if (numeric/minval): |
107 |
return '%d%s' % (numeric/minval, prefix) |
108 |
return '%ds' % numeric |
109 |
|
110 |
def human_metric(numeric): |
111 |
- for minval, prefix in sorted(PREFIX_METRIC.items(), reverse=True): |
112 |
+ for minval, prefix in sorted(list(PREFIX_METRIC.items()), reverse=True): |
113 |
if (numeric/minval): |
114 |
return '%d%s' % (numeric/minval, prefix) |
115 |
return str(numeric) |
116 |
|
117 |
def human_binary(numeric): |
118 |
- for minval, prefix in sorted(PREFIX_BINARY.items(), reverse=True): |
119 |
+ for minval, prefix in sorted(list(PREFIX_BINARY.items()), reverse=True): |
120 |
if (numeric/minval): |
121 |
return '%.2f%s' % (float(numeric)/float(minval), prefix) |
122 |
return '%dB' % numeric |
123 |
@@ -1683,20 +1683,20 @@ def parse_info(iterable): |
124 |
line = line.strip() |
125 |
if not line: |
126 |
continue |
127 |
- for key, regexp in HAPROXY_INFO_RE.iteritems(): |
128 |
+ for key, regexp in HAPROXY_INFO_RE.items(): |
129 |
match = regexp.match(line) |
130 |
if match: |
131 |
info[key] = match.group('value') |
132 |
break |
133 |
|
134 |
- for key in HAPROXY_INFO_RE.iterkeys(): |
135 |
+ for key in HAPROXY_INFO_RE.keys(): |
136 |
if not key in info: |
137 |
raise RuntimeError('missing "%s" in info data' % key) |
138 |
|
139 |
return info |
140 |
|
141 |
def get_idx(field): |
142 |
- return filter(lambda x: x[1][1] == field, HAPROXY_STAT_CSV)[0][0] |
143 |
+ return [x for x in HAPROXY_STAT_CSV if x[1][1] == field][0][0] |
144 |
|
145 |
def get_width(width, xmax, ncols, idx): |
146 |
# distribute excess space evenly from left to right |
147 |
@@ -1732,7 +1732,7 @@ def get_head(mode): |
148 |
def get_screenlines(stat): |
149 |
screenlines = [] |
150 |
|
151 |
- for iid, svstats in stat.iteritems(): |
152 |
+ for iid, svstats in stat.items(): |
153 |
lines = [] |
154 |
|
155 |
try: |
156 |
@@ -1774,11 +1774,11 @@ def get_screenline(mode, stat): |
157 |
value = stat[column.name] |
158 |
|
159 |
for filter in column.filters['always']: |
160 |
- value = filter(value) |
161 |
+ value = list(filter(value)) |
162 |
|
163 |
if len(str(value)) > column.width: |
164 |
for filter in column.filters['ondemand']: |
165 |
- value = filter(value) |
166 |
+ value = list(filter(value)) |
167 |
|
168 |
value = str(value) |
169 |
value = trim(value, column.width) |
170 |
@@ -2099,7 +2099,7 @@ def mainloop(screen, interval): |
171 |
elif c == curses.KEY_UP: |
172 |
screen.cli.prev() |
173 |
elif c == curses.KEY_DOWN: |
174 |
- screen.cli.next() |
175 |
+ next(screen.cli) |
176 |
|
177 |
# output history |
178 |
elif c == curses.KEY_PPAGE: |
179 |
@@ -2202,21 +2202,21 @@ if __name__ == '__main__': |
180 |
break |
181 |
except KeyboardInterrupt: |
182 |
break |
183 |
- except CursesError, e: |
184 |
+ except CursesError as e: |
185 |
screen.reset() |
186 |
log('curses error: %s, restarting...' % e) |
187 |
time.sleep(1) |
188 |
screen.recover() |
189 |
|
190 |
- except ValueError, e: |
191 |
+ except ValueError as e: |
192 |
screen.reset() |
193 |
log('value error: %s' % e) |
194 |
sys.exit(1) |
195 |
- except RuntimeError, e: |
196 |
+ except RuntimeError as e: |
197 |
screen.reset() |
198 |
log('runtime error: %s' % e) |
199 |
sys.exit(1) |
200 |
- except SocketError, e: |
201 |
+ except SocketError as e: |
202 |
screen.reset() |
203 |
log('socket error: %s' % e) |
204 |
sys.exit(2) |