mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-20 10:58:33 +00:00
sysadmin user and org traffic api (#4232)
This commit is contained in:
@@ -194,6 +194,127 @@ def get_time_offset():
|
|||||||
return offset[:3] + ':' + offset[3:]
|
return offset[:3] + ':' + offset[3:]
|
||||||
|
|
||||||
|
|
||||||
|
class SystemUserTrafficView(APIView):
|
||||||
|
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
||||||
|
throttle_classes = (UserRateThrottle,)
|
||||||
|
permission_classes = (IsAdminUser,)
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
|
||||||
|
month = request.GET.get("month", "")
|
||||||
|
if not month:
|
||||||
|
error_msg = "month invalid."
|
||||||
|
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||||
|
|
||||||
|
try:
|
||||||
|
month_obj = datetime.datetime.strptime(month, "%Y%m")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(e)
|
||||||
|
error_msg = "month %s invalid" % month
|
||||||
|
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||||
|
|
||||||
|
try:
|
||||||
|
page = int(request.GET.get('page', '1'))
|
||||||
|
per_page = int(request.GET.get('per_page', '25'))
|
||||||
|
except ValueError:
|
||||||
|
page = 1
|
||||||
|
per_page = 25
|
||||||
|
start = (page - 1) * per_page
|
||||||
|
|
||||||
|
# get one more item than per_page, to judge has_next_page
|
||||||
|
try:
|
||||||
|
traffics = seafevents_api.get_all_users_traffic_by_month(month_obj, start, start + per_page + 1)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(e)
|
||||||
|
error_msg = 'Internal Server Error'
|
||||||
|
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||||
|
|
||||||
|
if len(traffics) == per_page + 1:
|
||||||
|
has_next_page = True
|
||||||
|
traffics = traffics[:per_page]
|
||||||
|
else:
|
||||||
|
has_next_page = False
|
||||||
|
|
||||||
|
user_monthly_traffic_list = []
|
||||||
|
for traffic in traffics:
|
||||||
|
info = {}
|
||||||
|
info['email'] = traffic['user']
|
||||||
|
info['name'] = email2nickname(traffic['user'])
|
||||||
|
info['sync_file_upload'] = traffic['sync_file_upload']
|
||||||
|
info['sync_file_download'] = traffic['sync_file_download']
|
||||||
|
info['web_file_upload'] = traffic['web_file_upload']
|
||||||
|
info['web_file_download'] = traffic['web_file_download']
|
||||||
|
info['link_file_upload'] = traffic['link_file_upload']
|
||||||
|
info['link_file_download'] = traffic['link_file_download']
|
||||||
|
user_monthly_traffic_list.append(info)
|
||||||
|
|
||||||
|
return Response({
|
||||||
|
'user_monthly_traffic_list': user_monthly_traffic_list,
|
||||||
|
'has_next_page': has_next_page
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
class SystemOrgTrafficView(APIView):
|
||||||
|
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
||||||
|
throttle_classes = (UserRateThrottle,)
|
||||||
|
permission_classes = (IsAdminUser,)
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
|
||||||
|
month = request.GET.get("month", "")
|
||||||
|
if not month:
|
||||||
|
error_msg = "month invalid."
|
||||||
|
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||||
|
|
||||||
|
try:
|
||||||
|
month_obj = datetime.datetime.strptime(month, "%Y%m")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(e)
|
||||||
|
error_msg = "month %s invalid" % month
|
||||||
|
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||||
|
|
||||||
|
try:
|
||||||
|
page = int(request.GET.get('page', '1'))
|
||||||
|
per_page = int(request.GET.get('per_page', '25'))
|
||||||
|
except ValueError:
|
||||||
|
page = 1
|
||||||
|
per_page = 25
|
||||||
|
start = (page - 1) * per_page
|
||||||
|
|
||||||
|
# get one more item than per_page, to judge has_next_page
|
||||||
|
try:
|
||||||
|
traffics = seafevents_api.get_all_orgs_traffic_by_month(month_obj, start, start + per_page + 1)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(e)
|
||||||
|
error_msg = 'Internal Server Error'
|
||||||
|
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||||
|
|
||||||
|
if len(traffics) == per_page + 1:
|
||||||
|
has_next_page = True
|
||||||
|
traffics = traffics[:per_page]
|
||||||
|
else:
|
||||||
|
has_next_page = False
|
||||||
|
|
||||||
|
org_monthly_traffic_list = []
|
||||||
|
for traffic in traffics:
|
||||||
|
info = {}
|
||||||
|
info['org_id'] = traffic['org_id']
|
||||||
|
org = ccnet_api.get_org_by_id(traffic['org_id'])
|
||||||
|
info['org_name'] = org.org_name if org else ''
|
||||||
|
info['sync_file_upload'] = traffic['sync_file_upload']
|
||||||
|
info['sync_file_download'] = traffic['sync_file_download']
|
||||||
|
info['web_file_upload'] = traffic['web_file_upload']
|
||||||
|
info['web_file_download'] = traffic['web_file_download']
|
||||||
|
info['link_file_upload'] = traffic['link_file_upload']
|
||||||
|
info['link_file_download'] = traffic['link_file_download']
|
||||||
|
org_monthly_traffic_list.append(info)
|
||||||
|
|
||||||
|
return Response({
|
||||||
|
'org_monthly_traffic_list': org_monthly_traffic_list,
|
||||||
|
'has_next_page': has_next_page,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
class SystemUserTrafficExcelView(APIView):
|
class SystemUserTrafficExcelView(APIView):
|
||||||
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
||||||
throttle_classes = (UserRateThrottle,)
|
throttle_classes = (UserRateThrottle,)
|
||||||
|
@@ -105,7 +105,8 @@ from seahub.api2.endpoints.admin.sysinfo import SysInfo
|
|||||||
from seahub.api2.endpoints.admin.web_settings import AdminWebSettings
|
from seahub.api2.endpoints.admin.web_settings import AdminWebSettings
|
||||||
from seahub.api2.endpoints.admin.statistics import (
|
from seahub.api2.endpoints.admin.statistics import (
|
||||||
FileOperationsView, TotalStorageView, ActiveUsersView, SystemTrafficView, \
|
FileOperationsView, TotalStorageView, ActiveUsersView, SystemTrafficView, \
|
||||||
SystemUserTrafficExcelView, SystemUserStorageExcelView
|
SystemUserTrafficExcelView, SystemUserStorageExcelView, SystemUserTrafficView, \
|
||||||
|
SystemOrgTrafficView
|
||||||
)
|
)
|
||||||
from seahub.api2.endpoints.admin.devices import AdminDevices
|
from seahub.api2.endpoints.admin.devices import AdminDevices
|
||||||
from seahub.api2.endpoints.admin.device_errors import AdminDeviceErrors
|
from seahub.api2.endpoints.admin.device_errors import AdminDeviceErrors
|
||||||
@@ -472,6 +473,8 @@ urlpatterns = [
|
|||||||
url(r'^api/v2.1/admin/statistics/total-storage/$', TotalStorageView.as_view(), name='api-v2.1-admin-statistics-total-storage'),
|
url(r'^api/v2.1/admin/statistics/total-storage/$', TotalStorageView.as_view(), name='api-v2.1-admin-statistics-total-storage'),
|
||||||
url(r'^api/v2.1/admin/statistics/active-users/$', ActiveUsersView.as_view(), name='api-v2.1-admin-statistics-active-users'),
|
url(r'^api/v2.1/admin/statistics/active-users/$', ActiveUsersView.as_view(), name='api-v2.1-admin-statistics-active-users'),
|
||||||
url(r'^api/v2.1/admin/statistics/system-traffic/$', SystemTrafficView.as_view(), name='api-v2.1-admin-statistics-system-traffic'),
|
url(r'^api/v2.1/admin/statistics/system-traffic/$', SystemTrafficView.as_view(), name='api-v2.1-admin-statistics-system-traffic'),
|
||||||
|
url(r'^api/v2.1/admin/statistics/system-user-traffic/$', SystemUserTrafficView.as_view(), name='api-v2.1-admin-statistics-system-user-traffic'),
|
||||||
|
url(r'^api/v2.1/admin/statistics/system-org-traffic/$', SystemOrgTrafficView.as_view(), name='api-v2.1-admin-statistics-system-org-traffic'),
|
||||||
url(r'^api/v2.1/admin/statistics/system-user-traffic/excel/$', SystemUserTrafficExcelView.as_view(), name='api-v2.1-admin-statistics-system-user-traffic-excel'),
|
url(r'^api/v2.1/admin/statistics/system-user-traffic/excel/$', SystemUserTrafficExcelView.as_view(), name='api-v2.1-admin-statistics-system-user-traffic-excel'),
|
||||||
url(r'^api/v2.1/admin/statistics/system-user-storage/excel/$', SystemUserStorageExcelView.as_view(), name='api-v2.1-admin-statistics-system-user-storage-excel'),
|
url(r'^api/v2.1/admin/statistics/system-user-storage/excel/$', SystemUserStorageExcelView.as_view(), name='api-v2.1-admin-statistics-system-user-storage-excel'),
|
||||||
## admin::users
|
## admin::users
|
||||||
|
Reference in New Issue
Block a user