Skip to content

Аварии

Алармы настраиваются на объекте (вкладка «Аварии» у объекта: события, приоритет, кейсы, действия — контракт домена описан на странице Логика), а эта страница — про их жизнь после сохранения: активный проект показывает аварии — факты срабатываний, которые приходят из рантайма контроллера и квитируются пользователем.

Записи аварий и статусы

Журнал аварий (вкладка «Аварии» проекта/папки) строится на 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.