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

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

Return to bug 255353