feature: squash audit log

This commit is contained in:
ievgenii vdovenko 2025-07-30 13:35:18 +02:00
parent 812b91ce4d
commit bd9d7a7b5a
2 changed files with 44 additions and 21 deletions

View file

@ -27,6 +27,9 @@ from rhodecode.lib.str_utils import safe_str
log = logging.getLogger(__name__)
PR_IDS_REVIEWER_ROLE = "pull_request_ids_reviewer_role"
PR_IDS_OBSERVER_ROLE = "pull_request_ids_observer_role"
# action as key, and expected action_data as value
ACTIONS_V1 = {
"user.login.success": {"user_agent": ""},
@ -63,7 +66,7 @@ ACTIONS_V1 = {
"repo.edit.permissions.branch": {},
"repo.archive": {"old_data": {}},
"repo.delete": {"old_data": {}},
"review.delete": {"review.role": "", "pull_request": {}, "prev_user": {}},
"review.delete": {PR_IDS_OBSERVER_ROLE: [], PR_IDS_REVIEWER_ROLE: [], "prev_user": {}},
"repo.archive.download": {"user_agent": "", "archive_name": "", "archive_spec": "", "archive_cached": ""},
"repo.permissions.branch_rule.create": {},
"repo.permissions.branch_rule.edit": {},

View file

@ -512,30 +512,50 @@ class UserModel(BaseModel):
self.sa.add(a)
def _delete_from_reviews(self, user: User, reviewer_pull_requests: List[PullRequestReviewers]):
repos_map = {}
for review in reviewer_pull_requests:
repo_id = review.pull_request.target_repo_id
repo_map = repos_map.get(repo_id, {})
pull_request_ids_reviewer_role = repo_map.get(audit_logger.PR_IDS_REVIEWER_ROLE, set())
pull_request_ids_observer_role = repo_map.get(audit_logger.PR_IDS_OBSERVER_ROLE, set())
if review.role == PullRequestReviewers.ROLE_REVIEWER:
audit_logger.store_web(
"review.delete",
user=get_current_rhodecode_user(),
action_data={
"review_role": review.role,
"pull_request": {
"id": review.pull_request.pull_request_id,
"title": review.pull_request.title_safe,
},
"prev_user": {
"username": user.username,
"name": user.name,
"email": user.email,
},
},
repo=audit_logger.RepoWrap(
repo_id=review.pull_request.target_repo_id,
repo_name=review.pull_request.target_repo.repo_name,
),
)
pull_request_ids_reviewer_role.add(review.pull_request.pull_request_id)
elif review.role == PullRequestReviewers.ROLE_OBSERVER:
pull_request_ids_observer_role.add(review.pull_request.pull_request_id)
repos_map[repo_id] = {
audit_logger.PR_IDS_REVIEWER_ROLE: pull_request_ids_reviewer_role,
audit_logger.PR_IDS_OBSERVER_ROLE: pull_request_ids_observer_role,
"repo_id": repo_id,
"repo_name": review.pull_request.target_repo.repo_name,
}
self.sa.delete(review)
for repo_id in repos_map:
repo_map = repos_map[repo_id]
audit_logger.store_web(
"review.delete",
user=get_current_rhodecode_user(),
action_data={
audit_logger.PR_IDS_OBSERVER_ROLE: list(repo_map.get(audit_logger.PR_IDS_OBSERVER_ROLE, set())),
audit_logger.PR_IDS_REVIEWER_ROLE: list(repo_map.get(audit_logger.PR_IDS_REVIEWER_ROLE, set())),
"prev_user": {
"username": user.username,
"name": user.name,
"email": user.email,
},
},
repo=audit_logger.RepoWrap(
repo_id=repo_map["repo_id"],
repo_name=repo_map["repo_name"],
),
)
def delete(
self,
user,