Skip to content

Define dataflows for community-owned integrations - #3095

Open
philjlee wants to merge 3 commits into
masterfrom
philip.lee/dataflows-extras-batch2-b
Open

Define dataflows for community-owned integrations#3095
philjlee wants to merge 3 commits into
masterfrom
philip.lee/dataflows-extras-batch2-b

Conversation

@philjlee

@philjlee philjlee commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

Jira: TXP-277

What

Adds assets/dataflows.yaml to 24 integrations (31 dataflow entries: 22 metrics, 5 logs, 4 events).

This is batch 2 of the integrations-extras dataflows backfill. Batch 1 was #3093, which was closed and re-split by team into #3100#3103 — all four are now merged.

Selection criteria

An integration is in scope for this PR if all of the following hold, computed from the repo at 9c197fe:

  1. It has a parseable manifest.json (the dataflows validator hard-requires one).
  2. It has no existing assets/dataflows.yaml.
  3. It has a hard data signal: metadata.csv with at least one data row, and/or a log pipeline under assets/logs/. No data_type was ever guessed.
  4. .github/CODEOWNERS resolves <dir>/assets/dataflows.yaml (last-match-wins) to an owner set containing no @DataDog/... team.
  5. It is not a RUM tile, not one of the 5 service-check-only directories, and not fluxcd/traefik (README-only, disabled in APW).

Then, within that set of 81, this PR takes the cluster with vendor-organization owners: The CODEOWNERS entry for these paths resolves to a vendor GitHub organization/team (e.g. @Mergifyio/oss-integrations, @symopsio/eng, @EMnify/development) and/or a corporate support alias (e.g. support@redpanda.com, field.engineers@redis.com).

Content

Every file follows the uniform template already used by the pre-existing files in this repo:

provides:
  - id: <app_id>-<data_type>
    always_on: true
    granular: false
    data_type: <metrics|logs|events>
    direction: inbound

id is manifest.json's app_id plus -<data_type>. That is the mechanical rule the existing entries follow — not the directory name. For all 81 integrations in batch 2 the two happen to coincide after slugification, but app_id is the authority.

metadata.csv rows produce a metrics entry, an assets/logs/ pipeline (or, per tidb-logs precedent, a journald-only logs template in spec.yaml) produces a logs entry, and a check/manifest that submits Datadog events (self.event(), or creates_events: true backed by a documented events integration) produces an events entry. Integrations with more than one get all of them (metrics, logs, events).

Integrations in this PR

Integration Dataflows Evidence CODEOWNERS
ambassador metrics 80 metric rows @datawire hello@datawire.io
bonsai metrics 13 metric rows dev@onemorecloud.com
emnify metrics 3 metric rows @EMnify/development @EMnify/rademade
gnatsd metrics 25 metric rows @stephenprater @jaredhoyt dev@goldstar.com
gnatsd_streaming metrics+events 11 metric rows, failover event (test_failover_event) @stephenprater @jaredhoyt dev@goldstar.com
k6 metrics 54 metric rows @ppcano support@k6.io
launchdarkly metrics+events 3 metric rows, events integration (creates_events) support@launchdarkly.com
mergify metrics 4 metric rows @Mergifyio/oss-integrations
mergify_oauth metrics 23 metric rows @Mergifyio/oss-integrations
modal metrics+logs 14 metric rows, log pipeline @modal-labs support@modal.com
ocient metrics 183 metric rows @ocient-cliimatta @Xeograph/service-delivery-engineering
perimeterx logs log pipeline support@perimeterx.com
qdrant metrics 53 metric rows @Anush008 info@qdrant.com
redis_cloud metrics 293 metric rows @redis-field-engineering field.engineers@redis.com
redis_enterprise metrics 294 metric rows @redis-field-engineering field.engineers@redis.com
redis_enterprise_prometheus metrics 442 metric rows @redis-field-engineering field.engineers@redis.com
redpanda metrics+logs 195 metric rows, journald logs template (tidb-logs precedent) @redpanda-data support@redpanda.com
reflectiz metrics+logs 14 metric rows, log pipeline @reflectiz/developers
rigor metrics+events 39 metric rows, alert/recovery events (creates_events) support@rigor.com
rundeck metrics 66 metric rows forrest@rundeck.com
sigsci metrics+events 15 metric rows, flagged-IP events (creates_events) @signalsciences info@signalsciences.com
stardog metrics 506 metric rows @snowell support@stardog.com
sym logs log pipeline @symopsio/eng
vespa metrics 34 metric rows @gjoranv dd@vespa.ai

