From 48cf33a8c1a7377a4cdee5dce1be627cd2fc2edd Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Fri, 4 Sep 2015 16:48:32 -0400 Subject: [PATCH] Add missing superuser aggregate logs endpoint Reference: https://d33v4339jhl8k0.cloudfront.net/inline/18403/7664a00bc6391e80409134f7d579928954749304/d47d28ea4e2d66cd110c53622ee2b5ced21e7724/Screen-Shot-2015-09-04-at-11-04-41.png --- endpoints/api/superuser.py | 30 +++++++++++++++++++++++++----- test/test_api_security.py | 21 ++++++++++++++++++++- 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/endpoints/api/superuser.py b/endpoints/api/superuser.py index e2bbee4c5..8d66a2fce 100644 --- a/endpoints/api/superuser.py +++ b/endpoints/api/superuser.py @@ -13,7 +13,7 @@ from app import app, avatar, superusers, authentication from endpoints.api import (ApiResource, nickname, resource, validate_json_request, internal_only, require_scope, show_if, parse_args, query_param, abort, require_fresh_login, path_param, verify_not_prod) -from endpoints.api.logs import get_logs +from endpoints.api.logs import get_logs, get_aggregate_logs from data import model from auth.permissions import SuperUserPermission from auth import scopes @@ -83,6 +83,26 @@ class SuperUserSystemLogServices(ApiResource): abort(403) +@resource('/v1/superuser/aggregatelogs') +@internal_only +class SuperUserAggregateLogs(ApiResource): + """ Resource for fetching aggregated logs for the current user. """ + @require_fresh_login + @verify_not_prod + @nickname('listAllAggregateLogs') + @parse_args + @query_param('starttime', 'Earliest time from which to get logs. (%m/%d/%Y %Z)', type=str) + @query_param('endtime', 'Latest time to which to get logs. (%m/%d/%Y %Z)', type=str) + def get(self, args): + """ Returns the aggregated logs for the current system. """ + if SuperUserPermission().can(): + start_time = args['starttime'] + end_time = args['endtime'] + + return get_aggregate_logs(start_time, end_time) + + abort(403) + @resource('/v1/superuser/logs') @internal_only @@ -93,9 +113,9 @@ class SuperUserLogs(ApiResource): @verify_not_prod @nickname('listAllLogs') @parse_args - @query_param('starttime', 'Earliest time from which to get logs. (%m/%d/%Y %Z)', type=str) - @query_param('endtime', 'Latest time to which to get logs. (%m/%d/%Y %Z)', type=str) - @query_param('performer', 'Username for which to filter logs.', type=str) + @query_param('starttime', 'Earliest time from which to get logs (%m/%d/%Y %Z)', type=str) + @query_param('endtime', 'Latest time to which to get logs (%m/%d/%Y %Z)', type=str) + @query_param('page', 'The page number for the logs', type=int, default=1) @require_scope(scopes.SUPERUSER) def get(self, args): """ List the usage logs for the current system. """ @@ -103,7 +123,7 @@ class SuperUserLogs(ApiResource): start_time = args['starttime'] end_time = args['endtime'] - return get_logs(start_time, end_time) + return get_logs(start_time, end_time, page=args['page']) abort(403) diff --git a/test/test_api_security.py b/test/test_api_security.py index 8b2acdf6f..3b0f3cad1 100644 --- a/test/test_api_security.py +++ b/test/test_api_security.py @@ -47,7 +47,8 @@ from endpoints.api.permission import (RepositoryUserPermission, RepositoryTeamPe RepositoryUserTransitivePermission) from endpoints.api.superuser import (SuperUserLogs, SuperUserList, SuperUserManagement, SuperUserSendRecoveryEmail, ChangeLog, - SuperUserOrganizationManagement, SuperUserOrganizationList) + SuperUserOrganizationManagement, SuperUserOrganizationList, + SuperUserAggregateLogs) try: @@ -3928,6 +3929,24 @@ class TestUserAuthorization(ApiTestCase): self._run_test('DELETE', 404, 'devtable', None) +class TestSuperAggregateUserLogs(ApiTestCase): + def setUp(self): + ApiTestCase.setUp(self) + self._set_url(SuperUserAggregateLogs) + + def test_get_anonymous(self): + self._run_test('GET', 401, None, None) + + def test_get_freshuser(self): + self._run_test('GET', 403, 'freshuser', None) + + def test_get_reader(self): + self._run_test('GET', 403, 'reader', None) + + def test_get_devtable(self): + self._run_test('GET', 200, 'devtable', None) + + class TestSuperUserLogs(ApiTestCase): def setUp(self): ApiTestCase.setUp(self)