Skip to content

Сущности

HWM

Описание

High Water Mark (или HWM для краткости) — это запись, которая позволяет отслеживать состояние операций (обычно чтения). Например:

  • Сохранение максимального значения столбца, прочитанного из таблицы (например, updated_at), а затем использование его для исключения уже прочитанных строк при следующем чтении.
  • Сохранение списка файлов, обработанных процессом, и затем использование его для исключения этих файлов при следующем чтении.
  • Также максимальное время изменения файлов, обработанных процессом, а затем использование его для исключения этих файлов при следующем чтении.

Каждая запись HWM привязана к конкретному пространству имен (Namespace). name HWM уникален в пределах этого неймспейса(пространства имен).

Пользователи могут создавать неограниченное количество HWM в неймспейсе(пространстве имен).

Поля

Запись HWM имеет следующие поля:

  • id: integer - внутренний идентификатор HWM, генерируется с использованием последовательности, только для чтения.
  • namespace_id: integer - привязан к неймспейсу(пространству имен), обязательный.
  • name: string - уникальное имя в пределах неймспейса(пространства имен), обязательное.
  • value: json - значение, связанное с HWM, обязательное.
  • type: string - любая строка, описывающая тип содержимого поля value, обязательное.
  • description: string - человекочитаемое описание.
  • entity: string | null - имя сущности (например, имя таблицы, папки), к которой привязано значение.
  • expression: string | null - выражение (например, имя столбца), используемое для получения значения из entity.
  • changed_at: datetime - заполняется автоматически при каждом изменении элемента, только для чтения.
  • changed_by: User | null - заполняется автоматически при каждом изменении элемента, только для чтения.

type и value могут содержать любое значение и не анализируются и не проверяются бэкендом. Это позволяет пользователям создавать HWM любого типа в любое время, без необходимости изменения бэкенда. Но поддержание согласованности этих полей остается на усмотрение пользователя.

Ограничения

HWM не может быть перемещен между неймспейсами(пространствами имен). Пользователи должны явно создать копию существующего HWM в новом неймспейсе(пространстве имен), и удалить старый HWM.

Namespace

Описание пространства имен

Неймспейс(пространство имен) — это контейнер для записей HWM.

У каждого неймспейса(пространства имен) есть владелец, который может изменять свойства неймспейса(пространства имен), см. Разрешения ролей.

Пользователи могут создавать неограниченное количество неймспейсов(пространств имен). Если пользователь создал неймспейс(пространство имен), он автоматически становится владельцем этого неймспейса(пространства имен).

Поля неймспейса(пространства имен)

Запись неймспейса(пространства имен) имеет следующие поля:

  • id: integer - внутренний идентификатор неймспейса(пространства имен), генерируется с использованием последовательности, только для чтения.
  • name: string - уникальное для экземпляра Horizon, обязательное
  • description: string - человекочитаемое описание.
  • owned_by: User - устанавливается автоматически при создании неймспейса(пространства имен), обязательное.
  • changed_at: datetime - заполняется автоматически при каждом изменении элемента, только для чтения.
  • changed_by: User | null - заполняется автоматически при каждом изменении элемента, только для чтения.

User

Описание пользователя

Пользователи используются для:

  • Аутентификации
  • Модели разрешений RBAC
  • Отслеживания изменений, внесенных в неймспейс(пространство имен) или HWM.

Записи пользователей создаются автоматически после успешной аутентификации.

Поля пользователя

Запись пользователя имеет следующие поля:

  • id: integer - внутренний идентификатор пользователя, генерируется с использованием последовательности, только для чтения
  • username: string - уникальное для экземпляра Horizon
  • is_active: boolean - флаг, указывающий, разрешен ли пользователю вход.
  • is_admin: boolean - флаг для роли SUPERUSER.

Ограничения пользователя

В настоящее время невозможно удалить пользователя после его создания.

Permission

Описание разрешения

Пользователю может быть назначена роль в неймспейсе(пространстве имен), которая может разрешать или запрещать выполнение определенных операций в этом неймспейсе(пространстве имен). Пользователь может иметь разные роли в разных неймспейсах(пространствах имен) См. Разрешения ролей.

Поля разрешения

Запись разрешения имеет следующие поля:

  • user: User
  • namespace: Namespace
  • role: enum.

Ограничения разрешения

Пользователю может быть назначена только одна роль в пределах неймспейса(пространства имен).

NamespaceHistory

Описание истории неймспейса(пространства имен)

Изменение каждого значения неймспейса(пространства имен) создает элемент NamespaceHistory, который может быть использован для целей аудита. История доступна только для добавления, элементы не могут быть изменены или удалены с использованием API.

Поля истории неймспейса(пространства имен)

Запись NamespaceHistory имеет следующие поля (все только для чтения):

  • id: integer - внутренний идентификатор элемента истории, генерируется с использованием последовательности.
  • namespace_id: integer - привязан к элементу Namespace.
  • name: string.
  • description: string.
  • owned_by: User.
  • changed_at: datetime - заполняется автоматически при каждом изменении элемента.
  • changed_by: User | null - заполняется автоматически при каждом изменении элемента.
  • action: string - описание изменения, например, Created, Updated, Deleted.

HWMHistory

Описание истории HWM

Изменение каждого значения HWM создает элемент HWMHistory, который может быть использован для целей аудита. История доступна только для добавления, элементы не могут быть изменены или удалены с использованием API.

Поля истории HWM

Запись HWMHistory имеет следующие поля (все только для чтения):

  • id: integer - внутренний идентификатор элемента истории, генерируется с использованием последовательности.
  • hwm_id: integer - привязан к элементу HWM.
  • name: string.
  • value: any | null.
  • type: string.
  • description: string.
  • entity: string | null.
  • expression: string | null.
  • changed_at: datetime - заполняется автоматически при каждом изменении элемента.
  • changed_by: User | null - заполняется автоматически при каждом изменении элемента.
  • action: string - описание изменения, например, Created, Updated, Deleted.

Диаграмма сущностей

    @startuml
    title Entity Diagram

    left to right direction

    entity User {
        * id
        ----
        * username
        is_active
        is_admin
    }

    entity Namespace {
        * id
        ----
        * namespace_id
        * name
        * owned_by
        description
        changed_at
        changed_by
    }

    entity HWM {
        * id
        ----
        * name
        * type
        * value
        description
        entity
        expression
        changed_at
        changed_by
    }

    entity NamespaceHistory {
        * id
        ----
        * namespace_id
        name
        owned_by
        description
        changed_at
        changed_by
        action
    }

    entity HWMHistory {
        * id
        ----
        * hwm_id
        * namespace_id
        name
        type
        value
        description
        entity
        expression
        changed_at
        changed_by
        action
    }

    entity Permission {
        * user_id
        * namespace_id
        ----
        * role
    }

    HWM ||--o{ Namespace
    Namespace }o--o| NamespaceHistory
    HWM }o--o| HWMHistory
    Namespace "owner" ||--o{ User
    Namespace }o--|| Permission
    Permission ||--o{ User

    @enduml