From 73c1636063b47000338c735736dd9f3e939a6bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torma=20Krist=C3=B3f?= Date: Sat, 28 Nov 2020 20:17:17 +0100 Subject: [PATCH] minor redis adjustments --- src/app.py | 6 ++++-- src/resources/itemapi.py | 4 ++++ src/resources/listsapi.py | 4 ++++ src/resources/meapi.py | 3 +++ src/resources/singlelistapi.py | 3 +++ src/utils/__init__.py | 2 ++ src/utils/healthchecks.py | 18 ++++++++++++++++++ 7 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 src/utils/healthchecks.py diff --git a/src/app.py b/src/app.py index d5fcf57..267498c 100644 --- a/src/app.py +++ b/src/app.py @@ -7,12 +7,13 @@ from flask_restful import Api from flask_cors import CORS import sentry_sdk from sentry_sdk.integrations.flask import FlaskIntegration +from sentry_sdk.integrations.redis import RedisIntegration from healthcheck import HealthCheck from flaskaddons.marshm import ma from flaskaddons.fred import flaskred from utils.config import SENTRY_DSN, RELEASEMODE, RELEASE_ID, PORT, DEBUG, REDIS_URL, ALLOWED_ORIGINS -from utils.errorhandlers import register_all_error_handlers +from utils import register_all_error_handlers, redis_available from resources import LoginApi, ListsApi, MeApi, SingleListApi, ItemApi """ @@ -27,7 +28,7 @@ __version__text__ = "1" if SENTRY_DSN: sentry_sdk.init( dsn=SENTRY_DSN, - integrations=[FlaskIntegration()], + integrations=[FlaskIntegration(), RedisIntegration()], traces_sample_rate=1.0, send_default_pii=True, release=RELEASE_ID, @@ -70,6 +71,7 @@ api.add_resource(ListsApi, '/api/lists') api.add_resource(SingleListApi, '/api/lists/') api.add_resource(ItemApi, '/api/items/') +health.add_check(redis_available) app.add_url_rule("/healthz", "healthcheck", view_func=lambda: health.run()) register_all_error_handlers(app) diff --git a/src/resources/itemapi.py b/src/resources/itemapi.py index f33b324..bd68fcc 100644 --- a/src/resources/itemapi.py +++ b/src/resources/itemapi.py @@ -7,6 +7,8 @@ __copyright__ = "Copyright 2020, onSpot Team" __module_name__ = "itemapi" __version__text__ = "1" +from datetime import timedelta + from flask import request, current_app, abort from flaskaddons.fred import flaskred @@ -24,6 +26,8 @@ class ItemApi(APIInteractionResource): except Exception as e: current_app.logger.info(e) abort(401, "unauthorized") + flaskred.expire(request.headers.get('Authorization'), timedelta(minutes=15)) + try: itemtype = flaskred.get(itemid).decode('UTF-8') except Exception as e: diff --git a/src/resources/listsapi.py b/src/resources/listsapi.py index 091b60a..c2ec221 100644 --- a/src/resources/listsapi.py +++ b/src/resources/listsapi.py @@ -7,6 +7,8 @@ __copyright__ = "Copyright 2020, onSpot Team" __module_name__ = "listsapi" __version__text__ = "1" +from datetime import timedelta + import musicbrainzngs from flask import current_app, abort, request @@ -26,6 +28,8 @@ class ListsApi(UserStoreResource): current_app.logger.info(e) abort(401, "unauthorized") + flaskred.expire(request.headers.get('Authorization'), timedelta(minutes=15)) + musicbrainzngs.auth(currcreds['name'], currcreds['password']) collections = musicbrainzngs.get_collections() musicbrainzngs.auth(None, None) diff --git a/src/resources/meapi.py b/src/resources/meapi.py index c556c44..ef7ec42 100644 --- a/src/resources/meapi.py +++ b/src/resources/meapi.py @@ -7,6 +7,8 @@ __copyright__ = "Copyright 2020, onSpot Team" __module_name__ = "meapi" __version__text__ = "1" +from datetime import timedelta + from flask import request, current_app, abort from flask_restful import Resource @@ -24,4 +26,5 @@ class MeApi(Resource): except Exception as e: current_app.logger.info(e) abort(401, "unauthorized") + flaskred.expire(request.headers.get('Authorization'), timedelta(minutes=15)) return {"name": currusername}, 200 diff --git a/src/resources/singlelistapi.py b/src/resources/singlelistapi.py index 6b53b3e..46eca2d 100644 --- a/src/resources/singlelistapi.py +++ b/src/resources/singlelistapi.py @@ -7,6 +7,8 @@ __copyright__ = "Copyright 2020, onSpot Team" __module_name__ = "singlelistapi" __version__text__ = "1" +from datetime import timedelta + import musicbrainzngs from flask import request, current_app, abort @@ -25,6 +27,7 @@ class SingleListApi(APIInteractionResource): except Exception as e: current_app.logger.info(e) abort(401, "unauthorized") + flaskred.expire(request.headers.get('Authorization'), timedelta(minutes=15)) try: list_type = flaskred.get(listid).decode('UTF-8') except Exception as e: diff --git a/src/utils/__init__.py b/src/utils/__init__.py index 8ab8b17..6c29464 100644 --- a/src/utils/__init__.py +++ b/src/utils/__init__.py @@ -1 +1,3 @@ from .aes_encrypt import AESCrypto +from .healthchecks import redis_available +from .errorhandlers import register_all_error_handlers \ No newline at end of file diff --git a/src/utils/healthchecks.py b/src/utils/healthchecks.py new file mode 100644 index 0000000..0946557 --- /dev/null +++ b/src/utils/healthchecks.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 + +from flaskaddons import flaskred + + +""" +Healthchek functions +""" + +__author__ = "@tormakris" +__copyright__ = "Copyright 2020, onSpot Team" +__module_name__ = "healthchecks" +__version__text__ = "1" + + +def redis_available(): + flaskred.info() + return True, "redis ok"