Added error

This commit is contained in:
Magnus Root 2026-03-16 17:43:50 +03:00
parent d3873bfb2e
commit 4e1777b6b9
2 changed files with 60 additions and 0 deletions

View file

@ -151,6 +151,8 @@ type LayoutConfig struct {
UseCollapsedRows bool `json:"use_collapsed_rows"`
OverviewPanels []PanelLayout `json:"overview_panels"` // Панели обзора перед клиентскими строками
OverviewRowTitle string `json:"overview_row_title"` // Заголовок collapsed row обзора
ErrorPanels []PanelLayout `json:"error_panels"` // Панели ошибок (только VL)
ErrorRowTitle string `json:"error_row_title"` // Заголовок collapsed row ошибок
}
type PanelLayout struct {

View file

@ -25,6 +25,13 @@ func generateVLDashboard(clients map[string]ClientData, template *DashboardTempl
yPos++
}
if len(template.Layout.ErrorPanels) > 0 {
errorsRow := createErrorRowVL(template, datasourceType, datasourceUID, panelID, yPos)
panels = append(panels, errorsRow)
panelID += 10
yPos++
}
for _, client := range clients {
if len(client.Domains) == 0 {
continue
@ -225,6 +232,19 @@ func buildPanelVL(
panel["title"] = formatPanelTitle(title, client, domain)
}
// Для rps панелей убираем суффикс " rps" из названий серий
if queryMode == "rps" || queryMode == "rps_multi" || queryMode == "rps_var" {
panel["transformations"] = []interface{}{
map[string]interface{}{
"id": "renameByRegex",
"options": map[string]interface{}{
"regex": "^(.+) rps$",
"renamePattern": "",
},
},
}
}
// Для range_percent добавляем transformation которая убирает " count(*)" из названий серий
if queryMode == "range_percent" {
panel["transformations"] = []interface{}{
@ -394,3 +414,41 @@ func sendVLDashboardToGrafana(dashboard map[string]interface{}, config Config) e
// Используем тот же sendToGrafana
return sendToGrafana(dashboard, vlConfig)
}
// createErrorRowVL создаёт collapsed row с панелями ошибок (только для VL).
func createErrorRowVL(template *DashboardTemplate, datasourceType, datasourceUID string, panelID, yPos int) map[string]interface{} {
innerPanels := []interface{}{}
currentY := 1
dummyClient := ClientData{}
for _, layout := range template.Layout.ErrorPanels {
width := layout.Width
if width == 0 {
width = 24
}
panel := buildPanelVL(layout.PanelKey, template, DomainInfo{}, dummyClient, datasourceType, datasourceUID, panelID, currentY, layout.XOffset, width)
if panel == nil {
continue
}
if layout.TitleFormat != "" {
panel["title"] = layout.TitleFormat
}
innerPanels = append(innerPanels, panel)
panelID++
currentY += getGridH(panel)
}
rowTitle := template.Layout.ErrorRowTitle
if rowTitle == "" {
rowTitle = "Errors"
}
return map[string]interface{}{
"type": "row",
"title": rowTitle,
"id": panelID,
"collapsed": true,
"gridPos": map[string]interface{}{"h": 1, "w": 24, "x": 0, "y": yPos},
"panels": innerPanels,
}
}