1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-18 00:00:00 +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 django.utils import timezone
from seahub.utils import get_file_ops_stats, get_file_ops_stats_by_day, \ 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_total_storage_stats_by_day, get_user_activity_stats_by_day, \
get_user_activity_stats, get_user_activity_stats_by_day, \
is_pro_version, EVENTS_ENABLED is_pro_version, EVENTS_ENABLED
from seahub.utils.timeutils import datetime_to_isoformat_timestr from seahub.utils.timeutils import datetime_to_isoformat_timestr
from seahub.settings import TIME_ZONE from seahub.settings import TIME_ZONE
@@ -21,23 +20,18 @@ from seahub.api2.throttling import UserRateThrottle
from seahub.api2.utils import api_error from seahub.api2.utils import api_error
def check_parameter(func): def check_parameter(func):
def _decorated(view, request, *args, **kwargs): def _decorated(view, request, *args, **kwargs):
if not is_pro_version() or not EVENTS_ENABLED: if not is_pro_version() or not EVENTS_ENABLED:
return api_error(status.HTTP_404_NOT_FOUND, 'Events not enabled.') return api_error(status.HTTP_404_NOT_FOUND, 'Events not enabled.')
start_time = request.GET.get("start", "") start_time = request.GET.get("start", "")
end_time = request.GET.get("end", "") end_time = request.GET.get("end", "")
group_by = request.GET.get("group_by", "hour")
if not start_time: if not start_time:
error_msg = "Start time can not be empty" error_msg = "Start time can not be empty"
return api_error(status.HTTP_400_BAD_REQUEST, error_msg) return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
if not end_time: if not end_time:
error_msg = "End time can not be empty" error_msg = "End time can not be empty"
return api_error(status.HTTP_400_BAD_REQUEST, error_msg) 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: try:
start_time = datetime.datetime.strptime(start_time, start_time = datetime.datetime.strptime(start_time,
"%Y-%m-%d %H:%M:%S") "%Y-%m-%d %H:%M:%S")
@@ -51,7 +45,7 @@ def check_parameter(func):
error_msg = "End time %s invalid" % end_time error_msg = "End time %s invalid" % end_time
return api_error(status.HTTP_400_BAD_REQUEST, error_msg) 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 return _decorated
@@ -66,7 +60,7 @@ class FileOperationsView(APIView):
permission_classes = (IsAdminUser,) permission_classes = (IsAdminUser,)
@check_parameter @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. Get records of the specified time range.
param: param:
@@ -76,6 +70,11 @@ class FileOperationsView(APIView):
return: return:
the list of file operations record. 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) 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_added_dict = get_init_data(start_time, end_time, group_by)
ops_visited_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,) permission_classes = (IsAdminUser,)
@check_parameter @check_parameter
def get(self, request, start_time, end_time, group_by): def get(self, request, start_time, end_time):
data = get_data_by_hour_or_day(group_by, start_time, end_time, get_total_storage_stats, get_total_storage_stats_by_day) data = get_total_storage_stats_by_day(start_time, end_time, get_time_offset())
res_data = [] 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: for e in data:
init_data[e[0]] = e[1] init_data[e[0]] = e[1]
for k, v in init_data.items(): for k, v in init_data.items():
@@ -123,11 +122,11 @@ class ActiveUsersView(APIView):
permission_classes = (IsAdminUser,) permission_classes = (IsAdminUser,)
@check_parameter @check_parameter
def get(self, request, start_time, end_time, group_by): def get(self, request, start_time, end_time):
data = get_data_by_hour_or_day(group_by, start_time, end_time, get_user_activity_stats, get_user_activity_stats_by_day) data = get_user_activity_stats_by_day(start_time, end_time, get_time_offset())
res_data = [] 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: for e in data:
init_data[e[0]] = e[1] init_data[e[0]] = e[1]
for k, v in init_data.items(): for k, v in init_data.items():
@@ -154,11 +153,14 @@ def get_init_data(start_time, end_time, group_by):
res[dt] = 0 res[dt] = 0
return res return res
def get_time_offset():
def get_data_by_hour_or_day(parameter, start_time, end_time, func, func_by_day):
timezone_name = timezone.get_current_timezone_name() timezone_name = timezone.get_current_timezone_name()
offset = pytz.timezone(timezone_name).localize(datetime.datetime.now()).strftime('%z') 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": if parameter == "hour":
data = func(start_time, end_time, offset) data = func(start_time, end_time, offset)
elif parameter == "day": elif parameter == "day":

