Source code for cms_qe.views.monitoring

from django.http import JsonResponse

from cms_qe.utils import get_functions


[docs]def get_monitoring(request): # pylint: disable=unused-argument """ Returns JSON response with data about monitoring of application. """ result = get_monitoring_data() status_code = 200 if result['status'] else 500 return JsonResponse(result, status=status_code)
[docs]def get_monitoring_data(): """ Helper to check all installed apps. It looks for function ``get_status`` in modules ``monitoring``. If you want to add check for your module, create your file called ``monitoring.py`` and add something like this: .. code-block:: python def get_status(): # check return True # or False or error message or dict Result is dictionary of two keys, overall ``status`` which is ``True`` is all calls returns ``True``, in other cases ``False``. Second key is ``app_details`` with dictionary with key of every app which has monitoring and it's status. Status can be bool or any message which means something is wrong. You can also return dictionary with the details of your app. For example:: { 'databse': True, 'cache': 'problem to connect', # ... } """ result = { 'status': True, 'app_details': {}, } for app_name, monitoring_function in get_functions('monitoring', 'get_status'): try: app_state = monitoring_function() except Exception as exc: # pylint: disable=broad-except app_state = str(exc) is_ok = False else: if isinstance(app_state, dict): is_ok = all(v is True for v in app_state.values()) else: is_ok = app_state is True result['app_details'][app_name] = app_state result['status'] &= is_ok return result