summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Lutostanski <greg.lutostanski@calxeda.com>2013-09-26 12:31:22 -0500
committerGreg Lutostanski <greg.lutostanski@calxeda.com>2013-09-26 12:31:22 -0500
commiteee4cd77c9709b1de4fe447f398d10593e4ba30c (patch)
treed2b7ca106624f373cc057e0b497a34e1df636767
parenta80f121ee4ca3f94d45714381fb3032bbf5835bf (diff)
downloadcxmanage-eee4cd77c9709b1de4fe447f398d10593e4ba30c.tar.gz
CXMAN-230: adding a tmux cxmanage session muxer
This will hopefully replace sol_tabs eventually
-rwxr-xr-xscripts/cxmux51
1 files changed, 51 insertions, 0 deletions
diff --git a/scripts/cxmux b/scripts/cxmux
new file mode 100755
index 0000000..17150c2
--- /dev/null
+++ b/scripts/cxmux
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+
+import os
+import sys
+import cxmanage_api.fabric
+from optparse import OptionParser
+
+def main():
+ parser = OptionParser("usage: %prog [options] COMMAND ecmeIP", conflict_handler="resolve")
+ parser.add_option("-s", "--ssh",
+ action="store_const", const=True, dest="ssh", default=False,
+ help="Use the SPU IPs rather than ECME IPs")
+ parser.add_option("-n", "--nosync",
+ action="store_const", const=False, dest="sync", default=True,
+ help="Do not syncronize input across terminals")
+ parser.disable_interspersed_args()
+ (options, args) = parser.parse_args()
+ if len(args) == 0:
+ parser.print_help()
+ return -1
+ elif len(args) < 2:
+ parser.error("Need to specify COMMAND and ecmeIP")
+
+ command = " ".join(args[:-1])
+ ecmeip = args[-1]
+ name = '%s@%s' % (args[0], ecmeip)
+ fabric = cxmanage_api.fabric.Fabric(ecmeip)
+ ips = [node.ip_address for node in fabric.nodes.values()]
+ if options.ssh:
+ ips = fabric.get_server_ip().values()
+
+ for i, ip in enumerate(ips):
+ if i == 0:
+ os.system('tmux new-window -n "%s"' % name)
+ os.system('tmux send-keys -l "%s %s"' % (command, ip))
+ os.system('tmux send-keys Enter')
+ continue
+
+ os.system('tmux split-window -h')
+ os.system('tmux send-keys -l "%s %s"' % (command, ip))
+ os.system('tmux send-keys Enter')
+ os.system('tmux select-layout -t "%s" even-horizontal >/dev/null' % name)
+
+ os.system('tmux select-layout -t "%s" tiled >/dev/null' % name)
+ if options.sync:
+ os.system('tmux set-window-option -t "%s" synchronize-panes on >/dev/null' % name)
+
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main())