Skip to content

Commit fcaec15

Browse files
committed
fix(task): don't use the last data point
Don't use the last datapoint of the detector, Since sentry metric are not complete for the last hour
1 parent 7e971b5 commit fcaec15

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

controller/sentry/tasks.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ def perform_detect(sentry_id) -> None:
142142
project.detection_result = dump
143143
project.save()
144144

145+
# remove the last item since this stats on the last hour are not complete
146+
res.popitem()
147+
145148
previous_signal = 0
146149
events = []
147150
last_event: Optional[Event] = project.events.last()

controller/sentry/tests/test_tasks.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ def test_perform_detect(spike_detector_mock: MagicMock, client_mock: MagicMock):
169169
("2023-02-01T17:00:00Z", 0),
170170
("2023-02-01T18:00:00Z", 1),
171171
("2023-02-01T19:00:00Z", 0),
172+
("2023-02-01T20:00:00Z", 0),
172173
]
173174
),
174175
dump,
@@ -189,6 +190,50 @@ def test_perform_detect(spike_detector_mock: MagicMock, client_mock: MagicMock):
189190
assert project.detection_result == dump
190191

191192

193+
@patch("controller.sentry.tasks.PaginatedSentryClient")
194+
@patch("controller.sentry.tasks.SpikesDetector")
195+
@pytest.mark.django_db
196+
def test_perform_detect_last_item_not_used(spike_detector_mock: MagicMock, client_mock: MagicMock):
197+
sentry_id = "123"
198+
project = Project(sentry_id=sentry_id)
199+
project.save()
200+
201+
event = Event(project=project, type=EventType.DISCARD, timestamp=parser.parse("2023-02-01T17:00:00Z"))
202+
event.save()
203+
204+
result = object()
205+
client_mock.return_value.get_stats.return_value = result
206+
207+
detector: MagicMock = spike_detector_mock.from_project.return_value
208+
dump = {"test": "a"}
209+
detector.compute_sentry.return_value = (
210+
OrderedDict(
211+
[
212+
("2023-02-01T15:00:00Z", 0),
213+
("2023-02-01T16:00:00Z", 1),
214+
("2023-02-01T17:00:00Z", 0),
215+
("2023-02-01T18:00:00Z", 1),
216+
("2023-02-01T19:00:00Z", 0),
217+
]
218+
),
219+
dump,
220+
)
221+
222+
perform_detect(sentry_id)
223+
224+
client_mock.assert_called_once_with()
225+
client_mock.return_value.get_stats.assert_called_once_with(sentry_id)
226+
227+
spike_detector_mock.from_project.assert_called_once_with(project)
228+
229+
detector.compute_sentry.assert_called_once_with(result)
230+
231+
project.refresh_from_db()
232+
assert project.events.exclude(reference=event.reference).count() == 1
233+
assert project.last_event == project.events.last()
234+
assert project.detection_result == dump
235+
236+
192237
@patch("controller.sentry.tasks.PaginatedSentryClient")
193238
@patch("controller.sentry.tasks.SpikesDetector")
194239
@pytest.mark.django_db

0 commit comments

Comments
 (0)