Add a filter by involved users to alert groups page (#1240)

Related to #1119 

It also adds a shortcut to filter current user's related alert groups
(alert groups user was notified by, or in which user participated). Make
the filter visible by default, with a false value.
This commit is contained in:
Matias Bordese 2023-01-30 09:08:18 -03:00 committed by GitHub
parent 2b2a837991
commit b1fc123d9f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 38 additions and 1 deletions

View file

@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
### Added
- Add involved users filter to alert groups listing page (+ mine shortcut)
### Changed
- Improve logging for creating contact point for Grafana Alerting integration

View file

@ -85,7 +85,11 @@ class AlertGroupFilter(DateRangeFilterMixin, ModelFieldFilterMixin, filters.Filt
invitees_are = filters.ModelMultipleChoiceFilter(
queryset=get_user_queryset, to_field_name="public_primary_key", method="filter_invitees_are"
)
involved_users_are = filters.ModelMultipleChoiceFilter(
queryset=get_user_queryset, to_field_name="public_primary_key", method="filter_by_involved_users"
)
with_resolution_note = filters.BooleanFilter(method="filter_with_resolution_note")
mine = filters.BooleanFilter(method="filter_mine")
class Meta:
model = AlertGroup
@ -132,10 +136,27 @@ class AlertGroupFilter(DateRangeFilterMixin, ModelFieldFilterMixin, filters.Filt
if not users:
return queryset
queryset = queryset.filter(acknowledged=False, resolved=False, log_records__author__in=users).distinct()
queryset = queryset.filter(log_records__author__in=users).distinct()
return queryset
def filter_by_involved_users(self, queryset, name, value):
users = value
if not users:
return queryset
queryset = queryset.filter(
Q(personal_log_records__author__in=users) | Q(log_records__author__in=users)
).distinct()
return queryset
def filter_mine(self, queryset, name, value):
if value:
return self.filter_by_involved_users(queryset, "users", [self.request.user.pk])
return queryset
def filter_with_resolution_note(self, queryset, name, value):
if value is True:
queryset = queryset.filter(Q(resolution_notes__isnull=False, resolution_notes__deleted_at=None)).distinct()
@ -522,6 +543,12 @@ class AlertGroupView(
"type": "options",
"href": api_root + "users/?filters=true&roles=0&roles=1&roles=2",
},
{
"name": "involved_users_are",
"type": "options",
"href": api_root + "users/?filters=true&roles=0&roles=1&roles=2",
"default": {"display_name": self.request.user.username, "value": self.request.user.public_primary_key},
},
{
"name": "status",
"type": "options",
@ -548,6 +575,11 @@ class AlertGroupView(
"type": "boolean",
"default": "true",
},
{
"name": "mine",
"type": "boolean",
"default": "true",
},
]
if filter_name is not None:

View file

@ -71,6 +71,7 @@ class IncidentsFilters extends Component<IncidentsFiltersProps, IncidentsFilters
} else {
newQuery = {
status: [IncidentStatus.New, IncidentStatus.Acknowledged],
mine: false,
};
}