Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
242789b
chore(deps): upgrade datadog-api-client to master HEAD 2026-05-29
claude May 29, 2026
0effe43
feat(llm-obs): add dataset batch-update, clone, restore subcommands
claude May 29, 2026
e8f8050
feat(error-tracking): add --state, --team, --assignee filters to issu…
claude May 29, 2026
7c2a872
fix(llm-obs): drop unit-valued binding in datasets_restore
claude May 29, 2026
29f11a3
test(llm-obs): fix dataset request bodies to match SDK schema
claude May 29, 2026
0054c68
feat(cost): add OCI configs and cost anomalies list commands
claude May 30, 2026
dc09819
feat(security): add findings mute and rules bulk-convert commands
claude May 30, 2026
44a1ded
feat(synthetics): add downtime list/create/delete commands
claude May 30, 2026
f04988c
style(cost): apply cargo fmt
claude May 30, 2026
3309bf8
style(synthetics): apply cargo fmt
claude May 30, 2026
19ea3d3
feat(annotations): add annotations API v2 commands
claude May 30, 2026
51731ac
feat(metrics): add window-seconds and cross-org timeseries query
claude May 30, 2026
1fd420a
refactor(annotations): nest under dashboards and notebooks
claude May 30, 2026
23748ee
fix(auth): request security_monitoring_findings_write scope at login
claude May 30, 2026
3797c1d
merge: PR #540 llm-obs dataset batch-update/clone/restore into SDK up…
claude May 30, 2026
4f6e0de
merge: PR #541 error-tracking issue search filters into SDK upgrade base
claude May 30, 2026
5e02966
merge: PR #544 cost OCI configs + anomalies into SDK upgrade base
claude May 30, 2026
10c51d3
merge: PR #545 security findings mute + rules bulk-convert into SDK u…
claude May 30, 2026
853e239
merge: PR #546 synthetics downtime commands into SDK upgrade base
claude May 30, 2026
74f55a8
merge: PR #547 dashboard/notebook annotations into SDK upgrade base
claude May 30, 2026
4069fb3
merge: PR #548 metrics window-seconds + cross-org timeseries into SDK…
claude May 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,9 @@ ssh-key = { version = "0.6", features = ["p256", "std"], optional = true }
futures = { version = "0.3", optional = true }
tokio-util = { version = "0.7", features = ["compat", "io"], optional = true }

# Datadog API client — pinned to 0.30.0 release tag
# Datadog API client — pinned to master HEAD 2026-05-29
# Use default-features = false; feature sets are activated per-target via features above
datadog-api-client = { git = "https://github.com/DataDog/datadog-api-client-rust", rev = "aa0c8416e3af27038cf6a17e74ff1bf11d6bc1a6", optional = true, default-features = false }
datadog-api-client = { git = "https://github.com/DataDog/datadog-api-client-rust", rev = "d4954b117c5451c0a8932dd0ad0db450fcb0989c", optional = true, default-features = false }

