1
0
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:
zming 2017-11-17 16:13:55 +08:00
parent ed52ab67c3
commit 2be35db8df
3 changed files with 26 additions and 65 deletions

View File

@ -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":

View File

@ -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():

View File

@ -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)