forked from M-Labs/artiq
gui: queue display
This commit is contained in:
parent
1fdad21f08
commit
255b00f678
@ -13,7 +13,7 @@ from artiq.management.tools import clear_screen
|
||||
|
||||
|
||||
def _get_args():
|
||||
parser = argparse.ArgumentParser(description="ARTIQ client")
|
||||
parser = argparse.ArgumentParser(description="ARTIQ CLI client")
|
||||
parser.add_argument(
|
||||
"-s", "--server", default="::1",
|
||||
help="hostname or IP of the master to connect to")
|
||||
|
96
frontend/artiq_gui.py
Executable file
96
frontend/artiq_gui.py
Executable file
@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import asyncio
|
||||
|
||||
import gbulb
|
||||
from gi.repository import Gtk
|
||||
|
||||
from artiq.management.sync_struct import Subscriber
|
||||
|
||||
|
||||
class QueueStoreSyncer:
|
||||
def __init__(self, queue_store, init):
|
||||
self.queue_store = queue_store
|
||||
self.queue_store.clear()
|
||||
for x in init:
|
||||
self.append(x)
|
||||
|
||||
def _convert(self, x):
|
||||
rid, run_params, timeout = x
|
||||
row = [rid, run_params["file"]]
|
||||
for x in run_params["unit"], run_params["function"], timeout:
|
||||
row.append("-" if x is None else str(x))
|
||||
return row
|
||||
|
||||
def append(self, x):
|
||||
self.queue_store.append(self._convert(x))
|
||||
|
||||
def insert(self, i, x):
|
||||
self.queue_store.insert(i, self._convert(x))
|
||||
|
||||
def __delitem__(self, key):
|
||||
del self.queue_store[key]
|
||||
|
||||
|
||||
class SchedulerWindow(Gtk.Window):
|
||||
def __init__(self):
|
||||
Gtk.Window.__init__(self, title="Scheduler")
|
||||
|
||||
self.queue_store = Gtk.ListStore(int, str, str, str, str)
|
||||
tree = Gtk.TreeView(self.queue_store)
|
||||
for i, title in enumerate(["RID", "File", "Unit",
|
||||
"Function", "Timeout"]):
|
||||
renderer = Gtk.CellRendererText()
|
||||
column = Gtk.TreeViewColumn(title, renderer, text=i)
|
||||
tree.append_column(column)
|
||||
self.add(tree)
|
||||
|
||||
@asyncio.coroutine
|
||||
def sub_connect(self, host, port):
|
||||
self.subscriber = Subscriber(self.init_queue_store)
|
||||
yield from self.subscriber.connect(host, port)
|
||||
|
||||
@asyncio.coroutine
|
||||
def sub_close(self):
|
||||
yield from self.subscriber.close()
|
||||
|
||||
def init_queue_store(self, init):
|
||||
return QueueStoreSyncer(self.queue_store, init)
|
||||
|
||||
|
||||
def _get_args():
|
||||
parser = argparse.ArgumentParser(description="ARTIQ GUI client")
|
||||
parser.add_argument(
|
||||
"-s", "--server", default="::1",
|
||||
help="hostname or IP of the master to connect to")
|
||||
parser.add_argument(
|
||||
"--port-schedule-control", default=8888, type=int,
|
||||
help="TCP port to connect to for schedule control")
|
||||
parser.add_argument(
|
||||
"--port-schedule-notify", default=8887, type=int,
|
||||
help="TCP port to connect to for schedule notifications")
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main():
|
||||
args = _get_args()
|
||||
|
||||
asyncio.set_event_loop_policy(gbulb.GtkEventLoopPolicy())
|
||||
loop = asyncio.get_event_loop()
|
||||
try:
|
||||
win = SchedulerWindow()
|
||||
win.connect("delete-event", Gtk.main_quit)
|
||||
win.show_all()
|
||||
|
||||
loop.run_until_complete(win.sub_connect(args.server,
|
||||
args.port_schedule_notify))
|
||||
try:
|
||||
loop.run_forever()
|
||||
finally:
|
||||
loop.run_until_complete(win.sub_close())
|
||||
finally:
|
||||
loop.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue
Block a user