fix: restore default people-flow queue thresholds
This commit is contained in:
@@ -92,7 +92,13 @@ class QueueWindowTracker:
|
||||
self.closed_states.append(state)
|
||||
del self.states[track_id]
|
||||
|
||||
def build_queue_metrics(self, window_start: datetime, window_end: datetime) -> dict:
|
||||
def build_queue_metrics(
|
||||
self,
|
||||
window_start: datetime,
|
||||
window_end: datetime,
|
||||
*,
|
||||
commit_queue_level: bool = True,
|
||||
) -> dict:
|
||||
totals: dict[int, int] = {}
|
||||
for state in self.closed_states:
|
||||
queue_seconds = state.window_queue_seconds(window_start, window_end)
|
||||
@@ -120,7 +126,8 @@ class QueueWindowTracker:
|
||||
)
|
||||
previous_queue_level = self.last_queue_level
|
||||
status_change = _queue_status_change(previous_queue_level, queue_level)
|
||||
self.last_queue_level = queue_level
|
||||
if commit_queue_level:
|
||||
self.last_queue_level = queue_level
|
||||
return {
|
||||
"queue_time_threshold_seconds": self.config.queue_time_threshold_seconds,
|
||||
"over_threshold_count": over_threshold_count,
|
||||
|
||||
@@ -46,3 +46,88 @@ def test_queue_window_tracker_builds_crowded_report():
|
||||
assert queue_metrics["previous_queue_level_label"] == ""
|
||||
assert queue_metrics["status_change"] == "initial"
|
||||
assert queue_metrics["status_change_label"] == "初始"
|
||||
|
||||
|
||||
def test_live_preview_does_not_overwrite_previous_finalized_queue_level():
|
||||
tracker = QueueWindowTracker(
|
||||
QueueConfig(
|
||||
queue_time_threshold_seconds=60,
|
||||
crowded_count_threshold=3,
|
||||
normal_count_threshold=2,
|
||||
pause_timeout_seconds=5,
|
||||
),
|
||||
pixel_area=(0, 0, 100, 100),
|
||||
)
|
||||
first_window_start = datetime(2026, 4, 15, 11, 0, tzinfo=TZ)
|
||||
first_window_end = datetime(2026, 4, 15, 11, 5, tzinfo=TZ)
|
||||
second_window_start = first_window_end
|
||||
second_window_preview = datetime(2026, 4, 15, 11, 7, tzinfo=TZ)
|
||||
second_window_end = datetime(2026, 4, 15, 11, 10, tzinfo=TZ)
|
||||
|
||||
normal_tracks = [
|
||||
TrackObservation(
|
||||
track_id=index, bbox=(0, 0, 10, 10), confidence=0.9, center=(10, 10)
|
||||
)
|
||||
for index in range(1, 4)
|
||||
]
|
||||
few_tracks = [
|
||||
TrackObservation(
|
||||
track_id=10, bbox=(0, 0, 10, 10), confidence=0.9, center=(10, 10)
|
||||
)
|
||||
]
|
||||
|
||||
tracker.observe(normal_tracks, first_window_start)
|
||||
tracker.observe(normal_tracks, first_window_end)
|
||||
first_metrics = tracker.build_queue_metrics(first_window_start, first_window_end)
|
||||
|
||||
assert first_metrics["queue_level"] == "normal"
|
||||
assert first_metrics["status_change"] == "initial"
|
||||
|
||||
tracker.reset()
|
||||
tracker.observe(few_tracks, second_window_start)
|
||||
tracker.observe([], second_window_preview)
|
||||
preview_metrics = tracker.build_queue_metrics(
|
||||
second_window_start,
|
||||
second_window_preview,
|
||||
commit_queue_level=False,
|
||||
)
|
||||
|
||||
assert preview_metrics["queue_level"] == "few"
|
||||
assert preview_metrics["previous_queue_level"] == "normal"
|
||||
assert preview_metrics["status_change"] == "queue_decreased"
|
||||
|
||||
final_metrics = tracker.build_queue_metrics(second_window_start, second_window_end)
|
||||
|
||||
assert final_metrics["queue_level"] == "few"
|
||||
assert final_metrics["previous_queue_level"] == "normal"
|
||||
assert final_metrics["status_change"] == "queue_decreased"
|
||||
|
||||
|
||||
def test_queue_level_is_normal_when_count_reaches_threshold():
|
||||
tracker = QueueWindowTracker(
|
||||
QueueConfig(
|
||||
queue_time_threshold_seconds=60,
|
||||
crowded_count_threshold=3,
|
||||
normal_count_threshold=2,
|
||||
pause_timeout_seconds=5,
|
||||
),
|
||||
pixel_area=(0, 0, 100, 100),
|
||||
)
|
||||
start = datetime(2026, 4, 15, 11, 0, tzinfo=TZ)
|
||||
end = datetime(2026, 4, 15, 11, 5, tzinfo=TZ)
|
||||
tracks = [
|
||||
TrackObservation(
|
||||
track_id=index, bbox=(0, 0, 10, 10), confidence=0.9, center=(10, 10)
|
||||
)
|
||||
for index in range(1, 4)
|
||||
]
|
||||
|
||||
tracker.observe(tracks, start)
|
||||
tracker.observe(tracks, start.replace(minute=2))
|
||||
tracker.observe([], end)
|
||||
|
||||
metrics = tracker.build_queue_metrics(start, end)
|
||||
|
||||
assert metrics["over_threshold_count"] == 3
|
||||
assert metrics["queue_level"] == "normal"
|
||||
assert metrics["queue_level_label"] == "人数正常"
|
||||
|
||||
Reference in New Issue
Block a user