Add audit log to app settings page
This commit is contained in:
parent
3e07d95969
commit
927d1b7925
@ -22,6 +22,15 @@ class AuditEventQuery(Query):
|
|||||||
)
|
)
|
||||||
return cls.paginate(query, pagination_opts)
|
return cls.paginate(query, pagination_opts)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_application_events(cls, application_id, pagination_opts):
|
||||||
|
query = (
|
||||||
|
db.session.query(cls.model)
|
||||||
|
.filter(cls.model.application_id == application_id)
|
||||||
|
.order_by(cls.model.time_created.desc())
|
||||||
|
)
|
||||||
|
return cls.paginate(query, pagination_opts)
|
||||||
|
|
||||||
|
|
||||||
class AuditLog(object):
|
class AuditLog(object):
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -36,6 +45,9 @@ class AuditLog(object):
|
|||||||
def get_portfolio_events(cls, portfolio, pagination_opts=None):
|
def get_portfolio_events(cls, portfolio, pagination_opts=None):
|
||||||
return AuditEventQuery.get_portfolio_events(portfolio.id, pagination_opts)
|
return AuditEventQuery.get_portfolio_events(portfolio.id, pagination_opts)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_application_events(cls, application, pagination_opts=None):
|
||||||
|
return AuditEventQuery.get_application_events(application.id, pagination_opts)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_by_resource(cls, resource_id):
|
def get_by_resource(cls, resource_id):
|
||||||
|
@ -3,6 +3,8 @@ from flask import redirect, render_template, request as http_request, url_for
|
|||||||
from . import applications_bp
|
from . import applications_bp
|
||||||
from atst.domain.environments import Environments
|
from atst.domain.environments import Environments
|
||||||
from atst.domain.applications import Applications
|
from atst.domain.applications import Applications
|
||||||
|
from atst.domain.audit_log import AuditLog
|
||||||
|
from atst.domain.common import Paginator
|
||||||
from atst.forms.app_settings import AppEnvRolesForm
|
from atst.forms.app_settings import AppEnvRolesForm
|
||||||
from atst.forms.application import ApplicationForm, EditEnvironmentForm
|
from atst.forms.application import ApplicationForm, EditEnvironmentForm
|
||||||
from atst.forms.data import ENV_ROLE_NO_ACCESS as NO_ACCESS
|
from atst.forms.data import ENV_ROLE_NO_ACCESS as NO_ACCESS
|
||||||
@ -90,6 +92,8 @@ def render_settings_page(application, **kwargs):
|
|||||||
environments_obj = get_environments_obj_for_app(application=application)
|
environments_obj = get_environments_obj_for_app(application=application)
|
||||||
members_form = AppEnvRolesForm(data=data_for_app_env_roles_form(application))
|
members_form = AppEnvRolesForm(data=data_for_app_env_roles_form(application))
|
||||||
new_env_form = EditEnvironmentForm()
|
new_env_form = EditEnvironmentForm()
|
||||||
|
pagination_opts = Paginator.get_pagination_opts(http_request)
|
||||||
|
audit_events = AuditLog.get_application_events(application, pagination_opts)
|
||||||
|
|
||||||
if "application_form" not in kwargs:
|
if "application_form" not in kwargs:
|
||||||
kwargs["application_form"] = ApplicationForm(
|
kwargs["application_form"] = ApplicationForm(
|
||||||
@ -102,6 +106,7 @@ def render_settings_page(application, **kwargs):
|
|||||||
environments_obj=environments_obj,
|
environments_obj=environments_obj,
|
||||||
members_form=members_form,
|
members_form=members_form,
|
||||||
new_env_form=new_env_form,
|
new_env_form=new_env_form,
|
||||||
|
audit_events=audit_events,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
{% from "components/delete_confirmation.html" import DeleteConfirmation %}
|
{% from "components/delete_confirmation.html" import DeleteConfirmation %}
|
||||||
{% from "components/icon.html" import Icon %}
|
{% from "components/icon.html" import Icon %}
|
||||||
{% from "components/modal.html" import Modal %}
|
{% from "components/modal.html" import Modal %}
|
||||||
|
{% from "components/pagination.html" import Pagination %}
|
||||||
{% from "components/text_input.html" import TextInput %}
|
{% from "components/text_input.html" import TextInput %}
|
||||||
|
|
||||||
{% set secondary_breadcrumb = 'portfolios.applications.existing_application_title' | translate({ "application_name": application.name }) %}
|
{% set secondary_breadcrumb = 'portfolios.applications.existing_application_title' | translate({ "application_name": application.name }) %}
|
||||||
@ -102,4 +103,9 @@
|
|||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if user_can(permissions.VIEW_APPLICATION) %}
|
||||||
|
{% include "fragments/audit_events_log.html" %}
|
||||||
|
{{ Pagination(audit_events, url=url_for('applications.settings', application_id=application.id)) }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -15,6 +15,7 @@ from atst.routes.applications.settings import check_users_are_in_application
|
|||||||
from atst.domain.applications import Applications
|
from atst.domain.applications import Applications
|
||||||
from atst.domain.environment_roles import EnvironmentRoles
|
from atst.domain.environment_roles import EnvironmentRoles
|
||||||
from atst.domain.environments import Environments
|
from atst.domain.environments import Environments
|
||||||
|
from atst.domain.common import Paginator
|
||||||
from atst.domain.permission_sets import PermissionSets
|
from atst.domain.permission_sets import PermissionSets
|
||||||
from atst.domain.portfolios import Portfolios
|
from atst.domain.portfolios import Portfolios
|
||||||
from atst.domain.exceptions import NotFoundError
|
from atst.domain.exceptions import NotFoundError
|
||||||
@ -116,7 +117,7 @@ def test_edit_application_environments_obj(app, client, user_session):
|
|||||||
)
|
)
|
||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
_, context = templates[0]
|
_, context = templates[-1]
|
||||||
|
|
||||||
assert isinstance(context["members_form"], AppEnvRolesForm)
|
assert isinstance(context["members_form"], AppEnvRolesForm)
|
||||||
env_obj = context["environments_obj"][0]
|
env_obj = context["environments_obj"][0]
|
||||||
@ -127,6 +128,7 @@ def test_edit_application_environments_obj(app, client, user_session):
|
|||||||
env_obj["members"].sort()
|
env_obj["members"].sort()
|
||||||
== [env_role1.user.full_name, env_role2.user.full_name].sort()
|
== [env_role1.user.full_name, env_role2.user.full_name].sort()
|
||||||
)
|
)
|
||||||
|
assert isinstance(context["audit_events"], Paginator)
|
||||||
|
|
||||||
|
|
||||||
def test_data_for_app_env_roles_form(app, client, user_session):
|
def test_data_for_app_env_roles_form(app, client, user_session):
|
||||||
@ -156,7 +158,7 @@ def test_data_for_app_env_roles_form(app, client, user_session):
|
|||||||
)
|
)
|
||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
_, context = templates[0]
|
_, context = templates[-1]
|
||||||
|
|
||||||
members_form = context["members_form"]
|
members_form = context["members_form"]
|
||||||
assert isinstance(members_form, AppEnvRolesForm)
|
assert isinstance(members_form, AppEnvRolesForm)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user