View | Details | Raw Unified | Return to bug 242413
Collapse All | Expand All

(-)Makefile (-3 / +3 lines)
Lines 3-13 Link Here
3
3
4
PORTNAME=	hatop
4
PORTNAME=	hatop
5
PORTVERSION=	0.7.7
5
PORTVERSION=	0.7.7
6
PORTREVISION=	2
6
PORTREVISION=	3
7
DISTVERSIONPREFIX=	v
7
DISTVERSIONPREFIX=	v
8
CATEGORIES=	sysutils net
8
CATEGORIES=	sysutils net
9
9
10
MAINTAINER=	ports@FreeBSD.org
10
MAINTAINER=	mikeg@bsd-box.net
11
COMMENT=	Interactive real-time monitoring tool for the HAProxy unix socket
11
COMMENT=	Interactive real-time monitoring tool for the HAProxy unix socket
12
12
13
LICENSE=	GPLv3+
13
LICENSE=	GPLv3+
Lines 14-20 Link Here
14
14
15
RUN_DEPENDS=	${LOCALBASE}/sbin/haproxy:net/haproxy
15
RUN_DEPENDS=	${LOCALBASE}/sbin/haproxy:net/haproxy
16
16
17
USES=		python:2.7 shebangfix
17
USES=		python:3.6+ shebangfix
18
SHEBANG_FILES=	bin/hatop
18
SHEBANG_FILES=	bin/hatop
19
NO_BUILD=	yes
19
NO_BUILD=	yes
20
NO_ARCH=	yes
20
NO_ARCH=	yes
(-)files/patch-bin_hatop (+204 lines)
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)

Return to bug 242413