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.

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

---
title: Entity Diagram
---
erDiagram
    direction LR
    User {
        number id
        string username
        bool is_active
        bool is_admin
    }

    Namespace {
        number id
        number namespace_id
        string name
        string owned_by
        string description
        string changed_at
        string changed_by
    }

    HWM {
        number id
        string name
        string type
        string value
        string description
        string entity
        string expression
        string changed_at
        string changed_by
    }

    NamespaceHistory {
        number id
        number namespace_id
        string name
        string owned_by
        string description
        string changed_at
        string changed_by
        string action
    }


    HWMHistory {
        number id
        number hwm_id
        number namespace_id
        string name
        string type
        string value
        string description
        string entity
        string expression
        string changed_at
        string changed_by
        string action
    }

    Permission {
        number user_id
        number namespace_id
        string role
    }

    HWM ||--o{ Namespace: contains
    Namespace }o--o| NamespaceHistory: contains
    HWM }o--o| HWMHistory: contains
    Namespace  ||--o{ User: contains
    Namespace }o--|| Permission: contains
    Permission ||--o{ User: contains