feat: hide event types from SAC UI via Settings checkbox (0.20.23)
Per-type «Показывать в событиях» in severity settings; filters lists, dashboard, hosts, and problems.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
{
|
||||
{
|
||||
"name": "sac-ui",
|
||||
"private": true,
|
||||
"version": "0.11.0",
|
||||
"version": "0.11.1",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/** Fallback до загрузки /health; при релизе держите в sync с backend/app/version.py */
|
||||
export const APP_NAME = "Security Alert Center";
|
||||
export const APP_VERSION = "0.20.22";
|
||||
export const APP_VERSION = "0.20.23";
|
||||
export const APP_VERSION_LABEL = `${APP_NAME} v.${APP_VERSION}`;
|
||||
|
||||
@@ -397,6 +397,7 @@
|
||||
<p class="settings-hint settings-hint-top">
|
||||
Переопределение значимости для новых событий после ingest. Исходное severity агента сохраняется в
|
||||
<code>details.severity_agent</code>. Пустое значение — как прислал агент (см. «По умолчанию»).
|
||||
Снимите «Показывать в событиях», чтобы скрыть тип из списков SAC (например <code>agent.heartbeat</code>).
|
||||
</p>
|
||||
<div class="settings-severity-toolbar">
|
||||
<input v-model="severityFilter" type="search" placeholder="Фильтр по type…" />
|
||||
@@ -411,6 +412,7 @@
|
||||
<th>Тип события</th>
|
||||
<th>По умолчанию</th>
|
||||
<th>Effective</th>
|
||||
<th>Показывать в событиях</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -426,6 +428,12 @@
|
||||
<option value="critical">critical</option>
|
||||
</select>
|
||||
</td>
|
||||
<td class="settings-severity-show-cell">
|
||||
<label>
|
||||
<input v-model="row.show_in_events" type="checkbox" />
|
||||
показывать
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -678,10 +686,12 @@ interface SeverityOverrideRowApi {
|
||||
event_type: string;
|
||||
default_severity: string;
|
||||
override_severity: string | null;
|
||||
show_in_events: boolean;
|
||||
}
|
||||
|
||||
interface SeverityOverrideRowUi extends SeverityOverrideRowApi {
|
||||
selected: string;
|
||||
override_show_in_events: boolean;
|
||||
}
|
||||
|
||||
const loading = ref(true);
|
||||
@@ -868,6 +878,7 @@ function mapSeverityRows(items: SeverityOverrideRowApi[]): SeverityOverrideRowUi
|
||||
return items.map((row) => ({
|
||||
...row,
|
||||
selected: row.override_severity ?? "",
|
||||
override_show_in_events: row.show_in_events,
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -884,25 +895,30 @@ async function saveSeverityOverrides() {
|
||||
success.value = "";
|
||||
try {
|
||||
const overrides: Record<string, string | null> = {};
|
||||
const visibility: Record<string, boolean | null> = {};
|
||||
for (const row of severityRows.value) {
|
||||
const prev = row.override_severity ?? "";
|
||||
const next = row.selected.trim();
|
||||
if (next === prev) continue;
|
||||
overrides[row.event_type] = next || null;
|
||||
const prevSeverity = row.override_severity ?? "";
|
||||
const nextSeverity = row.selected.trim();
|
||||
if (nextSeverity !== prevSeverity) {
|
||||
overrides[row.event_type] = nextSeverity || null;
|
||||
}
|
||||
if (row.show_in_events !== (row.override_show_in_events ?? true)) {
|
||||
visibility[row.event_type] = row.show_in_events ? null : false;
|
||||
}
|
||||
}
|
||||
if (Object.keys(overrides).length === 0) {
|
||||
error.value = "Нет изменений severity для сохранения";
|
||||
if (Object.keys(overrides).length === 0 && Object.keys(visibility).length === 0) {
|
||||
error.value = "Нет изменений для сохранения";
|
||||
return;
|
||||
}
|
||||
const data = await apiFetch<{ items: SeverityOverrideRowApi[] }>(
|
||||
"/api/v1/settings/notifications/severity-overrides",
|
||||
{
|
||||
method: "PUT",
|
||||
body: JSON.stringify({ overrides }),
|
||||
body: JSON.stringify({ overrides, visibility }),
|
||||
},
|
||||
);
|
||||
severityRows.value = mapSeverityRows(data.items);
|
||||
success.value = "Severity по типам событий сохранён.";
|
||||
success.value = "Severity и видимость событий сохранены.";
|
||||
} catch (e) {
|
||||
error.value = e instanceof Error ? e.message : "Ошибка сохранения severity";
|
||||
} finally {
|
||||
|
||||
Reference in New Issue
Block a user