Integration catalog and marketplace

Embed
Preview of the card
<a href="https://watchtowerops.net/docs/catalog"><img src="https://watchtowerops.net/docs/_api/public/orgs/aa5959cb-1a0b-4a9a-bc9a-913e7ac31cd9/spaces/b7aac181-9916-4805-b253-becc5fd2ca62/pages/41105cb8-74f9-42b9-9856-9baf613a549c/social-card.svg?v=3e7ae33eec8b" alt="Integration catalog and marketplace" width="600" height="315"></a>

make catalog (cd go && go run ./tools/catalog) scans the repo and writes docs/integrations/catalog.json: agent integration packs (integrations/*, go/agent/*), connectors (go/internal/connectors/*, cloud pulls, change-source presets), notification channels, uptime check drivers, importers and plugin examples. Entries are grouped by tier (core, extended, community, plugin) with totals, each with {slug, vendor, kind, summary, setup}. go test ./tools/catalog fails when the file is stale or an integrations/* directory has no entry.

At API start the entries are upserted into marketplace_listings (one row per slug, idempotent). Installing a plugin adds a source = plugin listing (plugin-<name>).

  • GET /v1/integrations/catalog?tier&kind&q&limit&cursor (any signed-in caller)

  • GET /v1/integrations/catalog/{slug}

The web catalog (Settings, Integration catalog) shows tier groups and per-vendor setup guidance.

OpenAPI import

PUT /v1/projects/{p}/services/{svc}/api-spec takes an OpenAPI 3.x JSON document (up to 5 MiB), validates it and stores it. GET returns the endpoint list and the distinct path templates as candidate APM endpoint_rules (nothing is applied automatically). YAML must be converted to JSON first (yq -o=json).

Updated