Сущности
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- уникальное для экземпляра Horizonis_active: boolean- флаг, указывающий, разрешен ли пользователю вход.is_admin: boolean- флаг для роли SUPERUSER.
Ограничения пользователя
В настоящее время невозможно удалить пользователя после его создания.
Permission
Описание разрешения
Пользователю может быть назначена роль в неймспейсе(пространстве имен), которая может разрешать или запрещать выполнение определенных операций в этом неймспейсе(пространстве имен). Пользователь может иметь разные роли в разных неймспейсах(пространствах имен) См. Разрешения ролей.
Поля разрешения
Запись разрешения имеет следующие поля:
user: Usernamespace: Namespacerole: 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