View File

@@ -629,13 +629,6 @@ if EVENTS_CONFIG_FILE:
""" """
return _get_events(username, start, count) 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): 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) res = seafevents.get_file_ops_stats_by_day(session, start, end, offset)
return res 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): def get_total_storage_stats_by_day(start, end, offset):
""" """
""" """
@@ -763,8 +749,6 @@ else:
EVENTS_ENABLED = False EVENTS_ENABLED = False
def get_user_events(): def get_user_events():
pass pass
def get_user_activity_stats():
pass
def get_user_activity_stats_by_day(): def get_user_activity_stats_by_day():
pass pass
def get_log_events_by_time(): def get_log_events_by_time():
@@ -781,8 +765,6 @@ else:
pass pass
def get_file_ops_stats_by_day(): def get_file_ops_stats_by_day():
pass pass
def get_total_storage_stats():
pass
def get_total_storage_stats_by_day(): def get_total_storage_stats_by_day():
pass pass
def get_file_update_events(): 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.EVENTS_ENABLED")
@patch("seahub.api2.endpoints.admin.statistics.is_pro_version") @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") @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, def test_can_user_activity_stats(self, mock_stats_by_day, mock_is_pro,
mock_is_pro, mock_events_enabled): mock_events_enabled):
mock_stats.return_value = [(datetime.datetime(2017, 6, 2, 7, 0), 2L),
(datetime.datetime(2017, 6, 2, 8, 0), 5L)]
mock_stats_by_day.return_value = [(datetime.datetime(2017, 6, 2, 4, 0), 3L)] mock_stats_by_day.return_value = [(datetime.datetime(2017, 6, 2, 4, 0), 3L)]
mock_is_pro.return_value = True mock_is_pro.return_value = True
mock_events_enabled = True mock_events_enabled = True
url = reverse('api-v2.1-admin-statistics-active-users') 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) url += "?start=2017-06-01 07:00:00&end=2017-06-03 07:00:00"
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"
resp = self.client.get(url) resp = self.client.get(url)
json_resp = json.loads(resp.content) json_resp = json.loads(resp.content)
self.assertEqual(200, resp.status_code) 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.EVENTS_ENABLED")
@patch("seahub.api2.endpoints.admin.statistics.is_pro_version") @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") @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, def test_can_get_total_storage_stats(self, mock_stats_by_day, mock_is_pro,
mock_is_pro, mock_events_enabled): mock_events_enabled):
mock_stats.return_value = [(datetime.datetime(2017, 6, 2, 7, 0), 2L),
(datetime.datetime(2017, 6, 2, 8, 0), 5L)]
mock_stats_by_day.return_value = [(datetime.datetime(2017, 6, 2, 3, 0), 13L)] mock_stats_by_day.return_value = [(datetime.datetime(2017, 6, 2, 3, 0), 13L)]
mock_is_pro.return_value = True mock_is_pro.return_value = True
mock_events_enabled = True mock_events_enabled = True
url = reverse('api-v2.1-admin-statistics-total-storage') 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" 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)
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"
resp = self.client.get(url) resp = self.client.get(url)
json_resp = json.loads(resp.content) json_resp = json.loads(resp.content)
self.assertEqual(200, resp.status_code) self.assertEqual(200, resp.status_code)