Coverage

As of 2026-08-21, master carries 107 assets/dataflows.yaml files (batch 1's #3100#3103 and batch 2's #3094 have since merged). If this PR merges:

Stage Files Coverage (of 260 integration directories)
Today on master 107 41.2%
After this PR (+24) 131 50.4%

Batch 1 + batch 2 together complete the entire mechanical bucket — every integration in the repo with an unambiguous local data_type signal.

Validation

These files were validated by running the real upstream validator, not by static inspection.

DataflowsValidationHandler from ddoghq/dd-source@main (domains/integrationscatalog/libs/catalogassetslib/dataflows_validation_handler.go) was executed via go test -overlay, with only the COBS-backed dataflows client and the deployment handler stubbed out. The validation code path itself is byte-for-byte upstream — the handler file was diffed against ddoghq/dd-source@main and is identical. Note that validDataTypes has grown since this PR was opened and is now 16 values (rum_events and security_investigation_api_calls have both landed since), so re-diff before relying on this claim again.

The harness was negative-tested first, and correctly rejects all of: missing always_on; a data_type outside the enum; an id violating ^[a-z0-9-]+$; an id shorter than 3 characters; a file with neither provides nor uses; a .yml extension; a missing manifest.json; and the same dataflow ID provided by two apps. A known-good baseline file is accepted. So a pass here means something.

APW also posts a validate-dataflows status check on extras PRs, so there will be pre-merge feedback from the pipeline itself as well.

CI note — run / Validate redness is pre-existing

The run / Validate job is still failing on master (confirmed 2026-08-21, most recent runs all failure). Because the workflow runs with TARGET=changed on PRs, touching a directory pulls that pre-existing drift into this PR's scope even though this PR only adds a new file and changes nothing that ddev validate config/models inspects. 6 of the 24 directories in this PR still carry that pre-existing drift on master: mergify, ocient, qdrant, redis_cloud, redis_enterprise, redpanda. This is unrelated to dataflows and is not something this PR attempts to fix.

Codex review round

Codex flagged 5 missed entries, all confirmed and fixed: redpanda-logs (journald logs template in spec.yaml, matching the already-merged tidb-logs precedent), and events entries for gnatsd_streaming, launchdarkly, rigor, and sigsci (each verified against source/README to actually submit Datadog events inbound, not just an unratified outbound-tile guess — see replies on the individual review comments).

Deferred, not in scope

Nothing was dropped from this PR for an ambiguous data_type — every integration in the batch-2 set mapped cleanly to metrics and/or logs. What remains unaddressed repo-wide after batch 1 + batch 2 is the research bucket, which needs schema decisions rather than scripting:

  • 5 service-check-only directories (cfssl, cybersixgill_actionable_alerts, go_pprof_scraper, isdown, reboot_required) — service checks map to no data_type.
  • ~39 outbound notification/webhook tilesevents + direction: outbound is the least-bad fit but has not been ratified by anyone.
  • 5 directories with no manifest.json (aerospike_enterprise, scamalytics, warpstream, plus fluxcd/traefik which are README-only and explicitly disabled in APW) — the validator requires a manifest.

The RUM SDK tile bucket that used to be listed here is done: rum_events landed in validDataTypes (dd-source#50640) and extras#3108 populated the 15 RUM SDK tiles, both merged.

Related: #3093 (batch 1, closed/superseded by #3100#3103), #2925 (the original dataflows PR for saas-integrations).

🤖 Generated with Claude Code

@philjlee

philjlee commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator Author

CI note: run / Validate — confirmed pre-existing, not caused by this PR

Now that CI has run on all four batch-2 PRs, here is the observed result. The run / Validate outcome tracks exactly one thing: whether the PR happens to touch a directory whose generated config/model files are already out of sync on master.

PR Files Dirs already drifting on master run / Validate
#3094 4 2 (gatekeeper, kepler) fail
#3095 24 6 fail
#3096 43 16 fail
#3097 10 0 pass

#3097 is the natural control: same generator, same file shape, zero drifting directories, and run / Validate is green. That isolates the failure to pre-existing drift rather than to anything about dataflows.yaml.

Two further confirmations:

  1. The string dataflow does not appear anywhere in the validation output of the failing runs. (It appears 5 times in each log, all in git fetch branch-listing noise.) No validator names a dataflows.yaml file. The failing steps are only "Validate default configuration files" and "Validate configuration models".

  2. master emits the identical errors. The last Validate repository run on masterrun 30528431295 at 9c197fe, the exact SHA these branches are based on — already reports, verbatim:

    ##[error]File `conf.yaml.example` is not in sync, run "ddev validate config kepler -s"
    ##[error]File `defaults.py` is not in sync, run "ddev validate models gatekeeper -s"
    ##[error]File `instance.py` is not in sync, run "ddev validate models gatekeeper -s"
    

    That master run has 182 is not in sync errors across 39 integration directories, and 10 of the last 10 Validate repository runs on master failed. Because PRs run with TARGET=changed, touching any of those 39 directories pulls the drift into scope.

This PR adds one new file per directory and changes nothing that ddev validate config/models inspects. Fixing the repo-wide codegen drift is out of scope here.

@philjlee
philjlee force-pushed the philip.lee/dataflows-extras-batch2-b branch from e176c9b to e402083 Compare August 17, 2026 19:36
@philjlee philjlee changed the title Define dataflows for community-owned integrations (batch 2, vendor-organization owners) Define dataflows for community-owned integrations Aug 24, 2026
@philjlee
philjlee changed the base branch from master to philip.lee/fix-validate-config-models-drift August 24, 2026 20:29
@philjlee
philjlee force-pushed the philip.lee/dataflows-extras-batch2-b branch from e402083 to 8b71c6a Compare August 24, 2026 20:30
@philjlee
philjlee force-pushed the philip.lee/fix-validate-config-models-drift branch from 28c2cc3 to 44277f1 Compare August 24, 2026 20:50
@philjlee
philjlee force-pushed the philip.lee/dataflows-extras-batch2-b branch from 8b71c6a to 72f24da Compare August 24, 2026 20:51
@philjlee
philjlee force-pushed the philip.lee/fix-validate-config-models-drift branch from 44277f1 to 28c2cc3 Compare August 24, 2026 20:57
@philjlee
philjlee force-pushed the philip.lee/dataflows-extras-batch2-b branch from 72f24da to 1f3cede Compare August 24, 2026 21:04
@philjlee
philjlee changed the base branch from philip.lee/fix-validate-config-models-drift to philip.lee/fix-redis-openmetrics-default-config-collision August 24, 2026 21:05
@philjlee
philjlee changed the base branch from philip.lee/fix-redis-openmetrics-default-config-collision to philip.lee/fix-validate-config-models-drift August 25, 2026 13:14
@philjlee
philjlee force-pushed the philip.lee/dataflows-extras-batch2-b branch from 1f3cede to 736433b Compare August 25, 2026 13:15
@philjlee
philjlee marked this pull request as ready for review August 25, 2026 13:18
@philjlee
philjlee requested a review from sarah-witt August 25, 2026 13:18

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 736433b2df

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@@ -0,0 +1,6 @@
provides:
- id: redpanda-metrics

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Declare Redpanda's log flow

When users enable the shipped Redpanda log configuration, the Agent collects journald logs with source: redpanda (redpanda/assets/configuration/spec.yaml, lines 38–41), and the manifest also declares that log source. Because this file lists only metrics, dataflow consumers will incorrectly treat Redpanda as not providing logs; add a redpanda-logs inbound entry.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirmed and fixed. Verified against tidb-logs — same shape (journald-only logs template in spec.yaml, no assets/logs/ pipeline) and already merged as precedent (#3100). Added redpanda-logs.

@@ -0,0 +1,6 @@
provides:
- id: gnatsd-streaming-metrics

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Declare the NATS Streaming event flow

When a fault-tolerant NATS Streaming server changes state, gnatsd_streaming.py submits a failover event, and test_failover_event verifies that behavior. Listing only metrics therefore hides an event type that the check actively provides from dataflow consumers; add a gnatsd-streaming-events inbound entry.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirmed and fixed. _failover_check submits a real event (covered by test_failover_event), matching the existing direction: inbound, data_type: events precedent (e.g. redis-sentinel-events, gatling-enterprise-events). Added gnatsd-streaming-events.

@@ -0,0 +1,6 @@
provides:
- id: launchdarkly-metrics

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Declare LaunchDarkly's event flow

When customers configure the documented LaunchDarkly events integration, flag, project, and environment events are sent into Datadog (launchdarkly/README.md, lines 21–23 and 61–63), and the manifest sets creates_events to true. This metrics-only declaration consequently makes catalog consumers miss a supported data type; add a launchdarkly-events inbound entry.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirmed and fixed. Manifest sets creates_events: true and the README documents the events integration pushing flag/project/environment events into Datadog via API key (inbound, not an outbound notification tile). Added launchdarkly-events.

@@ -0,0 +1,6 @@
provides:
- id: rigor-metrics

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Declare Rigor's event flow

When a Rigor check crosses its alert threshold or recovers, the integration pushes an event into Datadog (rigor/README.md, lines 117–124), consistent with the manifest's creates_events: true. Declaring only metrics causes dataflow consumers to omit this supported event stream; add a rigor-events inbound entry.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirmed and fixed. Manifest sets creates_events: true and the README documents Failed/Back-online events pushed into Datadog. Added rigor-events.

@@ -0,0 +1,6 @@
provides:
- id: sigsci-metrics

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Declare Signal Sciences' event flow

When Signal Sciences flags an IP address, the integration sends an event to the Datadog Event Stream (sigsci/README.md, lines 90–92), and its manifest explicitly sets creates_events to true. The metrics-only file therefore underreports the integration's provided data types; add a sigsci-events inbound entry.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirmed and fixed. Manifest sets creates_events: true and the README documents events sent to the Datadog Event Stream when an IP is flagged. Added sigsci-events.

Base automatically changed from philip.lee/fix-validate-config-models-drift to master August 25, 2026 13:54
philjlee and others added 2 commits August 25, 2026 09:58
Add assets/dataflows.yaml to 24 integrations owned by a vendor GitHub
organization or a corporate support alias, with no @DataDog/... team
CODEOWNER.

Each entry is derived mechanically: a metadata.csv with at least one metric
row yields a metrics dataflow, an assets/logs/ pipeline yields a logs
dataflow. Dataflow IDs are <app_id from manifest.json>-<data_type>.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- redpanda: adds redpanda-logs (journald log template in spec.yaml,
  same pattern as tidb's already-merged logs entry)
- gnatsd_streaming: adds gnatsd-streaming-events (check submits a
  failover event, covered by test_failover_event)
- launchdarkly, rigor, sigsci: add <app>-events (manifest
  creates_events: true, and README documents each integration
  pushing Datadog events)
@philjlee
philjlee force-pushed the philip.lee/dataflows-extras-batch2-b branch from 36af90b to 5696964 Compare August 25, 2026 14:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants