from threading import Thread

from pyqtgraph.Qt import QtGui

from logger import setup_global_logger
import ports
import command_line_parser
from visualizer import DataListener
from visualizer import Plotter


setup_global_logger(level=command_line_parser.get_log_level())

data_listener = DataListener(host=command_line_parser.get_host(), port=ports.result_stream)
data_listener_thread = Thread(target=data_listener.run)
data_listener_thread.daemon = True
plotter = Plotter(data_listener)

data_listener.clear.connect(plotter.clear)
data_listener.new_data.connect(plotter.update)
data_listener_thread.start()

## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()
from backend import BackendEventListener
from backend import ZMQQueueServer
import ports
import command_line_parser

import threading
import time
import numpy
from mpi4py import MPI

from logger import setup_global_logger


rank = MPI.COMM_WORLD.Get_rank()
event_queue_port = 11000 + rank

setup_global_logger(level=command_line_parser.get_log_level(), rank=rank)

event_queue_out = ZMQQueueServer(port=event_queue_port)
event_queue_out_thread = threading.Thread(target=event_queue_out.run)
event_queue_out_thread.start()

listener = BackendEventListener(event_queue_out, host=command_line_parser.get_host(), port=ports.event_stream)
listener_thread = threading.Thread(target=listener.run)
listener_thread.start()