Potentially fixed bug to kill web api on restart #301
This commit is contained in:
parent
c01a6b97fe
commit
010dafc655
@ -65,6 +65,9 @@ class Application(DiscordBotApplicationABC):
|
|||||||
self._is_stopping = True
|
self._is_stopping = True
|
||||||
try:
|
try:
|
||||||
self._logger.info(__name__, f"Try to stop {DiscordBotService.__name__}")
|
self._logger.info(__name__, f"Try to stop {DiscordBotService.__name__}")
|
||||||
|
if self._feature_flags.get_flag(FeatureFlagsEnum.api_module):
|
||||||
|
self._api.stop()
|
||||||
|
|
||||||
await self._bot.close()
|
await self._bot.close()
|
||||||
self._logger.info(__name__, f"Stopped {DiscordBotService.__name__}")
|
self._logger.info(__name__, f"Stopped {DiscordBotService.__name__}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
|
import socket
|
||||||
import sys
|
import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
import uuid
|
import uuid
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from typing import Union
|
from typing import Union, Optional
|
||||||
|
|
||||||
import eventlet
|
import eventlet
|
||||||
from cpl_core.dependency_injection import ServiceProviderABC
|
from cpl_core.dependency_injection import ServiceProviderABC
|
||||||
@ -60,6 +61,8 @@ class Api(Flask):
|
|||||||
self._socketio.on_event("connect", self.on_connect)
|
self._socketio.on_event("connect", self.on_connect)
|
||||||
self._socketio.on_event("disconnect", self.on_disconnect)
|
self._socketio.on_event("disconnect", self.on_disconnect)
|
||||||
|
|
||||||
|
self._socket: Optional[socket] = None
|
||||||
|
|
||||||
self._requests = {}
|
self._requests = {}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -152,7 +155,14 @@ class Api(Flask):
|
|||||||
# from waitress import serve
|
# from waitress import serve
|
||||||
# https://docs.pylonsproject.org/projects/waitress/en/stable/arguments.html
|
# https://docs.pylonsproject.org/projects/waitress/en/stable/arguments.html
|
||||||
# serve(self, host=self._apt_settings.host, port=self._apt_settings.port, threads=10, connection_limit=1000, channel_timeout=10)
|
# serve(self, host=self._apt_settings.host, port=self._apt_settings.port, threads=10, connection_limit=1000, channel_timeout=10)
|
||||||
wsgi.server(eventlet.listen((self._api_settings.host, self._api_settings.port)), self, log_output=False)
|
self._socket = eventlet.listen((self._api_settings.host, self._api_settings.port))
|
||||||
|
wsgi.server(self._socket, self, log_output=False)
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
if self._socket is None:
|
||||||
|
return
|
||||||
|
self._socket.shutdown(socket.SHUT_RDWR)
|
||||||
|
self._socket.close()
|
||||||
|
|
||||||
def on_connect(self):
|
def on_connect(self):
|
||||||
self._logger.info(__name__, f"Client connected")
|
self._logger.info(__name__, f"Client connected")
|
||||||
|
@ -17,3 +17,10 @@ class ApiThread(threading.Thread):
|
|||||||
self._api.start()
|
self._api.start()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self._logger.error(__name__, "Start failed", e)
|
self._logger.error(__name__, "Start failed", e)
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
try:
|
||||||
|
self._logger.trace(__name__, f"Try to stop {type(self._api).__name__}")
|
||||||
|
self._api.stop()
|
||||||
|
except Exception as e:
|
||||||
|
self._logger.error(__name__, "Start stop", e)
|
||||||
|
Loading…
Reference in New Issue
Block a user