pref: 添加 api debug timer

pull/9028/head
ibuler 2022-11-04 20:14:19 +08:00
parent 037cd90f09
commit 4405064e78
7 changed files with 64 additions and 14 deletions

View File

@ -31,6 +31,7 @@ class BaseAccountSerializer(BulkOrgResourceModelSerializer):
extra_kwargs = { extra_kwargs = {
'secret': {'write_only': True}, 'secret': {'write_only': True},
'passphrase': {'write_only': True}, 'passphrase': {'write_only': True},
'specific': {'label': _('Specific')},
} }
def validate_private_key(self, private_key): def validate_private_key(self, private_key):

View File

@ -1,4 +1,5 @@
import base64 import base64
import time
from django.shortcuts import redirect, reverse, render from django.shortcuts import redirect, reverse, render
from django.utils.deprecation import MiddlewareMixin from django.utils.deprecation import MiddlewareMixin
@ -132,7 +133,13 @@ class SessionCookieMiddleware(MiddlewareMixin):
response.set_cookie('jms_session_expire', value, max_age=age) response.set_cookie('jms_session_expire', value, max_age=age)
request.session.pop('auth_session_expiration_required', None) request.session.pop('auth_session_expiration_required', None)
def process_request(self, request):
print("call process request")
time.sleep(0.8)
def process_response(self, request, response: HttpResponse): def process_response(self, request, response: HttpResponse):
import time
time.sleep(2)
self.set_cookie_session_prefix(request, response) self.set_cookie_session_prefix(request, response)
self.set_cookie_public_key(request, response) self.set_cookie_public_key(request, response)
self.set_cookie_session_expire(request, response) self.set_cookie_session_expire(request, response)

View File

@ -308,14 +308,14 @@ class HealthCheckView(HealthApiMixin):
def get_db_status(): def get_db_status():
t1 = time.time() t1 = time.time()
try: try:
User.objects.first() ok = User.objects.first() is not None
t2 = time.time() t2 = time.time()
return True, t2 - t1 return ok, t2 - t1
except: except Exception as e:
t2 = time.time() return False, str(e)
return False, t2 - t1
def get_redis_status(self): @staticmethod
def get_redis_status():
key = 'HEALTH_CHECK' key = 'HEALTH_CHECK'
t1 = time.time() t1 = time.time()
@ -324,24 +324,26 @@ class HealthCheckView(HealthApiMixin):
cache.set(key, '1', 10) cache.set(key, '1', 10)
got = cache.get(key) got = cache.get(key)
t2 = time.time() t2 = time.time()
if value == got: if value == got:
return True, t2 - t1 return True, t2 - t1
return False, t2 -t1 return False, 'Value not match'
except: except Exception as e:
t2 = time.time() return False, str(e)
return False, t2 - t1
def get(self, request): def get(self, request):
start = time.time()
redis_status, redis_time = self.get_redis_status() redis_status, redis_time = self.get_redis_status()
db_status, db_time = self.get_db_status() db_status, db_time = self.get_db_status()
status = all([redis_status, db_status]) status = all([redis_status, db_status])
time.sleep(1)
data = { data = {
'status': status, 'status': status,
'db_status': db_status, 'db_status': db_status,
'db_time': db_time, 'db_time': db_time,
'redis_status': redis_status, 'redis_status': redis_status,
'redis_time': redis_time, 'redis_time': redis_time,
'time': int(time.time()) 'time': int(time.time()),
} }
return Response(data) return Response(data)

View File

@ -3,6 +3,9 @@
import os import os
import re import re
import pytz import pytz
import time
import json
from django.utils import timezone from django.utils import timezone
from django.shortcuts import HttpResponse from django.shortcuts import HttpResponse
from django.conf import settings from django.conf import settings
@ -92,3 +95,37 @@ class RefererCheckMiddleware:
return HttpResponseForbidden('CSRF CHECK ERROR') return HttpResponseForbidden('CSRF CHECK ERROR')
response = self.get_response(request) response = self.get_response(request)
return response return response
class StartMiddleware:
def __init__(self, get_response):
self.get_response = get_response
if not settings.DEBUG_DEV:
raise MiddlewareNotUsed
def __call__(self, request):
request._s_time_start = time.time()
response = self.get_response(request)
request._s_time_end = time.time()
if request.path == '/api/health/':
data = response.data
data['pre_middleware_time'] = request._e_time_start - request._s_time_start
data['api_time'] = request._e_time_end - request._e_time_start
data['post_middleware_time'] = request._s_time_end - request._e_time_end
response.content = json.dumps(data)
response.headers['Content-Length'] = str(len(response.content))
return response
return response
class EndMiddleware:
def __init__(self, get_response):
self.get_response = get_response
if not settings.DEBUG_DEV:
raise MiddlewareNotUsed
def __call__(self, request):
request._e_time_start = time.time()
response = self.get_response(request)
request._e_time_end = time.time()
return response

View File

@ -86,6 +86,7 @@ INSTALLED_APPS = [
] ]
MIDDLEWARE = [ MIDDLEWARE = [
'jumpserver.middleware.StartMiddleware',
'django.middleware.security.SecurityMiddleware', 'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware', 'django.middleware.locale.LocaleMiddleware',
@ -105,6 +106,7 @@ MIDDLEWARE = [
'authentication.middleware.ThirdPartyLoginMiddleware', 'authentication.middleware.ThirdPartyLoginMiddleware',
'authentication.middleware.SessionCookieMiddleware', 'authentication.middleware.SessionCookieMiddleware',
'simple_history.middleware.HistoryRequestMiddleware', 'simple_history.middleware.HistoryRequestMiddleware',
'jumpserver.middleware.EndMiddleware',
] ]
ROOT_URLCONF = 'jumpserver.urls' ROOT_URLCONF = 'jumpserver.urls'

View File

@ -144,7 +144,7 @@ def check_server_performance_period():
ServerPerformanceCheckUtil().check_and_publish() ServerPerformanceCheckUtil().check_and_publish()
@shared_task(queue="ansible", verbose_name=_("Hello"), comment="an test shared task") @shared_task(verbose_name=_("Hello"), comment="an test shared task")
def hello(name, callback=None): def hello(name, callback=None):
from users.models import User from users.models import User
import time import time

View File

@ -1,4 +1,5 @@
import uuid import uuid
import time
from django.utils import timezone from django.utils import timezone
from django.db import models from django.db import models
@ -34,7 +35,7 @@ class TerminalStatusMixin:
def is_alive(self): def is_alive(self):
if not self.last_stat: if not self.last_stat:
return False return False
return self.last_stat.date_created > timezone.now() - timezone.timedelta(seconds=120) return time.time() - self.last_stat.date_created.timestamp() < 150
class StorageMixin: class StorageMixin: