diff --git a/sysutils/hatop/Makefile b/sysutils/hatop/Makefile index 6ed664931b47..4de7eba3ed31 100644 --- a/sysutils/hatop/Makefile +++ b/sysutils/hatop/Makefile @@ -1,38 +1,37 @@ # Created by: Jim Riggs PORTNAME= hatop -PORTVERSION= 0.7.7 -PORTREVISION= 5 +PORTVERSION= 0.8.1 DISTVERSIONPREFIX= v CATEGORIES= sysutils net MAINTAINER= mikeg@bsd-box.net COMMENT= Interactive real-time monitoring tool for the HAProxy unix socket LICENSE= GPLv3+ RUN_DEPENDS= ${LOCALBASE}/sbin/haproxy:net/haproxy USES= python shebangfix -SHEBANG_FILES= bin/hatop -NO_BUILD= yes -NO_ARCH= yes - USE_GITHUB= yes -GH_ACCOUNT= feurix +GH_ACCOUNT= jhunt GH_PROJECT= hatop +SHEBANG_FILES= bin/hatop +NO_ARCH= yes +NO_BUILD= yes + PLIST_FILES= bin/hatop man/man1/hatop.1.gz -PORTDOCS= HACKING KEYBINDS README +PORTDOCS= HACKING KEYBINDS README.rst OPTIONS_DEFINE= DOCS do-install: ${INSTALL_SCRIPT} ${WRKSRC}/bin/hatop ${STAGEDIR}${PREFIX}/bin/hatop ${INSTALL_MAN} ${WRKSRC}/man/hatop.1 ${STAGEDIR}${MAN1PREFIX}/man/man1 do-install-DOCS-on: @${MKDIR} ${STAGEDIR}${DOCSDIR} (cd ${WRKSRC} && ${COPYTREE_SHARE} "${PORTDOCS}" ${STAGEDIR}${DOCSDIR}) .include diff --git a/sysutils/hatop/distinfo b/sysutils/hatop/distinfo index 1d62627dec68..b772d356dc07 100644 --- a/sysutils/hatop/distinfo +++ b/sysutils/hatop/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1476457506 -SHA256 (feurix-hatop-v0.7.7_GH0.tar.gz) = 497a28e484940bf2f6dd5919041d5d03025325a59e8f95f376f573db616ca35d -SIZE (feurix-hatop-v0.7.7_GH0.tar.gz) = 134216 +TIMESTAMP = 1619215373 +SHA256 (jhunt-hatop-v0.8.1_GH0.tar.gz) = 9f65a73a229282d9eaaebea93775878bb227d5168f506d99e71b9914fd86f886 +SIZE (jhunt-hatop-v0.8.1_GH0.tar.gz) = 136760 diff --git a/sysutils/hatop/files/patch-bin_hatop b/sysutils/hatop/files/patch-bin_hatop deleted file mode 100644 index 9cabff44f240..000000000000 --- a/sysutils/hatop/files/patch-bin_hatop +++ /dev/null @@ -1,222 +0,0 @@ ---- bin/hatop.orig 2019-12-09 21:46:21 UTC -+++ bin/hatop -@@ -404,7 +404,7 @@ class Socket: - data = self._socket.recv(HAPROXY_CLI_BUFSIZE) - if not data: - raise SocketError('error while waiting for prompt') -- return data -+ return data.decode() - - def connect(self): - # Initialize socket connection -@@ -414,16 +414,16 @@ class Socket: - # Enter the interactive socket mode. This requires HAProxy 1.4+ and - # allows us to error out early if connected to an older version. - try: -- self.send('prompt') -+ self.send(b'prompt') - self.wait() -- self.send('set timeout cli %d' % HAPROXY_CLI_TIMEOUT) -+ self.send(b'set timeout cli %d' % HAPROXY_CLI_TIMEOUT) - self.wait() - except SocketError: - raise SocketError('error while initializing interactive mode') - - def close(self): - try: -- self.send('quit') -+ self.send(b'quit') - except: - pass - try: -@@ -432,7 +432,7 @@ class Socket: - pass - - def send(self, cmdline): -- self._socket.sendall('%s\n' % cmdline) -+ self._socket.sendall(b'%s\n' % cmdline) - - def wait(self): - # Wait for the prompt and discard data. -@@ -495,7 +495,7 @@ class SocketData: - raise ValueError('invalid proxy filter: %s' % filter) - - # Convert proxy filters into more efficient stat filters -- self.socket.send('show stat') -+ self.socket.send(b'show stat') - pxstat, pxcount, svcount = parse_stat(self.socket.recv()) - - proxy_iid_map = {} # {pxname: iid, ...} -@@ -514,11 +514,11 @@ class SocketData: - raise RuntimeError('proxy not found: %s' % pxname) - - # Register filters -- for iid in proxy_iid_map.itervalues(): -+ for iid in proxy_iid_map.values(): - self._filters.add((iid, -1, -1)) - - def update_info(self): -- self.socket.send('show info') -+ self.socket.send(b'show info') - iterable = self.socket.recv() - self.info = parse_info(iterable) - -@@ -535,7 +535,7 @@ class SocketData: - - if self._filters: - for filter in self._filters: -- self.socket.send('show stat %d %d %d' % filter) -+ self.socket.send(b'show stat %d %d %d' % filter) - filter_stat, filter_pxcount, filter_svcount = \ - parse_stat(self.socket.recv()) - -@@ -546,7 +546,7 @@ class SocketData: - self.svcount += filter_svcount - self.stat.update(filter_stat) - else: -- self.socket.send('show stat') -+ self.socket.send(b'show stat') - self.stat, self.pxcount, self.svcount = \ - parse_stat(self.socket.recv()) - -@@ -716,7 +716,7 @@ class ScreenCLI: - self.ibuf = list(self.ihist[-1]) - self.mvend() - -- def next(self): -+ def __next__(self): - if len(self.ihist) == 0: - return - self.ihist.rotate(-1) -@@ -854,7 +854,7 @@ class ScreenCLI: - def execute_cmdline(self, cmdline): - self.obuf.append('* %s' % time.ctime()) - self.obuf.append('> %s' % cmdline) -- self.screen.data.socket.send(cmdline) -+ self.screen.data.socket.send(cmdline.encode()) - self.obuf.extend(self.screen.data.socket.recv()) - self.update_screenlines() - -@@ -1087,7 +1087,7 @@ class Screen: - self.data.update_info() - try: - self.data.update_stat() -- except RuntimeWarning, x: -+ except RuntimeWarning as x: - self.exceptions.append(x) - - def update_bars(self): -@@ -1438,19 +1438,19 @@ class StatusBar: - # ------------------------------------------------------------------------- # - - def human_seconds(numeric): -- for minval, prefix in sorted(PREFIX_TIME.items(), reverse=True): -+ for minval, prefix in sorted(list(PREFIX_TIME.items()), reverse=True): - if (numeric/minval): - return '%d%s' % (numeric/minval, prefix) - return '%ds' % numeric - - def human_metric(numeric): -- for minval, prefix in sorted(PREFIX_METRIC.items(), reverse=True): -+ for minval, prefix in sorted(list(PREFIX_METRIC.items()), reverse=True): - if (numeric/minval): - return '%d%s' % (numeric/minval, prefix) - return str(numeric) - - def human_binary(numeric): -- for minval, prefix in sorted(PREFIX_BINARY.items(), reverse=True): -+ for minval, prefix in sorted(list(PREFIX_BINARY.items()), reverse=True): - if (numeric/minval): - return '%.2f%s' % (float(numeric)/float(minval), prefix) - return '%dB' % numeric -@@ -1683,20 +1683,20 @@ def parse_info(iterable): - line = line.strip() - if not line: - continue -- for key, regexp in HAPROXY_INFO_RE.iteritems(): -+ for key, regexp in HAPROXY_INFO_RE.items(): - match = regexp.match(line) - if match: - info[key] = match.group('value') - break - -- for key in HAPROXY_INFO_RE.iterkeys(): -+ for key in HAPROXY_INFO_RE.keys(): - if not key in info: - raise RuntimeError('missing "%s" in info data' % key) - - return info - - def get_idx(field): -- return filter(lambda x: x[1][1] == field, HAPROXY_STAT_CSV)[0][0] -+ return [x for x in HAPROXY_STAT_CSV if x[1][1] == field][0][0] - - def get_width(width, xmax, ncols, idx): - # distribute excess space evenly from left to right -@@ -1709,7 +1709,7 @@ def get_width(width, xmax, ncols, idx): - if idx < (xdiff - (xdiff / ncols) * ncols): - width += 1 # compensate rounding - width = width + xdiff / ncols -- return width -+ return int(width) - - def get_cell(width, align, value): - s = str(value) -@@ -1732,7 +1732,7 @@ def get_head(mode): - def get_screenlines(stat): - screenlines = [] - -- for iid, svstats in stat.iteritems(): -+ for iid, svstats in stat.items(): - lines = [] - - try: -@@ -1774,11 +1774,11 @@ def get_screenline(mode, stat): - value = stat[column.name] - - for filter in column.filters['always']: -- value = filter(value) -+ value = list(filter(value)) - - if len(str(value)) > column.width: - for filter in column.filters['ondemand']: -- value = filter(value) -+ value = list(filter(value)) - - value = str(value) - value = trim(value, column.width) -@@ -2099,7 +2099,7 @@ def mainloop(screen, interval): - elif c == curses.KEY_UP: - screen.cli.prev() - elif c == curses.KEY_DOWN: -- screen.cli.next() -+ next(screen.cli) - - # output history - elif c == curses.KEY_PPAGE: -@@ -2202,21 +2202,21 @@ if __name__ == '__main__': - break - except KeyboardInterrupt: - break -- except CursesError, e: -+ except CursesError as e: - screen.reset() - log('curses error: %s, restarting...' % e) - time.sleep(1) - screen.recover() - -- except ValueError, e: -+ except ValueError as e: - screen.reset() - log('value error: %s' % e) - sys.exit(1) -- except RuntimeError, e: -+ except RuntimeError as e: - screen.reset() - log('runtime error: %s' % e) - sys.exit(1) -- except SocketError, e: -+ except SocketError as e: - screen.reset() - log('socket error: %s' % e) - sys.exit(2) diff --git a/sysutils/hatop/pkg-descr b/sysutils/hatop/pkg-descr index 48baa58f50d7..446763e4b93d 100644 --- a/sysutils/hatop/pkg-descr +++ b/sysutils/hatop/pkg-descr @@ -1,12 +1,12 @@ HATop is an interactive ncurses client and real-time monitoring statistics displaying tool for the HAProxy Unix socket. HATop's appearance is similar to top. It supports various modes for detailed statistics of all configured proxies and services in near realtime. In addition, it features an interactive CLI for the haproxy Unix socket. This allows administrators to control the given haproxy instance (change server weight, put servers into maintenance mode, etc.) directly out of hatop (using keybinds or the CLI) and monitor the results immediately. -WWW: http://feurix.org/projects/hatop/ +WWW: https://github.com/jhunt/hatop