mirror of
https://github.com/haiwen/seahub.git
synced 2025-08-02 15:57:31 +00:00
del statistics by hour(user activity, total storage)
This commit is contained in:
parent
ed52ab67c3
commit
2be35db8df
@ -10,8 +10,7 @@ from rest_framework import status
|
||||
from django.utils import timezone
|
||||
|
||||
from seahub.utils import get_file_ops_stats, get_file_ops_stats_by_day, \
|
||||
get_total_storage_stats, get_total_storage_stats_by_day, \
|
||||
get_user_activity_stats, get_user_activity_stats_by_day, \
|
||||
get_total_storage_stats_by_day, get_user_activity_stats_by_day, \
|
||||
is_pro_version, EVENTS_ENABLED
|
||||
from seahub.utils.timeutils import datetime_to_isoformat_timestr
|
||||
from seahub.settings import TIME_ZONE
|
||||
@ -21,23 +20,18 @@ from seahub.api2.throttling import UserRateThrottle
|
||||
from seahub.api2.utils import api_error
|
||||
|
||||
|
||||
|
||||
def check_parameter(func):
|
||||
def _decorated(view, request, *args, **kwargs):
|
||||
if not is_pro_version() or not EVENTS_ENABLED:
|
||||
return api_error(status.HTTP_404_NOT_FOUND, 'Events not enabled.')
|
||||
start_time = request.GET.get("start", "")
|
||||
end_time = request.GET.get("end", "")
|
||||
group_by = request.GET.get("group_by", "hour")
|
||||
if not start_time:
|
||||
error_msg = "Start time can not be empty"
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
if not end_time:
|
||||
error_msg = "End time can not be empty"
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
if group_by.lower() not in ["hour", "day"]:
|
||||
error_msg = "group_by can only be day or hour."
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
try:
|
||||
start_time = datetime.datetime.strptime(start_time,
|
||||
"%Y-%m-%d %H:%M:%S")
|
||||
@ -51,7 +45,7 @@ def check_parameter(func):
|
||||
error_msg = "End time %s invalid" % end_time
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
return func(view, request, start_time, end_time, group_by)
|
||||
return func(view, request, start_time, end_time)
|
||||
return _decorated
|
||||
|
||||
|
||||
@ -66,7 +60,7 @@ class FileOperationsView(APIView):
|
||||
permission_classes = (IsAdminUser,)
|
||||
|
||||
@check_parameter
|
||||
def get(self, request, start_time, end_time, group_by):
|
||||
def get(self, request, start_time, end_time):
|
||||
"""
|
||||
Get records of the specified time range.
|
||||
param:
|
||||
@ -76,6 +70,11 @@ class FileOperationsView(APIView):
|
||||
return:
|
||||
the list of file operations record.
|
||||
"""
|
||||
group_by = request.GET.get("group_by", "hour")
|
||||
if group_by.lower() not in ["hour", "day"]:
|
||||
error_msg = "group_by can only be day or hour."
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
data = get_data_by_hour_or_day(group_by, start_time, end_time, get_file_ops_stats, get_file_ops_stats_by_day)
|
||||
ops_added_dict = get_init_data(start_time, end_time, group_by)
|
||||
ops_visited_dict = get_init_data(start_time, end_time, group_by)
|
||||
@ -104,11 +103,11 @@ class TotalStorageView(APIView):
|
||||
permission_classes = (IsAdminUser,)
|
||||
|
||||
@check_parameter
|
||||
def get(self, request, start_time, end_time, group_by):
|
||||
data = get_data_by_hour_or_day(group_by, start_time, end_time, get_total_storage_stats, get_total_storage_stats_by_day)
|
||||
def get(self, request, start_time, end_time):
|
||||
data = get_total_storage_stats_by_day(start_time, end_time, get_time_offset())
|
||||
|
||||
res_data = []
|
||||
init_data = get_init_data(start_time, end_time, group_by)
|
||||
init_data = get_init_data(start_time, end_time, 'day')
|
||||
for e in data:
|
||||
init_data[e[0]] = e[1]
|
||||
for k, v in init_data.items():
|
||||
@ -123,11 +122,11 @@ class ActiveUsersView(APIView):
|
||||
permission_classes = (IsAdminUser,)
|
||||
|
||||
@check_parameter
|
||||
def get(self, request, start_time, end_time, group_by):
|
||||
data = get_data_by_hour_or_day(group_by, start_time, end_time, get_user_activity_stats, get_user_activity_stats_by_day)
|
||||
def get(self, request, start_time, end_time):
|
||||
data = get_user_activity_stats_by_day(start_time, end_time, get_time_offset())
|
||||
|
||||
res_data = []
|
||||
init_data = get_init_data(start_time, end_time, group_by)
|
||||
init_data = get_init_data(start_time, end_time, 'day')
|
||||
for e in data:
|
||||
init_data[e[0]] = e[1]
|
||||
for k, v in init_data.items():
|
||||
@ -154,11 +153,14 @@ def get_init_data(start_time, end_time, group_by):
|
||||
res[dt] = 0
|
||||
return res
|
||||
|
||||
|
||||
def get_data_by_hour_or_day(parameter, start_time, end_time, func, func_by_day):
|
||||
def get_time_offset():
|
||||
timezone_name = timezone.get_current_timezone_name()
|
||||
offset = pytz.timezone(timezone_name).localize(datetime.datetime.now()).strftime('%z')
|
||||
offset = offset[:3] + ':' + offset[3:]
|
||||
return offset[:3] + ':' + offset[3:]
|
||||
|
||||
|
||||
def get_data_by_hour_or_day(parameter, start_time, end_time, func, func_by_day):
|
||||
offset = get_time_offset()
|
||||
if parameter == "hour":
|
||||
data = func(start_time, end_time, offset)
|
||||
elif parameter == "day":
|
||||
|
@ -629,13 +629,6 @@ if EVENTS_CONFIG_FILE:
|
||||
"""
|
||||
return _get_events(username, start, count)
|
||||
|
||||
def get_user_activity_stats(start, end, offset):
|
||||
""" Return user activity record of the specified time
|
||||
"""
|
||||
with _get_seafevents_session() as session:
|
||||
res = seafevents.get_user_activity_stats(session, start, end, offset)
|
||||
return res
|
||||
|
||||
def get_user_activity_stats_by_day(start, end, offset):
|
||||
"""
|
||||
"""
|
||||
@ -706,13 +699,6 @@ if EVENTS_CONFIG_FILE:
|
||||
res = seafevents.get_file_ops_stats_by_day(session, start, end, offset)
|
||||
return res
|
||||
|
||||
def get_total_storage_stats(start, end, offset):
|
||||
""" Return total storage record of specified time.
|
||||
"""
|
||||
with _get_seafevents_session() as session:
|
||||
res = seafevents.get_total_storage_stats(session, start, end, offset)
|
||||
return res
|
||||
|
||||
def get_total_storage_stats_by_day(start, end, offset):
|
||||
"""
|
||||
"""
|
||||
@ -763,8 +749,6 @@ else:
|
||||
EVENTS_ENABLED = False
|
||||
def get_user_events():
|
||||
pass
|
||||
def get_user_activity_stats():
|
||||
pass
|
||||
def get_user_activity_stats_by_day():
|
||||
pass
|
||||
def get_log_events_by_time():
|
||||
@ -781,8 +765,6 @@ else:
|
||||
pass
|
||||
def get_file_ops_stats_by_day():
|
||||
pass
|
||||
def get_total_storage_stats():
|
||||
pass
|
||||
def get_total_storage_stats_by_day():
|
||||
pass
|
||||
def get_file_update_events():
|
||||
|
@ -54,26 +54,15 @@ class FileOperationsInfoText(BaseTestCase):
|
||||
|
||||
@patch("seahub.api2.endpoints.admin.statistics.EVENTS_ENABLED")
|
||||
@patch("seahub.api2.endpoints.admin.statistics.is_pro_version")
|
||||
@patch("seahub.api2.endpoints.admin.statistics.get_user_activity_stats")
|
||||
@patch("seahub.api2.endpoints.admin.statistics.get_user_activity_stats_by_day")
|
||||
def test_can_user_activity_stats(self, mock_stats_by_day, mock_stats,
|
||||
mock_is_pro, mock_events_enabled):
|
||||
mock_stats.return_value = [(datetime.datetime(2017, 6, 2, 7, 0), 2L),
|
||||
(datetime.datetime(2017, 6, 2, 8, 0), 5L)]
|
||||
def test_can_user_activity_stats(self, mock_stats_by_day, mock_is_pro,
|
||||
mock_events_enabled):
|
||||
mock_stats_by_day.return_value = [(datetime.datetime(2017, 6, 2, 4, 0), 3L)]
|
||||
mock_is_pro.return_value = True
|
||||
mock_events_enabled = True
|
||||
url = reverse('api-v2.1-admin-statistics-active-users')
|
||||
url += "?start=2017-06-01 07:00:00&end=2017-06-03 07:00:00&group_by=hour"
|
||||
resp = self.client.get(url)
|
||||
json_resp = json.loads(resp.content)
|
||||
|
||||
self.assertEqual(200, resp.status_code)
|
||||
data = {'datetime': datetime_to_isoformat_timestr(datetime.datetime(2017, 6, 2, 7, 0)), 'count': 2}
|
||||
assert data in json_resp
|
||||
data = {'datetime': datetime_to_isoformat_timestr(datetime.datetime(2017, 6, 2, 8, 0)), 'count': 5}
|
||||
assert data in json_resp
|
||||
url += "?start=2017-06-01 07:00:00&end=2017-06-03 07:00:00&group_by=day"
|
||||
url += "?start=2017-06-01 07:00:00&end=2017-06-03 07:00:00"
|
||||
resp = self.client.get(url)
|
||||
json_resp = json.loads(resp.content)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
@ -82,26 +71,14 @@ class FileOperationsInfoText(BaseTestCase):
|
||||
|
||||
@patch("seahub.api2.endpoints.admin.statistics.EVENTS_ENABLED")
|
||||
@patch("seahub.api2.endpoints.admin.statistics.is_pro_version")
|
||||
@patch("seahub.api2.endpoints.admin.statistics.get_total_storage_stats")
|
||||
@patch("seahub.api2.endpoints.admin.statistics.get_total_storage_stats_by_day")
|
||||
def test_can_get_total_storage_stats(self, mock_stats_by_day, mock_stats,
|
||||
mock_is_pro, mock_events_enabled):
|
||||
mock_stats.return_value = [(datetime.datetime(2017, 6, 2, 7, 0), 2L),
|
||||
(datetime.datetime(2017, 6, 2, 8, 0), 5L)]
|
||||
def test_can_get_total_storage_stats(self, mock_stats_by_day, mock_is_pro,
|
||||
mock_events_enabled):
|
||||
mock_stats_by_day.return_value = [(datetime.datetime(2017, 6, 2, 3, 0), 13L)]
|
||||
mock_is_pro.return_value = True
|
||||
mock_events_enabled = True
|
||||
url = reverse('api-v2.1-admin-statistics-total-storage')
|
||||
url += "?start=2017-06-01 07:00:00&end=2017-06-03 07:00:00&group_by=hour"
|
||||
resp = self.client.get(url)
|
||||
|
||||
json_resp = json.loads(resp.content)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
data = {'datetime': datetime_to_isoformat_timestr(datetime.datetime(2017, 6, 2, 7, 0)), 'total_storage': 2}
|
||||
assert data in json_resp
|
||||
data = {'datetime': datetime_to_isoformat_timestr(datetime.datetime(2017, 6, 2, 8, 0)), 'total_storage': 5}
|
||||
assert data in json_resp
|
||||
url += "?start=2017-06-01 07:00:00&end=2017-06-03 07:00:00&group_by=day"
|
||||
url += "?start=2017-06-01 07:00:00&end=2017-06-03 07:00:00"
|
||||
resp = self.client.get(url)
|
||||
json_resp = json.loads(resp.content)
|
||||
self.assertEqual(200, resp.status_code)
|
||||
|
Loading…
Reference in New Issue
Block a user