Log more information to the action logs and display the namespaces for superusers

This helps superusers understand better what, exactly, is going on in the registry
This commit is contained in:
Joseph Schorr 2017-02-14 14:55:24 -05:00
parent 2b189694a8
commit 11c931f781
10 changed files with 88 additions and 40 deletions

View file

@ -20,7 +20,7 @@ LOGS_PER_PAGE = 20
SERVICE_LEVEL_LOG_KINDS = set(['service_key_create', 'service_key_approve', 'service_key_delete',
'service_key_modify', 'service_key_extend', 'service_key_rotate'])
def log_view(log, kinds):
def log_view(log, kinds, include_namespace):
view = {
'kind': kinds[log.kind_id],
'metadata': json.loads(log.metadata_json),
@ -33,9 +33,24 @@ def log_view(log, kinds):
'kind': 'user',
'name': log.performer.username,
'is_robot': log.performer.robot,
'avatar': avatar.get_data_for_user(log.performer)
'avatar': avatar.get_data_for_user(log.performer),
}
if include_namespace:
if log.account and log.account.username:
if log.account.organization:
view['namespace'] = {
'kind': 'org',
'name': log.account.username,
'avatar': avatar.get_data_for_org(log.account),
}
else:
view['namespace'] = {
'kind': 'user',
'name': log.account.username,
'avatar': avatar.get_data_for_user(log.account),
}
return view
def aggregated_log_view(log, kinds, start_time):
@ -92,10 +107,11 @@ def get_logs(start_time, end_time, performer_name=None, repository=None, namespa
logs, next_page_token = model.modelutil.paginate(logs_query, database.LogEntry, descending=True,
page_token=page_token, limit=LOGS_PER_PAGE)
include_namespace = namespace is None and repository is None
return {
'start_time': format_date(start_time),
'end_time': format_date(end_time),
'logs': [log_view(log, kinds) for log in logs],
'logs': [log_view(log, kinds, include_namespace) for log in logs],
}, next_page_token

View file

@ -98,6 +98,8 @@ class RepositoryManifestLabels(RepositoryParamResource):
'value': label_data['value'],
'manifest_digest': manifestref,
'media_type': label_data['media_type'],
'namespace': namespace,
'repo': repository,
}
log_action('manifest_label_add', namespace, metadata, repo=tag_manifest.tag.repository)
@ -150,7 +152,9 @@ class ManageRepositoryManifestLabel(RepositoryParamResource):
'id': labelid,
'key': deleted.key,
'value': deleted.value,
'manifest_digest': manifestref
'manifest_digest': manifestref,
'namespace': namespace,
'repo': repository,
}
log_action('manifest_label_delete', namespace, metadata, repo=tag_manifest.tag.repository)

View file

@ -194,6 +194,7 @@ class RepositoryUserPermission(RepositoryParamResource):
log_action('change_repo_permission', namespace,
{'username': username, 'repo': repository,
'namespace': namespace,
'role': new_permission['role']},
repo=model.repository.get_repository(namespace, repository))
@ -209,7 +210,7 @@ class RepositoryUserPermission(RepositoryParamResource):
raise request_error(exception=ex)
log_action('delete_repo_permission', namespace,
{'username': username, 'repo': repository},
{'username': username, 'repo': repository, 'namespace': namespace},
repo=model.repository.get_repository(namespace, repository))
return '', 204

View file

@ -340,7 +340,7 @@ class Repository(RepositoryParamResource):
repo.save()
log_action('set_repo_description', namespace,
{'repo': repository, 'description': values['description']},
{'repo': repository, 'namespace': namespace, 'description': values['description']},
repo=repo)
return {
'success': True
@ -404,6 +404,6 @@ class RepositoryVisibility(RepositoryParamResource):
model.repository.set_repository_visibility(repo, visibility)
log_action('change_repo_visibility', namespace,
{'repo': repository, 'visibility': values['visibility']},
{'repo': repository, 'namespace': namespace, 'visibility': values['visibility']},
repo=repo)
return {'success': True}

View file

@ -102,7 +102,8 @@ class RepositoryNotificationList(RepositoryParamResource):
resp = notification_view(new_notification)
log_action('add_repo_notification', namespace,
{'repo': repository, 'notification_id': new_notification.uuid,
{'repo': repository, 'namespace': namespace,
'notification_id': new_notification.uuid,
'event': parsed['event'], 'method': parsed['method']},
repo=repo)
return resp, 201
@ -143,7 +144,7 @@ class RepositoryNotification(RepositoryParamResource):
""" Deletes the specified notification. """
deleted = model.notification.delete_repo_notification(namespace, repository, uuid)
log_action('delete_repo_notification', namespace,
{'repo': repository, 'notification_id': uuid,
{'repo': repository, 'namespace': namespace, 'notification_id': uuid,
'event': deleted.event.name, 'method': deleted.method.name},
repo=model.repository.get_repository(namespace, repository))

View file

@ -106,7 +106,8 @@ class RepositoryTag(RepositoryParamResource):
username = get_authenticated_user().username
log_action('move_tag' if original_image_id else 'create_tag', namespace,
{'username': username, 'repo': repository, 'tag': tag,
'image': image_id, 'original_image': original_image_id},
'namespace': namespace, 'image': image_id,
'original_image': original_image_id},
repo=model.repository.get_repository(namespace, repository))
return 'Updated', 201
@ -119,7 +120,7 @@ class RepositoryTag(RepositoryParamResource):
username = get_authenticated_user().username
log_action('delete_tag', namespace,
{'username': username, 'repo': repository, 'tag': tag},
{'username': username, 'repo': repository, 'namespace': namespace, 'tag': tag},
repo=model.repository.get_repository(namespace, repository))
return '', 204