package plugin import ( "fmt" "strings" ) // levelToColor возвращает цвет для уровня события Sentry func levelToColor(level string) string { switch strings.ToLower(level) { case "fatal": return "#B10DC9" // фиолетовый, критический case "error": return "#FF4136" // красный case "warning": return "#FF851B" // оранжевый case "log": return "#AAAAAA" // серый case "info": return "#0074D9" // синий case "debug": return "#2ECC40" // зелёный default: return "#AAAAAA" // серый для неизвестных } } // getTagFromArray извлекает значение тега из массива тегов func getTagFromArray(tags [][]string, key string) string { for _, t := range tags { if len(t) == 2 && t[0] == key { return t[1] } } return "" } // formatStacktrace форматирует стектрейс для отображения func formatStacktrace(ex *SentryExceptionValue) string { if ex == nil || len(ex.Stacktrace.Frames) == 0 { return "" } lines := make([]string, 0, len(ex.Stacktrace.Frames)) for _, f := range ex.Stacktrace.Frames { lines = append(lines, fmt.Sprintf("%s:%d %s - %s", f.Filename, f.Lineno, f.Function, f.ContextLine)) } return strings.Join(lines, "\n") }