Added api connection check #70

This commit is contained in:
2022-10-16 01:55:20 +02:00
parent 8c3cd1fae7
commit 651482a1b9
9 changed files with 210 additions and 24 deletions

View File

@@ -24,7 +24,9 @@
"Flask-Classful==0.14.2",
"Flask-Cors==3.0.10",
"PyJWT==2.5.0",
"waitress==2.1.2"
"waitress==2.1.2",
"Flask-SocketIO==5.3.1",
"eventlet==0.33.1"
],
"DevDependencies": [
"cpl-cli==2022.10.0"

View File

@@ -3,11 +3,15 @@ import sys
import uuid
from functools import partial
import eventlet
from cpl_core.dependency_injection import ServiceProviderABC
from eventlet import wsgi
from flask import Flask, request, jsonify, Response, make_response
from flask_cors import CORS
from flask_socketio import SocketIO
from bot_api.configuration.api_settings import ApiSettings
from bot_api.configuration.frontend_settings import FrontendSettings
from bot_api.exception.service_exception import ServiceException
from bot_api.logging.api_logger import ApiLogger
from bot_api.model.error_dto import ErrorDTO
@@ -21,6 +25,7 @@ class Api(Flask):
logger: ApiLogger,
services: ServiceProviderABC,
api_settings: ApiSettings,
frontend_settings: FrontendSettings,
*args, **kwargs
):
if not args:
@@ -39,6 +44,11 @@ class Api(Flask):
exc_class, code = self._get_exc_class_and_code(Exception)
self.error_handler_spec[None][code][exc_class] = self.handle_exception
# websockets
self._socketio = SocketIO(self, cors_allowed_origins='*')
self._socketio.on_event('connect', self.on_connect)
self._socketio.on_event('disconnect', self.on_disconnect)
def _register_routes(self):
for path, f in Route.registered_routes.items():
route = f[0]
@@ -76,6 +86,17 @@ class Api(Flask):
def start(self):
self._logger.info(__name__, f'Starting API {self._apt_settings.host}:{self._apt_settings.port}')
self._register_routes()
from waitress import serve
# from waitress import serve
# 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._apt_settings.host, self._apt_settings.port)),
self,
log_output=False
)
def on_connect(self):
self._logger.info(__name__, f'Client connected')
def on_disconnect(self):
self._logger.info(__name__, f'Client disconnected')