feature(superuser panel): ability to view logs
users would like the ability to view build logs in the superuser panel [None]
This commit is contained in:
parent
d8e08fd5df
commit
dae93dce78
10 changed files with 224 additions and 27 deletions
|
@ -14,17 +14,20 @@ from flask import request, make_response, jsonify
|
|||
import features
|
||||
|
||||
from app import (app, avatar, superusers, authentication, config_provider, license_validator,
|
||||
all_queues)
|
||||
all_queues, log_archive, build_logs)
|
||||
from auth import scopes
|
||||
from auth.auth_context import get_authenticated_user
|
||||
from auth.permissions import SuperUserPermission
|
||||
from data.buildlogs import BuildStatusRetrievalError
|
||||
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,
|
||||
page_support, log_action, InvalidRequest)
|
||||
from endpoints.api.build import build_status_view, get_logs_or_log_url
|
||||
from endpoints.api.logs import get_logs, get_aggregate_logs
|
||||
from data import model
|
||||
from data.database import ServiceKeyApprovalType
|
||||
from endpoints.exception import NotFound
|
||||
from util.useremails import send_confirmation_email, send_recovery_email
|
||||
from util.license import decode_license, LicenseDecodeError
|
||||
from util.security.ssl import load_certificate, CertInvalidException
|
||||
|
@ -980,3 +983,61 @@ class SuperUserLicense(ApiResource):
|
|||
}
|
||||
|
||||
abort(403)
|
||||
|
||||
|
||||
@resource('/v1/superuser/<build_uuid>/logs')
|
||||
@path_param('build_uuid', 'The UUID of the build')
|
||||
@show_if(features.SUPER_USERS)
|
||||
class SuperUserRepositoryBuildLogs(ApiResource):
|
||||
""" Resource for loading repository build logs for the superuser. """
|
||||
@require_fresh_login
|
||||
@verify_not_prod
|
||||
@nickname('getRepoBuildLogsSuperUser')
|
||||
@require_scope(scopes.SUPERUSER)
|
||||
def get(self, build_uuid):
|
||||
""" Return the build logs for the build specified by the build uuid. """
|
||||
if not SuperUserPermission().can():
|
||||
abort(403)
|
||||
|
||||
return get_logs_or_log_url(model.build.get_repository_build(build_uuid))
|
||||
|
||||
|
||||
@resource('/v1/superuser/<build_uuid>/status')
|
||||
@path_param('repository', 'The full path of the repository. e.g. namespace/name')
|
||||
@path_param('build_uuid', 'The UUID of the build')
|
||||
@show_if(features.SUPER_USERS)
|
||||
class SuperUserRepositoryBuildStatus(ApiResource):
|
||||
""" Resource for dealing with repository build status. """
|
||||
@require_fresh_login
|
||||
@verify_not_prod
|
||||
@nickname('getRepoBuildStatusSuperUser')
|
||||
@require_scope(scopes.SUPERUSER)
|
||||
def get(self, build_uuid):
|
||||
""" Return the status for the builds specified by the build uuids. """
|
||||
if not SuperUserPermission().can():
|
||||
abort(403)
|
||||
build = model.build.get_repository_build(build_uuid)
|
||||
return build_status_view(build)
|
||||
|
||||
|
||||
@resource('/v1/superuser/<build_uuid>/build')
|
||||
@path_param('repository', 'The full path of the repository. e.g. namespace/name')
|
||||
@path_param('build_uuid', 'The UUID of the build')
|
||||
@show_if(features.SUPER_USERS)
|
||||
class SuperUserRepositoryBuildResource(ApiResource):
|
||||
""" Resource for dealing with repository builds as a super user. """
|
||||
@require_fresh_login
|
||||
@verify_not_prod
|
||||
@nickname('getRepoBuildSuperUser')
|
||||
@require_scope(scopes.SUPERUSER)
|
||||
def get(self, build_uuid):
|
||||
""" Returns information about a build. """
|
||||
if not SuperUserPermission().can():
|
||||
abort(403)
|
||||
|
||||
try:
|
||||
build = model.build.get_repository_build(build_uuid)
|
||||
except model.build.InvalidRepositoryBuildException:
|
||||
raise NotFound()
|
||||
|
||||
return build_status_view(build)
|
||||
|
|
Reference in a new issue