
Комментарии 1
Автор здесь, отвечаю на вопросы. Заранее назову места, где сам сомневался и где ждал бы спора.
Первое: группировать по верхнему упавшему предку, а не по прямому родителю. На дереве это очевидно, а вот на графе с несколькими путями наверх решение уже не бесспорное. Если у вас зависимости - не дерево, расскажите, как выбираете корень.
Второе: ретро-перебор при открытии корня и кеш снимка графа. Снимок "упал / не упал" живёт несколько секунд, и перебор, запущенный сразу после открытия корня, попадал в окно, где кеш о корне ещё не знает, и молча завершался успехом, ничего не найдя. Лечу явным сбросом кеша перед перебором. Интересно, кто как живёт с таким кешем и не проще ли его вовсе не иметь.
Третье: fail-noisy. "Молчит, потому что за него сказал корень" и "не эскалируется, потому что родитель лежит" - два разных состояния, и я специально не склеивал их в одно. А немой корень (в окне обслуживания или сам подавлен) не делает молчаливой всю группу: участник в карточку попадает, но уведомление шлёт сам. Если у вас в проде это устроено иначе, это самый полезный для меня ответ.
Код открыт, всё описанное лежит в internal/incidentgroup и internal/depsuppress: https://github.com/OtezVikentiy/gotcha
Каскад из одной аварии: как схлопнуть шторм алертов в одну карточку инцидента