Skip to content
Snippets Groups Projects
Commit 60ad40c1 authored by payno's avatar payno
Browse files

[datalistener ]improve log message when port is occupy

parent 7796cd8b
No related branches found
No related tags found
No related merge requests found
......@@ -125,6 +125,25 @@ class DataListenerOW(widget.OWWidget, OWClient, WidgetLongProcessing,
@docstring(DataListener.activate)
def activate(self, activate=True):
if activate and not self.is_port_available():
old = self._widget.blockSignals(True)
self._widget.activate(activate=False)
self._widget.blockSignals(old)
err = (
"port ({port}) of {host} already in use. Maybe an "
'other instance of "datalistener" is running in this '
"session or another tomwer session. As this widget is "
"connecting with bliss we enforce it to be unique. "
"If necessary you can hard kill server process ()"
"".format(port=self.port, host=self.host)
)
logger.warning(err)
mess = qt.QMessageBox(self, qt.QMessageBox.Warning, err)
mess.setModal(False)
mess.setWindowTitle("Unable to launch two listener in parallel")
mess.show()
return
old = self._widget.blockSignals(True)
self.set_configuration(self._widget.getBlissServerConfiguration())
self._widget.activate(activate=activate)
......
......@@ -28,7 +28,7 @@ __license__ = "MIT"
__date__ = "05/07/2017"
import h5py
import socket
import os
from tomwer.core import settings
import tomwer.version
......@@ -82,7 +82,6 @@ class DataListener(SingleProcess):
self._host = settings.JSON_RPC_HOST
# if host is None then use hostname
if self._host is None:
import socket
self._host = socket.gethostname()
self._port = settings.JSON_RPC_PORT
self._listening_thread = None
......@@ -104,11 +103,11 @@ class DataListener(SingleProcess):
@property
def port(self):
return self.port
return self._port
@property
def host(self):
return self.host
return self._host
def get_listening_thread(self):
"""
......@@ -472,6 +471,8 @@ class DataListener(SingleProcess):
_logger.info('listening is already activate')
else:
assert isinstance(self, DataListener)
if not self.is_port_available():
raise OSError("Port already used")
self.get_listening_thread().start()
else:
if self._listening_thread is None:
......@@ -484,3 +485,11 @@ class DataListener(SingleProcess):
return False
else:
return True
def is_port_available(self):
"""
:return: True if the port is available else False
"""
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
return not s.connect_ex((self._host, self._port)) == 0
......@@ -36,6 +36,7 @@ from multiprocessing import Process
from werkzeug.wrappers import Request, Response
from werkzeug.serving import run_simple
from jsonrpc import JSONRPCResponseManager, dispatcher
import socket
_logger = logging.getLogger(__name__)
......@@ -134,7 +135,6 @@ class _BaseDataListenerThread:
self._host = host
# if host is None then use hostname
if self._host is None:
import socket
self._host = socket.gethostname()
self._port = port
self._tomo_state = None
......
......@@ -30,6 +30,7 @@ __date__ = "16/03/2020"
import os
import weakref
import socket
from silx.gui import qt
from tomwer.core import settings
from tomwer.core.process.utils import LastReceivedScansDict
......@@ -374,7 +375,6 @@ class ConfigurationWidget(qt.QDialog):
# set up
self._buttons.hide()
if settings.JSON_RPC_HOST is None:
import socket
self.setHost(socket.gethostname())
else:
self.setHost(settings.JSON_RPC_HOST)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment