feat(statistics): добавить BI-разрез и сводную матрицу
Docker images / prepare-release (push) Successful in 10s
Docker images / backend-test (push) Successful in 2m23s
Docker images / frontend-image (push) Successful in 3m30s
Docker images / updater-image (push) Successful in 52s
Docker images / backend-image (push) Successful in 3m8s
Docker images / notify-webhook (push) Skipped
Docker images / publish-release (push) Successful in 14s

Сопоставить клиентов с ifIndex как на карте трафика, чтобы KPI пользователей не обнулялся. На экране — разрез остальных измерений и сводная матрица.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Denozordec
2026-09-10 16:07:25 +07:00
co-authored by Cursor
parent b1fd259f10
commit 5bb9066be8
16 changed files with 1119 additions and 199 deletions
+31
View File
@@ -0,0 +1,31 @@
import type { StatisticsPivotDim } from "@mmapp/contracts/statistics"
import type { StatisticsSliceKind } from "@/components/data-grids/statistics-breakdown-data-grid"
export const STATISTICS_DIMS: {
id: StatisticsSliceKind
pivot: StatisticsPivotDim
label: string
}[] = [
{ id: "users", pivot: "user", label: "Пользователи" },
{ id: "servers", pivot: "server", label: "Серверы" },
{ id: "interfaces", pivot: "iface", label: "Интерфейсы" },
{ id: "countries", pivot: "country", label: "Страны" },
{ id: "services", pivot: "service", label: "Сервисы" },
{ id: "asns", pivot: "asn", label: "ASN" },
]
export function isStatisticsSliceKind(v: string): v is StatisticsSliceKind {
return STATISTICS_DIMS.some((d) => d.id === v)
}
export function isStatisticsPivotDim(v: string): v is StatisticsPivotDim {
return STATISTICS_DIMS.some((d) => d.pivot === v)
}
export function sliceKindToPivot(kind: StatisticsSliceKind): StatisticsPivotDim {
return STATISTICS_DIMS.find((d) => d.id === kind)?.pivot ?? "user"
}
export function pivotToSliceKind(dim: StatisticsPivotDim): StatisticsSliceKind {
return STATISTICS_DIMS.find((d) => d.pivot === dim)?.id ?? "users"
}