Skip to content

LoaderActivity.Execute

Purpose

Резолвит текущую Terry loader config по data_source_id, собирает middleware/fetcher chain и выполняет один universal fetch run.

Код: internal/worker/loader/activity.go

Legacy Temporal activity name Execute remains registered as a compatibility alias for old workflow histories.

Flow

flowchart TD
    Start([Start]) --> Validate[Validate request]
    Validate --> HasDataSource{data_source_id present?}
    HasDataSource -- No --> Invalid[Return validation error]
    HasDataSource -- Yes --> Resolve[Resolve current loader config]
    Resolve --> Active{Source and config active?}
    Active -- No --> ConfigError[Return config error]
    Active -- Yes --> Build[Build middleware and fetcher chain]
    Build --> Fetch[Execute fetcher]
    Fetch --> FetchOK{Fetch succeeded?}
    FetchOK -- No --> FetchError[Return fetcher error]
    FetchOK -- Yes --> Metadata[Build runtime metadata]
    Metadata --> Store[Store raw payload in object storage]
    Store --> StoreOK{Stored?}
    StoreOK -- No --> StorageError[Return storage error]
    StoreOK -- Yes --> Output[Return LoaderOutput with raw_data metadata]
    Output --> End([End])
    Invalid --> End
    ConfigError --> End
    FetchError --> End
    StorageError --> End

Input / Output

Input (loader.LoaderRequest): - data_source_id - name (optional) - metadata (optional)

Output (loader.LoaderOutput): - metadata - fetched_at - source_type - raw_data

Сырой payload не возвращается в output. raw_data описывает payload, сохранённый activity в Hetzner S3: - file_uid — UUID объекта в raw storage; - hash — SHA-256 сохранённых байтов; - hash_algorithm — сейчас всегда sha256; - content_type — MIME type сохранённого payload, сейчас application/json; - requested_at — UTC-время перед вызовом fetcher.

В runtime metadata дополнительно пробрасываются: - data_source_id, loader_config_id, loader_config_version, loader_config_status - workspace_id, domain_id, page_type, code_name

External Dependencies

  • PostgreSQL catalog terry.* через repository/config resolver
  • Hetzner S3-compatible object storage для raw payload artifacts
  • loader fetchers (sdk, http, file, database, playwright, custom)
  • loader middleware (fingerprint, proxy, incremental, ratelimit)

HTTP Fetcher

source_type=http теперь поддерживается как рабочий fetcher, а не scaffold-заглушка.

Кратко:

  • выполняет GET, POST, PUT, PATCH, DELETE;
  • применяет enabled/disabled headers и query params из source.http;
  • поддерживает body.json и body.raw;
  • парсит JSON response по response.items_path;
  • поддерживает disabled, page, offset, cursor pagination;
  • применяет per-request timeout/retry;
  • блокирует unsafe SSRF targets;
  • возвращает JSON payload для сохранения в raw storage.

Подробный contract: Terry HTTP Fetcher.

Idempotency

  • сама activity не пишет в Terry catalog;
  • retry одного activity пишет в тот же raw object key, переданный workflow-ом;
  • новый workflow run получает новый raw object key;
  • идемпотентность downstream side effects зависит от конкретного fetcher/consumer.

Error Taxonomy

  • invalid request (missing data_source_id)
  • source/config inactive
  • raw storage не сконфигурирован или ошибка записи в Hetzner S3
  • unsupported source type или middleware type
  • transport/fetcher runtime errors

Callers