Новогодняя аномалия в данных мониторинга.

Воспроизвести достаточно просто
Скачать и установить Dimension-UI.
Развернуть локально PostgreSQL.
Запустить в Dimension-UI мониторинг данных PostgreSQL с помощью запроса с интервалом 3 сек.
WITH params AS ( SELECT 15 AS total_frames, 20 AS canvas_height, 3 AS frame_duration_sec ), animation_state AS ( SELECT (CAST(EXTRACT(EPOCH FROM CURRENT_TIMESTAMP) AS INTEGER) / frame_duration_sec) % total_frames AS frame_idx FROM params ), tree_definition AS ( SELECT frame_id, y_pos, CASE -- ═══════════════════════════════════════ -- ЗВЕЗДА на верхушке -- ═══════════════════════════════════════ WHEN y_pos = 20 AND frame_id = 7 THEN '*' -- ═══════════════════════════════════════ -- ВЕРХУШКА елки (острая) -- ═══════════════════════════════════════ WHEN y_pos = 19 AND frame_id = 7 THEN 'G' -- ═══════════════════════════════════════ -- ЯРУС 1 (y=16-18) — расширяется книзу -- ═══════════════════════════════════════ WHEN y_pos = 18 AND frame_id BETWEEN 6 AND 8 THEN 'G' WHEN y_pos = 17 AND frame_id BETWEEN 5 AND 9 THEN 'G' WHEN y_pos = 16 AND frame_id BETWEEN 4 AND 10 THEN 'G' -- широкий низ яруса -- Сужение перед ярусом 2 WHEN y_pos = 15 AND frame_id BETWEEN 5 AND 9 THEN 'G' -- ═══════════════════════════════════════ -- ЯРУС 2 (y=12-14) -- ═══════════════════════════════════════ WHEN y_pos = 14 AND frame_id BETWEEN 4 AND 10 THEN 'G' WHEN y_pos = 13 AND frame_id BETWEEN 3 AND 11 THEN 'G' WHEN y_pos = 12 AND frame_id BETWEEN 2 AND 12 THEN 'G' -- широкий низ яруса -- Сужение перед ярусом 3 WHEN y_pos = 11 AND frame_id BETWEEN 4 AND 10 THEN 'G' -- ═══════════════════════════════════════ -- ЯРУС 3 (y=8-10) -- ═══════════════════════════════════════ WHEN y_pos = 10 AND frame_id BETWEEN 3 AND 11 THEN 'G' WHEN y_pos = 9 AND frame_id BETWEEN 2 AND 12 THEN 'G' WHEN y_pos = 8 AND frame_id BETWEEN 1 AND 13 THEN 'G' -- широкий низ яруса -- Сужение перед ярусом 4 WHEN y_pos = 7 AND frame_id BETWEEN 3 AND 11 THEN 'G' -- ═══════════════════════════════════════ -- ЯРУС 4 — нижний, самый широкий (y=4-6) -- ═══════════════════════════════════════ WHEN y_pos = 6 AND frame_id BETWEEN 2 AND 12 THEN 'G' WHEN y_pos = 5 AND frame_id BETWEEN 1 AND 13 THEN 'G' WHEN y_pos = 4 AND frame_id BETWEEN 0 AND 14 THEN 'G' -- во всю ширину! -- ═══════════════════════════════════════ -- СТВОЛ (y=1-3) -- ═══════════════════════════════════════ WHEN y_pos BETWEEN 1 AND 3 AND frame_id BETWEEN 6 AND 8 THEN 'T' -- Всё остальное — фон ELSE 'S' END AS pixel_char FROM generate_series(0, 14) AS frame(frame_id) CROSS JOIN generate_series(1, 20) AS y(y_pos) ), pixel_data AS ( SELECT td.* FROM tree_definition td JOIN animation_state ast ON td.frame_id = ast.frame_idx ), layers_logic AS ( SELECT y_pos, pixel_char, MAX(CASE WHEN pixel_char IN ('T', 'G', '*') THEN y_pos ELSE 0 END) OVER () as max_obj_height FROM pixel_data ) SELECT CURRENT_TIMESTAMP as dt, CASE WHEN pixel_char = 'T' THEN '4_Trunk' WHEN pixel_char = 'G' THEN '3_Tree' WHEN pixel_char = '*' THEN '2_Star' WHEN pixel_char = 'S' THEN CASE WHEN y_pos > max_obj_height
p.s. Данные по запросу любезно предоставлены Claude Opus 4.5.
