Initial server source import
This commit is contained in:
@@ -0,0 +1,273 @@
|
||||
# Truf Runtime Cheatsheet
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
Команды выполняются из `D:\truf` в PowerShell.
|
||||
|
||||
```powershell
|
||||
# Запустить весь canonical runtime
|
||||
.\start_runtime.ps1
|
||||
|
||||
# Запустить explicit core set с keychecks, без dashboard
|
||||
.\start_core_runtime.ps1
|
||||
|
||||
# Подключиться к интерактивной консоли supervisor
|
||||
.\attach_runtime.ps1
|
||||
|
||||
# Координированно остановить весь runtime и PostgreSQL
|
||||
.\stop_runtime.ps1
|
||||
```
|
||||
|
||||
Если PowerShell блокирует запуск скриптов:
|
||||
|
||||
```powershell
|
||||
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\start_runtime.ps1
|
||||
```
|
||||
|
||||
Для полного рестарта используй именно:
|
||||
|
||||
```powershell
|
||||
.\stop_runtime.ps1
|
||||
.\start_runtime.ps1
|
||||
```
|
||||
|
||||
Для полного рестарта в core-only режиме:
|
||||
|
||||
```powershell
|
||||
.\stop_runtime.ps1
|
||||
.\start_core_runtime.ps1
|
||||
```
|
||||
|
||||
Не используй `restart all` как замену полному рестарту: pipeline workers защищены от ручного рестарта, пока scanner sources работают.
|
||||
|
||||
## Что запускается
|
||||
|
||||
| Компонент | Назначение |
|
||||
|---|---|
|
||||
| PostgreSQL | Единственный authoritative storage |
|
||||
| `result-ingester` | Переносит scan bundles в PostgreSQL |
|
||||
| `jsonl-projector` | Создаёт compatibility JSONL projections |
|
||||
| `janitor` | Обслуживает runtime queues и временные данные |
|
||||
| `github` | GitHub scanner loop |
|
||||
| `gitlab` | GitLab scanner loop |
|
||||
| `huggingface` | Hugging Face scanner loop |
|
||||
| `dockerhub` | Docker Hub scanner loop |
|
||||
| `package_git` | Package/repository scanner loop |
|
||||
| `keychecks` | Почасовой provider checker scheduler |
|
||||
|
||||
Одновременно выполняется максимум `3` scan workers. Dashboard при обычном запуске выключен.
|
||||
|
||||
## PowerShell-скрипты
|
||||
|
||||
| Скрипт | Что делает |
|
||||
|---|---|
|
||||
| `start_runtime.ps1` | Запускает freeze diagnostics, проверяет identity PostgreSQL и поднимает background supervisor |
|
||||
| `start_core_runtime.ps1` | Поднимает PostgreSQL, pipeline, janitor и три discovery-only producer; dashboard выключен |
|
||||
| `stop_runtime.ps1` | Выполняет authenticated coordinated shutdown supervisor, children и PostgreSQL |
|
||||
| `attach_runtime.ps1` | Открывает интерактивную supervisor-консоль; `quit` только отключает консоль |
|
||||
| `start_freeze_counters.ps1` | Запускает Windows performance counters в `H:\truf-diagnostics` |
|
||||
| `monitor_runtime_lag.ps1` | Пишет CPU/RAM/disk/runtime lag в CSV |
|
||||
| `cleanup_stale_agentui_vite.ps1` | Отдельная уборка старых AgentUI/Vite процессов; без `-Apply` только dry run |
|
||||
| `runtime\check-openrouter-keys.ps1` | Retired; намеренно завершается ошибкой |
|
||||
|
||||
В проекте нет собственных `.bat`/`.cmd`. Найденные BAT внутри `runtime\postgres\pgsql\pgAdmin 4` принадлежат pgAdmin и для Truf не используются.
|
||||
|
||||
## Full и Core-only режимы
|
||||
|
||||
`start_runtime.ps1` использует allowlist `supervisor.enabled_sources` из `config.linux.yaml`. Сейчас этот allowlist уже равен distributed core set, поэтому оба start-скрипта запускают одинаковые discovery producer.
|
||||
|
||||
`start_core_runtime.ps1` фиксирует core set прямо в wrapper и не зависит от будущего расширения default allowlist:
|
||||
|
||||
```text
|
||||
gitlab,dockerhub,huggingface
|
||||
```
|
||||
|
||||
PostgreSQL, `result-ingester`, `jsonl-projector`, `janitor` и независимо включённый `keychecks` также запускаются. Dashboard не запускается.
|
||||
|
||||
Чтобы сменить режим, сначала останови текущий supervisor через `.\stop_runtime.ps1`, затем запусти нужный start-скрипт. `stop_runtime.ps1` одинаков для обоих режимов.
|
||||
|
||||
## Core Sources
|
||||
|
||||
| Source | Что производит на сервере |
|
||||
|---|---|
|
||||
| `gitlab` | Ищет недавно активные GitLab projects и ставит их в очередь remote workers |
|
||||
| `dockerhub` | Ищет Docker Hub images и ставит в очередь только immutable `repo@sha256:...` targets |
|
||||
| `huggingface` | Ищет новейшие Hugging Face Spaces и ставит их в очередь remote workers |
|
||||
|
||||
`result-ingester`, `jsonl-projector`, `janitor` и `keychecks` отображаются как отдельные system workers, но не являются discovery sources. GitHub и `package_git` остаются доступными legacy/manual source, однако в distributed core profile не входят.
|
||||
|
||||
## Janitor
|
||||
|
||||
Janitor обслуживает только scanner work area (`S:\scanner-work`), а не PostgreSQL и не provider status files.
|
||||
|
||||
- Каждые `60` секунд ищет временные каталоги разрешённых типов.
|
||||
- Рассматривает только каталоги старше `7200` секунд.
|
||||
- Требует приватный `.scanner-owner.json` с точным process identity.
|
||||
- Удаляет каталог только если owner и parent гарантированно мертвы.
|
||||
- Не следует по symlink, junction или другим reparse points.
|
||||
- Один проход ограничен `50` каталогами, `10000` entries, `1 GiB`, `30` секундами и depth `64`.
|
||||
- Не имеет PostgreSQL credentials и не удаляет findings, keycheck history, current state или найденные секреты.
|
||||
|
||||
Примеры диагностики:
|
||||
|
||||
```powershell
|
||||
# Один диагностический замер
|
||||
.\monitor_runtime_lag.ps1 -Once
|
||||
|
||||
# Свой файл и интервал
|
||||
.\monitor_runtime_lag.ps1 -OutputPath H:\truf-diagnostics\lag.csv -IntervalSeconds 10
|
||||
|
||||
# Безопасный просмотр кандидатов на очистку Vite
|
||||
.\cleanup_stale_agentui_vite.ps1
|
||||
|
||||
# Реальная очистка найденного точного набора
|
||||
.\cleanup_stale_agentui_vite.ps1 -Apply
|
||||
```
|
||||
|
||||
## Supervisor-команды
|
||||
|
||||
Сначала запусти `.\attach_runtime.ps1`, затем используй команды ниже.
|
||||
|
||||
| Команда | Назначение |
|
||||
|---|---|
|
||||
| `help` | Полная встроенная справка |
|
||||
| `status` | Свежий status table |
|
||||
| `watch` | Live status; `q` возвращает в prompt |
|
||||
| `auth <source|all>` | Состояние auth pools |
|
||||
| `logs <source> [N]` | Последние `N` строк bounded-лога |
|
||||
| `command <source|all>` | Фактическая child-команда, log и state paths |
|
||||
| `start <source|all>` | Запустить остановленный source |
|
||||
| `stop <source|all>` | Остановить и оставить остановленным |
|
||||
| `restart <source|all>` | Перезапустить отдельный source |
|
||||
| `pause <source|all>` | Остановить и отметить paused |
|
||||
| `resume <source|all>` | Снять pause и запустить |
|
||||
| `once <source|all>` | Один проход source с `--once` |
|
||||
| `mode <source|all> loop|once|repeat` | Изменить режим source |
|
||||
| `set <source|all> interval <sec>` | Интервал repeat mode |
|
||||
| `set <source|all> restart on|off` | Автоматический restart после сбоя |
|
||||
| `set <source|all> restart_delay <sec>` | Начальная задержка restart |
|
||||
| `dashboard status|start|stop|restart` | Управление dashboard |
|
||||
| `shutdown` | Полный coordinated shutdown |
|
||||
| `quit` | В attach-режиме только отсоединиться |
|
||||
|
||||
`reload` намеренно отключён. После изменения `config.yaml` или runtime-кода нужен полный `stop_runtime.ps1` + `start_runtime.ps1`.
|
||||
|
||||
Source alias: `docker` означает `dockerhub`.
|
||||
|
||||
## Статусы
|
||||
|
||||
| Статус | Значение |
|
||||
|---|---|
|
||||
| `running` | Child сейчас работает |
|
||||
| `waiting` | Ожидает следующего запуска/retry |
|
||||
| `blocked` | Ждёт стабильной готовности PostgreSQL |
|
||||
| `paused` | Остановлен командой `pause` |
|
||||
| `done` | Успешный one-shot завершён |
|
||||
| `failed` | Child завершился с ошибкой, restart выключен |
|
||||
|
||||
`desired=running` показывает желаемое состояние. `rs` означает текущую серию ошибок / общее число automatic restarts. Старый `exit=1` рядом с уже `running` source относится к предыдущей попытке запуска.
|
||||
|
||||
## Keycheck Recheck
|
||||
|
||||
Формат:
|
||||
|
||||
```text
|
||||
recheck <service|all> [type ...] [options]
|
||||
```
|
||||
|
||||
Если type не указан, выполняется полный `--recheck-all` выбранного service.
|
||||
|
||||
### Типы
|
||||
|
||||
| Type | Что ставится в очередь |
|
||||
|---|---|
|
||||
| `network` | Текущие transient network statuses |
|
||||
| `ratelimited` | Limited/rate-limited и связанные no-balance statuses |
|
||||
| `unknown` | Unknown и no-context |
|
||||
| `restricted` | Restricted |
|
||||
| `nobalance` | No-balance/no-quota |
|
||||
| `valid` или `alive` | Текущие alive credentials |
|
||||
| `all` | Все известные credentials |
|
||||
| `legacy-vertex` | Только GCP: импортировать и проверить отсутствующие legacy Vertex TXT credentials |
|
||||
|
||||
### Опции
|
||||
|
||||
| Опция | Значение |
|
||||
|---|---|
|
||||
| `--force` | Остановить уже работающий keycheck batch и начать этот |
|
||||
| `--max-keys N` | Ограничить число credentials |
|
||||
| `--proxy-file PATH` | Временно переопределить proxy file |
|
||||
| `--no-resource-probe` | Отключить resource probe; сейчас используется Replicate |
|
||||
| `--no-summary` | Не пересобирать summary/status projections после batch |
|
||||
|
||||
`--input PATH` является legacy/offline compatibility option и в canonical PostgreSQL runtime не используется.
|
||||
|
||||
### Примеры
|
||||
|
||||
```text
|
||||
# Повторить только network failures у всех providers
|
||||
recheck all network
|
||||
|
||||
# Перепроверить все текущие alive GCP credentials
|
||||
recheck gcp valid
|
||||
|
||||
# Полностью перепроверить Qwen
|
||||
recheck qwen all
|
||||
|
||||
# Проверить максимум 5 alive Replicate без resource probe
|
||||
recheck replicate valid --max-keys 5 --no-resource-probe
|
||||
|
||||
# Импортировать/дедуплицировать старые GCP Vertex TXT записи и проверить только их
|
||||
recheck gcp legacy-vertex
|
||||
|
||||
# Прервать текущий keycheck batch и запустить новый
|
||||
recheck gcp valid --force
|
||||
```
|
||||
|
||||
Scheduled keychecks запускаются раз в `3600` секунд. По умолчанию проверяются новые candidates и повторяются только `NETWORK`; alive/limited/unknown/restricted/no-balance автоматически каждый час не перепроверяются.
|
||||
|
||||
## Текущие GCP Vertex Probes
|
||||
|
||||
| Provider | Модели | Locations | Проверка |
|
||||
|---|---|---|---|
|
||||
| Google | `gemini-3.6-flash`, `gemini-3.1-pro-preview` | `global`, `us`, `eu` | `countTokens`, без генерации |
|
||||
| Anthropic | `claude-opus-5`, `claude-opus-4-7`, `claude-opus-4-6`, `claude-fable-5` | `global`, `us`, `eu`, `us-east5`, `europe-west1` | `rawPredict`, до 1 output token |
|
||||
|
||||
Anthropic probe является реальным минимальным inference-вызовом и может иметь небольшой расход.
|
||||
|
||||
## Куда идут данные
|
||||
|
||||
1. Scanner sources создают result bundles.
|
||||
2. `result-ingester` пишет findings и keycheck candidates в PostgreSQL.
|
||||
3. Provider checker арендует candidate и выполняет API probe через `runtime\proxy.txt`.
|
||||
4. Новый результат добавляется в append-only `keycheck_results`.
|
||||
5. `keycheck_current_state` переключается на последний результат.
|
||||
6. `jsonl-projector` создаёт compatibility JSONL.
|
||||
7. Summary projection атомарно обновляет status TXT.
|
||||
|
||||
PostgreSQL является source of truth. TXT/JSONL в `runtime\keychecks` являются compatibility projections, а не входом для обычного recheck.
|
||||
|
||||
## Полезные пути
|
||||
|
||||
| Путь | Назначение |
|
||||
|---|---|
|
||||
| `app\config.yaml` | Основная конфигурация runtime, sources и probes |
|
||||
| `runtime\proxy.txt` | Proxy для provider checks |
|
||||
| `runtime\logs\supervisor.status.txt` | Последний status snapshot |
|
||||
| `runtime\logs\supervisor.log` | Supervisor log |
|
||||
| `runtime\logs\keychecks.log` | Общий keycheck log |
|
||||
| `runtime\keychecks\summary.tsv` | Текущий provider summary |
|
||||
| `runtime\keychecks\alive_summary.tsv` | Краткий alive summary |
|
||||
| `runtime\keychecks\<service>` | Compatibility status/results files provider-а |
|
||||
| `runtime\control\supervisor.instance.json` | Private control metadata; вручную не редактировать |
|
||||
| `S:\postgres-data` | Canonical PostgreSQL cluster |
|
||||
| `S:\scanner-work` | Scanner scratch/work area |
|
||||
|
||||
## Безопасность
|
||||
|
||||
- Не запускай provider scripts напрямую.
|
||||
- Не передавай raw credentials через CLI.
|
||||
- Не редактируй `supervisor.instance.json`.
|
||||
- Для управления используй только authenticated supervisor.
|
||||
- Для полного рестарта используй canonical start/stop scripts.
|
||||
- Не удаляй PostgreSQL cluster или runtime queues вручную.
|
||||
Reference in New Issue
Block a user