Appearance
Аварии
Алармы настраиваются на объекте (вкладка «Аварии» у объекта: события, приоритет, кейсы, действия — контракт домена описан на странице Логика), а эта страница — про их жизнь после сохранения: активный проект показывает аварии — факты срабатываний, которые приходят из рантайма контроллера и квитируются пользователем.
Записи аварий и статусы
Журнал аварий (вкладка «Аварии» проекта/папки) строится на IAlarmsFromRuntime: записи приходят из рантайма по GET /alarm (getAlarms), редактор их не создаёт и не хранит. Редактор читает только поля, на которые опирается таблица: статус, времена, счётчик, приоритет.
ts
import { type ICase } from "@/entities/project/object-reaction/types";
// #region alarm-contract-doc
/** Тип действия при срабатывании аларма (что показать/открыть пользователю). */
export enum EAlarmActionType {
/** открыть URL из text */
URL = "url",
/** открыть выбранную мнемосхему (objectId) */
MNEMOSCHEME = "mnemoscheme",
/** показать текст из text */
TEXT = "text",
/** воспроизвести звуковой файл (audioId) */
AUDIO = "audio",
}
/**
* Действие аларма — реакция интерфейса на срабатывание. В отличие от
* IAction, адресуется не объекту-цели, а пользователю (портал/мнемосхема).
*/
export interface IAlarmAction {
id: string;
/** что сделать при срабатывании (см. EAlarmActionType) */
actionType: EAlarmActionType;
/** ссылка на выбранную мнемосхему или звуковой файл */
objectId?: string;
/** url и текст*/
text: string;
/** открывать в новой вкладке? */
newTab: boolean;
/** id файла из RepositoryAudio */
audioId: string;
}
/**
* Аларм владельца: «при событии objectEvent, если выполнены кейсы cases,
* выполнить действия actions». В отличие от реакции, несёт приоритет
* (шествие в журнале алармов) и порог срабатывания.
*
* TEvent — тип события объекта-владельца (сужается классами через
* IObjectReactable<ReactionX>; дефолт — широкое хранилище).
*/
export interface IAlarm<TEvent extends string = string> {
id: string;
/** имя аларма в редакторе */
name: string;
/** приоритет срабатывания (см. EAlarmPriority) */
priority: EAlarmPriority;
/** событие владельца, запускающее аларм (ключ из его availableEvents) */
objectEvent: TEvent;
/** описание, показываемое при срабатывании */
description: string;
/** условия срабатывания; null — аларм безусловный */
cases: ICase<string>[] | null;
/** действия при срабатывании */
actions: IAlarmAction[];
/** фильтр (мс): окно удержания аварийного условия до перехода аварии; 0–60000 */
threshold: number;
}
/**
* Приоритет аларма. Значения приходят из рантайма (IAlarmsFromRuntime):
* "0" — самый высокий (Emergency), "7" — самый низкий (Debug);
* точная семантика уровней определяется рантаймом, не этим репо.
*/
export enum EAlarmPriority {
Emergency = "0",
Alert = "1",
Critical = "2",
Error = "3",
Warning = "4",
Notice = "5",
Informational = "6",
Debug = "7",
}
// #endregion alarm-contract-doc
// #region runtime-alarm-doc
/**
* Аварии активного проекта: статусы и записи приходят из рантайма контроллера
* (GET /alarm), редактор их не создаёт. Точная семантика полей определяется
* рантаймом; здесь — только то, на что опирается билдер (таблица аварий,
* квитирование).
*/
export enum EAlarmStatus {
/** квитирована пользователем (accidentAlarm, POST /alarm/ack) */
Acknowledged = "Acknowledged",
/** условие аварии выполняется сейчас */
Active = "Active",
/** авария прошла, но не квитирована */
unActive = "unActive",
/** владелец аварии удалён из проекта */
Invalid = "Invalid",
}
/** Запись об аварии из рантайма (GET /alarm). */
export interface IAlarmsFromRuntime {
alarmID: string;
status: EAlarmStatus;
/** время первого срабатывания, ISO 8601 с зоной */
alarmTsFirst: string;
/** время последнего срабатывания, ISO 8601 с зоной */
alarmTsLast: string;
/** сколько раз условие срабатывало с первого раза */
counter: number;
/** идентификатор инцидента; участвует в квитировании (uid в POST /alarm/ack) */
uid: string;
/** id объекта-владельца аларма */
object: string;
/** кто квитировал; приходит только для Acknowledged */
userID?: string;
description?: string;
acknowledgeDate?: string;
priority: EAlarmPriority;
projectID?: string;
reason?: string;
}
// #endregion
/** Параметр квитирования аварии (POST /alarm/ack). */
export interface IAccidentAlarm {
/** какая авария (из IAlarmsFromRuntime.alarmID) */
alarmID: string;
description: string;
/** идентификатор инцидента (из IAlarmsFromRuntime.uid) */
uid: string;
projectID: string;
}Квитирование
Подтверждение аварии — POST /alarm/ack (accidentAlarm) с alarmID и uid записи; после этого статус становится Acknowledged, у записи появляются пользователь и дата. Массового квитирования нет — по одной записи.
Mentioned In
None yet.