# HTTP middleware (version-matched to DD client; compiles on all targets)
reqwest-middleware = "0.5"
Expand Down
31 changes: 22 additions & 9 deletions docs/COMMANDS.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ pup <domain> <subgroup> <action> [options] # Nested commands
|--------|-------------|------|--------|
| acp | serve | src/commands/acp.rs | ✅ |
| auth | login, logout, status, refresh | src/commands/auth.rs | ✅ |
| metrics | query, list, get, search | src/commands/metrics.rs | ✅ |
| metrics | query, list, search, timeseries, metadata, tags, submit | src/commands/metrics.rs | ✅ |
| logs | search, list, aggregate | src/commands/logs.rs | ✅ |
| traces | metrics (list, get, create, update, delete) | src/commands/traces.rs | ✅ |
| monitors | list, get, delete, search | src/commands/monitors.rs | ✅ |
| dashboards | list, get, delete, url | src/commands/dashboards.rs | ✅ |
| dashboards | list, get, delete, url, annotations (list, get-page, create, update, delete) | src/commands/dashboards.rs, src/commands/annotations.rs | ✅ |
| dbm | samples (search) | src/commands/dbm.rs | ✅ |
| ddsql | table, time-series, spec, schema (tables, columns) | src/commands/ddsql.rs | ✅ |
| debugger | probes (list, get, create, delete, watch) | src/commands/debugger.rs | ✅ |
Expand All @@ -44,12 +44,12 @@ pup <domain> <subgroup> <action> [options] # Nested commands
| api-keys | list, get, create, delete | src/commands/api_keys.rs | ✅ |
| app-keys | list, get, create, update, delete | src/commands/app_keys.rs | ✅ |
| infrastructure | hosts (list, get) | src/commands/infrastructure.rs | ✅ |
| synthetics | tests, locations, suites | src/commands/synthetics.rs | ✅ |
| synthetics | tests, locations, suites, downtime | src/commands/synthetics.rs | ✅ |
| symdb | search | src/commands/symdb.rs | ✅ |
| logs-restriction | list, get, create, update, delete, roles (list, add) | src/commands/logs_restriction.rs | ✅ |
| processes | list | src/commands/processes.rs | ✅ |
| users | list, get, roles, service-accounts (create, app-keys CRUD) | src/commands/users.rs | ✅ |
| notebooks | list, get, delete | src/commands/notebooks.rs | ✅ |
| notebooks | list, get, delete, annotations (list, get-page, create, update, delete) | src/commands/notebooks.rs, src/commands/annotations.rs | ✅ |
| security | rules, signals, findings, content-packs, risk-scores | src/commands/security.rs | ✅ |
| organizations | get, list | src/commands/organizations.rs | ✅ |
| service-catalog | list, get | src/commands/service_catalog.rs | ✅ |
Expand All @@ -66,7 +66,7 @@ pup <domain> <subgroup> <action> [options] # Nested commands
| data-deletion | requests (list, create, cancel) | src/commands/data_deletion.rs | ✅ |
| data-governance | scanner-rules (list) | src/commands/data_governance.rs | ✅ |
| obs-pipelines | list, get, create, update, delete, validate | src/commands/obs_pipelines.rs | ✅ |
| llm-obs | projects (create, list), experiments (create, list, update, delete, summary, events (list, get), metric-values, dimension-values), datasets (create, list), spans (search) | src/commands/llm_obs.rs | ✅ |
| llm-obs | projects (create, list), experiments (create, list, update, delete, summary, events (list, get), metric-values, dimension-values), datasets (create, list, batch-update, clone, restore), spans (search) | src/commands/llm_obs.rs | ✅ |
| reference-tables | list, get, create, batch-query | src/commands/reference_tables.rs | ✅ |
| network | flows list, devices (list, get, interfaces, tags), interfaces (list, update) | src/commands/network.rs | ✅ |
| cloud | aws, gcp, azure, oci | src/commands/cloud.rs | ✅ |
Expand Down Expand Up @@ -113,6 +113,8 @@ pup logs search --query="service:api" --from="7d" --storage="flex"
pup dbm samples search --query="dbm_type:activity service:orders env:prod" --from="1h" --limit=10
pup metrics search --query="avg:system.cpu.user{*}" --from="1h"
pup metrics query --query="avg:system.cpu.user{*}" --from="1h"
pup metrics tags list system.cpu.user --window-seconds=3600
pup metrics timeseries --file=request.json
pup events search --query="@user.id:12345"
```

Expand Down Expand Up @@ -148,7 +150,7 @@ pup infrastructure hosts list
- **monitors** - Monitor management (list, get, delete)
- **dashboards** - Dashboard management (list, get, delete, url)
- **slos** - Service Level Objectives (list, get, delete, status)
- **synthetics** - Synthetic monitoring (tests, locations, suites)
- **synthetics** - Synthetic monitoring (tests, locations, suites, downtime)
- **notebooks** - Investigation notebooks (list, get, delete)
- **downtime** - Monitor downtime (list, get, cancel)
- **status-pages** - Status pages with components and degradations
Expand All @@ -161,6 +163,8 @@ pup infrastructure hosts list

### Security & Compliance
- **security** - Security monitoring (rules, signals, findings, content-packs, risk-scores)
- `pup security findings mute --file <body.json>` — Mute or unmute up to 100 findings (stable, SDK #1519/#1660)
- `pup security rules bulk-convert --file <payload.json>` — Bulk convert existing rules to Terraform ZIP archive (SDK #1675)
- **static-analysis** - Code security (custom-rulesets, custom-rules)
- **audit-logs** - Audit trail (list, search)
- **data-governance** - Sensitive data scanning (scanner-rules list)
Expand All @@ -172,7 +176,7 @@ pup infrastructure hosts list
### Development & Quality
- **cicd** - CI/CD visibility (pipelines, events, tests, dora, flaky-tests)
- **code-coverage** - Code coverage summaries (branch, commit)
- **error-tracking** - Error management (issues search, issues get)
- **error-tracking** - Error management (issues search, issues get); search supports `--state`, `--team`, `--assignee` filters
- **scorecards** - Service quality (rules, outcomes)
- **service-catalog** - Service registry (list, get)
- **idp** - Service Catalog agent access (assist, find, owner, deps, register)
Expand All @@ -197,7 +201,7 @@ pup infrastructure hosts list

### Cost & Usage
- **usage** - Usage and billing (summary, hourly)
- **costs** - Cost management: `datadog` subgroup (projected, attribution, by-org, aws-config, azure-config, gcp-config) and `ccm` subgroup (custom-costs, tag-descriptions, tag-metadata, tags, tag-keys, budgets, commitments)
- **costs** - Cost management: `datadog` subgroup (projected, attribution, by-org, aws-config, azure-config, gcp-config), `ccm` subgroup (custom-costs, tag-descriptions, tag-metadata, tags, tag-keys, budgets, commitments), `oci-configs` subgroup (list), and `anomalies` subgroup (list)

### Configuration & Data Management
- **obs-pipelines** - Observability pipelines (list, get, create, update, delete, validate)
Expand All @@ -222,6 +226,14 @@ Available on all commands:

## Recent Enhancements

### v0.64.x — Error Tracking Issue Filters (SDK PRs #1568, #1480)

- **error-tracking issues search** — new optional filter flags:
- `--state <STATE>` — filter by issue state: `OPEN`, `ACKNOWLEDGED`, `RESOLVED`, `IGNORED`, `EXCLUDED`
- `--team <UUID>` — filter by team UUID assignee
- `--assignee <UUID>` — filter by user UUID assignee
- These flags are independent of the existing `--track`/`--persona` mutual exclusion

### v0.34.1 — ACP Server (Datadog AI Agent Integration)

- ✅ **acp** (new) — Local ACP + OpenAI-compatible server that proxies to Datadog Bits AI
Expand All @@ -243,7 +255,7 @@ Available on all commands:

### v0.28.0 — New Command Groups and Full Pipeline Implementation

- ✅ **llm-obs** (new) — LLM Observability: projects (create, list), experiments (create, list, update, delete, summary, events (list, get), metric-values, dimension-values), datasets (create, list), spans (search)
- ✅ **llm-obs** (new) — LLM Observability: projects (create, list), experiments (create, list, update, delete, summary, events (list, get), metric-values, dimension-values), datasets (create, list, batch-update, clone, restore), spans (search)
- ✅ **reference-tables** (new) — Reference table management (list, get, create, batch-query)
- ✅ **obs-pipelines** (upgraded from placeholder) — Full CRUD: list, get, create, update, delete, validate
- **costs** — Added cloud cost configs: `aws-config`, `azure-config`, `gcp-config` (list, get, create, delete each)
Expand All @@ -256,6 +268,7 @@ Available on all commands:
- **integrations** — Added Jira integration (accounts, templates CRUD) and ServiceNow integration (instances, templates, users, assignment groups, business services)
- **cloud** — Added OCI integration (tenancy configs CRUD, products)
- **synthetics** — Added suites management (V2 API: search, get, create, update, delete)
- **synthetics** — Added downtime management (V2 API: list, create, delete)
- **security** — Added content packs (list, activate, deactivate), bulk rule export, and entity risk scores
- **incidents** — Added global settings, handles, and postmortem template management
- **cases** — Added Jira/ServiceNow issue linking, case project moves, and notification rules
Expand Down
1 change: 1 addition & 0 deletions src/auth/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ pub fn default_scopes() -> Vec<&'static str> {
"security_monitoring_filters_read",
"security_monitoring_filters_write",
"security_monitoring_findings_read",
"security_monitoring_findings_write",
"security_monitoring_rules_read",
"security_monitoring_rules_write",
"security_monitoring_signals_read",
Expand Down
33 changes: 23 additions & 10 deletions src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,12 @@ macro_rules! make_api_no_auth {

/// All unstable operations (snake_case for the Rust DD client).
static UNSTABLE_OPS: &[&str] = &[
// Annotations (5)
"v2.create_annotation",
"v2.delete_annotation",
"v2.get_page_annotations",
"v2.list_annotations",
"v2.update_annotation",
// Incidents (26)
"v2.list_incidents",
"v2.search_incidents",
Expand All @@ -244,12 +250,6 @@ static UNSTABLE_OPS: &[&str] = &[
"v2.get_incident_postmortem_template",
"v2.list_incident_postmortem_templates",
"v2.update_incident_postmortem_template",
// Incident Teams (5)
"v2.create_incident_team",
"v2.delete_incident_team",
"v2.get_incident_team",
"v2.list_incident_teams",
"v2.update_incident_team",
// Incident Services (5)
"v2.create_incident_service",
"v2.delete_incident_service",
Expand Down Expand Up @@ -356,7 +356,7 @@ static UNSTABLE_OPS: &[&str] = &[
"v2.delete_aws_cloud_auth_persona_mapping",
"v2.get_aws_cloud_auth_persona_mapping",
"v2.list_aws_cloud_auth_persona_mappings",
// LLM Observability (18)
// LLM Observability (21)
"v2.create_llm_obs_project",
"v2.list_llm_obs_projects",
"v2.create_llm_obs_experiment",
Expand All @@ -365,6 +365,9 @@ static UNSTABLE_OPS: &[&str] = &[
"v2.delete_llm_obs_experiments",
"v2.create_llm_obs_dataset",
"v2.list_llm_obs_datasets",
"v2.batch_update_llm_obs_dataset",
"v2.clone_llm_obs_dataset",
"v2.restore_llm_obs_dataset_version",
"v2.create_llm_obs_annotation_queue",
"v2.list_llm_obs_annotation_queues",
"v2.update_llm_obs_annotation_queue",
Expand Down Expand Up @@ -420,6 +423,8 @@ static UNSTABLE_OPS: &[&str] = &[
"v2.get_investigation",
"v2.list_investigations",
"v2.trigger_investigation",
// Cloud Cost Management — Anomalies (1)
"v2.list_cost_anomalies",
];

// ---------------------------------------------------------------------------
Expand Down Expand Up @@ -642,7 +647,7 @@ static OAUTH_EXCLUDED_ENDPOINTS: &[EndpointRequirement] = &[
path: "/api/v2/obs-pipelines/pipelines/validate",
method: "POST",
},
// Cost / Billing (9) — API key only, no OAuth support
// Cost / Billing (11) — API key only, no OAuth support
EndpointRequirement {
path: "/api/v2/usage/projected_cost",
method: "GET",
Expand Down Expand Up @@ -704,6 +709,14 @@ static OAUTH_EXCLUDED_ENDPOINTS: &[EndpointRequirement] = &[
path: "/api/v2/cost/gcp_uc_config/",
method: "DELETE",
},
EndpointRequirement {
path: "/api/v2/cost/oci_config",
method: "GET",
},
EndpointRequirement {
path: "/api/v2/cost/anomalies",
method: "GET",
},
// Profiling (4)
// No OAuth scope is declared for Continuous Profiler endpoints; force API-key auth.
EndpointRequirement {
Expand Down Expand Up @@ -1279,12 +1292,12 @@ mod tests {

#[test]
fn test_unstable_ops_count() {
assert_eq!(UNSTABLE_OPS.len(), 167);
assert_eq!(UNSTABLE_OPS.len(), 171);
}

#[test]
fn test_oauth_excluded_count() {
assert_eq!(OAUTH_EXCLUDED_ENDPOINTS.len(), 52);
assert_eq!(OAUTH_EXCLUDED_ENDPOINTS.len(), 54);
}

#[test]
Expand Down
Loading
Loading