views.py 4.49 KB
#!/usr/bin/python
# -*- coding: utf-8 -*-import json
import traceback
import json
import datetime
import time
from rest_framework.decorators import api_view
from django.http import HttpResponse
from common.testDB import TestDB
import logging
from common.testFunctions import tic, toc

logger = logging.getLogger("common_logger")

# check response time decorator
def response_timer(function=None, home_url=None, redirect_field_name=None):
    def _dec(view_func):
        def _view(request, *args, **kwargs):
            result = {}
            try:
                tic(request.path)
                return view_func(request, *args, **kwargs)
            
            except:
                print(traceback.format_exc())
                result['code'] = 500
                result['message'] = 'Internal Server Error'
                return returnHttpResponseLogging(request, result)
        
        _view.__name__ = view_func.__name__
        _view.__dict__ = view_func.__dict__
        _view.__doc__ = view_func.__doc__

        return _view

    if function is None:
        return _dec
    else:
        return _dec(function)

def returnHttpResponseLogging(request, result):
    try:
        db = TestDB()
        url = request.path
        ip = request.META['REMOTE_ADDR']
        method = request.method
        response_time = toc(request.path, True)
        db.insertIntoApiCallLog(url, ip, method, response_time, result)
        db.closeDB()
    except:
        print(traceback.format_exc())
    json_data = json.dumps(result, default=datetime_handler)
    return HttpResponse(json_data, content_type="application/json")

@response_timer
@api_view(["GET"])
def monitoringGetTest(request):
    try: 
        result = dict()
        db = TestDB()

        result['data'] = db.selectApiCallLog()
        result['code'] = 200
        result['message'] = 'OK'


        logger.info("""HTTP method used: %s, client IP : %s, message : %s, code : %s""",request.method ,request.META['REMOTE_ADDR'], result['message'], result['code'])

    except Exception as e:
        result['code'] = 500
        result['message'] = 'testMonitoring Internal Error'
        logger.error(traceback.format_exc())
        raise TestException(1, "TestException: monitoringPostTest()")

    finally:
        return returnHttpResponseLogging(request, result)

@response_timer
@api_view(["POST"])
def monitoringPostTest(request):

    try: 
        result = dict()
        db = TestDB()

        result['data'] = db.selectApiCallLog()
        result['code'] = 200
        result['message'] = 'OK'


        logger.info("""HTTP method used: %s, client IP : %s, message : %s, code : %s""",request.method ,request.META['REMOTE_ADDR'], result['message'], result['code'])

    except Exception as e:
        result['code'] = 500
        result['message'] = 'testMonitoring Internal Error'
        logger.error(traceback.format_exc())
        raise TestException(1, "TestException: monitoringPostTest()")

    finally:
        return returnHttpResponseLogging(request, result)

@response_timer
@api_view(["DELETE"])
def monitoringDeleteTest(request):

    try: 
        result = dict()
        db = TestDB()

        result['data'] = db.selectApiCallLog()
        result['code'] = 200
        result['message'] = 'OK'


        logger.info("""HTTP method used: %s, client IP : %s, message : %s, code : %s""",request.method ,request.META['REMOTE_ADDR'], result['message'], result['code'])

    except Exception as e:
        result['code'] = 500
        result['message'] = 'testMonitoring Internal Error'
        logger.error(traceback.format_exc())
        raise TestException(1, "TestException: monitoring()")

    finally:
        return returnHttpResponseLogging(request, result)

@response_timer
@api_view(["PUT"])
def monitoringPutTest(request):

    try: 
        result = dict()
        db = TestDB()

        result['data'] = db.selectApiCallLog()
        result['code'] = 200
        result['message'] = 'OK'


        logger.info("""HTTP method used: %s, client IP : %s, message : %s, code : %s""",request.method ,request.META['REMOTE_ADDR'], result['message'], result['code'])

    except Exception as e:
        result['code'] = 500
        result['message'] = 'testMonitoring Internal Error'
        logger.error(traceback.format_exc())
        raise TestException(1, "TestException: monitoringPostTest()")

    finally:
        return returnHttpResponseLogging(request, result)

def datetime_handler(x):
    if isinstance(x, datetime.datetime):
        return x.isoformat()
    raise TypeError("Unknown type")