Установка и инициализация TrackDB

TrackDB работает поверх ClickHouse. Актуальные SQL-файлы находятся в основном репозитории Altflow:

scripts/trackdb/createEvents.sql
scripts/trackdb/createUsers.sql

Установка ClickHouse

Пример для ALT-based окружения:

apt-get install clickhouse-client clickhouse-server
systemctl enable --now clickhouse-server

Проверка подключения:

clickhouse-client --query "SELECT version()"

Создание базы

clickhouse-client --query "CREATE DATABASE IF NOT EXISTS TrackDB"

Создание таблиц

Применить схему:

clickhouse-client --database=TrackDB --multiquery < scripts/trackdb/createEvents.sql

Скрипт пересоздаёт:

imageEvents
stateEvents
stateEvents_mv
stateList_State
stateList_State_mv
stateList
imagesByNames
imagesByNames_mv

imageEvents использует ENGINE = Null; это ожидаемое поведение. Данные хранятся в таблицах, которые наполняются materialized views.

Создание пользователей

Перед применением createUsers.sql замените placeholder-пароли:

BY 'your_password_here'
BY 'another_password_here'

Затем выполните:

clickhouse-client --multiquery < scripts/trackdb/createUsers.sql

Скрипт создаёт:

ПользовательНазначение
altflowAPI, Saver, Distributor, Tracker.
altflow_stagerStager.

Права:

GRANT SHOW TABLES, SELECT ON TrackDB.* TO altflow;
GRANT SHOW TABLES, SELECT ON TrackDB.* TO altflow_stager;
GRANT INSERT ON TrackDB.imageEvents TO altflow;
GRANT INSERT ON TrackDB.imageEvents TO altflow_stager;

Проверка схемы

clickhouse-client --database=TrackDB --query "SHOW TABLES"

Ожидаемые объекты:

imageEvents
imagesByNames
imagesByNames_mv
stateEvents
stateEvents_mv
stateList
stateList_State
stateList_State_mv

Проверка вставки события:

clickhouse-client --database=TrackDB --query "
INSERT INTO imageEvents (
  eventTime, eventStage, eventStageState, taskId, user,
  stageImageName, registryName, buildGitURL, buildGitBranch,
  buildConfigPath, buildDockerfilePath, buildContextPath,
  repoTags, userGID, entrypoints, architecture
) VALUES (
  now(), 'BUILD', 'NEW', '01JBV2S4PGNV87EGC5WKYA0RND', 'test-user',
  'project/image', 'registry.example.org', 'https://github.com/user/repo.git', 'master',
  '', './Dockerfile', '.', ['latest'], 200, [], ['amd64']
)"

Проверка materialized view:

clickhouse-client --database=TrackDB --query "
SELECT eventStage, eventStageState, taskId, user
FROM stateEvents
WHERE taskId = '01JBV2S4PGNV87EGC5WKYA0RND'
"

Подключение компонентов

Компоненты Altflow ожидают следующие параметры TrackDB:

ПараметрЗначение по умолчанию/пример
databaseTrackDB
status table для APIstateEvents
write table для Saver/Stager/Distributor/TrackerimageEvents
task id fieldtaskId
HTTP port без TLS8123
HTTP port с TLS8443

Для production-развёртывания компоненты обычно используют HTTPS endpoint ClickHouse и CA certificate, заданный в Helm values соответствующего компонента.

Тестовые данные

В документационном репозитории altflow-concept есть генератор нагрузочных данных:

scripts/TrackDB/SYNTH

Это отдельное дерево скриптов altflow-concept, а не scripts/trackdb из основного репозитория altflow. SQL-схема при этом берётся из основного репозитория:

/home/artyom/git/altflow/altflow/scripts/trackdb/createEvents.sql

Путь к SQL-схеме можно переопределить переменной:

TRACKDB_SCHEMA_SQL=/path/to/createEvents.sql ./insertN.sh BUILD 1000 3

Базовый порядок генерации:

cd /home/artyom/git/altflow/altflow-concept/scripts/TrackDB/SYNTH/TrackDB/schemas
./generateNEW.sh

cd ../results
./NewToRunning.sh BUILD
./RunningToDone.sh BUILD
./insertN.sh BUILD 1000 3

watchLive.sh больше не использует удалённое stateEvents_live; он периодически делает обычный SELECT из stateEvents по insertTime.