From 1f70d4830c341e9dec0f6821f01d37883eb23977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Fri, 21 Dec 2018 15:15:34 +0100 Subject: [PATCH] eoptasks: add moonlight progress indicator (this keeps a window always open, so hacks to handle final serial processes are removed) --- eoptasks/eoptasks.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/eoptasks/eoptasks.py b/eoptasks/eoptasks.py index 900411c..e036a63 100755 --- a/eoptasks/eoptasks.py +++ b/eoptasks/eoptasks.py @@ -116,9 +116,11 @@ cmd = { }.get(args.cmd, args.cmd) tmux_session_name = 's%s' % random.randrange(1000) -os.system('tmux new-session -s %s -d /bin/bash -c "sleep 2"' % tmux_session_name) +os.system('tmux new-session -s %s -n 🌑 -d /bin/bash -c "sleep 2h"' % tmux_session_name) tmux = libtmux.Server() session = tmux.find_where({'session_name': tmux_session_name}) +status_window = session.attached_window +status_window.attached_pane.send_keys('eoptasks\n ', enter=False) pid = os.fork() if pid: @@ -128,6 +130,7 @@ else: return re.match(r'(.*?)(\d*)$', server_name).group(1).replace( '.rbx.', '.loc.').replace('.gra.', '.loc.').replace('.sbg.', '.loc.') + total_number = len(selected_servers) random.shuffle(selected_servers) while selected_servers: current_clusters = [cluster_name(x.name) for x in session.list_windows()] @@ -142,11 +145,17 @@ else: break else: time.sleep(0.1) - if len(session.list_windows()) == 1: - # a single window remains but there are still unparallelizable - # servers to process, create temporary tmux window to avoid tmux - # being destroyed as the last window process is over. - session.new_window(attach=False, window_name='sleep', - window_shell='/bin/bash -c "sleep 2"') while len(session.list_windows()) > 5: time.sleep(0.1) + percentage = len(selected_servers) / total_number + if percentage == 1: + status_window.rename_window('🌕') + elif percentage >= 0.75: + status_window.rename_window('🌔') + elif percentage >= 0.5: + status_window.rename_window('🌓') + elif percentage >= 0.25: + status_window.rename_window('🌒') + while len(session.list_windows()) > 1: + time.sleep(0.1) + status_window.kill_window()