73 lines
4.4 KiB
Go
73 lines
4.4 KiB
Go
package main
|
||
|
||
import "time"
|
||
|
||
// collect проводит пользователя через все секции и возвращает заполненный PostMortem.
|
||
func collect() PostMortem {
|
||
var pm PostMortem
|
||
|
||
// ── Основная информация ──────────────────────────────────────────────────
|
||
section("📋 Основная информация")
|
||
pm.Title = ask("Название инцидента:")
|
||
pm.Status = choose("Статус документа:", []string{
|
||
"🟡 Draft",
|
||
"🔵 In Review",
|
||
"🟢 Resolved",
|
||
})
|
||
pm.Severity = choose("Severity:", []string{
|
||
"SEV-1 (критический)",
|
||
"SEV-2 (высокий)",
|
||
"SEV-3 (средний)",
|
||
"SEV-4 (низкий)",
|
||
})
|
||
pm.IncidentDate = askDefault("Дата инцидента (ДД.ММ.ГГГГ):", time.Now().Format("02.01.2006"))
|
||
pm.PostmortemDate = time.Now().Format("02.01.2006")
|
||
pm.Author = ask("Автор (@имя):")
|
||
pm.Participants = ask("Участники разбора (через запятую):")
|
||
|
||
// ── Краткое резюме ───────────────────────────────────────────────────────
|
||
section("📝 Краткое резюме")
|
||
pm.Summary = ask("Опишите инцидент в 2–3 предложениях:")
|
||
|
||
// ── Impact ───────────────────────────────────────────────────────────────
|
||
section("💥 Влияние (Impact)")
|
||
pm.Duration = ask("Длительность (напр. 2ч 33мин):")
|
||
pm.AffectedUsers = ask("Затронутые пользователи (напр. ~5000 / 100% трафика):")
|
||
pm.AffectedServices = ask("Затронутые сервисы:")
|
||
pm.FinancialLoss = askDefault("Финансовые потери:", "не оценивались")
|
||
pm.SLABreach = choose("Нарушение SLA:", []string{"Да", "Нет", "Под вопросом"})
|
||
pm.SupportTickets = askDefault("Обращений в поддержку:", "—")
|
||
|
||
// ── Хронология ───────────────────────────────────────────────────────────
|
||
section("🕐 Хронология")
|
||
pm.Timeline = collectTimeline()
|
||
|
||
// ── Корневая причина ─────────────────────────────────────────────────────
|
||
section("🔍 Корневая причина")
|
||
pm.RootCause = ask("Опишите корневую причину:")
|
||
pm.WhyAnalysis = collectWhyAnalysis()
|
||
|
||
// ── Сопутствующие факторы ────────────────────────────────────────────────
|
||
section("⚠️ Сопутствующие факторы")
|
||
pm.Contributing = collectList("Что усугубило ситуацию?", "Фактор")
|
||
|
||
// ── Что сработало / что улучшить ─────────────────────────────────────────
|
||
section("✅ Что сработало хорошо")
|
||
pm.WentWell = collectList("Что сработало хорошо?", "Пункт")
|
||
|
||
section("🔧 Что можно улучшить")
|
||
pm.ToImprove = collectList("Что можно улучшить?", "Пункт")
|
||
|
||
// ── Action Items ─────────────────────────────────────────────────────────
|
||
section("📌 Action Items")
|
||
pm.ActionItems = collectActionItems()
|
||
|
||
// ── Ссылки ───────────────────────────────────────────────────────────────
|
||
section("🔗 Ссылки")
|
||
pm.TicketLink = askDefault("Тикет инцидента (URL):", "[LINK]")
|
||
pm.LogsLink = askDefault("Логи / дашборд (URL):", "[LINK]")
|
||
pm.PRLink = askDefault("PR / деплой (URL):", "[LINK]")
|
||
pm.MeetingLink = askDefault("Запись встречи (URL):", "[LINK]")
|
||
|
||
return pm
|
||
}
|