2026-05-21T11:48:13.469 [INFO] [Dummy-333558] [base_server.py] [_log_error_once()] Invalid session MHbPUNo8sqbuYNafABRk
2026-05-21T11:48:13.492 [INFO] [Dummy-333558] [socket.py] [send()] F7W9VMDeziyg1vzYABRm: Sending packet OPEN data {'sid': 'F7W9VMDeziyg1vzYABRm', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T11:48:13.513 [INFO] [Dummy-333558] [socket.py] [send()] gKHdh5h0SQJ5qeVuABRn: Sending packet OPEN data {'sid': 'gKHdh5h0SQJ5qeVuABRn', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T11:48:13.537 [INFO] [Dummy-333558] [socket.py] [send()] 143_uzjnLU2N6gmLABRo: Sending packet OPEN data {'sid': '143_uzjnLU2N6gmLABRo', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T11:48:13.565 [INFO] [Dummy-333558] [socket.py] [send()] kYJrriIo8r0o68yOABRp: Sending packet OPEN data {'sid': 'kYJrriIo8r0o68yOABRp', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T11:48:13.590 [INFO] [Dummy-333558] [socket.py] [send()] Cs2yYV3PXdKjCR2CABRq: Sending packet OPEN data {'sid': 'Cs2yYV3PXdKjCR2CABRq', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T11:48:26.395 [INFO] [Dummy-333559] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet OPEN data {'sid': '9wtEcp8Bl5roV14vABRr', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T11:48:26.427 [INFO] [Dummy-333559] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet MESSAGE data 0
2026-05-21T11:48:26.429 [INFO] [Dummy-333559] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet MESSAGE data 0{"sid":"v1WYFeSNAaL3pvHZABRs"}
2026-05-21T11:48:26.451 [INFO] [Dummy-333560] [socket.py] [handle_get_request()] 9wtEcp8Bl5roV14vABRr: Received request to upgrade to websocket
2026-05-21T11:48:38.495 [INFO] [Dummy-333561] [socket.py] [send()] F7W9VMDeziyg1vzYABRm: Sending packet PING data None
2026-05-21T11:48:38.516 [INFO] [Dummy-333562] [socket.py] [send()] gKHdh5h0SQJ5qeVuABRn: Sending packet PING data None
2026-05-21T11:48:38.540 [INFO] [Dummy-333563] [socket.py] [send()] 143_uzjnLU2N6gmLABRo: Sending packet PING data None
2026-05-21T11:48:38.567 [INFO] [Dummy-333564] [socket.py] [send()] kYJrriIo8r0o68yOABRp: Sending packet PING data None
2026-05-21T11:48:38.592 [INFO] [Dummy-333565] [socket.py] [send()] Cs2yYV3PXdKjCR2CABRq: Sending packet PING data None
2026-05-21T11:48:51.398 [INFO] [Dummy-333566] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:48:51.435 [INFO] [Dummy-333559] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:49:04.885 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] F7W9VMDeziyg1vzYABRm: Client is gone, closing socket
2026-05-21T11:49:04.886 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] F7W9VMDeziyg1vzYABRm: Client is gone, closing socket
2026-05-21T11:49:08.220 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] gKHdh5h0SQJ5qeVuABRn: Client is gone, closing socket
2026-05-21T11:49:08.221 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] gKHdh5h0SQJ5qeVuABRn: Client is gone, closing socket
2026-05-21T11:49:11.557 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 143_uzjnLU2N6gmLABRo: Client is gone, closing socket
2026-05-21T11:49:11.558 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 143_uzjnLU2N6gmLABRo: Client is gone, closing socket
2026-05-21T11:49:14.893 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] kYJrriIo8r0o68yOABRp: Client is gone, closing socket
2026-05-21T11:49:14.893 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] kYJrriIo8r0o68yOABRp: Client is gone, closing socket
2026-05-21T11:49:16.438 [INFO] [Dummy-333567] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:49:16.486 [INFO] [Dummy-333559] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:49:18.228 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] Cs2yYV3PXdKjCR2CABRq: Client is gone, closing socket
2026-05-21T11:49:18.229 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] Cs2yYV3PXdKjCR2CABRq: Client is gone, closing socket
2026-05-21T11:49:41.488 [INFO] [Dummy-333568] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:49:41.524 [INFO] [Dummy-333559] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:50:06.526 [INFO] [Dummy-333569] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:50:06.560 [INFO] [Dummy-333570] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:50:31.563 [INFO] [Dummy-333571] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:50:31.607 [INFO] [Dummy-333572] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:50:56.610 [INFO] [Dummy-333573] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:50:56.662 [INFO] [Dummy-333574] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:51:21.665 [INFO] [Dummy-333575] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:51:21.721 [INFO] [Dummy-333576] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:51:46.724 [INFO] [Dummy-333577] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:51:46.756 [INFO] [Dummy-333578] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:52:11.758 [INFO] [Dummy-333579] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:52:11.787 [INFO] [Dummy-333580] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:52:36.790 [INFO] [Dummy-333581] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:52:36.930 [INFO] [Dummy-333580] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:53:01.933 [INFO] [Dummy-333582] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:53:01.967 [INFO] [Dummy-333583] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:53:26.970 [INFO] [Dummy-333584] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:53:27.000 [INFO] [Dummy-333585] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:53:52.003 [INFO] [Dummy-333586] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:53:52.040 [INFO] [Dummy-333587] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:54:17.054 [INFO] [Dummy-333588] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:54:17.110 [INFO] [Dummy-333589] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:54:42.112 [INFO] [Dummy-333590] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:54:42.181 [INFO] [Dummy-333589] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:55:07.183 [INFO] [Dummy-333591] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:55:07.218 [INFO] [Dummy-333592] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:55:32.220 [INFO] [Dummy-333593] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:55:32.260 [INFO] [Dummy-333594] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:55:57.263 [INFO] [Dummy-333595] [socket.py] [send()] 9wtEcp8Bl5roV14vABRr: Sending packet PING data None
2026-05-21T11:55:57.380 [INFO] [Dummy-333596] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet PONG data 
2026-05-21T11:56:16.522 [INFO] [Dummy-333597] [socket.py] [receive()] 9wtEcp8Bl5roV14vABRr: Received packet CLOSE data 
2026-05-21T11:56:18.276 [INFO] [Dummy-333597] [socket.py] [send()] 8VP-Ig99-SO3SYumABRt: Sending packet OPEN data {'sid': '8VP-Ig99-SO3SYumABRt', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T11:56:18.301 [INFO] [Dummy-333597] [socket.py] [receive()] 8VP-Ig99-SO3SYumABRt: Received packet MESSAGE data 0
2026-05-21T11:56:18.303 [INFO] [Dummy-333597] [socket.py] [send()] 8VP-Ig99-SO3SYumABRt: Sending packet MESSAGE data 0{"sid":"9GWegIipsdOHr77YABRu"}
2026-05-21T11:56:18.466 [INFO] [Dummy-333598] [socket.py] [handle_get_request()] 8VP-Ig99-SO3SYumABRt: Received request to upgrade to websocket
2026-05-21T11:56:43.279 [INFO] [Dummy-333599] [socket.py] [send()] 8VP-Ig99-SO3SYumABRt: Sending packet PING data None
2026-05-21T11:57:04.952 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 8VP-Ig99-SO3SYumABRt: Client is gone, closing socket
2026-05-21T11:57:04.953 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 8VP-Ig99-SO3SYumABRt: Client is gone, closing socket
2026-05-21T12:14:43.664 [ERROR] [Dummy-333600] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:14:43.669 [ERROR] [Dummy-333600] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:15:43.650 [ERROR] [Dummy-333601] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:15:43.651 [ERROR] [Dummy-333601] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:18:43.658 [ERROR] [Dummy-333602] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:18:43.660 [ERROR] [Dummy-333602] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:19:43.650 [ERROR] [Dummy-333603] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:19:43.652 [ERROR] [Dummy-333603] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:20:43.671 [ERROR] [Dummy-333604] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:20:43.672 [ERROR] [Dummy-333604] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:21:43.698 [ERROR] [Dummy-333605] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:21:43.699 [ERROR] [Dummy-333605] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:22:43.655 [ERROR] [Dummy-333606] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:22:43.657 [ERROR] [Dummy-333606] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:23:43.658 [ERROR] [Dummy-333607] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:23:43.660 [ERROR] [Dummy-333607] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:24:43.684 [ERROR] [Dummy-333608] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:24:43.686 [ERROR] [Dummy-333608] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:25:43.698 [ERROR] [Dummy-333609] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:25:43.699 [ERROR] [Dummy-333609] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:27:43.667 [ERROR] [Dummy-333610] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:27:43.668 [ERROR] [Dummy-333610] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:28:43.663 [ERROR] [Dummy-333611] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:28:43.664 [ERROR] [Dummy-333611] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:29:43.661 [ERROR] [Dummy-333612] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:29:43.663 [ERROR] [Dummy-333612] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:30:43.663 [ERROR] [Dummy-333613] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:30:43.664 [ERROR] [Dummy-333613] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:31:43.665 [ERROR] [Dummy-333614] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:31:43.667 [ERROR] [Dummy-333614] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:32:43.664 [ERROR] [Dummy-333615] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:32:43.665 [ERROR] [Dummy-333615] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:33:48.667 [ERROR] [Dummy-333616] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:33:48.668 [ERROR] [Dummy-333616] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:34:43.665 [ERROR] [Dummy-333617] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:34:43.667 [ERROR] [Dummy-333617] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:35:43.669 [ERROR] [Dummy-333618] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:35:43.671 [ERROR] [Dummy-333618] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:36:43.666 [ERROR] [Dummy-333619] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:36:43.667 [ERROR] [Dummy-333619] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:37:43.666 [ERROR] [Dummy-333620] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:37:43.667 [ERROR] [Dummy-333620] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:38:43.670 [ERROR] [Dummy-333621] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:38:43.672 [ERROR] [Dummy-333621] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:39:43.668 [ERROR] [Dummy-333622] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:39:43.670 [ERROR] [Dummy-333622] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:40:43.670 [ERROR] [Dummy-333623] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:40:43.672 [ERROR] [Dummy-333623] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:41:43.673 [ERROR] [Dummy-333624] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:41:43.675 [ERROR] [Dummy-333624] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:42:43.673 [ERROR] [Dummy-333625] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:42:43.674 [ERROR] [Dummy-333625] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:43:43.671 [ERROR] [Dummy-333626] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:43:43.672 [ERROR] [Dummy-333626] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:44:43.671 [ERROR] [Dummy-333627] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:44:43.673 [ERROR] [Dummy-333627] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:45:43.675 [ERROR] [Dummy-333628] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:45:43.676 [ERROR] [Dummy-333628] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:46:43.674 [ERROR] [Dummy-333629] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:46:43.675 [ERROR] [Dummy-333629] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:47:43.674 [ERROR] [Dummy-333630] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:47:43.675 [ERROR] [Dummy-333630] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:48:43.679 [ERROR] [Dummy-333631] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:48:43.680 [ERROR] [Dummy-333631] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:49:43.678 [ERROR] [Dummy-333632] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:49:43.679 [ERROR] [Dummy-333632] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:50:43.680 [ERROR] [Dummy-333633] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:50:43.681 [ERROR] [Dummy-333633] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:51:43.682 [ERROR] [Dummy-333634] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:51:43.683 [ERROR] [Dummy-333634] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:52:43.681 [ERROR] [Dummy-333635] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:52:43.682 [ERROR] [Dummy-333635] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:53:48.691 [ERROR] [Dummy-333636] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:53:48.693 [ERROR] [Dummy-333636] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:54:43.685 [ERROR] [Dummy-333637] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:54:43.686 [ERROR] [Dummy-333637] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:55:43.682 [ERROR] [Dummy-333638] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:55:43.683 [ERROR] [Dummy-333638] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:56:43.693 [ERROR] [Dummy-333639] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:56:43.693 [ERROR] [Dummy-333639] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:57:43.688 [ERROR] [Dummy-333640] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:57:43.689 [ERROR] [Dummy-333640] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:58:43.687 [ERROR] [Dummy-333641] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:58:43.689 [ERROR] [Dummy-333641] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T12:59:43.688 [ERROR] [Dummy-333642] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T12:59:43.690 [ERROR] [Dummy-333642] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:00:43.689 [ERROR] [Dummy-333643] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:00:43.690 [ERROR] [Dummy-333643] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:01:43.691 [ERROR] [Dummy-333644] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:01:43.693 [ERROR] [Dummy-333644] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:02:43.689 [ERROR] [Dummy-333645] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:02:43.690 [ERROR] [Dummy-333645] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:03:43.690 [ERROR] [Dummy-333646] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:03:43.691 [ERROR] [Dummy-333646] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:04:43.696 [ERROR] [Dummy-333647] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:04:43.697 [ERROR] [Dummy-333647] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:05:43.697 [ERROR] [Dummy-333648] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:05:43.699 [ERROR] [Dummy-333648] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:06:43.691 [ERROR] [Dummy-333649] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:06:43.692 [ERROR] [Dummy-333649] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:07:43.696 [ERROR] [Dummy-333650] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:07:43.697 [ERROR] [Dummy-333650] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:08:43.695 [ERROR] [Dummy-333651] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:08:43.696 [ERROR] [Dummy-333651] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:09:43.696 [ERROR] [Dummy-333652] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:09:43.698 [ERROR] [Dummy-333652] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:10:43.700 [ERROR] [Dummy-333653] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:10:43.701 [ERROR] [Dummy-333653] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:11:43.699 [ERROR] [Dummy-333654] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:11:43.701 [ERROR] [Dummy-333654] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:12:43.699 [ERROR] [Dummy-333655] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:12:43.700 [ERROR] [Dummy-333655] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:13:43.698 [ERROR] [Dummy-333656] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:13:43.700 [ERROR] [Dummy-333656] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:14:43.703 [ERROR] [Dummy-333657] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:14:43.704 [ERROR] [Dummy-333657] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:15:43.703 [ERROR] [Dummy-333658] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:15:43.705 [ERROR] [Dummy-333658] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:16:43.708 [ERROR] [Dummy-333659] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:16:43.710 [ERROR] [Dummy-333659] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:17:43.703 [ERROR] [Dummy-333660] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:17:43.704 [ERROR] [Dummy-333660] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:18:43.708 [ERROR] [Dummy-333661] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:18:43.709 [ERROR] [Dummy-333661] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:19:43.705 [ERROR] [Dummy-333662] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:19:43.707 [ERROR] [Dummy-333662] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:20:43.702 [ERROR] [Dummy-333663] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:20:43.705 [ERROR] [Dummy-333663] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:21:43.707 [ERROR] [Dummy-333664] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:21:43.708 [ERROR] [Dummy-333664] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:22:43.703 [ERROR] [Dummy-333665] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:22:43.704 [ERROR] [Dummy-333665] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:23:43.711 [ERROR] [Dummy-333666] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:23:43.712 [ERROR] [Dummy-333666] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:24:43.706 [ERROR] [Dummy-333667] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:24:43.707 [ERROR] [Dummy-333667] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:25:43.706 [ERROR] [Dummy-333668] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:25:43.707 [ERROR] [Dummy-333668] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:26:43.713 [ERROR] [Dummy-333669] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:26:43.714 [ERROR] [Dummy-333669] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:27:43.719 [ERROR] [Dummy-333670] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:27:43.720 [ERROR] [Dummy-333670] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:28:43.713 [ERROR] [Dummy-333671] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:28:43.714 [ERROR] [Dummy-333671] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:29:43.713 [ERROR] [Dummy-333672] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:29:43.715 [ERROR] [Dummy-333672] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:30:43.715 [ERROR] [Dummy-333673] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:30:43.716 [ERROR] [Dummy-333673] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:31:43.723 [ERROR] [Dummy-333674] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:31:43.724 [ERROR] [Dummy-333674] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:32:48.721 [ERROR] [Dummy-333675] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:32:48.723 [ERROR] [Dummy-333675] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:33:43.723 [ERROR] [Dummy-333676] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:33:43.725 [ERROR] [Dummy-333676] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:34:33.708 [ERROR] [Dummy-333677] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:34:33.710 [ERROR] [Dummy-333677] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:35:43.719 [ERROR] [Dummy-333678] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:35:43.720 [ERROR] [Dummy-333678] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:36:43.720 [ERROR] [Dummy-333679] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:36:43.721 [ERROR] [Dummy-333679] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:37:43.721 [ERROR] [Dummy-333680] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:37:43.722 [ERROR] [Dummy-333680] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:38:43.723 [ERROR] [Dummy-333681] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:38:43.724 [ERROR] [Dummy-333681] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:39:43.723 [ERROR] [Dummy-333682] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:39:43.724 [ERROR] [Dummy-333682] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:40:53.732 [ERROR] [Dummy-333683] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:40:53.733 [ERROR] [Dummy-333683] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:41:43.720 [ERROR] [Dummy-333684] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:41:43.721 [ERROR] [Dummy-333684] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:42:43.721 [ERROR] [Dummy-333685] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:42:43.722 [ERROR] [Dummy-333685] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:43:43.726 [ERROR] [Dummy-333686] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:43:43.728 [ERROR] [Dummy-333686] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:44:43.726 [ERROR] [Dummy-333687] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:44:43.727 [ERROR] [Dummy-333687] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:45:43.727 [ERROR] [Dummy-333688] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:45:43.729 [ERROR] [Dummy-333688] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:46:43.725 [ERROR] [Dummy-333689] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:46:43.727 [ERROR] [Dummy-333689] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:47:53.740 [ERROR] [Dummy-333690] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:47:53.741 [ERROR] [Dummy-333690] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:48:43.732 [ERROR] [Dummy-333691] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:48:43.733 [ERROR] [Dummy-333691] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:49:43.729 [ERROR] [Dummy-333692] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:49:43.731 [ERROR] [Dummy-333692] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:50:43.733 [ERROR] [Dummy-333693] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:50:43.735 [ERROR] [Dummy-333693] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:51:43.734 [ERROR] [Dummy-333694] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:51:43.735 [ERROR] [Dummy-333694] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:52:48.740 [ERROR] [Dummy-333695] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:52:48.741 [ERROR] [Dummy-333695] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:53:43.738 [ERROR] [Dummy-333696] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:53:43.739 [ERROR] [Dummy-333696] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:54:48.741 [ERROR] [Dummy-333697] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:54:48.742 [ERROR] [Dummy-333697] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:55:43.738 [ERROR] [Dummy-333698] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:55:43.739 [ERROR] [Dummy-333698] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:56:58.805 [ERROR] [Dummy-333699] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9020
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:57:08.885 [ERROR] [Dummy-333699] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9020
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:57:08.893 [ERROR] [Dummy-333699] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 22, in index
    return render_template('index.html', state=mookodi.state)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 147, in render_template
    return _render(app, template, context)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 130, in _render
    rv = template.render(context)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1301, in render
    self.environment.handle_exception()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 936, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "/home/mookodi/development/mookodi-web/app/templates/index.html", line 1, in top-level template code
    {% extends "filament/base.html" %}
  File "/home/mookodi/development/filament/filament/templates/filament/base.html", line 36, in top-level template code
    {% block content %}{% endblock %}
  File "/home/mookodi/development/mookodi-web/app/templates/index.html", line 723, in block 'content'
    {{state.exposure_length/1000}}
jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'exposure_length'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:57:43.739 [ERROR] [Dummy-333700] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:57:43.741 [ERROR] [Dummy-333700] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:58:43.741 [ERROR] [Dummy-333701] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:58:43.743 [ERROR] [Dummy-333701] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T13:59:43.743 [ERROR] [Dummy-333702] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T13:59:43.744 [ERROR] [Dummy-333702] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:00:43.745 [ERROR] [Dummy-333703] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:00:43.746 [ERROR] [Dummy-333703] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:01:43.751 [ERROR] [Dummy-333704] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:01:43.753 [ERROR] [Dummy-333704] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:02:43.742 [ERROR] [Dummy-333705] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:02:43.743 [ERROR] [Dummy-333705] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:03:43.746 [ERROR] [Dummy-333706] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:03:43.747 [ERROR] [Dummy-333706] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:04:43.744 [ERROR] [Dummy-333707] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:04:43.746 [ERROR] [Dummy-333707] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:05:48.750 [ERROR] [Dummy-333708] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:05:48.752 [ERROR] [Dummy-333708] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:06:43.748 [ERROR] [Dummy-333709] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:06:43.749 [ERROR] [Dummy-333709] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:07:43.749 [ERROR] [Dummy-333710] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:07:43.750 [ERROR] [Dummy-333710] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:08:43.751 [ERROR] [Dummy-333711] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:08:43.752 [ERROR] [Dummy-333711] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:09:53.766 [ERROR] [Dummy-333712] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:09:53.768 [ERROR] [Dummy-333712] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:11:03.954 [ERROR] [Dummy-333713] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9020
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:11:14.026 [ERROR] [Dummy-333713] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9020
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:11:14.032 [ERROR] [Dummy-333713] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 22, in index
    return render_template('index.html', state=mookodi.state)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 147, in render_template
    return _render(app, template, context)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 130, in _render
    rv = template.render(context)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1301, in render
    self.environment.handle_exception()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 936, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "/home/mookodi/development/mookodi-web/app/templates/index.html", line 1, in top-level template code
    {% extends "filament/base.html" %}
  File "/home/mookodi/development/filament/filament/templates/filament/base.html", line 36, in top-level template code
    {% block content %}{% endblock %}
  File "/home/mookodi/development/mookodi-web/app/templates/index.html", line 723, in block 'content'
    {{state.exposure_length/1000}}
jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'exposure_length'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:11:43.753 [ERROR] [Dummy-333714] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:11:43.754 [ERROR] [Dummy-333714] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:12:43.748 [ERROR] [Dummy-333715] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:12:43.750 [ERROR] [Dummy-333715] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:13:43.754 [ERROR] [Dummy-333716] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:13:43.755 [ERROR] [Dummy-333716] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:14:48.758 [ERROR] [Dummy-333717] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:14:48.759 [ERROR] [Dummy-333717] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:15:43.756 [ERROR] [Dummy-333718] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:15:43.758 [ERROR] [Dummy-333718] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:16:43.758 [ERROR] [Dummy-333719] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:16:43.759 [ERROR] [Dummy-333719] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:17:43.758 [ERROR] [Dummy-333720] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:17:43.759 [ERROR] [Dummy-333720] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:18:43.757 [ERROR] [Dummy-333721] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:18:43.757 [ERROR] [Dummy-333721] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:19:43.757 [ERROR] [Dummy-333722] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:19:43.759 [ERROR] [Dummy-333722] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:20:43.757 [ERROR] [Dummy-333723] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:20:43.759 [ERROR] [Dummy-333723] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:21:43.763 [ERROR] [Dummy-333724] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:21:43.764 [ERROR] [Dummy-333724] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:22:43.763 [ERROR] [Dummy-333725] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:22:43.764 [ERROR] [Dummy-333725] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:23:43.763 [ERROR] [Dummy-333726] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:23:43.764 [ERROR] [Dummy-333726] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:24:43.758 [ERROR] [Dummy-333727] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:24:43.759 [ERROR] [Dummy-333727] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:25:48.767 [ERROR] [Dummy-333728] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:25:48.769 [ERROR] [Dummy-333728] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:26:43.766 [ERROR] [Dummy-333729] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:26:43.767 [ERROR] [Dummy-333729] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:27:43.762 [ERROR] [Dummy-333730] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:27:43.763 [ERROR] [Dummy-333730] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:28:43.771 [ERROR] [Dummy-333731] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:28:43.772 [ERROR] [Dummy-333731] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:29:43.768 [ERROR] [Dummy-333732] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:29:43.770 [ERROR] [Dummy-333732] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:30:43.770 [ERROR] [Dummy-333733] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:30:43.771 [ERROR] [Dummy-333733] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:31:43.770 [ERROR] [Dummy-333734] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:31:43.772 [ERROR] [Dummy-333734] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:32:43.773 [ERROR] [Dummy-333735] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:32:43.775 [ERROR] [Dummy-333735] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:33:43.772 [ERROR] [Dummy-333736] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:33:43.774 [ERROR] [Dummy-333736] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:34:58.833 [ERROR] [Dummy-333737] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9020
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:35:08.873 [ERROR] [Dummy-333737] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9020
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:35:08.880 [ERROR] [Dummy-333737] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 22, in index
    return render_template('index.html', state=mookodi.state)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 147, in render_template
    return _render(app, template, context)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 130, in _render
    rv = template.render(context)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1301, in render
    self.environment.handle_exception()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 936, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "/home/mookodi/development/mookodi-web/app/templates/index.html", line 1, in top-level template code
    {% extends "filament/base.html" %}
  File "/home/mookodi/development/filament/filament/templates/filament/base.html", line 36, in top-level template code
    {% block content %}{% endblock %}
  File "/home/mookodi/development/mookodi-web/app/templates/index.html", line 723, in block 'content'
    {{state.exposure_length/1000}}
jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'exposure_length'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:35:43.776 [ERROR] [Dummy-333738] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:35:43.778 [ERROR] [Dummy-333738] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:36:43.775 [ERROR] [Dummy-333739] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:36:43.777 [ERROR] [Dummy-333739] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:37:43.780 [ERROR] [Dummy-333740] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:37:43.781 [ERROR] [Dummy-333740] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:38:53.782 [ERROR] [Dummy-333741] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:38:53.783 [ERROR] [Dummy-333741] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:39:43.778 [ERROR] [Dummy-333742] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:39:43.779 [ERROR] [Dummy-333742] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:40:43.778 [ERROR] [Dummy-333743] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:40:43.779 [ERROR] [Dummy-333743] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:41:43.779 [ERROR] [Dummy-333744] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:41:43.780 [ERROR] [Dummy-333744] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:42:43.778 [ERROR] [Dummy-333745] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:42:43.780 [ERROR] [Dummy-333745] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:44:43.783 [ERROR] [Dummy-333746] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:44:43.784 [ERROR] [Dummy-333746] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:45:48.784 [ERROR] [Dummy-333747] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:45:48.786 [ERROR] [Dummy-333747] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:46:43.784 [ERROR] [Dummy-333748] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:46:43.785 [ERROR] [Dummy-333748] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:47:43.779 [ERROR] [Dummy-333749] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:47:43.780 [ERROR] [Dummy-333749] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:48:43.781 [ERROR] [Dummy-333750] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:48:43.783 [ERROR] [Dummy-333750] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:49:43.783 [ERROR] [Dummy-333751] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:49:43.784 [ERROR] [Dummy-333751] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:50:43.788 [ERROR] [Dummy-333752] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:50:43.789 [ERROR] [Dummy-333752] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:51:43.787 [ERROR] [Dummy-333753] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:51:43.789 [ERROR] [Dummy-333753] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:53:43.791 [ERROR] [Dummy-333754] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:53:43.793 [ERROR] [Dummy-333754] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:55:43.797 [ERROR] [Dummy-333755] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:55:43.798 [ERROR] [Dummy-333755] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:56:43.795 [ERROR] [Dummy-333756] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:56:43.796 [ERROR] [Dummy-333756] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:57:43.795 [ERROR] [Dummy-333757] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:57:43.797 [ERROR] [Dummy-333757] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:58:43.799 [ERROR] [Dummy-333758] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:58:43.800 [ERROR] [Dummy-333758] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T14:59:43.788 [ERROR] [Dummy-333759] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T14:59:43.789 [ERROR] [Dummy-333759] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:00:43.791 [ERROR] [Dummy-333760] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:00:43.792 [ERROR] [Dummy-333760] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:01:43.796 [ERROR] [Dummy-333761] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:01:43.798 [ERROR] [Dummy-333761] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:02:43.798 [ERROR] [Dummy-333762] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:02:43.799 [ERROR] [Dummy-333762] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:03:43.803 [ERROR] [Dummy-333763] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:03:43.804 [ERROR] [Dummy-333763] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:04:43.800 [ERROR] [Dummy-333764] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:04:43.802 [ERROR] [Dummy-333764] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:05:43.802 [ERROR] [Dummy-333765] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:05:43.804 [ERROR] [Dummy-333765] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:06:43.802 [ERROR] [Dummy-333766] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:06:43.804 [ERROR] [Dummy-333766] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:07:48.805 [ERROR] [Dummy-333767] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:07:48.807 [ERROR] [Dummy-333767] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:08:43.805 [ERROR] [Dummy-333768] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:08:43.807 [ERROR] [Dummy-333768] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:09:43.804 [ERROR] [Dummy-333769] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:09:43.806 [ERROR] [Dummy-333769] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:10:43.805 [ERROR] [Dummy-333770] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:10:43.807 [ERROR] [Dummy-333770] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:11:43.803 [ERROR] [Dummy-333771] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:11:43.804 [ERROR] [Dummy-333771] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:12:48.812 [ERROR] [Dummy-333772] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:12:48.813 [ERROR] [Dummy-333772] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:13:43.805 [ERROR] [Dummy-333773] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:13:43.807 [ERROR] [Dummy-333773] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:14:48.813 [ERROR] [Dummy-333774] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:14:48.815 [ERROR] [Dummy-333774] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:15:43.805 [ERROR] [Dummy-333775] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:15:43.807 [ERROR] [Dummy-333775] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:16:43.815 [ERROR] [Dummy-333776] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:16:43.816 [ERROR] [Dummy-333776] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:17:43.813 [ERROR] [Dummy-333777] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:17:43.815 [ERROR] [Dummy-333777] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:18:43.813 [ERROR] [Dummy-333778] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:18:43.814 [ERROR] [Dummy-333778] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:19:43.814 [ERROR] [Dummy-333779] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:19:43.815 [ERROR] [Dummy-333779] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:20:43.813 [ERROR] [Dummy-333780] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:20:43.815 [ERROR] [Dummy-333780] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:21:43.815 [ERROR] [Dummy-333781] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:21:43.816 [ERROR] [Dummy-333781] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:22:43.813 [ERROR] [Dummy-333782] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:22:43.815 [ERROR] [Dummy-333782] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:23:43.822 [ERROR] [Dummy-333783] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:23:43.824 [ERROR] [Dummy-333783] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:24:43.813 [ERROR] [Dummy-333784] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:24:43.814 [ERROR] [Dummy-333784] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:25:43.823 [ERROR] [Dummy-333785] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:25:43.824 [ERROR] [Dummy-333785] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:26:43.818 [ERROR] [Dummy-333786] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:26:43.819 [ERROR] [Dummy-333786] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:27:43.818 [ERROR] [Dummy-333787] [TSocket.py] [open()] failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution
2026-05-21T15:27:43.819 [ERROR] [Dummy-333787] [app.py] [log_exception()] Exception on / [GET]
Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 130, in open
    addrs = self._resolveAddr()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 37, in _resolveAddr
    return socket.getaddrinfo(self.host,
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_socketcommon.py", line 247, in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host, port, family, type, proto, flags)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/resolver/thread.py", line 63, in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo, args, kwargs)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/pool.py", line 161, in apply
    return self.spawn(func, *args, **kwds).get()
  File "src/gevent/event.py", line 329, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 359, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
  File "src/gevent/event.py", line 327, in gevent._gevent_cevent.AsyncResult._raise_exception
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/_compat.py", line 66, in reraise
    raise value.with_traceback(tb)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/gevent/threadpool.py", line 173, in __run_task
    thread_result.set(func(*args, **kwargs))
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 503, in open
    self.transport.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TTransport.py", line 273, in open
    return self.__trans.open()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/thrift-0.21.0-py3.8-linux-x86_64.egg/thrift/transport/TSocket.py", line 134, in open
    raise TTransportException(type=TTransportException.NOT_OPEN, message=msg, inner=gai)
thrift.transport.TTransport.TTransportException: failed to resolve sockaddr for mookodi.suth.saao.ac.za:9090

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 83, in state
    s = self.instrument.state()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 197, in state
    if not self.optomechanics.transport.isOpen():
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/instrument.py", line 172, in optomechanics
    self._connections.optomechanics = OptomechanicsConnection(
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 486, in __init__
    self.open()
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 505, in open
    raise ConnectionError(str(e))
mookodi.sdk.optomechanics.client.ConnectionError: <unprintable ConnectionError object>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 20, in index
    state = mookodi.state
  File "/home/mookodi/development/mookodi-web/app/__init__.py", line 85, in state
    print("Couldn't get state: ", e)
  File "/home/mookodi/development/mookodi-sdk/mookodi/sdk/optomechanics/client.py", line 472, in __str__
    return self.message
AttributeError: 'ConnectionError' object has no attribute 'message'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 2525, in wsgi_app
    response = self.full_dispatch_request()
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1822, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/app.py", line 1673, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/mookodi/development/mookodi-web/app/views.py", line 26, in mookodi_error
    return render_template('errors/mookodi.html', error=error)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 146, in render_template
    template = app.jinja_env.get_or_select_template(template_name_or_list)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1081, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 1010, in get_template
    return self._load_template(name, globals)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/environment.py", line 969, in _load_template
    template = self.loader.load(self, name, self.make_globals(globals))
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/jinja2/loaders.py", line 126, in load
    source, filename, uptodate = self.get_source(environment, name)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 62, in get_source
    return self._get_source_fast(environment, template)
  File "/opt/pyenvs/mookodienv/lib/python3.8/site-packages/flask/templating.py", line 98, in _get_source_fast
    raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: errors/mookodi.html
2026-05-21T15:34:48.349 [INFO] [Dummy-333788] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet OPEN data {'sid': 'tofvFHM2IlbRu73XABRv', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T15:34:48.381 [INFO] [Dummy-333788] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet MESSAGE data 0
2026-05-21T15:34:48.383 [INFO] [Dummy-333788] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data 0{"sid":"PjnWTYRisUqQw8SrABRw"}
2026-05-21T15:34:48.399 [INFO] [Dummy-333789] [socket.py] [handle_get_request()] tofvFHM2IlbRu73XABRv: Received request to upgrade to websocket
2026-05-21T15:35:13.371 [INFO] [Dummy-333790] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:35:13.394 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:35:38.396 [INFO] [Dummy-333792] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:35:38.418 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:36:03.420 [INFO] [Dummy-333794] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:36:03.440 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:36:28.443 [INFO] [Dummy-333795] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:36:28.463 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:36:53.465 [INFO] [Dummy-333796] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:36:53.488 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:37:18.490 [INFO] [Dummy-333797] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:37:18.513 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:37:43.516 [INFO] [Dummy-333798] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:37:43.538 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:38:08.540 [INFO] [Dummy-333799] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:38:08.558 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:38:33.561 [INFO] [Dummy-333800] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:38:33.632 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:38:58.635 [INFO] [Dummy-333801] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:38:58.661 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:39:23.664 [INFO] [Dummy-333802] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:39:23.698 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:39:48.700 [INFO] [Dummy-333803] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:39:48.722 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:40:13.725 [INFO] [Dummy-333804] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:40:13.743 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:40:38.746 [INFO] [Dummy-333805] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:40:38.779 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:41:03.782 [INFO] [Dummy-333806] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:41:04.066 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:41:29.069 [INFO] [Dummy-333807] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:41:29.359 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:41:54.361 [INFO] [Dummy-333808] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:41:54.386 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:42:19.389 [INFO] [Dummy-333809] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:42:19.412 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:42:44.414 [INFO] [Dummy-333810] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:42:44.438 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:43:09.440 [INFO] [Dummy-333811] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:43:09.464 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:43:34.466 [INFO] [Dummy-333812] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:43:34.497 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:43:59.500 [INFO] [Dummy-333813] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:43:59.526 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:44:24.528 [INFO] [Dummy-333814] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:44:24.556 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:44:49.559 [INFO] [Dummy-333815] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:44:49.581 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:45:14.583 [INFO] [Dummy-333816] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:45:14.608 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:45:39.610 [INFO] [Dummy-333817] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:45:39.631 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:46:04.633 [INFO] [Dummy-333818] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:46:04.661 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:46:29.664 [INFO] [Dummy-333819] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:46:29.709 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:46:54.711 [INFO] [Dummy-333820] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:46:54.730 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:47:10.256 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet MESSAGE data 2["data"]
2026-05-21T15:47:10.257 [INFO] [Dummy-333791] [server.py] [_handle_event()] received event "data" from PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:47:10.821 [INFO] [Dummy-333821] [server.py] [emit()] emitting event "data" to PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:47:10.822 [INFO] [Dummy-333821] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T15:47:10.822 [INFO] [Dummy-333821] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data <binary>
2026-05-21T15:47:19.731 [INFO] [Dummy-333822] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:47:19.750 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:47:44.752 [INFO] [Dummy-333823] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:47:44.771 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:48:09.774 [INFO] [Dummy-333824] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:48:09.854 [INFO] [Dummy-333793] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:48:34.856 [INFO] [Dummy-333825] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:48:34.882 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:48:40.233 [INFO] [Dummy-333791] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet MESSAGE data 2["data"]
2026-05-21T15:48:40.234 [INFO] [Dummy-333791] [server.py] [_handle_event()] received event "data" from PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:48:40.784 [INFO] [Dummy-333826] [server.py] [emit()] emitting event "data" to PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:48:40.784 [INFO] [Dummy-333826] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T15:48:40.784 [INFO] [Dummy-333826] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data <binary>
2026-05-21T15:48:59.884 [INFO] [Dummy-333827] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:48:59.916 [INFO] [Dummy-333828] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:49:24.918 [INFO] [Dummy-333829] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:49:24.937 [INFO] [Dummy-333830] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:49:49.938 [INFO] [Dummy-333831] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:49:49.963 [INFO] [Dummy-333828] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:50:10.227 [INFO] [Dummy-333828] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet MESSAGE data 2["data"]
2026-05-21T15:50:10.227 [INFO] [Dummy-333828] [server.py] [_handle_event()] received event "data" from PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:50:10.765 [INFO] [Dummy-333832] [server.py] [emit()] emitting event "data" to PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:50:10.765 [INFO] [Dummy-333832] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T15:50:10.765 [INFO] [Dummy-333832] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data <binary>
2026-05-21T15:50:14.203 [INFO] [Dummy-333828] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet MESSAGE data 2["data"]
2026-05-21T15:50:14.203 [INFO] [Dummy-333828] [server.py] [_handle_event()] received event "data" from PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:50:14.747 [INFO] [Dummy-333833] [server.py] [emit()] emitting event "data" to PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:50:14.747 [INFO] [Dummy-333833] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T15:50:14.747 [INFO] [Dummy-333833] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data <binary>
2026-05-21T15:50:15.086 [INFO] [Dummy-333834] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:50:15.948 [INFO] [Dummy-333830] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:50:20.292 [INFO] [Dummy-333830] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet MESSAGE data 2["data"]
2026-05-21T15:50:20.293 [INFO] [Dummy-333830] [server.py] [_handle_event()] received event "data" from PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:50:20.843 [INFO] [Dummy-333835] [server.py] [emit()] emitting event "data" to PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:50:20.843 [INFO] [Dummy-333835] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T15:50:20.843 [INFO] [Dummy-333835] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data <binary>
2026-05-21T15:50:32.235 [INFO] [Dummy-333830] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet MESSAGE data 2["data"]
2026-05-21T15:50:32.235 [INFO] [Dummy-333830] [server.py] [_handle_event()] received event "data" from PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:50:32.404 [INFO] [Dummy-333836] [server.py] [emit()] emitting event "data" to PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:50:32.404 [INFO] [Dummy-333836] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T15:50:32.404 [INFO] [Dummy-333836] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data <binary>
2026-05-21T15:50:40.951 [INFO] [Dummy-333837] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:50:40.993 [INFO] [Dummy-333828] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:51:05.995 [INFO] [Dummy-333838] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:51:06.033 [INFO] [Dummy-333830] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:51:18.212 [INFO] [Dummy-333830] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet MESSAGE data 2["data"]
2026-05-21T15:51:18.212 [INFO] [Dummy-333830] [server.py] [_handle_event()] received event "data" from PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:51:18.408 [INFO] [Dummy-333839] [server.py] [emit()] emitting event "data" to PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:51:18.408 [INFO] [Dummy-333839] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T15:51:18.408 [INFO] [Dummy-333839] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data <binary>
2026-05-21T15:51:31.036 [INFO] [Dummy-333840] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:51:31.073 [INFO] [Dummy-333828] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:51:32.205 [INFO] [Dummy-333828] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet MESSAGE data 2["data"]
2026-05-21T15:51:32.206 [INFO] [Dummy-333828] [server.py] [_handle_event()] received event "data" from PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:51:32.362 [INFO] [Dummy-333841] [server.py] [emit()] emitting event "data" to PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:51:32.363 [INFO] [Dummy-333841] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T15:51:32.363 [INFO] [Dummy-333841] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data <binary>
2026-05-21T15:51:36.228 [INFO] [Dummy-333828] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet MESSAGE data 2["data"]
2026-05-21T15:51:36.228 [INFO] [Dummy-333828] [server.py] [_handle_event()] received event "data" from PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:51:36.371 [INFO] [Dummy-333842] [server.py] [emit()] emitting event "data" to PjnWTYRisUqQw8SrABRw [/]
2026-05-21T15:51:36.371 [INFO] [Dummy-333842] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T15:51:36.371 [INFO] [Dummy-333842] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet MESSAGE data <binary>
2026-05-21T15:51:56.076 [INFO] [Dummy-333843] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:51:56.149 [INFO] [Dummy-333830] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:52:21.151 [INFO] [Dummy-333844] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:52:21.179 [INFO] [Dummy-333845] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:52:46.182 [INFO] [Dummy-333846] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:52:46.202 [INFO] [Dummy-333828] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:53:11.204 [INFO] [Dummy-333847] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:53:11.227 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:53:36.229 [INFO] [Dummy-333849] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:53:36.255 [INFO] [Dummy-333845] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:54:01.258 [INFO] [Dummy-333850] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:54:01.334 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:54:26.337 [INFO] [Dummy-333851] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:54:26.356 [INFO] [Dummy-333845] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:54:51.359 [INFO] [Dummy-333852] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:54:51.382 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:55:16.384 [INFO] [Dummy-333853] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:55:16.693 [INFO] [Dummy-333845] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:55:41.696 [INFO] [Dummy-333854] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:55:41.717 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:56:06.720 [INFO] [Dummy-333855] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:56:06.745 [INFO] [Dummy-333845] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:56:31.748 [INFO] [Dummy-333856] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:56:31.804 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:56:56.806 [INFO] [Dummy-333857] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:56:56.834 [INFO] [Dummy-333845] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:57:21.836 [INFO] [Dummy-333858] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:57:21.856 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:57:46.859 [INFO] [Dummy-333859] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:57:46.886 [INFO] [Dummy-333845] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:58:11.888 [INFO] [Dummy-333860] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:58:11.910 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:58:36.912 [INFO] [Dummy-333861] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:58:36.930 [INFO] [Dummy-333845] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:59:01.933 [INFO] [Dummy-333862] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:59:01.955 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:59:26.957 [INFO] [Dummy-333863] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:59:26.977 [INFO] [Dummy-333845] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T15:59:51.980 [INFO] [Dummy-333864] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T15:59:52.007 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:00:17.010 [INFO] [Dummy-333865] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:00:17.028 [INFO] [Dummy-333845] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:00:42.031 [INFO] [Dummy-333866] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:00:42.056 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:01:07.059 [INFO] [Dummy-333867] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:01:07.081 [INFO] [Dummy-333845] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:01:32.084 [INFO] [Dummy-333868] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:01:32.113 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:01:57.116 [INFO] [Dummy-333869] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:01:57.141 [INFO] [Dummy-333845] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:02:22.144 [INFO] [Dummy-333870] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:02:22.170 [INFO] [Dummy-333845] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:02:47.173 [INFO] [Dummy-333871] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:02:47.200 [INFO] [Dummy-333872] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:03:12.202 [INFO] [Dummy-333873] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:03:12.235 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:03:37.238 [INFO] [Dummy-333874] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:03:37.612 [INFO] [Dummy-333875] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:04:02.614 [INFO] [Dummy-333876] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:04:02.696 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:04:27.698 [INFO] [Dummy-333877] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:04:27.718 [INFO] [Dummy-333875] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:04:52.721 [INFO] [Dummy-333878] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:04:52.748 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:05:17.750 [INFO] [Dummy-333879] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:05:17.779 [INFO] [Dummy-333875] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:05:42.781 [INFO] [Dummy-333880] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:05:43.073 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:06:08.076 [INFO] [Dummy-333881] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:06:08.139 [INFO] [Dummy-333875] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:06:33.141 [INFO] [Dummy-333882] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:06:33.166 [INFO] [Dummy-333883] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:06:58.168 [INFO] [Dummy-333884] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:06:58.186 [INFO] [Dummy-333848] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:07:23.188 [INFO] [Dummy-333885] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:07:23.215 [INFO] [Dummy-333886] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:07:48.217 [INFO] [Dummy-333887] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:07:48.238 [INFO] [Dummy-333883] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:08:13.241 [INFO] [Dummy-333888] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:08:13.272 [INFO] [Dummy-333886] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:08:38.274 [INFO] [Dummy-333889] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:08:38.303 [INFO] [Dummy-333883] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:09:03.305 [INFO] [Dummy-333890] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:09:03.333 [INFO] [Dummy-333886] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:09:28.336 [INFO] [Dummy-333891] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:09:28.356 [INFO] [Dummy-333883] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:09:53.358 [INFO] [Dummy-333892] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:09:53.385 [INFO] [Dummy-333886] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:10:18.387 [INFO] [Dummy-333893] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:10:18.408 [INFO] [Dummy-333883] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:10:43.411 [INFO] [Dummy-333894] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:10:43.439 [INFO] [Dummy-333886] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:11:08.440 [INFO] [Dummy-333895] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:11:08.466 [INFO] [Dummy-333883] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:11:33.470 [INFO] [Dummy-333896] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:11:33.495 [INFO] [Dummy-333886] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:11:58.496 [INFO] [Dummy-333897] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:11:58.559 [INFO] [Dummy-333883] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:12:23.563 [INFO] [Dummy-333898] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:12:23.582 [INFO] [Dummy-333886] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:12:48.585 [INFO] [Dummy-333899] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:12:48.630 [INFO] [Dummy-333883] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:13:13.633 [INFO] [Dummy-333900] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:13:13.654 [INFO] [Dummy-333886] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:13:38.656 [INFO] [Dummy-333901] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:13:38.676 [INFO] [Dummy-333883] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:14:03.679 [INFO] [Dummy-333902] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:14:03.708 [INFO] [Dummy-333886] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:14:28.710 [INFO] [Dummy-333903] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:14:28.777 [INFO] [Dummy-333883] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:14:53.780 [INFO] [Dummy-333904] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:14:53.807 [INFO] [Dummy-333886] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:15:18.809 [INFO] [Dummy-333905] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:15:18.837 [INFO] [Dummy-333883] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:15:43.840 [INFO] [Dummy-333906] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:15:43.871 [INFO] [Dummy-333886] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:16:08.874 [INFO] [Dummy-333907] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:16:08.899 [INFO] [Dummy-333883] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:16:33.901 [INFO] [Dummy-333908] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:16:33.933 [INFO] [Dummy-333886] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:16:58.936 [INFO] [Dummy-333909] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:16:58.967 [INFO] [Dummy-333883] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:17:23.969 [INFO] [Dummy-333910] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:17:24.001 [INFO] [Dummy-333886] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:17:49.004 [INFO] [Dummy-333911] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:17:49.052 [INFO] [Dummy-333883] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:18:14.056 [INFO] [Dummy-333912] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:18:14.152 [INFO] [Dummy-333886] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:18:39.155 [INFO] [Dummy-333913] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:18:39.176 [INFO] [Dummy-333886] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:19:04.178 [INFO] [Dummy-333914] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:19:04.220 [INFO] [Dummy-333915] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:19:29.223 [INFO] [Dummy-333916] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:19:29.244 [INFO] [Dummy-333917] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:19:54.246 [INFO] [Dummy-333918] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:19:54.272 [INFO] [Dummy-333915] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:20:19.274 [INFO] [Dummy-333919] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:20:19.304 [INFO] [Dummy-333917] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:20:44.306 [INFO] [Dummy-333920] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:20:44.331 [INFO] [Dummy-333915] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:21:09.334 [INFO] [Dummy-333921] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:21:09.376 [INFO] [Dummy-333917] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:21:34.378 [INFO] [Dummy-333922] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:21:34.406 [INFO] [Dummy-333915] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:21:59.409 [INFO] [Dummy-333923] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:21:59.428 [INFO] [Dummy-333917] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:22:24.431 [INFO] [Dummy-333924] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:22:24.458 [INFO] [Dummy-333915] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:22:49.461 [INFO] [Dummy-333925] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:22:49.489 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:23:14.491 [INFO] [Dummy-333927] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:23:14.522 [INFO] [Dummy-333915] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:23:39.525 [INFO] [Dummy-333928] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:23:39.551 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:24:04.554 [INFO] [Dummy-333929] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:24:04.892 [INFO] [Dummy-333915] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:24:29.895 [INFO] [Dummy-333930] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:24:29.978 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:24:54.980 [INFO] [Dummy-333931] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:24:55.003 [INFO] [Dummy-333915] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:25:20.006 [INFO] [Dummy-333932] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:25:20.034 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:25:45.038 [INFO] [Dummy-333933] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:25:45.069 [INFO] [Dummy-333915] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:26:10.072 [INFO] [Dummy-333934] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:26:10.091 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:26:35.095 [INFO] [Dummy-333935] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:26:35.116 [INFO] [Dummy-333915] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:27:00.119 [INFO] [Dummy-333936] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:27:00.141 [INFO] [Dummy-333915] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:27:25.146 [INFO] [Dummy-333937] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:27:25.183 [INFO] [Dummy-333938] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:27:50.185 [INFO] [Dummy-333939] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:27:50.211 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:28:15.214 [INFO] [Dummy-333940] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:28:15.260 [INFO] [Dummy-333938] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:28:40.261 [INFO] [Dummy-333941] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:28:40.288 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:29:05.291 [INFO] [Dummy-333942] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:29:05.314 [INFO] [Dummy-333938] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:29:30.315 [INFO] [Dummy-333943] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:29:30.340 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:29:55.343 [INFO] [Dummy-333944] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:29:55.366 [INFO] [Dummy-333938] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:30:20.368 [INFO] [Dummy-333945] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:30:20.388 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:30:45.392 [INFO] [Dummy-333946] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:30:45.425 [INFO] [Dummy-333938] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:31:10.428 [INFO] [Dummy-333947] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:31:10.448 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:31:35.450 [INFO] [Dummy-333948] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:31:35.471 [INFO] [Dummy-333938] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:32:00.474 [INFO] [Dummy-333949] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:32:00.544 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:32:25.547 [INFO] [Dummy-333950] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:32:25.578 [INFO] [Dummy-333938] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:32:50.581 [INFO] [Dummy-333951] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:32:50.722 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:33:15.724 [INFO] [Dummy-333952] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:33:15.749 [INFO] [Dummy-333938] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:33:40.751 [INFO] [Dummy-333953] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:33:40.897 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:34:05.900 [INFO] [Dummy-333954] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:34:05.918 [INFO] [Dummy-333938] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:34:30.919 [INFO] [Dummy-333955] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:34:30.949 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:34:55.951 [INFO] [Dummy-333956] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:34:56.059 [INFO] [Dummy-333938] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:35:21.061 [INFO] [Dummy-333957] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:35:21.095 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:35:46.097 [INFO] [Dummy-333958] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:35:46.127 [INFO] [Dummy-333938] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:36:11.129 [INFO] [Dummy-333959] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:36:11.157 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:36:36.159 [INFO] [Dummy-333960] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:36:36.178 [INFO] [Dummy-333938] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:37:01.181 [INFO] [Dummy-333961] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:37:01.213 [INFO] [Dummy-333962] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:37:26.216 [INFO] [Dummy-333963] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:37:26.241 [INFO] [Dummy-333926] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:37:51.243 [INFO] [Dummy-333964] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:37:51.271 [INFO] [Dummy-333965] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:38:16.273 [INFO] [Dummy-333966] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:38:16.297 [INFO] [Dummy-333962] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:38:41.298 [INFO] [Dummy-333967] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:38:41.323 [INFO] [Dummy-333965] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:39:06.326 [INFO] [Dummy-333968] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:39:06.419 [INFO] [Dummy-333962] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:39:31.421 [INFO] [Dummy-333969] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:39:31.449 [INFO] [Dummy-333965] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:39:56.451 [INFO] [Dummy-333970] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:39:56.510 [INFO] [Dummy-333962] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:40:21.512 [INFO] [Dummy-333971] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:40:21.534 [INFO] [Dummy-333965] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:40:46.536 [INFO] [Dummy-333972] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:40:46.557 [INFO] [Dummy-333962] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:41:11.559 [INFO] [Dummy-333973] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:41:11.579 [INFO] [Dummy-333965] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:41:36.581 [INFO] [Dummy-333974] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:41:36.600 [INFO] [Dummy-333962] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:42:01.602 [INFO] [Dummy-333975] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:42:01.654 [INFO] [Dummy-333965] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:42:26.657 [INFO] [Dummy-333976] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:42:26.681 [INFO] [Dummy-333962] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:42:51.682 [INFO] [Dummy-333977] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:42:51.718 [INFO] [Dummy-333965] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:43:16.721 [INFO] [Dummy-333978] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:43:16.746 [INFO] [Dummy-333962] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:43:41.748 [INFO] [Dummy-333979] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:43:41.768 [INFO] [Dummy-333965] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:44:06.770 [INFO] [Dummy-333980] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:44:06.797 [INFO] [Dummy-333962] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:44:31.800 [INFO] [Dummy-333981] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:44:31.830 [INFO] [Dummy-333965] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:44:56.833 [INFO] [Dummy-333982] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:44:56.866 [INFO] [Dummy-333962] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:45:21.870 [INFO] [Dummy-333983] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:45:21.908 [INFO] [Dummy-333965] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:45:46.911 [INFO] [Dummy-333984] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:45:46.943 [INFO] [Dummy-333962] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:46:11.945 [INFO] [Dummy-333985] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:46:12.051 [INFO] [Dummy-333965] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:46:37.054 [INFO] [Dummy-333986] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:46:37.088 [INFO] [Dummy-333962] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:47:02.090 [INFO] [Dummy-333987] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:47:02.114 [INFO] [Dummy-333965] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:47:27.116 [INFO] [Dummy-333988] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:47:27.186 [INFO] [Dummy-333962] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:47:52.187 [INFO] [Dummy-333989] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:47:52.210 [INFO] [Dummy-333965] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:48:17.212 [INFO] [Dummy-333990] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:48:17.243 [INFO] [Dummy-333991] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:48:42.244 [INFO] [Dummy-333992] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:48:42.268 [INFO] [Dummy-333991] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:49:07.272 [INFO] [Dummy-333993] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:49:07.297 [INFO] [Dummy-333994] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:49:32.299 [INFO] [Dummy-333995] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:49:32.317 [INFO] [Dummy-333996] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:49:57.319 [INFO] [Dummy-333997] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:49:57.350 [INFO] [Dummy-333994] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:50:22.352 [INFO] [Dummy-333998] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:50:22.372 [INFO] [Dummy-333996] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:50:47.375 [INFO] [Dummy-333999] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:50:47.397 [INFO] [Dummy-333994] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:51:12.399 [INFO] [Dummy-334000] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:51:12.426 [INFO] [Dummy-333996] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:51:37.429 [INFO] [Dummy-334001] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:51:37.451 [INFO] [Dummy-333994] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:52:02.453 [INFO] [Dummy-334002] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:52:02.538 [INFO] [Dummy-333996] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:52:27.541 [INFO] [Dummy-334003] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:52:27.933 [INFO] [Dummy-333994] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:52:52.936 [INFO] [Dummy-334004] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:52:52.963 [INFO] [Dummy-333996] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:53:17.965 [INFO] [Dummy-334005] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:53:18.107 [INFO] [Dummy-333994] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:53:43.109 [INFO] [Dummy-334006] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:53:43.207 [INFO] [Dummy-333996] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:54:08.210 [INFO] [Dummy-334007] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:54:08.238 [INFO] [Dummy-333994] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:54:33.240 [INFO] [Dummy-334008] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:54:33.261 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:54:58.263 [INFO] [Dummy-334010] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:54:58.288 [INFO] [Dummy-333996] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:55:23.291 [INFO] [Dummy-334011] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:55:23.312 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:55:48.314 [INFO] [Dummy-334012] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:55:48.339 [INFO] [Dummy-333996] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:56:13.341 [INFO] [Dummy-334013] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:56:13.364 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:56:38.367 [INFO] [Dummy-334014] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:56:38.396 [INFO] [Dummy-333996] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:57:03.398 [INFO] [Dummy-334015] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:57:03.424 [INFO] [Dummy-334016] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:57:28.426 [INFO] [Dummy-334017] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:57:28.490 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:57:53.493 [INFO] [Dummy-334018] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:57:53.520 [INFO] [Dummy-334016] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:58:18.521 [INFO] [Dummy-334019] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:58:18.549 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:58:43.552 [INFO] [Dummy-334020] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:58:43.642 [INFO] [Dummy-334016] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:59:08.645 [INFO] [Dummy-334021] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:59:08.664 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:59:33.668 [INFO] [Dummy-334022] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:59:33.692 [INFO] [Dummy-334016] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T16:59:58.694 [INFO] [Dummy-334023] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T16:59:58.726 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:00:23.729 [INFO] [Dummy-334024] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:00:23.755 [INFO] [Dummy-334016] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:00:48.757 [INFO] [Dummy-334025] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:00:48.780 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:01:13.782 [INFO] [Dummy-334026] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:01:13.800 [INFO] [Dummy-334016] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:01:38.803 [INFO] [Dummy-334027] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:01:38.851 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:02:03.854 [INFO] [Dummy-334028] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:02:03.873 [INFO] [Dummy-334016] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:02:28.876 [INFO] [Dummy-334029] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:02:28.933 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:02:53.936 [INFO] [Dummy-334030] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:02:53.955 [INFO] [Dummy-334016] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:03:18.958 [INFO] [Dummy-334031] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:03:18.985 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:03:43.988 [INFO] [Dummy-334032] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:03:44.010 [INFO] [Dummy-334016] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:04:09.012 [INFO] [Dummy-334033] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:04:09.034 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:04:34.036 [INFO] [Dummy-334034] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:04:34.065 [INFO] [Dummy-334016] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:04:59.068 [INFO] [Dummy-334035] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:04:59.094 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:05:24.097 [INFO] [Dummy-334036] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:05:24.122 [INFO] [Dummy-334016] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:05:49.125 [INFO] [Dummy-334037] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:05:49.153 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:06:14.156 [INFO] [Dummy-334038] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:06:14.213 [INFO] [Dummy-334016] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:06:39.216 [INFO] [Dummy-334039] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:06:39.236 [INFO] [Dummy-334040] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:07:04.238 [INFO] [Dummy-334041] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:07:04.269 [INFO] [Dummy-334040] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:07:29.271 [INFO] [Dummy-334042] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:07:29.295 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:07:54.297 [INFO] [Dummy-334043] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:07:54.322 [INFO] [Dummy-334040] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:08:19.325 [INFO] [Dummy-334044] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:08:19.445 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:08:44.448 [INFO] [Dummy-334045] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:08:44.474 [INFO] [Dummy-334040] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:09:09.477 [INFO] [Dummy-334046] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:09:09.506 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:09:34.507 [INFO] [Dummy-334047] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:09:34.530 [INFO] [Dummy-334040] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:09:59.533 [INFO] [Dummy-334048] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:09:59.552 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:10:24.555 [INFO] [Dummy-334049] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:10:24.578 [INFO] [Dummy-334040] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:10:49.581 [INFO] [Dummy-334050] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:10:49.667 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:11:14.670 [INFO] [Dummy-334051] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:11:14.691 [INFO] [Dummy-334040] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:11:39.693 [INFO] [Dummy-334052] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:11:39.721 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:12:04.724 [INFO] [Dummy-334053] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:12:04.757 [INFO] [Dummy-334040] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:12:29.759 [INFO] [Dummy-334054] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:12:29.778 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:12:54.781 [INFO] [Dummy-334055] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:12:54.806 [INFO] [Dummy-334040] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:13:19.808 [INFO] [Dummy-334056] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:13:19.839 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:13:44.842 [INFO] [Dummy-334057] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:13:44.870 [INFO] [Dummy-334040] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:14:09.872 [INFO] [Dummy-334058] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:14:09.891 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:14:34.893 [INFO] [Dummy-334059] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:14:34.929 [INFO] [Dummy-334040] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:14:59.931 [INFO] [Dummy-334060] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:15:00.040 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:15:25.043 [INFO] [Dummy-334061] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:15:25.136 [INFO] [Dummy-334040] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:15:50.138 [INFO] [Dummy-334062] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:15:50.159 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:16:15.162 [INFO] [Dummy-334063] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:16:15.180 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:16:40.183 [INFO] [Dummy-334064] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:16:40.206 [INFO] [Dummy-334040] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:17:05.209 [INFO] [Dummy-334065] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:17:05.237 [INFO] [Dummy-334040] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:17:30.239 [INFO] [Dummy-334066] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:17:30.262 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:17:55.264 [INFO] [Dummy-334067] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:17:55.664 [INFO] [Dummy-334068] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:18:20.667 [INFO] [Dummy-334069] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:18:20.696 [INFO] [Dummy-334009] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:18:45.698 [INFO] [Dummy-334070] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:18:45.729 [INFO] [Dummy-334068] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:19:10.732 [INFO] [Dummy-334071] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:19:10.823 [INFO] [Dummy-334072] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:19:35.827 [INFO] [Dummy-334073] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:19:35.848 [INFO] [Dummy-334074] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:20:00.852 [INFO] [Dummy-334075] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:20:00.877 [INFO] [Dummy-334072] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:20:25.880 [INFO] [Dummy-334076] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:20:25.907 [INFO] [Dummy-334074] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:20:50.910 [INFO] [Dummy-334077] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:20:50.932 [INFO] [Dummy-334072] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:21:15.936 [INFO] [Dummy-334078] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:21:15.962 [INFO] [Dummy-334074] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:21:40.964 [INFO] [Dummy-334079] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:21:40.990 [INFO] [Dummy-334072] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:22:05.992 [INFO] [Dummy-334080] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:22:06.014 [INFO] [Dummy-334074] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:22:31.016 [INFO] [Dummy-334081] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:22:31.049 [INFO] [Dummy-334072] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:22:56.052 [INFO] [Dummy-334082] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:22:56.119 [INFO] [Dummy-334074] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:23:21.122 [INFO] [Dummy-334083] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:23:21.141 [INFO] [Dummy-334072] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:23:46.143 [INFO] [Dummy-334084] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:23:46.175 [INFO] [Dummy-334074] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:24:11.177 [INFO] [Dummy-334085] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:24:11.267 [INFO] [Dummy-334086] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:24:36.269 [INFO] [Dummy-334087] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:24:36.289 [INFO] [Dummy-334072] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:25:01.291 [INFO] [Dummy-334088] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:25:01.354 [INFO] [Dummy-334086] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:25:26.357 [INFO] [Dummy-334089] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:25:26.379 [INFO] [Dummy-334072] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:25:51.383 [INFO] [Dummy-334090] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:25:51.735 [INFO] [Dummy-334086] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:26:16.738 [INFO] [Dummy-334091] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:26:16.815 [INFO] [Dummy-334072] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:26:41.817 [INFO] [Dummy-334092] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:26:41.840 [INFO] [Dummy-334086] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:27:06.842 [INFO] [Dummy-334093] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:27:06.866 [INFO] [Dummy-334072] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:27:31.868 [INFO] [Dummy-334094] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:27:31.887 [INFO] [Dummy-334086] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:27:56.890 [INFO] [Dummy-334095] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:27:56.916 [INFO] [Dummy-334072] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:28:21.919 [INFO] [Dummy-334096] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:28:21.955 [INFO] [Dummy-334086] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:28:46.957 [INFO] [Dummy-334097] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:28:46.989 [INFO] [Dummy-334072] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:29:11.991 [INFO] [Dummy-334098] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:29:12.022 [INFO] [Dummy-334086] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:29:37.025 [INFO] [Dummy-334099] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:29:37.056 [INFO] [Dummy-334072] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:30:02.059 [INFO] [Dummy-334100] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:30:02.077 [INFO] [Dummy-334086] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:30:27.080 [INFO] [Dummy-334101] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:30:27.100 [INFO] [Dummy-334072] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:30:52.103 [INFO] [Dummy-334102] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:30:52.127 [INFO] [Dummy-334086] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:31:17.129 [INFO] [Dummy-334103] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:31:17.147 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:31:42.148 [INFO] [Dummy-334105] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:31:42.174 [INFO] [Dummy-334072] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:32:07.176 [INFO] [Dummy-334106] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:32:07.200 [INFO] [Dummy-334107] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:32:32.201 [INFO] [Dummy-334108] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:32:32.219 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:32:57.221 [INFO] [Dummy-334109] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:32:57.250 [INFO] [Dummy-334107] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:33:22.251 [INFO] [Dummy-334110] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:33:22.285 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:33:47.287 [INFO] [Dummy-334111] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:33:47.314 [INFO] [Dummy-334107] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:34:12.316 [INFO] [Dummy-334112] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:34:12.338 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:34:37.341 [INFO] [Dummy-334113] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:34:37.361 [INFO] [Dummy-334107] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:35:02.363 [INFO] [Dummy-334114] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:35:02.395 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:35:27.398 [INFO] [Dummy-334115] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:35:27.420 [INFO] [Dummy-334107] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:35:52.421 [INFO] [Dummy-334116] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:35:52.441 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:36:17.444 [INFO] [Dummy-334117] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:36:17.464 [INFO] [Dummy-334107] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:36:42.466 [INFO] [Dummy-334118] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:36:42.497 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:37:07.500 [INFO] [Dummy-334119] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:37:07.524 [INFO] [Dummy-334107] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:37:32.527 [INFO] [Dummy-334120] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:37:32.566 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:37:57.569 [INFO] [Dummy-334121] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:37:57.589 [INFO] [Dummy-334107] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:38:22.592 [INFO] [Dummy-334122] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:38:22.614 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:38:47.617 [INFO] [Dummy-334123] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:38:47.643 [INFO] [Dummy-334107] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:39:12.646 [INFO] [Dummy-334124] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:39:12.668 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:39:37.671 [INFO] [Dummy-334125] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:39:37.694 [INFO] [Dummy-334107] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:40:02.696 [INFO] [Dummy-334126] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:40:02.722 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:40:27.725 [INFO] [Dummy-334127] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:40:27.774 [INFO] [Dummy-334107] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:40:52.776 [INFO] [Dummy-334128] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:40:53.085 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:41:18.088 [INFO] [Dummy-334129] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:41:18.109 [INFO] [Dummy-334107] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:41:43.110 [INFO] [Dummy-334130] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:41:43.129 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:42:08.130 [INFO] [Dummy-334131] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:42:08.153 [INFO] [Dummy-334107] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:42:33.156 [INFO] [Dummy-334132] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:42:33.179 [INFO] [Dummy-334133] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:42:58.181 [INFO] [Dummy-334134] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:42:58.205 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:43:23.207 [INFO] [Dummy-334135] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:43:23.239 [INFO] [Dummy-334133] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:43:48.240 [INFO] [Dummy-334136] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:43:48.267 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:44:13.269 [INFO] [Dummy-334137] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:44:13.364 [INFO] [Dummy-334133] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:44:38.366 [INFO] [Dummy-334138] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:44:38.465 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:45:03.467 [INFO] [Dummy-334139] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:45:03.492 [INFO] [Dummy-334133] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:45:28.493 [INFO] [Dummy-334140] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:45:28.524 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:45:53.528 [INFO] [Dummy-334141] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:45:53.610 [INFO] [Dummy-334133] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:46:18.611 [INFO] [Dummy-334142] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:46:18.638 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:46:43.639 [INFO] [Dummy-334143] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:46:43.689 [INFO] [Dummy-334133] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:47:08.691 [INFO] [Dummy-334144] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:47:08.976 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:47:33.979 [INFO] [Dummy-334145] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:47:34.027 [INFO] [Dummy-334133] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:47:59.029 [INFO] [Dummy-334146] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:47:59.052 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:48:24.054 [INFO] [Dummy-334147] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:48:24.081 [INFO] [Dummy-334133] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:48:49.083 [INFO] [Dummy-334148] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:48:49.103 [INFO] [Dummy-334104] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:49:14.106 [INFO] [Dummy-334149] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:49:14.139 [INFO] [Dummy-334150] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:49:39.141 [INFO] [Dummy-334151] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:49:39.166 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:49:59.726 [INFO] [Dummy-334153] [socket.py] [send()] me0PSi8ep6NWH9sfABRx: Sending packet OPEN data {'sid': 'me0PSi8ep6NWH9sfABRx', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T17:50:04.168 [INFO] [Dummy-334154] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:50:04.190 [INFO] [Dummy-334155] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:50:24.728 [INFO] [Dummy-334156] [socket.py] [send()] me0PSi8ep6NWH9sfABRx: Sending packet PING data None
2026-05-21T17:50:29.192 [INFO] [Dummy-334157] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:50:29.214 [INFO] [Dummy-334158] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:50:54.216 [INFO] [Dummy-334159] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:50:54.234 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:50:56.523 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] me0PSi8ep6NWH9sfABRx: Client is gone, closing socket
2026-05-21T17:50:56.524 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] me0PSi8ep6NWH9sfABRx: Client is gone, closing socket
2026-05-21T17:51:19.237 [INFO] [Dummy-334160] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:51:19.264 [INFO] [Dummy-334158] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:51:44.266 [INFO] [Dummy-334161] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:51:44.290 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:52:09.292 [INFO] [Dummy-334162] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:52:09.322 [INFO] [Dummy-334158] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:52:34.325 [INFO] [Dummy-334163] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:52:34.354 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:52:59.356 [INFO] [Dummy-334164] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:52:59.380 [INFO] [Dummy-334158] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:53:24.383 [INFO] [Dummy-334165] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:53:24.409 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:53:49.411 [INFO] [Dummy-334166] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:53:49.481 [INFO] [Dummy-334158] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:54:14.483 [INFO] [Dummy-334167] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:54:14.564 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:54:39.568 [INFO] [Dummy-334168] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:54:39.594 [INFO] [Dummy-334158] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:55:04.597 [INFO] [Dummy-334169] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:55:04.630 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:55:29.632 [INFO] [Dummy-334170] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:55:29.734 [INFO] [Dummy-334158] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:55:34.062 [INFO] [Dummy-334171] [socket.py] [send()] xOupxhC36Q3Mgo56ABRy: Sending packet OPEN data {'sid': 'xOupxhC36Q3Mgo56ABRy', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T17:55:34.327 [INFO] [Dummy-334171] [socket.py] [receive()] xOupxhC36Q3Mgo56ABRy: Received packet MESSAGE data 0
2026-05-21T17:55:34.329 [INFO] [Dummy-334171] [socket.py] [send()] xOupxhC36Q3Mgo56ABRy: Sending packet MESSAGE data 0{"sid":"3OeJx4v49BquY1vtABRz"}
2026-05-21T17:55:34.356 [INFO] [Dummy-334172] [socket.py] [handle_get_request()] xOupxhC36Q3Mgo56ABRy: Received request to upgrade to websocket
2026-05-21T17:55:54.736 [INFO] [Dummy-334173] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:55:54.813 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:55:59.064 [INFO] [Dummy-334174] [socket.py] [send()] xOupxhC36Q3Mgo56ABRy: Sending packet PING data None
2026-05-21T17:56:19.815 [INFO] [Dummy-334175] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:56:19.837 [INFO] [Dummy-334158] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:56:22.533 [INFO] [Dummy-334176] [socket.py] [receive()] xOupxhC36Q3Mgo56ABRy: Received packet CLOSE data 
2026-05-21T17:56:23.505 [INFO] [Dummy-334176] [socket.py] [send()] 44VFIa-cZbi7c-fAABR0: Sending packet OPEN data {'sid': '44VFIa-cZbi7c-fAABR0', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T17:56:23.535 [INFO] [Dummy-334176] [socket.py] [receive()] 44VFIa-cZbi7c-fAABR0: Received packet MESSAGE data 0
2026-05-21T17:56:23.536 [INFO] [Dummy-334176] [socket.py] [send()] 44VFIa-cZbi7c-fAABR0: Sending packet MESSAGE data 0{"sid":"jAgNPkSdzNErAkDOABR1"}
2026-05-21T17:56:23.555 [INFO] [Dummy-334177] [socket.py] [handle_get_request()] 44VFIa-cZbi7c-fAABR0: Received request to upgrade to websocket
2026-05-21T17:56:44.840 [INFO] [Dummy-334178] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:56:44.866 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:56:48.508 [INFO] [Dummy-334179] [socket.py] [send()] 44VFIa-cZbi7c-fAABR0: Sending packet PING data None
2026-05-21T17:57:09.869 [INFO] [Dummy-334180] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:57:09.894 [INFO] [Dummy-334158] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:57:16.560 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 44VFIa-cZbi7c-fAABR0: Client is gone, closing socket
2026-05-21T17:57:16.562 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 44VFIa-cZbi7c-fAABR0: Client is gone, closing socket
2026-05-21T17:57:34.896 [INFO] [Dummy-334181] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:57:34.928 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:57:59.931 [INFO] [Dummy-334182] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:57:59.960 [INFO] [Dummy-334158] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:58:24.963 [INFO] [Dummy-334183] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:58:24.999 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:58:50.002 [INFO] [Dummy-334184] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:58:50.025 [INFO] [Dummy-334158] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:59:15.027 [INFO] [Dummy-334185] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:59:15.051 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T17:59:40.054 [INFO] [Dummy-334186] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T17:59:40.075 [INFO] [Dummy-334158] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T18:00:05.078 [INFO] [Dummy-334187] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T18:00:05.099 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T18:00:30.101 [INFO] [Dummy-334188] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T18:00:30.122 [INFO] [Dummy-334158] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T18:00:55.123 [INFO] [Dummy-334189] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T18:00:55.141 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T18:01:20.142 [INFO] [Dummy-334190] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T18:01:20.162 [INFO] [Dummy-334158] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T18:01:37.467 [INFO] [Dummy-334191] [base_server.py] [_log_error_once()] Invalid session 44VFIa-cZbi7c-fAABR0
2026-05-21T18:01:39.438 [INFO] [Dummy-334191] [socket.py] [send()] MdYTGUC5zFPxDKVJABR2: Sending packet OPEN data {'sid': 'MdYTGUC5zFPxDKVJABR2', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T18:01:39.461 [INFO] [Dummy-334191] [socket.py] [receive()] MdYTGUC5zFPxDKVJABR2: Received packet MESSAGE data 0
2026-05-21T18:01:39.461 [INFO] [Dummy-334191] [socket.py] [send()] MdYTGUC5zFPxDKVJABR2: Sending packet MESSAGE data 0{"sid":"1FgeB9Dma1vIIhYDABR3"}
2026-05-21T18:01:39.476 [INFO] [Dummy-334192] [socket.py] [handle_get_request()] MdYTGUC5zFPxDKVJABR2: Received request to upgrade to websocket
2026-05-21T18:01:45.163 [INFO] [Dummy-334193] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T18:01:45.191 [INFO] [Dummy-334194] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T18:02:04.440 [INFO] [Dummy-334195] [socket.py] [send()] MdYTGUC5zFPxDKVJABR2: Sending packet PING data None
2026-05-21T18:02:10.192 [INFO] [Dummy-334196] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T18:02:10.478 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T18:02:35.480 [INFO] [Dummy-334197] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T18:02:35.504 [INFO] [Dummy-334194] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T18:02:36.586 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] MdYTGUC5zFPxDKVJABR2: Client is gone, closing socket
2026-05-21T18:02:36.587 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] MdYTGUC5zFPxDKVJABR2: Client is gone, closing socket
2026-05-21T18:03:00.505 [INFO] [Dummy-334198] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T18:03:00.522 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T18:03:25.523 [INFO] [Dummy-334199] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T18:03:25.546 [INFO] [Dummy-334194] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T18:03:50.546 [INFO] [Dummy-334200] [socket.py] [send()] tofvFHM2IlbRu73XABRv: Sending packet PING data None
2026-05-21T18:03:50.567 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet PONG data 
2026-05-21T18:04:00.836 [INFO] [Dummy-334152] [socket.py] [receive()] tofvFHM2IlbRu73XABRv: Received packet CLOSE data 
2026-05-21T18:09:09.869 [INFO] [Dummy-334201] [socket.py] [send()] DMjVLz559OYoBkgwABR4: Sending packet OPEN data {'sid': 'DMjVLz559OYoBkgwABR4', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T18:09:09.968 [INFO] [Dummy-334201] [socket.py] [receive()] DMjVLz559OYoBkgwABR4: Received packet MESSAGE data 0
2026-05-21T18:09:09.969 [INFO] [Dummy-334201] [socket.py] [send()] DMjVLz559OYoBkgwABR4: Sending packet MESSAGE data 0{"sid":"GHDKjgEjnRZNSVzvABR5"}
2026-05-21T18:09:09.986 [INFO] [Dummy-334202] [socket.py] [handle_get_request()] DMjVLz559OYoBkgwABR4: Received request to upgrade to websocket
2026-05-21T18:09:34.870 [INFO] [Dummy-334203] [socket.py] [send()] DMjVLz559OYoBkgwABR4: Sending packet PING data None
2026-05-21T18:10:06.612 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] DMjVLz559OYoBkgwABR4: Client is gone, closing socket
2026-05-21T18:10:06.614 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] DMjVLz559OYoBkgwABR4: Client is gone, closing socket
2026-05-21T18:20:32.390 [INFO] [Dummy-334204] [socket.py] [send()] zMuJZXfzq-w4gQZgABR6: Sending packet OPEN data {'sid': 'zMuJZXfzq-w4gQZgABR6', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T18:20:32.410 [INFO] [Dummy-334204] [socket.py] [receive()] zMuJZXfzq-w4gQZgABR6: Received packet MESSAGE data 0
2026-05-21T18:20:32.411 [INFO] [Dummy-334204] [socket.py] [send()] zMuJZXfzq-w4gQZgABR6: Sending packet MESSAGE data 0{"sid":"enH8WowqYaCYcCsCABR7"}
2026-05-21T18:20:32.432 [INFO] [Dummy-334205] [socket.py] [handle_get_request()] zMuJZXfzq-w4gQZgABR6: Received request to upgrade to websocket
2026-05-21T18:20:57.392 [INFO] [Dummy-334206] [socket.py] [send()] zMuJZXfzq-w4gQZgABR6: Sending packet PING data None
2026-05-21T18:20:57.591 [INFO] [Dummy-334207] [socket.py] [receive()] zMuJZXfzq-w4gQZgABR6: Received packet PONG data 
2026-05-21T18:21:22.592 [INFO] [Dummy-334208] [socket.py] [send()] zMuJZXfzq-w4gQZgABR6: Sending packet PING data None
2026-05-21T18:21:46.653 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] zMuJZXfzq-w4gQZgABR6: Client is gone, closing socket
2026-05-21T18:21:46.654 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] zMuJZXfzq-w4gQZgABR6: Client is gone, closing socket
2026-05-21T18:40:02.344 [INFO] [Dummy-334209] [base_server.py] [_log_error_once()] Invalid session zMuJZXfzq-w4gQZgABR6
2026-05-21T18:40:03.326 [INFO] [Dummy-334209] [socket.py] [send()] 7CbqsfnCfCK8Z6lXABR8: Sending packet OPEN data {'sid': '7CbqsfnCfCK8Z6lXABR8', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T18:40:03.345 [INFO] [Dummy-334209] [socket.py] [receive()] 7CbqsfnCfCK8Z6lXABR8: Received packet MESSAGE data 0
2026-05-21T18:40:03.345 [INFO] [Dummy-334209] [socket.py] [send()] 7CbqsfnCfCK8Z6lXABR8: Sending packet MESSAGE data 0{"sid":"FEiFhjIbMnGnNZAEABR9"}
2026-05-21T18:40:03.360 [INFO] [Dummy-334210] [socket.py] [handle_get_request()] 7CbqsfnCfCK8Z6lXABR8: Received request to upgrade to websocket
2026-05-21T18:40:28.327 [INFO] [Dummy-334211] [socket.py] [send()] 7CbqsfnCfCK8Z6lXABR8: Sending packet PING data None
2026-05-21T18:41:06.725 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 7CbqsfnCfCK8Z6lXABR8: Client is gone, closing socket
2026-05-21T18:41:06.725 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 7CbqsfnCfCK8Z6lXABR8: Client is gone, closing socket
2026-05-21T19:02:38.331 [INFO] [Dummy-334212] [base_server.py] [_log_error_once()] Invalid session 7CbqsfnCfCK8Z6lXABR8
2026-05-21T19:02:40.299 [INFO] [Dummy-334212] [socket.py] [send()] lTEnbzouJYHvpGAxABR-: Sending packet OPEN data {'sid': 'lTEnbzouJYHvpGAxABR-', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T19:02:40.340 [INFO] [Dummy-334212] [socket.py] [receive()] lTEnbzouJYHvpGAxABR-: Received packet MESSAGE data 0
2026-05-21T19:02:40.340 [INFO] [Dummy-334212] [socket.py] [send()] lTEnbzouJYHvpGAxABR-: Sending packet MESSAGE data 0{"sid":"E1whhF5iqu6yqEFjABR_"}
2026-05-21T19:02:40.487 [INFO] [Dummy-334213] [socket.py] [handle_get_request()] lTEnbzouJYHvpGAxABR-: Received request to upgrade to websocket
2026-05-21T19:03:05.300 [INFO] [Dummy-334214] [socket.py] [send()] lTEnbzouJYHvpGAxABR-: Sending packet PING data None
2026-05-21T19:03:26.801 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] lTEnbzouJYHvpGAxABR-: Client is gone, closing socket
2026-05-21T19:03:26.801 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] lTEnbzouJYHvpGAxABR-: Client is gone, closing socket
2026-05-21T20:57:50.981 [INFO] [Dummy-334215] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet OPEN data {'sid': '_jG46DjV49DLjKAOABSA', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T20:57:51.001 [INFO] [Dummy-334215] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 0
2026-05-21T20:57:51.001 [INFO] [Dummy-334215] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 0{"sid":"CLWSoKeV7pk83tf8ABSB"}
2026-05-21T20:57:51.017 [INFO] [Dummy-334216] [socket.py] [handle_get_request()] _jG46DjV49DLjKAOABSA: Received request to upgrade to websocket
2026-05-21T20:58:15.982 [INFO] [Dummy-334217] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T20:58:16.003 [INFO] [Dummy-334218] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T20:58:41.004 [INFO] [Dummy-334219] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T20:58:41.043 [INFO] [Dummy-334220] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T20:59:06.044 [INFO] [Dummy-334221] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T20:59:06.065 [INFO] [Dummy-334218] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T20:59:31.066 [INFO] [Dummy-334222] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T20:59:31.084 [INFO] [Dummy-334220] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T20:59:56.085 [INFO] [Dummy-334223] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T20:59:56.113 [INFO] [Dummy-334218] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:00:21.115 [INFO] [Dummy-334224] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:00:21.142 [INFO] [Dummy-334220] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:00:46.143 [INFO] [Dummy-334225] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:00:46.165 [INFO] [Dummy-334218] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:01:11.167 [INFO] [Dummy-334226] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:01:11.218 [INFO] [Dummy-334220] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:01:36.219 [INFO] [Dummy-334227] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:01:36.243 [INFO] [Dummy-334228] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:02:01.245 [INFO] [Dummy-334229] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:02:01.293 [INFO] [Dummy-334220] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:02:26.295 [INFO] [Dummy-334230] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:02:26.319 [INFO] [Dummy-334231] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:02:51.321 [INFO] [Dummy-334232] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:02:51.342 [INFO] [Dummy-334233] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:03:16.343 [INFO] [Dummy-334234] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:03:16.367 [INFO] [Dummy-334235] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:03:41.369 [INFO] [Dummy-334236] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:03:41.388 [INFO] [Dummy-334235] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:04:06.389 [INFO] [Dummy-334237] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:04:06.413 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:04:31.415 [INFO] [Dummy-334239] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:04:31.433 [INFO] [Dummy-334235] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:04:56.435 [INFO] [Dummy-334240] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:04:56.457 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:05:21.458 [INFO] [Dummy-334241] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:05:21.564 [INFO] [Dummy-334235] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:05:46.565 [INFO] [Dummy-334242] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:05:46.584 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:06:11.586 [INFO] [Dummy-334243] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:06:11.606 [INFO] [Dummy-334235] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:06:36.607 [INFO] [Dummy-334244] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:06:36.631 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:07:01.633 [INFO] [Dummy-334245] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:07:01.654 [INFO] [Dummy-334235] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:07:26.655 [INFO] [Dummy-334246] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:07:26.880 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:07:51.881 [INFO] [Dummy-334247] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:07:51.898 [INFO] [Dummy-334235] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:08:16.899 [INFO] [Dummy-334248] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:08:16.921 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:08:41.922 [INFO] [Dummy-334249] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:08:41.940 [INFO] [Dummy-334235] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:09:06.941 [INFO] [Dummy-334250] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:09:06.961 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:09:31.963 [INFO] [Dummy-334251] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:09:31.981 [INFO] [Dummy-334235] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:09:56.981 [INFO] [Dummy-334252] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:09:57.004 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:10:22.005 [INFO] [Dummy-334253] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:10:22.117 [INFO] [Dummy-334235] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:10:47.119 [INFO] [Dummy-334254] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:10:47.143 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:11:12.144 [INFO] [Dummy-334255] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:11:12.175 [INFO] [Dummy-334235] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:11:37.176 [INFO] [Dummy-334256] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:11:37.198 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:12:02.200 [INFO] [Dummy-334257] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:12:02.220 [INFO] [Dummy-334235] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:12:27.222 [INFO] [Dummy-334258] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:12:27.243 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:12:52.244 [INFO] [Dummy-334259] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:12:52.269 [INFO] [Dummy-334235] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:13:17.270 [INFO] [Dummy-334260] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:13:17.354 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:13:42.356 [INFO] [Dummy-334261] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:13:42.375 [INFO] [Dummy-334262] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:14:07.376 [INFO] [Dummy-334263] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:14:07.400 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:14:32.402 [INFO] [Dummy-334264] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:14:32.420 [INFO] [Dummy-334262] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:14:57.422 [INFO] [Dummy-334265] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:14:57.441 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:15:22.443 [INFO] [Dummy-334266] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:15:22.464 [INFO] [Dummy-334262] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:15:47.465 [INFO] [Dummy-334267] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:15:47.483 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:16:12.485 [INFO] [Dummy-334268] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:16:12.506 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:16:37.507 [INFO] [Dummy-334269] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:16:37.526 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:17:02.528 [INFO] [Dummy-334270] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:17:02.547 [INFO] [Dummy-334262] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:17:27.547 [INFO] [Dummy-334271] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:17:27.569 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:17:52.570 [INFO] [Dummy-334272] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:17:52.599 [INFO] [Dummy-334262] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:18:17.600 [INFO] [Dummy-334273] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:18:17.619 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:18:42.621 [INFO] [Dummy-334274] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:18:42.637 [INFO] [Dummy-334262] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:19:07.638 [INFO] [Dummy-334275] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:19:07.656 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:19:32.658 [INFO] [Dummy-334276] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:19:32.677 [INFO] [Dummy-334262] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:19:57.678 [INFO] [Dummy-334277] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:19:57.705 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:20:22.707 [INFO] [Dummy-334278] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:20:22.729 [INFO] [Dummy-334262] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:20:47.730 [INFO] [Dummy-334279] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:20:47.751 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:21:12.753 [INFO] [Dummy-334280] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:21:12.858 [INFO] [Dummy-334281] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:21:37.860 [INFO] [Dummy-334282] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:21:37.883 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:22:02.884 [INFO] [Dummy-334283] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:22:02.906 [INFO] [Dummy-334281] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:22:27.908 [INFO] [Dummy-334284] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:22:27.932 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:22:52.934 [INFO] [Dummy-334285] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:22:52.956 [INFO] [Dummy-334281] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:23:17.956 [INFO] [Dummy-334286] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:23:17.978 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:23:42.980 [INFO] [Dummy-334287] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:23:42.999 [INFO] [Dummy-334281] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:24:08.000 [INFO] [Dummy-334288] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:24:08.020 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:24:33.022 [INFO] [Dummy-334289] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:24:33.055 [INFO] [Dummy-334281] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:24:58.056 [INFO] [Dummy-334290] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:24:58.147 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:25:23.149 [INFO] [Dummy-334291] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:25:23.175 [INFO] [Dummy-334292] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:25:48.176 [INFO] [Dummy-334293] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:25:48.194 [INFO] [Dummy-334238] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:26:13.196 [INFO] [Dummy-334294] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:26:13.397 [INFO] [Dummy-334292] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:26:38.398 [INFO] [Dummy-334295] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:26:38.429 [INFO] [Dummy-334296] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:27:03.430 [INFO] [Dummy-334297] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:27:03.454 [INFO] [Dummy-334292] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:27:28.455 [INFO] [Dummy-334298] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:27:28.474 [INFO] [Dummy-334296] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:27:53.475 [INFO] [Dummy-334299] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:27:53.493 [INFO] [Dummy-334292] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:28:18.493 [INFO] [Dummy-334300] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:28:18.512 [INFO] [Dummy-334292] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:28:43.513 [INFO] [Dummy-334301] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:28:43.570 [INFO] [Dummy-334296] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:29:08.571 [INFO] [Dummy-334302] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:29:08.606 [INFO] [Dummy-334292] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:29:33.607 [INFO] [Dummy-334303] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:29:33.646 [INFO] [Dummy-334296] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:29:58.647 [INFO] [Dummy-334304] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:29:58.676 [INFO] [Dummy-334292] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:30:23.677 [INFO] [Dummy-334305] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:30:23.694 [INFO] [Dummy-334296] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:30:48.695 [INFO] [Dummy-334306] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:30:48.712 [INFO] [Dummy-334292] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:31:13.713 [INFO] [Dummy-334307] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:31:13.740 [INFO] [Dummy-334296] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:31:27.507 [INFO] [Dummy-334296] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:31:27.507 [INFO] [Dummy-334296] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:31:28.064 [INFO] [Dummy-334308] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:31:28.064 [INFO] [Dummy-334308] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:31:28.064 [INFO] [Dummy-334308] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:31:38.741 [INFO] [Dummy-334309] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:31:38.758 [INFO] [Dummy-334292] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:31:51.535 [INFO] [Dummy-334292] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:31:51.535 [INFO] [Dummy-334292] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:31:52.086 [INFO] [Dummy-334310] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:31:52.086 [INFO] [Dummy-334310] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:31:52.086 [INFO] [Dummy-334310] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:32:03.759 [INFO] [Dummy-334311] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:32:03.778 [INFO] [Dummy-334296] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:32:15.557 [INFO] [Dummy-334296] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:32:15.558 [INFO] [Dummy-334296] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:32:16.103 [INFO] [Dummy-334312] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:32:16.103 [INFO] [Dummy-334312] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:32:16.104 [INFO] [Dummy-334312] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:32:27.527 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:32:27.527 [INFO] [Dummy-334313] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:32:28.088 [INFO] [Dummy-334314] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:32:28.088 [INFO] [Dummy-334314] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:32:28.088 [INFO] [Dummy-334314] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:32:28.779 [INFO] [Dummy-334315] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:32:29.514 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:32:54.515 [INFO] [Dummy-334317] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:32:54.534 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:33:19.535 [INFO] [Dummy-334318] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:33:19.555 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:33:44.556 [INFO] [Dummy-334319] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:33:44.576 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:34:09.576 [INFO] [Dummy-334320] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:34:09.599 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:34:33.538 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:34:33.538 [INFO] [Dummy-334313] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:34:34.076 [INFO] [Dummy-334321] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:34:34.076 [INFO] [Dummy-334321] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:34:34.076 [INFO] [Dummy-334321] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:34:34.600 [INFO] [Dummy-334322] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:34:34.778 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:34:57.563 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:34:57.564 [INFO] [Dummy-334316] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:34:58.140 [INFO] [Dummy-334323] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:34:58.140 [INFO] [Dummy-334323] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:34:58.141 [INFO] [Dummy-334323] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:34:59.779 [INFO] [Dummy-334324] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:34:59.801 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:35:21.559 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:35:21.559 [INFO] [Dummy-334313] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:35:22.111 [INFO] [Dummy-334325] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:35:22.112 [INFO] [Dummy-334325] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:35:22.112 [INFO] [Dummy-334325] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:35:24.803 [INFO] [Dummy-334326] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:35:24.822 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:35:31.557 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:35:31.557 [INFO] [Dummy-334316] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:35:32.099 [INFO] [Dummy-334327] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:35:32.099 [INFO] [Dummy-334327] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:35:32.099 [INFO] [Dummy-334327] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:35:49.823 [INFO] [Dummy-334328] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:35:49.852 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:36:14.853 [INFO] [Dummy-334329] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:36:14.876 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:36:39.878 [INFO] [Dummy-334330] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:36:39.898 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:37:04.899 [INFO] [Dummy-334331] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:37:04.917 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:37:29.918 [INFO] [Dummy-334332] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:37:30.192 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:37:55.194 [INFO] [Dummy-334333] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:37:55.213 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:38:20.214 [INFO] [Dummy-334334] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:38:20.236 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:38:45.238 [INFO] [Dummy-334335] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:38:45.259 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:39:10.260 [INFO] [Dummy-334336] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:39:10.279 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:39:35.280 [INFO] [Dummy-334337] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:39:35.303 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:40:00.305 [INFO] [Dummy-334338] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:40:00.328 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:40:05.574 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:40:05.574 [INFO] [Dummy-334313] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:40:06.118 [INFO] [Dummy-334339] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:40:06.118 [INFO] [Dummy-334339] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:40:06.118 [INFO] [Dummy-334339] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:40:25.330 [INFO] [Dummy-334340] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:40:25.348 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:40:39.533 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:40:39.534 [INFO] [Dummy-334316] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:40:40.099 [INFO] [Dummy-334341] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:40:40.099 [INFO] [Dummy-334341] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:40:40.099 [INFO] [Dummy-334341] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:40:50.350 [INFO] [Dummy-334342] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:40:50.375 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:41:15.377 [INFO] [Dummy-334343] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:41:15.403 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:41:40.405 [INFO] [Dummy-334344] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:41:40.424 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:42:05.426 [INFO] [Dummy-334345] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:42:05.449 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:42:17.527 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:42:17.527 [INFO] [Dummy-334316] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:42:18.096 [INFO] [Dummy-334346] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:42:18.096 [INFO] [Dummy-334346] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:42:18.096 [INFO] [Dummy-334346] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:42:30.450 [INFO] [Dummy-334347] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:42:30.467 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:42:55.468 [INFO] [Dummy-334348] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:42:55.569 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:43:20.570 [INFO] [Dummy-334349] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:43:20.592 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:43:45.593 [INFO] [Dummy-334350] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:43:45.616 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:44:10.618 [INFO] [Dummy-334351] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:44:10.642 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:44:19.558 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:44:19.558 [INFO] [Dummy-334316] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:44:20.118 [INFO] [Dummy-334352] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:44:20.118 [INFO] [Dummy-334352] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:44:20.118 [INFO] [Dummy-334352] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:44:35.642 [INFO] [Dummy-334353] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:44:35.664 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:45:00.665 [INFO] [Dummy-334354] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:45:00.683 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:45:25.684 [INFO] [Dummy-334355] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:45:25.707 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:45:50.708 [INFO] [Dummy-334356] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:45:50.727 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:46:15.727 [INFO] [Dummy-334357] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:46:15.749 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:46:40.750 [INFO] [Dummy-334358] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:46:40.771 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:47:05.772 [INFO] [Dummy-334359] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:47:05.791 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:47:30.792 [INFO] [Dummy-334360] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:47:30.812 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:47:55.814 [INFO] [Dummy-334361] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:47:55.833 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:48:20.835 [INFO] [Dummy-334362] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:48:20.855 [INFO] [Dummy-334316] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:48:45.855 [INFO] [Dummy-334363] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:48:45.878 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:49:10.879 [INFO] [Dummy-334364] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:49:10.899 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:49:35.901 [INFO] [Dummy-334366] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:49:35.921 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:50:00.923 [INFO] [Dummy-334367] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:50:00.943 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:50:25.944 [INFO] [Dummy-334368] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:50:25.968 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:50:27.520 [INFO] [Dummy-334313] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:50:27.521 [INFO] [Dummy-334313] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:50:28.078 [INFO] [Dummy-334369] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:50:28.078 [INFO] [Dummy-334369] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:50:28.078 [INFO] [Dummy-334369] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:50:50.969 [INFO] [Dummy-334370] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:50:50.992 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:51:15.993 [INFO] [Dummy-334371] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:51:16.016 [INFO] [Dummy-334372] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:51:35.575 [INFO] [Dummy-334372] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:51:35.575 [INFO] [Dummy-334372] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:51:36.109 [INFO] [Dummy-334373] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:51:36.109 [INFO] [Dummy-334373] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:51:36.109 [INFO] [Dummy-334373] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:51:41.018 [INFO] [Dummy-334374] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:51:41.036 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:52:06.037 [INFO] [Dummy-334375] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:52:06.059 [INFO] [Dummy-334372] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:52:13.528 [INFO] [Dummy-334372] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:52:13.529 [INFO] [Dummy-334372] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:52:14.068 [INFO] [Dummy-334376] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:52:14.068 [INFO] [Dummy-334376] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:52:14.069 [INFO] [Dummy-334376] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:52:31.060 [INFO] [Dummy-334377] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:52:31.082 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:52:49.537 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:52:49.537 [INFO] [Dummy-334365] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:52:50.081 [INFO] [Dummy-334378] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:52:50.081 [INFO] [Dummy-334378] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:52:50.081 [INFO] [Dummy-334378] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:52:56.083 [INFO] [Dummy-334379] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:52:56.121 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:53:21.122 [INFO] [Dummy-334381] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:53:21.152 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:53:25.522 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:53:25.522 [INFO] [Dummy-334365] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:53:26.061 [INFO] [Dummy-334382] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:53:26.061 [INFO] [Dummy-334382] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:53:26.061 [INFO] [Dummy-334382] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:53:46.153 [INFO] [Dummy-334383] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:53:46.172 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:54:05.607 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:54:05.607 [INFO] [Dummy-334380] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:54:06.144 [INFO] [Dummy-334384] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:54:06.145 [INFO] [Dummy-334384] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:54:06.145 [INFO] [Dummy-334384] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:54:11.174 [INFO] [Dummy-334385] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:54:11.194 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:54:36.195 [INFO] [Dummy-334386] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:54:36.219 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:54:41.541 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:54:41.541 [INFO] [Dummy-334380] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:54:42.104 [INFO] [Dummy-334387] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:54:42.104 [INFO] [Dummy-334387] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:54:42.104 [INFO] [Dummy-334387] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:55:01.221 [INFO] [Dummy-334388] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:55:01.239 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:55:17.541 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:55:17.542 [INFO] [Dummy-334365] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:55:18.122 [INFO] [Dummy-334389] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:55:18.122 [INFO] [Dummy-334389] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:55:18.122 [INFO] [Dummy-334389] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:55:26.241 [INFO] [Dummy-334390] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:55:26.260 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:55:51.262 [INFO] [Dummy-334391] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:55:51.284 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:55:53.562 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:55:53.563 [INFO] [Dummy-334365] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:55:54.110 [INFO] [Dummy-334392] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:55:54.110 [INFO] [Dummy-334392] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:55:54.110 [INFO] [Dummy-334392] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:56:16.285 [INFO] [Dummy-334393] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:56:16.320 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:56:41.321 [INFO] [Dummy-334394] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:56:41.342 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:56:47.558 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:56:47.558 [INFO] [Dummy-334365] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:56:48.113 [INFO] [Dummy-334395] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:56:48.113 [INFO] [Dummy-334395] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:56:48.114 [INFO] [Dummy-334395] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:57:06.343 [INFO] [Dummy-334396] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:57:06.364 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:57:23.544 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:57:23.544 [INFO] [Dummy-334380] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:57:24.086 [INFO] [Dummy-334397] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:57:24.086 [INFO] [Dummy-334397] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:57:24.086 [INFO] [Dummy-334397] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:57:31.366 [INFO] [Dummy-334398] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:57:31.387 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:57:56.389 [INFO] [Dummy-334399] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:57:56.409 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:57:59.663 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:57:59.663 [INFO] [Dummy-334380] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:58:00.216 [INFO] [Dummy-334400] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:58:00.216 [INFO] [Dummy-334400] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:58:00.216 [INFO] [Dummy-334400] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:58:21.410 [INFO] [Dummy-334401] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:58:21.431 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:58:37.542 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:58:37.542 [INFO] [Dummy-334365] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:58:38.101 [INFO] [Dummy-334402] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:58:38.102 [INFO] [Dummy-334402] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:58:38.103 [INFO] [Dummy-334402] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:58:46.433 [INFO] [Dummy-334403] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:58:46.460 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:58:59.557 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:58:59.557 [INFO] [Dummy-334380] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:59:00.102 [INFO] [Dummy-334404] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:59:00.102 [INFO] [Dummy-334404] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:59:00.102 [INFO] [Dummy-334404] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T21:59:11.462 [INFO] [Dummy-334405] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:59:11.481 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:59:36.483 [INFO] [Dummy-334406] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T21:59:36.532 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T21:59:55.526 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T21:59:55.526 [INFO] [Dummy-334365] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:59:56.064 [INFO] [Dummy-334407] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T21:59:56.065 [INFO] [Dummy-334407] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T21:59:56.065 [INFO] [Dummy-334407] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:00:01.533 [INFO] [Dummy-334408] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:00:01.557 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:00:19.518 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:00:19.518 [INFO] [Dummy-334380] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:00:20.063 [INFO] [Dummy-334409] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:00:20.063 [INFO] [Dummy-334409] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:00:20.063 [INFO] [Dummy-334409] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:00:26.558 [INFO] [Dummy-334410] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:00:26.581 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:00:43.542 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:00:43.542 [INFO] [Dummy-334365] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:00:44.083 [INFO] [Dummy-334411] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:00:44.084 [INFO] [Dummy-334411] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:00:44.084 [INFO] [Dummy-334411] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:00:51.582 [INFO] [Dummy-334412] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:00:51.601 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:00:53.510 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:00:53.510 [INFO] [Dummy-334380] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:00:54.048 [INFO] [Dummy-334413] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:00:54.049 [INFO] [Dummy-334413] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:00:54.049 [INFO] [Dummy-334413] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:01:16.602 [INFO] [Dummy-334414] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:01:16.620 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:01:41.621 [INFO] [Dummy-334415] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:01:41.640 [INFO] [Dummy-334380] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:02:06.641 [INFO] [Dummy-334416] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:02:06.660 [INFO] [Dummy-334365] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:02:31.661 [INFO] [Dummy-334417] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:02:31.682 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:02:56.683 [INFO] [Dummy-334419] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:02:56.704 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:03:01.541 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:03:01.541 [INFO] [Dummy-334420] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:03:02.135 [INFO] [Dummy-334421] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:03:02.136 [INFO] [Dummy-334421] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:03:02.136 [INFO] [Dummy-334421] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:03:21.705 [INFO] [Dummy-334422] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:03:21.728 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:03:25.545 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:03:25.545 [INFO] [Dummy-334418] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:03:26.112 [INFO] [Dummy-334423] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:03:26.113 [INFO] [Dummy-334423] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:03:26.113 [INFO] [Dummy-334423] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:03:46.730 [INFO] [Dummy-334424] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:03:46.751 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:03:47.548 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:03:47.548 [INFO] [Dummy-334420] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:03:48.114 [INFO] [Dummy-334425] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:03:48.115 [INFO] [Dummy-334425] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:03:48.115 [INFO] [Dummy-334425] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:03:59.537 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:03:59.537 [INFO] [Dummy-334420] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:04:00.084 [INFO] [Dummy-334426] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:04:00.084 [INFO] [Dummy-334426] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:04:00.084 [INFO] [Dummy-334426] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:04:11.753 [INFO] [Dummy-334427] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:04:11.771 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:04:36.773 [INFO] [Dummy-334428] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:04:36.791 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:05:01.792 [INFO] [Dummy-334429] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:05:01.817 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:05:26.818 [INFO] [Dummy-334430] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:05:26.836 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:05:51.838 [INFO] [Dummy-334431] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:05:51.855 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:06:16.856 [INFO] [Dummy-334432] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:06:16.879 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:06:41.881 [INFO] [Dummy-334433] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:06:41.903 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:07:06.904 [INFO] [Dummy-334434] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:07:06.923 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:07:31.924 [INFO] [Dummy-334435] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:07:31.943 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:07:56.944 [INFO] [Dummy-334436] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:07:56.960 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:08:21.961 [INFO] [Dummy-334437] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:08:21.981 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:08:46.982 [INFO] [Dummy-334438] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:08:47.007 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:09:12.008 [INFO] [Dummy-334439] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:09:12.026 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:09:37.027 [INFO] [Dummy-334440] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:09:37.044 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:10:02.045 [INFO] [Dummy-334441] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:10:02.067 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:10:27.069 [INFO] [Dummy-334442] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:10:27.089 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:10:52.090 [INFO] [Dummy-334443] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:10:52.111 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:11:17.112 [INFO] [Dummy-334444] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:11:17.137 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:11:41.630 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:11:41.630 [INFO] [Dummy-334420] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:11:42.175 [INFO] [Dummy-334445] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:11:42.176 [INFO] [Dummy-334445] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:11:42.176 [INFO] [Dummy-334445] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:11:42.324 [INFO] [Dummy-334446] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:11:43.452 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:12:08.453 [INFO] [Dummy-334447] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:12:08.482 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:12:33.484 [INFO] [Dummy-334448] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:12:33.506 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:12:58.507 [INFO] [Dummy-334449] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:12:58.528 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:13:19.564 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:13:19.564 [INFO] [Dummy-334418] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:13:20.110 [INFO] [Dummy-334450] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:13:20.110 [INFO] [Dummy-334450] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:13:20.110 [INFO] [Dummy-334450] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:13:23.528 [INFO] [Dummy-334451] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:13:23.545 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:13:48.545 [INFO] [Dummy-334452] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:13:48.564 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:14:13.565 [INFO] [Dummy-334453] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:14:13.590 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:14:38.591 [INFO] [Dummy-334454] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:14:38.612 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:15:03.613 [INFO] [Dummy-334455] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:15:03.632 [INFO] [Dummy-334420] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:15:28.632 [INFO] [Dummy-334456] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:15:28.652 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:15:53.652 [INFO] [Dummy-334457] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:15:53.673 [INFO] [Dummy-334458] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:16:18.674 [INFO] [Dummy-334459] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:16:18.698 [INFO] [Dummy-334418] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:16:43.699 [INFO] [Dummy-334460] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:16:43.720 [INFO] [Dummy-334458] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:17:08.721 [INFO] [Dummy-334461] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:17:08.744 [INFO] [Dummy-334462] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:17:33.745 [INFO] [Dummy-334463] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:17:33.764 [INFO] [Dummy-334458] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:17:58.766 [INFO] [Dummy-334464] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:17:58.783 [INFO] [Dummy-334462] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:18:23.784 [INFO] [Dummy-334465] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:18:23.807 [INFO] [Dummy-334458] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:18:48.808 [INFO] [Dummy-334466] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:18:48.826 [INFO] [Dummy-334462] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:19:01.613 [INFO] [Dummy-334462] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:19:01.613 [INFO] [Dummy-334462] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:19:02.152 [INFO] [Dummy-334467] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:19:02.152 [INFO] [Dummy-334467] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:19:02.152 [INFO] [Dummy-334467] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:19:13.827 [INFO] [Dummy-334468] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:19:13.854 [INFO] [Dummy-334458] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:19:38.856 [INFO] [Dummy-334469] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:19:38.876 [INFO] [Dummy-334462] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:19:39.561 [INFO] [Dummy-334462] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:19:39.562 [INFO] [Dummy-334462] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:19:40.133 [INFO] [Dummy-334470] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:19:40.133 [INFO] [Dummy-334470] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:19:40.133 [INFO] [Dummy-334470] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:20:03.877 [INFO] [Dummy-334471] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:20:03.900 [INFO] [Dummy-334458] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:20:15.544 [INFO] [Dummy-334458] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:20:15.544 [INFO] [Dummy-334458] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:20:16.084 [INFO] [Dummy-334472] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:20:16.084 [INFO] [Dummy-334472] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:20:16.084 [INFO] [Dummy-334472] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:20:28.901 [INFO] [Dummy-334473] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:20:28.919 [INFO] [Dummy-334474] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:20:53.527 [INFO] [Dummy-334474] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:20:53.527 [INFO] [Dummy-334474] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:20:54.065 [INFO] [Dummy-334475] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:20:54.065 [INFO] [Dummy-334475] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:20:54.066 [INFO] [Dummy-334475] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:20:54.257 [INFO] [Dummy-334476] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:20:54.631 [INFO] [Dummy-334458] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:21:19.633 [INFO] [Dummy-334477] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:21:19.652 [INFO] [Dummy-334474] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:21:29.547 [INFO] [Dummy-334474] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:21:29.547 [INFO] [Dummy-334474] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:21:30.101 [INFO] [Dummy-334478] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:21:30.101 [INFO] [Dummy-334478] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:21:30.101 [INFO] [Dummy-334478] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:21:44.653 [INFO] [Dummy-334479] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:21:44.671 [INFO] [Dummy-334458] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:22:09.669 [INFO] [Dummy-334458] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:22:09.670 [INFO] [Dummy-334458] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:22:09.671 [INFO] [Dummy-334480] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:22:10.211 [INFO] [Dummy-334481] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:22:10.211 [INFO] [Dummy-334481] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:22:10.211 [INFO] [Dummy-334481] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:22:10.474 [INFO] [Dummy-334474] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:22:35.475 [INFO] [Dummy-334482] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:22:35.491 [INFO] [Dummy-334458] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:22:45.555 [INFO] [Dummy-334474] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet MESSAGE data 2["data"]
2026-05-21T22:22:45.555 [INFO] [Dummy-334474] [server.py] [_handle_event()] received event "data" from CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:22:46.094 [INFO] [Dummy-334483] [server.py] [emit()] emitting event "data" to CLWSoKeV7pk83tf8ABSB [/]
2026-05-21T22:22:46.094 [INFO] [Dummy-334483] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data 51-["data",{"_placeholder":true,"num":0}]
2026-05-21T22:22:46.094 [INFO] [Dummy-334483] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet MESSAGE data <binary>
2026-05-21T22:23:00.492 [INFO] [Dummy-334484] [socket.py] [send()] _jG46DjV49DLjKAOABSA: Sending packet PING data None
2026-05-21T22:23:00.541 [INFO] [Dummy-334458] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet PONG data 
2026-05-21T22:23:11.906 [INFO] [Dummy-334485] [socket.py] [receive()] _jG46DjV49DLjKAOABSA: Received packet CLOSE data 
2026-05-21T22:23:13.842 [INFO] [Dummy-334486] [socket.py] [send()] s4cSplAJsMfAc36xABSC: Sending packet OPEN data {'sid': 's4cSplAJsMfAc36xABSC', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T22:23:13.860 [INFO] [Dummy-334486] [socket.py] [receive()] s4cSplAJsMfAc36xABSC: Received packet MESSAGE data 0
2026-05-21T22:23:13.860 [INFO] [Dummy-334486] [socket.py] [send()] s4cSplAJsMfAc36xABSC: Sending packet MESSAGE data 0{"sid":"umqW4_s9umsqg4qzABSD"}
2026-05-21T22:23:13.880 [INFO] [Dummy-334487] [socket.py] [handle_get_request()] s4cSplAJsMfAc36xABSC: Received request to upgrade to websocket
2026-05-21T22:23:38.844 [INFO] [Dummy-334488] [socket.py] [send()] s4cSplAJsMfAc36xABSC: Sending packet PING data None
2026-05-21T22:24:07.477 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] s4cSplAJsMfAc36xABSC: Client is gone, closing socket
2026-05-21T22:24:07.478 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] s4cSplAJsMfAc36xABSC: Client is gone, closing socket
2026-05-21T22:38:32.089 [INFO] [Dummy-334489] [base_server.py] [_log_error_once()] Invalid session s4cSplAJsMfAc36xABSC
2026-05-21T22:38:32.107 [INFO] [Dummy-334489] [base_server.py] [_log_error_once()] Invalid session s4cSplAJsMfAc36xABSC
2026-05-21T22:38:32.982 [INFO] [Dummy-334489] [socket.py] [send()] aGNVjQ-TdpBY4sCkABSE: Sending packet OPEN data {'sid': 'aGNVjQ-TdpBY4sCkABSE', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T22:38:33.003 [INFO] [Dummy-334489] [socket.py] [receive()] aGNVjQ-TdpBY4sCkABSE: Received packet MESSAGE data 0
2026-05-21T22:38:33.004 [INFO] [Dummy-334489] [socket.py] [send()] aGNVjQ-TdpBY4sCkABSE: Sending packet MESSAGE data 0{"sid":"t7mS3ucuaha9EyiuABSF"}
2026-05-21T22:38:33.018 [INFO] [Dummy-334490] [socket.py] [handle_get_request()] aGNVjQ-TdpBY4sCkABSE: Received request to upgrade to websocket
2026-05-21T22:38:57.983 [INFO] [Dummy-334491] [socket.py] [send()] aGNVjQ-TdpBY4sCkABSE: Sending packet PING data None
2026-05-21T22:38:58.003 [INFO] [Dummy-334489] [socket.py] [receive()] aGNVjQ-TdpBY4sCkABSE: Received packet PONG data 
2026-05-21T22:39:23.004 [INFO] [Dummy-334492] [socket.py] [send()] aGNVjQ-TdpBY4sCkABSE: Sending packet PING data None
2026-05-21T22:39:47.531 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] aGNVjQ-TdpBY4sCkABSE: Client is gone, closing socket
2026-05-21T22:39:47.531 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] aGNVjQ-TdpBY4sCkABSE: Client is gone, closing socket
2026-05-21T23:42:51.828 [INFO] [Dummy-334493] [base_server.py] [_log_error_once()] Invalid session aGNVjQ-TdpBY4sCkABSE
2026-05-21T23:42:52.786 [INFO] [Dummy-334493] [socket.py] [send()] uAgJLqU0YzV-6kJhABSG: Sending packet OPEN data {'sid': 'uAgJLqU0YzV-6kJhABSG', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-21T23:42:52.805 [INFO] [Dummy-334493] [socket.py] [receive()] uAgJLqU0YzV-6kJhABSG: Received packet MESSAGE data 0
2026-05-21T23:42:52.805 [INFO] [Dummy-334493] [socket.py] [send()] uAgJLqU0YzV-6kJhABSG: Sending packet MESSAGE data 0{"sid":"h0qEewowaGCj4jDKABSH"}
2026-05-21T23:42:52.828 [INFO] [Dummy-334494] [socket.py] [handle_get_request()] uAgJLqU0YzV-6kJhABSG: Received request to upgrade to websocket
2026-05-21T23:43:17.788 [INFO] [Dummy-334495] [socket.py] [send()] uAgJLqU0YzV-6kJhABSG: Sending packet PING data None
2026-05-21T23:43:17.807 [INFO] [Dummy-334493] [socket.py] [receive()] uAgJLqU0YzV-6kJhABSG: Received packet PONG data 
2026-05-21T23:43:42.809 [INFO] [Dummy-334496] [socket.py] [send()] uAgJLqU0YzV-6kJhABSG: Sending packet PING data None
2026-05-21T23:44:07.753 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] uAgJLqU0YzV-6kJhABSG: Client is gone, closing socket
2026-05-21T23:44:07.753 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] uAgJLqU0YzV-6kJhABSG: Client is gone, closing socket
2026-05-22T00:10:30.600 [INFO] [Dummy-334497] [base_server.py] [_log_error_once()] Invalid session uAgJLqU0YzV-6kJhABSG
2026-05-22T00:10:31.596 [INFO] [Dummy-334498] [socket.py] [send()] U5ozFrU-Xja3tovFABSI: Sending packet OPEN data {'sid': 'U5ozFrU-Xja3tovFABSI', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T00:10:31.619 [INFO] [Dummy-334498] [socket.py] [receive()] U5ozFrU-Xja3tovFABSI: Received packet MESSAGE data 0
2026-05-22T00:10:31.620 [INFO] [Dummy-334498] [socket.py] [send()] U5ozFrU-Xja3tovFABSI: Sending packet MESSAGE data 0{"sid":"0EWKUYzhdzBTQLphABSJ"}
2026-05-22T00:10:31.636 [INFO] [Dummy-334499] [socket.py] [handle_get_request()] U5ozFrU-Xja3tovFABSI: Received request to upgrade to websocket
2026-05-22T00:10:56.598 [INFO] [Dummy-334500] [socket.py] [send()] U5ozFrU-Xja3tovFABSI: Sending packet PING data None
2026-05-22T00:11:27.845 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] U5ozFrU-Xja3tovFABSI: Client is gone, closing socket
2026-05-22T00:11:27.845 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] U5ozFrU-Xja3tovFABSI: Client is gone, closing socket
2026-05-22T00:13:32.980 [INFO] [Dummy-334501] [base_server.py] [_log_error_once()] Invalid session U5ozFrU-Xja3tovFABSI
2026-05-22T00:13:33.970 [INFO] [Dummy-334502] [socket.py] [send()] F_pYUzAdM_Vs2JlpABSK: Sending packet OPEN data {'sid': 'F_pYUzAdM_Vs2JlpABSK', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T00:13:33.992 [INFO] [Dummy-334502] [socket.py] [receive()] F_pYUzAdM_Vs2JlpABSK: Received packet MESSAGE data 0
2026-05-22T00:13:33.993 [INFO] [Dummy-334502] [socket.py] [send()] F_pYUzAdM_Vs2JlpABSK: Sending packet MESSAGE data 0{"sid":"DZSVbOvvYSi80CGxABSL"}
2026-05-22T00:13:34.007 [INFO] [Dummy-334503] [socket.py] [handle_get_request()] F_pYUzAdM_Vs2JlpABSK: Received request to upgrade to websocket
2026-05-22T00:13:58.971 [INFO] [Dummy-334504] [socket.py] [send()] F_pYUzAdM_Vs2JlpABSK: Sending packet PING data None
2026-05-22T00:14:27.856 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] F_pYUzAdM_Vs2JlpABSK: Client is gone, closing socket
2026-05-22T00:14:27.857 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] F_pYUzAdM_Vs2JlpABSK: Client is gone, closing socket
2026-05-22T00:24:39.302 [INFO] [Dummy-334505] [base_server.py] [_log_error_once()] Invalid session F_pYUzAdM_Vs2JlpABSK
2026-05-22T00:24:40.299 [INFO] [Dummy-334505] [socket.py] [send()] iaLYinhXtPl9c8GNABSM: Sending packet OPEN data {'sid': 'iaLYinhXtPl9c8GNABSM', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T00:24:40.320 [INFO] [Dummy-334505] [socket.py] [receive()] iaLYinhXtPl9c8GNABSM: Received packet MESSAGE data 0
2026-05-22T00:24:40.322 [INFO] [Dummy-334505] [socket.py] [send()] iaLYinhXtPl9c8GNABSM: Sending packet MESSAGE data 0{"sid":"XtBEPUnFunrqzmsaABSN"}
2026-05-22T00:24:40.341 [INFO] [Dummy-334506] [socket.py] [handle_get_request()] iaLYinhXtPl9c8GNABSM: Received request to upgrade to websocket
2026-05-22T00:25:05.301 [INFO] [Dummy-334507] [socket.py] [send()] iaLYinhXtPl9c8GNABSM: Sending packet PING data None
2026-05-22T00:25:27.893 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] iaLYinhXtPl9c8GNABSM: Client is gone, closing socket
2026-05-22T00:25:27.894 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] iaLYinhXtPl9c8GNABSM: Client is gone, closing socket
2026-05-22T01:27:17.760 [INFO] [Dummy-334508] [socket.py] [send()] DdW5pxOZ3Bd9gKrZABSO: Sending packet OPEN data {'sid': 'DdW5pxOZ3Bd9gKrZABSO', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T01:27:17.781 [INFO] [Dummy-334508] [socket.py] [receive()] DdW5pxOZ3Bd9gKrZABSO: Received packet MESSAGE data 0
2026-05-22T01:27:17.782 [INFO] [Dummy-334508] [socket.py] [send()] DdW5pxOZ3Bd9gKrZABSO: Sending packet MESSAGE data 0{"sid":"_4iWA4LsFZz1gJCCABSP"}
2026-05-22T01:27:17.799 [INFO] [Dummy-334509] [socket.py] [handle_get_request()] DdW5pxOZ3Bd9gKrZABSO: Received request to upgrade to websocket
2026-05-22T01:27:32.964 [INFO] [Dummy-334510] [socket.py] [receive()] DdW5pxOZ3Bd9gKrZABSO: Received packet CLOSE data 
2026-05-22T02:26:50.686 [INFO] [Dummy-334511] [socket.py] [send()] W8yMPY7DnAlI71JrABSQ: Sending packet OPEN data {'sid': 'W8yMPY7DnAlI71JrABSQ', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T02:26:50.701 [INFO] [Dummy-334511] [socket.py] [send()] Q985mgQ0pchPLjQHABSR: Sending packet OPEN data {'sid': 'Q985mgQ0pchPLjQHABSR', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T02:26:50.721 [INFO] [Dummy-334511] [socket.py] [send()] zes8ZDm4HUl3GukdABSS: Sending packet OPEN data {'sid': 'zes8ZDm4HUl3GukdABSS', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T02:27:15.688 [INFO] [Dummy-334512] [socket.py] [send()] W8yMPY7DnAlI71JrABSQ: Sending packet PING data None
2026-05-22T02:27:15.702 [INFO] [Dummy-334513] [socket.py] [send()] Q985mgQ0pchPLjQHABSR: Sending packet PING data None
2026-05-22T02:27:15.722 [INFO] [Dummy-334514] [socket.py] [send()] zes8ZDm4HUl3GukdABSS: Sending packet PING data None
2026-05-22T02:27:41.642 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] zes8ZDm4HUl3GukdABSS: Client is gone, closing socket
2026-05-22T02:27:41.642 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] zes8ZDm4HUl3GukdABSS: Client is gone, closing socket
2026-05-22T02:27:48.311 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] W8yMPY7DnAlI71JrABSQ: Client is gone, closing socket
2026-05-22T02:27:48.311 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] W8yMPY7DnAlI71JrABSQ: Client is gone, closing socket
2026-05-22T02:27:54.978 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] Q985mgQ0pchPLjQHABSR: Client is gone, closing socket
2026-05-22T02:27:54.978 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] Q985mgQ0pchPLjQHABSR: Client is gone, closing socket
2026-05-22T02:42:14.023 [INFO] [Dummy-334515] [socket.py] [send()] fL_s7ma_c23XaDDZABST: Sending packet OPEN data {'sid': 'fL_s7ma_c23XaDDZABST', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T02:42:14.209 [INFO] [Dummy-334515] [socket.py] [receive()] fL_s7ma_c23XaDDZABST: Received packet MESSAGE data 0
2026-05-22T02:42:14.209 [INFO] [Dummy-334515] [socket.py] [send()] fL_s7ma_c23XaDDZABST: Sending packet MESSAGE data 0{"sid":"_zEsLL9cYw7_nE1JABSU"}
2026-05-22T02:42:14.227 [INFO] [Dummy-334516] [socket.py] [handle_get_request()] fL_s7ma_c23XaDDZABST: Received request to upgrade to websocket
2026-05-22T02:42:39.024 [INFO] [Dummy-334517] [socket.py] [send()] fL_s7ma_c23XaDDZABST: Sending packet PING data None
2026-05-22T02:43:08.371 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] fL_s7ma_c23XaDDZABST: Client is gone, closing socket
2026-05-22T02:43:08.371 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] fL_s7ma_c23XaDDZABST: Client is gone, closing socket
2026-05-22T03:13:41.531 [INFO] [Dummy-334518] [base_server.py] [_log_error_once()] Invalid session fL_s7ma_c23XaDDZABST
2026-05-22T03:13:43.506 [INFO] [Dummy-334518] [socket.py] [send()] pZF4GI-tX0IDo_RJABSV: Sending packet OPEN data {'sid': 'pZF4GI-tX0IDo_RJABSV', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T03:13:43.525 [INFO] [Dummy-334518] [socket.py] [receive()] pZF4GI-tX0IDo_RJABSV: Received packet MESSAGE data 0
2026-05-22T03:13:43.525 [INFO] [Dummy-334518] [socket.py] [send()] pZF4GI-tX0IDo_RJABSV: Sending packet MESSAGE data 0{"sid":"ENtxfd46NQnQ7LffABSW"}
2026-05-22T03:13:43.542 [INFO] [Dummy-334519] [socket.py] [handle_get_request()] pZF4GI-tX0IDo_RJABSV: Received request to upgrade to websocket
2026-05-22T03:14:08.507 [INFO] [Dummy-334520] [socket.py] [send()] pZF4GI-tX0IDo_RJABSV: Sending packet PING data None
2026-05-22T03:14:48.484 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] pZF4GI-tX0IDo_RJABSV: Client is gone, closing socket
2026-05-22T03:14:48.484 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] pZF4GI-tX0IDo_RJABSV: Client is gone, closing socket
2026-05-22T03:27:57.946 [INFO] [Dummy-334521] [base_server.py] [_log_error_once()] Invalid session pZF4GI-tX0IDo_RJABSV
2026-05-22T03:27:57.961 [INFO] [Dummy-334521] [socket.py] [send()] 9VzAyGVxdBcJ54lmABSX: Sending packet OPEN data {'sid': '9VzAyGVxdBcJ54lmABSX', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T03:27:57.978 [INFO] [Dummy-334521] [socket.py] [send()] 8wfeY39IkSc3bZeRABSY: Sending packet OPEN data {'sid': '8wfeY39IkSc3bZeRABSY', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T03:27:57.995 [INFO] [Dummy-334521] [socket.py] [receive()] 8wfeY39IkSc3bZeRABSY: Received packet MESSAGE data 0
2026-05-22T03:27:57.996 [INFO] [Dummy-334521] [socket.py] [send()] 8wfeY39IkSc3bZeRABSY: Sending packet MESSAGE data 0{"sid":"j82BLq4Os_I28iGwABSZ"}
2026-05-22T03:27:58.011 [INFO] [Dummy-334522] [socket.py] [handle_get_request()] 8wfeY39IkSc3bZeRABSY: Received request to upgrade to websocket
2026-05-22T03:28:22.962 [INFO] [Dummy-334523] [socket.py] [send()] 9VzAyGVxdBcJ54lmABSX: Sending packet PING data None
2026-05-22T03:28:22.979 [INFO] [Dummy-334524] [socket.py] [send()] 8wfeY39IkSc3bZeRABSY: Sending packet PING data None
2026-05-22T03:28:48.534 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 9VzAyGVxdBcJ54lmABSX: Client is gone, closing socket
2026-05-22T03:28:48.534 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 9VzAyGVxdBcJ54lmABSX: Client is gone, closing socket
2026-05-22T03:28:58.536 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 8wfeY39IkSc3bZeRABSY: Client is gone, closing socket
2026-05-22T03:28:58.536 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 8wfeY39IkSc3bZeRABSY: Client is gone, closing socket
2026-05-22T04:13:45.385 [INFO] [Dummy-334525] [socket.py] [send()] 31-UfvCZFArsu_pzABSa: Sending packet OPEN data {'sid': '31-UfvCZFArsu_pzABSa', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T04:13:45.438 [INFO] [Dummy-334525] [socket.py] [receive()] 31-UfvCZFArsu_pzABSa: Received packet MESSAGE data 0
2026-05-22T04:13:45.439 [INFO] [Dummy-334525] [socket.py] [send()] 31-UfvCZFArsu_pzABSa: Sending packet MESSAGE data 0{"sid":"Pov2-SMo_mrRDOTNABSb"}
2026-05-22T04:13:45.457 [INFO] [Dummy-334526] [socket.py] [handle_get_request()] 31-UfvCZFArsu_pzABSa: Received request to upgrade to websocket
2026-05-22T04:14:10.387 [INFO] [Dummy-334527] [socket.py] [send()] 31-UfvCZFArsu_pzABSa: Sending packet PING data None
2026-05-22T04:14:48.690 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 31-UfvCZFArsu_pzABSa: Client is gone, closing socket
2026-05-22T04:14:48.691 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 31-UfvCZFArsu_pzABSa: Client is gone, closing socket
2026-05-22T04:28:47.411 [INFO] [Dummy-334528] [base_server.py] [_log_error_once()] Invalid session 31-UfvCZFArsu_pzABSa
2026-05-22T04:28:48.389 [INFO] [Dummy-334528] [socket.py] [send()] okcrOxaj9O2Hj6KSABSc: Sending packet OPEN data {'sid': 'okcrOxaj9O2Hj6KSABSc', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T04:28:48.409 [INFO] [Dummy-334528] [socket.py] [receive()] okcrOxaj9O2Hj6KSABSc: Received packet MESSAGE data 0
2026-05-22T04:28:48.410 [INFO] [Dummy-334528] [socket.py] [send()] okcrOxaj9O2Hj6KSABSc: Sending packet MESSAGE data 0{"sid":"31uRozpuCN08LXOtABSd"}
2026-05-22T04:28:48.427 [INFO] [Dummy-334529] [socket.py] [handle_get_request()] okcrOxaj9O2Hj6KSABSc: Received request to upgrade to websocket
2026-05-22T04:29:13.390 [INFO] [Dummy-334530] [socket.py] [send()] okcrOxaj9O2Hj6KSABSc: Sending packet PING data None
2026-05-22T04:29:48.742 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] okcrOxaj9O2Hj6KSABSc: Client is gone, closing socket
2026-05-22T04:29:48.742 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] okcrOxaj9O2Hj6KSABSc: Client is gone, closing socket
2026-05-22T04:39:19.796 [INFO] [Dummy-334531] [base_server.py] [_log_error_once()] Invalid session okcrOxaj9O2Hj6KSABSc
2026-05-22T04:39:20.777 [INFO] [Dummy-334531] [socket.py] [send()] tUvZXMC4Q-4XQJRiABSe: Sending packet OPEN data {'sid': 'tUvZXMC4Q-4XQJRiABSe', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T04:39:20.797 [INFO] [Dummy-334531] [socket.py] [receive()] tUvZXMC4Q-4XQJRiABSe: Received packet MESSAGE data 0
2026-05-22T04:39:20.798 [INFO] [Dummy-334531] [socket.py] [send()] tUvZXMC4Q-4XQJRiABSe: Sending packet MESSAGE data 0{"sid":"V4F6v-lZ0TxXLsOHABSf"}
2026-05-22T04:39:20.812 [INFO] [Dummy-334532] [socket.py] [handle_get_request()] tUvZXMC4Q-4XQJRiABSe: Received request to upgrade to websocket
2026-05-22T04:39:45.778 [INFO] [Dummy-334533] [socket.py] [send()] tUvZXMC4Q-4XQJRiABSe: Sending packet PING data None
2026-05-22T04:40:08.773 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] tUvZXMC4Q-4XQJRiABSe: Client is gone, closing socket
2026-05-22T04:40:08.773 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] tUvZXMC4Q-4XQJRiABSe: Client is gone, closing socket
2026-05-22T06:30:30.735 [INFO] [Dummy-334534] [socket.py] [send()] GOctH6u22S9OVkf-ABSg: Sending packet OPEN data {'sid': 'GOctH6u22S9OVkf-ABSg', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T06:30:30.750 [INFO] [Dummy-334534] [socket.py] [send()] 6x7bWLL8pfaSt0E0ABSh: Sending packet OPEN data {'sid': '6x7bWLL8pfaSt0E0ABSh', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T06:30:30.765 [INFO] [Dummy-334534] [socket.py] [send()] PM0p5u0o0WvWztb5ABSi: Sending packet OPEN data {'sid': 'PM0p5u0o0WvWztb5ABSi', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T06:30:44.659 [INFO] [Dummy-334535] [socket.py] [send()] gcBDjEzmrT8Oq0zEABSj: Sending packet OPEN data {'sid': 'gcBDjEzmrT8Oq0zEABSj', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T06:30:44.686 [INFO] [Dummy-334535] [socket.py] [receive()] gcBDjEzmrT8Oq0zEABSj: Received packet MESSAGE data 0
2026-05-22T06:30:44.686 [INFO] [Dummy-334535] [socket.py] [send()] gcBDjEzmrT8Oq0zEABSj: Sending packet MESSAGE data 0{"sid":"lCmyl1ab1Dx-TCpiABSk"}
2026-05-22T06:30:44.704 [INFO] [Dummy-334536] [socket.py] [handle_get_request()] gcBDjEzmrT8Oq0zEABSj: Received request to upgrade to websocket
2026-05-22T06:30:55.736 [INFO] [Dummy-334537] [socket.py] [send()] GOctH6u22S9OVkf-ABSg: Sending packet PING data None
2026-05-22T06:30:55.751 [INFO] [Dummy-334538] [socket.py] [send()] 6x7bWLL8pfaSt0E0ABSh: Sending packet PING data None
2026-05-22T06:30:55.765 [INFO] [Dummy-334539] [socket.py] [send()] PM0p5u0o0WvWztb5ABSi: Sending packet PING data None
2026-05-22T06:31:09.660 [INFO] [Dummy-334540] [socket.py] [send()] gcBDjEzmrT8Oq0zEABSj: Sending packet PING data None
2026-05-22T06:31:19.169 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] PM0p5u0o0WvWztb5ABSi: Client is gone, closing socket
2026-05-22T06:31:19.169 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] PM0p5u0o0WvWztb5ABSi: Client is gone, closing socket
2026-05-22T06:31:29.172 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] GOctH6u22S9OVkf-ABSg: Client is gone, closing socket
2026-05-22T06:31:29.172 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] GOctH6u22S9OVkf-ABSg: Client is gone, closing socket
2026-05-22T06:31:34.173 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 6x7bWLL8pfaSt0E0ABSh: Client is gone, closing socket
2026-05-22T06:31:34.173 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] 6x7bWLL8pfaSt0E0ABSh: Client is gone, closing socket
2026-05-22T06:31:44.176 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] gcBDjEzmrT8Oq0zEABSj: Client is gone, closing socket
2026-05-22T06:31:44.176 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] gcBDjEzmrT8Oq0zEABSj: Client is gone, closing socket
2026-05-22T06:46:23.378 [INFO] [Dummy-334541] [base_server.py] [_log_error_once()] Invalid session gcBDjEzmrT8Oq0zEABSj
2026-05-22T06:46:24.353 [INFO] [Dummy-334541] [socket.py] [send()] yIcR8ae6l74osea0ABSl: Sending packet OPEN data {'sid': 'yIcR8ae6l74osea0ABSl', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T06:46:24.374 [INFO] [Dummy-334541] [socket.py] [receive()] yIcR8ae6l74osea0ABSl: Received packet MESSAGE data 0
2026-05-22T06:46:24.374 [INFO] [Dummy-334541] [socket.py] [send()] yIcR8ae6l74osea0ABSl: Sending packet MESSAGE data 0{"sid":"F1HEoSpQUEJlsFBMABSm"}
2026-05-22T06:46:24.393 [INFO] [Dummy-334542] [socket.py] [handle_get_request()] yIcR8ae6l74osea0ABSl: Received request to upgrade to websocket
2026-05-22T06:46:49.354 [INFO] [Dummy-334543] [socket.py] [send()] yIcR8ae6l74osea0ABSl: Sending packet PING data None
2026-05-22T06:47:29.238 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] yIcR8ae6l74osea0ABSl: Client is gone, closing socket
2026-05-22T06:47:29.239 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] yIcR8ae6l74osea0ABSl: Client is gone, closing socket
2026-05-22T07:51:37.141 [INFO] [Dummy-334544] [socket.py] [send()] z0XYQaclV3DIIvs_ABSn: Sending packet OPEN data {'sid': 'z0XYQaclV3DIIvs_ABSn', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T07:51:37.613 [INFO] [Dummy-334544] [socket.py] [receive()] z0XYQaclV3DIIvs_ABSn: Received packet MESSAGE data 0
2026-05-22T07:51:37.615 [INFO] [Dummy-334544] [socket.py] [send()] z0XYQaclV3DIIvs_ABSn: Sending packet MESSAGE data 0{"sid":"6SRiAWuYEwmFRP5uABSo"}
2026-05-22T07:51:39.295 [INFO] [Dummy-334545] [socket.py] [handle_get_request()] z0XYQaclV3DIIvs_ABSn: Received request to upgrade to websocket
2026-05-22T07:52:02.143 [INFO] [Dummy-334546] [socket.py] [send()] z0XYQaclV3DIIvs_ABSn: Sending packet PING data None
2026-05-22T07:52:29.524 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] z0XYQaclV3DIIvs_ABSn: Client is gone, closing socket
2026-05-22T07:52:29.525 [INFO] [Dummy-210] [socket.py] [check_ping_timeout()] z0XYQaclV3DIIvs_ABSn: Client is gone, closing socket
2026-05-22T07:57:57.733 [INFO] [Dummy-334547] [base_server.py] [_log_error_once()] Invalid session z0XYQaclV3DIIvs_ABSn
2026-05-22T08:02:34.802 [INFO] [Dummy-334548] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet OPEN data {'sid': 'ba2SzbCVQt-MT7AxABSp', 'upgrades': ['websocket'], 'pingTimeout': 20000, 'pingInterval': 25000}
2026-05-22T08:02:34.839 [INFO] [Dummy-334548] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet MESSAGE data 0
2026-05-22T08:02:34.840 [INFO] [Dummy-334548] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet MESSAGE data 0{"sid":"WMF5QnZA0RpmDeHOABSq"}
2026-05-22T08:02:34.857 [INFO] [Dummy-334549] [socket.py] [handle_get_request()] ba2SzbCVQt-MT7AxABSp: Received request to upgrade to websocket
2026-05-22T08:02:59.804 [INFO] [Dummy-334550] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:02:59.831 [INFO] [Dummy-334548] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:03:24.834 [INFO] [Dummy-334551] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:03:24.875 [INFO] [Dummy-334548] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:03:49.878 [INFO] [Dummy-334552] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:03:49.919 [INFO] [Dummy-334553] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:04:14.921 [INFO] [Dummy-334554] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:04:14.947 [INFO] [Dummy-334553] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:04:39.949 [INFO] [Dummy-334555] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:04:39.992 [INFO] [Dummy-334556] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:05:04.994 [INFO] [Dummy-334557] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:05:05.037 [INFO] [Dummy-334558] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:05:30.040 [INFO] [Dummy-334559] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:05:30.065 [INFO] [Dummy-334560] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:05:55.068 [INFO] [Dummy-334561] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:05:55.132 [INFO] [Dummy-334560] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:06:20.134 [INFO] [Dummy-334562] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:06:20.165 [INFO] [Dummy-334563] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:06:45.169 [INFO] [Dummy-334564] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:06:45.211 [INFO] [Dummy-334563] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:07:10.213 [INFO] [Dummy-334565] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:07:10.240 [INFO] [Dummy-334566] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:07:35.242 [INFO] [Dummy-334567] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:07:35.289 [INFO] [Dummy-334568] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:08:00.290 [INFO] [Dummy-334569] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:08:00.341 [INFO] [Dummy-334568] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:08:25.344 [INFO] [Dummy-334570] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:08:25.383 [INFO] [Dummy-334571] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:08:50.384 [INFO] [Dummy-334572] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:08:50.436 [INFO] [Dummy-334573] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:09:15.439 [INFO] [Dummy-334574] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:09:15.474 [INFO] [Dummy-334575] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:09:40.477 [INFO] [Dummy-334576] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:09:40.533 [INFO] [Dummy-334577] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:10:05.536 [INFO] [Dummy-334578] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:10:05.599 [INFO] [Dummy-334579] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:10:30.601 [INFO] [Dummy-334580] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:10:30.642 [INFO] [Dummy-334581] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:10:55.645 [INFO] [Dummy-334582] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:10:55.711 [INFO] [Dummy-334583] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:11:20.713 [INFO] [Dummy-334584] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:11:20.835 [INFO] [Dummy-334585] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:11:45.838 [INFO] [Dummy-334586] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:11:45.861 [INFO] [Dummy-334587] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:12:10.863 [INFO] [Dummy-334588] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:12:10.925 [INFO] [Dummy-334587] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:12:35.927 [INFO] [Dummy-334589] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:12:35.946 [INFO] [Dummy-334590] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:13:00.948 [INFO] [Dummy-334591] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:13:00.972 [INFO] [Dummy-334592] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:13:25.975 [INFO] [Dummy-334593] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:13:26.001 [INFO] [Dummy-334592] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:13:51.002 [INFO] [Dummy-334594] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:13:51.032 [INFO] [Dummy-334595] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:14:16.033 [INFO] [Dummy-334596] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:14:16.061 [INFO] [Dummy-334595] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:14:41.064 [INFO] [Dummy-334597] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:14:41.104 [INFO] [Dummy-334595] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:15:06.105 [INFO] [Dummy-334598] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:15:06.126 [INFO] [Dummy-334599] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:15:31.129 [INFO] [Dummy-334600] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:15:31.202 [INFO] [Dummy-334599] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:15:56.204 [INFO] [Dummy-334601] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:15:56.287 [INFO] [Dummy-334602] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:16:21.288 [INFO] [Dummy-334603] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:16:21.472 [INFO] [Dummy-334604] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:16:46.473 [INFO] [Dummy-334605] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:16:46.507 [INFO] [Dummy-334606] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:17:11.509 [INFO] [Dummy-334607] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:17:11.643 [INFO] [Dummy-334608] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:17:36.646 [INFO] [Dummy-334609] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:17:36.673 [INFO] [Dummy-334610] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:18:01.675 [INFO] [Dummy-334611] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:18:01.699 [INFO] [Dummy-334610] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:18:26.701 [INFO] [Dummy-334612] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:18:26.810 [INFO] [Dummy-334613] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:18:51.812 [INFO] [Dummy-334614] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:18:52.019 [INFO] [Dummy-334615] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:19:17.022 [INFO] [Dummy-334616] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:19:17.087 [INFO] [Dummy-334617] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:19:42.089 [INFO] [Dummy-334618] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:19:42.112 [INFO] [Dummy-334617] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:20:07.115 [INFO] [Dummy-334619] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:20:07.392 [INFO] [Dummy-334620] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:20:32.395 [INFO] [Dummy-334621] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:20:32.522 [INFO] [Dummy-334622] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:20:57.525 [INFO] [Dummy-334623] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:20:57.549 [INFO] [Dummy-334624] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:21:22.552 [INFO] [Dummy-334625] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:21:22.600 [INFO] [Dummy-334626] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:21:47.603 [INFO] [Dummy-334627] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:21:47.686 [INFO] [Dummy-334628] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:22:12.688 [INFO] [Dummy-334629] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:22:12.714 [INFO] [Dummy-334630] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:22:37.717 [INFO] [Dummy-334631] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:22:37.805 [INFO] [Dummy-334632] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:23:02.808 [INFO] [Dummy-334633] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:23:02.826 [INFO] [Dummy-334634] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:23:27.829 [INFO] [Dummy-334635] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:23:27.852 [INFO] [Dummy-334636] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:23:52.855 [INFO] [Dummy-334637] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:23:52.882 [INFO] [Dummy-334638] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:24:17.885 [INFO] [Dummy-334639] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:24:17.906 [INFO] [Dummy-334640] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:24:42.909 [INFO] [Dummy-334641] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:24:42.927 [INFO] [Dummy-334642] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:25:07.929 [INFO] [Dummy-334643] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:25:07.948 [INFO] [Dummy-334642] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:25:32.951 [INFO] [Dummy-334644] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:25:32.972 [INFO] [Dummy-334642] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:25:57.974 [INFO] [Dummy-334645] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:25:58.002 [INFO] [Dummy-334646] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:26:23.005 [INFO] [Dummy-334647] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:26:23.037 [INFO] [Dummy-334646] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:26:48.039 [INFO] [Dummy-334648] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:26:48.072 [INFO] [Dummy-334649] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:27:13.074 [INFO] [Dummy-334650] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:27:13.109 [INFO] [Dummy-334651] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:27:38.112 [INFO] [Dummy-334652] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:27:38.133 [INFO] [Dummy-334653] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:28:03.135 [INFO] [Dummy-334654] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:28:03.167 [INFO] [Dummy-334653] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:28:28.169 [INFO] [Dummy-334655] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:28:28.292 [INFO] [Dummy-334656] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:28:53.296 [INFO] [Dummy-334657] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:28:53.361 [INFO] [Dummy-334658] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:29:18.363 [INFO] [Dummy-334659] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:29:18.387 [INFO] [Dummy-334658] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:29:43.389 [INFO] [Dummy-334660] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:29:43.458 [INFO] [Dummy-334661] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:30:08.460 [INFO] [Dummy-334662] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:30:08.482 [INFO] [Dummy-334663] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:30:33.485 [INFO] [Dummy-334664] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:30:33.618 [INFO] [Dummy-334665] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:30:58.620 [INFO] [Dummy-334666] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:30:58.665 [INFO] [Dummy-334667] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:31:23.668 [INFO] [Dummy-334668] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:31:23.694 [INFO] [Dummy-334669] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:31:48.697 [INFO] [Dummy-334670] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:31:48.738 [INFO] [Dummy-334671] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:32:13.741 [INFO] [Dummy-334672] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:32:13.862 [INFO] [Dummy-334673] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:32:38.865 [INFO] [Dummy-334674] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:32:38.901 [INFO] [Dummy-334675] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:33:03.903 [INFO] [Dummy-334676] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:33:03.934 [INFO] [Dummy-334675] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:33:28.937 [INFO] [Dummy-334677] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:33:28.957 [INFO] [Dummy-334678] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:33:53.960 [INFO] [Dummy-334679] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:33:53.991 [INFO] [Dummy-334680] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:34:18.993 [INFO] [Dummy-334681] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:34:19.106 [INFO] [Dummy-334680] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:34:44.110 [INFO] [Dummy-334682] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:34:44.137 [INFO] [Dummy-334683] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:35:09.139 [INFO] [Dummy-334684] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:35:09.176 [INFO] [Dummy-334685] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:35:34.179 [INFO] [Dummy-334686] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:35:34.211 [INFO] [Dummy-334685] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:35:59.213 [INFO] [Dummy-334687] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:35:59.238 [INFO] [Dummy-334685] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:36:24.241 [INFO] [Dummy-334688] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:36:24.330 [INFO] [Dummy-334689] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:36:49.333 [INFO] [Dummy-334690] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:36:49.424 [INFO] [Dummy-334689] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:37:14.426 [INFO] [Dummy-334691] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:37:14.514 [INFO] [Dummy-334692] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:37:39.517 [INFO] [Dummy-334693] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:37:39.800 [INFO] [Dummy-334694] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:38:04.802 [INFO] [Dummy-334695] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:38:04.830 [INFO] [Dummy-334694] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:38:29.832 [INFO] [Dummy-334696] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:38:29.857 [INFO] [Dummy-334697] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:38:54.859 [INFO] [Dummy-334698] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:38:54.981 [INFO] [Dummy-334699] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:39:19.984 [INFO] [Dummy-334700] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:39:20.004 [INFO] [Dummy-334699] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:39:45.006 [INFO] [Dummy-334701] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:39:45.064 [INFO] [Dummy-334702] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:40:10.067 [INFO] [Dummy-334703] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:40:10.119 [INFO] [Dummy-334704] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:40:35.122 [INFO] [Dummy-334705] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:40:35.149 [INFO] [Dummy-334706] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:41:00.152 [INFO] [Dummy-334707] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:41:00.178 [INFO] [Dummy-334708] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:41:25.180 [INFO] [Dummy-334709] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:41:25.204 [INFO] [Dummy-334710] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:41:50.207 [INFO] [Dummy-334711] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:41:50.389 [INFO] [Dummy-334710] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:42:15.391 [INFO] [Dummy-334712] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:42:15.477 [INFO] [Dummy-334713] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:42:40.479 [INFO] [Dummy-334714] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:42:40.541 [INFO] [Dummy-334715] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:43:05.544 [INFO] [Dummy-334716] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:43:05.650 [INFO] [Dummy-334717] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:43:30.652 [INFO] [Dummy-334718] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:43:30.685 [INFO] [Dummy-334719] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:43:55.688 [INFO] [Dummy-334720] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:43:55.723 [INFO] [Dummy-334721] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:44:20.725 [INFO] [Dummy-334722] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:44:20.827 [INFO] [Dummy-334721] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:44:45.829 [INFO] [Dummy-334723] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:44:45.932 [INFO] [Dummy-334724] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:45:10.935 [INFO] [Dummy-334725] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:45:10.963 [INFO] [Dummy-334726] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:45:35.965 [INFO] [Dummy-334727] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:45:36.064 [INFO] [Dummy-334728] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:46:01.068 [INFO] [Dummy-334729] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:46:01.096 [INFO] [Dummy-334730] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:46:26.099 [INFO] [Dummy-334731] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:46:26.126 [INFO] [Dummy-334732] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:46:51.129 [INFO] [Dummy-334733] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:46:51.152 [INFO] [Dummy-334732] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:47:16.155 [INFO] [Dummy-334734] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:47:16.226 [INFO] [Dummy-334732] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:47:41.229 [INFO] [Dummy-334735] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:47:41.247 [INFO] [Dummy-334736] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:48:06.250 [INFO] [Dummy-334737] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:48:06.273 [INFO] [Dummy-334736] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:48:31.276 [INFO] [Dummy-334738] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:48:31.314 [INFO] [Dummy-334739] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:48:56.317 [INFO] [Dummy-334740] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:48:56.369 [INFO] [Dummy-334741] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:49:21.372 [INFO] [Dummy-334742] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:49:21.395 [INFO] [Dummy-334743] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:49:46.398 [INFO] [Dummy-334744] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:49:46.422 [INFO] [Dummy-334745] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:50:11.425 [INFO] [Dummy-334746] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:50:11.451 [INFO] [Dummy-334747] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:50:36.454 [INFO] [Dummy-334748] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:50:36.509 [INFO] [Dummy-334749] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:51:01.511 [INFO] [Dummy-334750] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:51:01.603 [INFO] [Dummy-334751] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:51:26.606 [INFO] [Dummy-334752] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:51:26.630 [INFO] [Dummy-334753] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:51:51.633 [INFO] [Dummy-334754] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:51:51.680 [INFO] [Dummy-334753] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:52:16.683 [INFO] [Dummy-334755] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:52:16.714 [INFO] [Dummy-334756] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:52:41.718 [INFO] [Dummy-334757] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:52:41.756 [INFO] [Dummy-334758] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:53:06.758 [INFO] [Dummy-334759] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:53:06.787 [INFO] [Dummy-334758] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:53:31.789 [INFO] [Dummy-334760] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:53:31.813 [INFO] [Dummy-334758] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:53:56.816 [INFO] [Dummy-334761] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:53:56.836 [INFO] [Dummy-334762] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:54:21.838 [INFO] [Dummy-334763] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:54:21.887 [INFO] [Dummy-334764] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:54:46.889 [INFO] [Dummy-334765] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:54:46.911 [INFO] [Dummy-334766] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:55:11.913 [INFO] [Dummy-334767] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:55:11.932 [INFO] [Dummy-334768] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:55:36.936 [INFO] [Dummy-334769] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:55:37.051 [INFO] [Dummy-334770] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:56:02.054 [INFO] [Dummy-334771] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:56:02.080 [INFO] [Dummy-334772] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:56:27.083 [INFO] [Dummy-334773] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:56:27.123 [INFO] [Dummy-334774] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:56:52.126 [INFO] [Dummy-334775] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:56:52.152 [INFO] [Dummy-334776] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:57:17.154 [INFO] [Dummy-334777] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:57:17.179 [INFO] [Dummy-334776] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:57:42.181 [INFO] [Dummy-334778] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:57:42.202 [INFO] [Dummy-334776] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:58:07.205 [INFO] [Dummy-334779] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:58:07.224 [INFO] [Dummy-334776] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:58:32.226 [INFO] [Dummy-334780] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:58:32.277 [INFO] [Dummy-334781] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:58:57.279 [INFO] [Dummy-334782] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:58:57.349 [INFO] [Dummy-334783] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:59:22.352 [INFO] [Dummy-334784] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:59:22.439 [INFO] [Dummy-334785] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
2026-05-22T08:59:47.442 [INFO] [Dummy-334786] [socket.py] [send()] ba2SzbCVQt-MT7AxABSp: Sending packet PING data None
2026-05-22T08:59:47.464 [INFO] [Dummy-334787] [socket.py] [receive()] ba2SzbCVQt-MT7AxABSp: Received packet PONG data 
