journal: ignore event referencing deleted service in statistics (#50987)

This commit is contained in:
Valentin Deniaud 2021-02-16 11:43:13 +01:00
parent cc02a30b14
commit 8efb3ee192
2 changed files with 29 additions and 2 deletions

View File

@ -84,11 +84,12 @@ class EventTypeWithHow(EventTypeWithService):
for reference_id in stat['reference_ids'] or []:
content_type_id, instance_pk = n_2_pairing_rev(reference_id)
if content_type_id == service_ct_id:
reference_label = reference_labels[instance_pk]
reference_label = reference_labels.get(instance_pk)
break
else:
reference_label = _('None')
stats.add(x_label=stat[group_by_time], y_label=reference_label, value=stat['count'])
if reference_label:
stats.add(x_label=stat[group_by_time], y_label=reference_label, value=stat['count'])
return stats.to_json()

View File

@ -608,3 +608,29 @@ def test_statistics_fill_date_gaps(db, freezer):
'x_labels': ['2020', '2021', '2022', '2023', '2024', '2025'],
'series': [{'label': 'password', 'data': [1, None, None, None, None, 1]}],
}
def test_statistics_deleted_service(db, freezer):
user = User.objects.create(username='john.doe', email='john.doe@example.com')
ou = OU.objects.create(name='Second OU')
portal = Service.objects.create(name='portal', slug='portal', ou=ou)
method = {'how': 'password-on-https'}
event_type = EventType.objects.get_for_name('user.login')
event_type_definition = event_type.definition
freezer.move_to('2020-02-03 12:00')
event = Event.objects.create(type=event_type, references=[user, portal], user=user, data=method)
event = Event.objects.create(type=event_type, references=[user], user=user, data=method)
stats = event_type_definition.get_service_statistics('month')
stats['series'].sort(key=lambda x: x['label'])
assert stats == {
'x_labels': ['2020-02'],
'series': [{'label': 'None', 'data': [1]}, {'label': 'portal', 'data': [1]}],
}
portal.delete()
stats = event_type_definition.get_service_statistics('month')
stats['series'].sort(key=lambda x: x['label'])
assert stats == {'x_labels': ['2020-02'], 'series': [{'label': 'None', 'data': [1]}]}