Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
358195b
Updated basic instructions to introduce rules
arti-arutiunov Aug 2, 2026
7dbf19d
Added screenshots
arti-arutiunov Aug 5, 2026
8feade4
(maint) Post-migration cleanup script (#38931)
hestonhoffman Aug 6, 2026
ac44d67
Fix malformed path (#38980)
jhgilbert Aug 6, 2026
170c976
Fix off-by-one path index in check-section-index.py (#38983)
hestonhoffman Aug 6, 2026
8107489
Reorg labeler fix (#38985)
jhgilbert Aug 6, 2026
a406738
[reorg fix] [DOCS-15270] Add guide for managing Incident Management w…
jhgilbert Aug 7, 2026
1b7e04c
[CONTP-1760] Document configuring Autodiscovery with the DatadogInstr…
Mathew-Estafanous Aug 7, 2026
9d8fe8c
Fix minimum Datadog Agent version for Python ddtrace v4 (#38555)
dstroobants Aug 7, 2026
4952be3
Correct custom rule message formatting docs (remove References, demot…
BeatrizFeliciano Aug 7, 2026
a0ab19e
Update IAST setup instructions with APM cost note (#38861)
jhgilbert Aug 7, 2026
32af149
Change test frequency info (#38967)
julinvictus Aug 7, 2026
2ef02da
Update paths in preview_links.py (#39002)
jhgilbert Aug 7, 2026
8f58804
Regenerate client from commit 4616981 of spec repo (#38995)
api-clients-generation-pipeline[bot] Aug 7, 2026
dd639ef
Add Data Observability integration overhead page (#37586)
harels Aug 7, 2026
300db43
Regenerate client from commit da90b0c of spec repo (#39003)
api-clients-generation-pipeline[bot] Aug 7, 2026
65db9f1
[reorg fix] Nicolas.jung/add ai grok parser (#38943)
jhgilbert Aug 7, 2026
7e5440e
[WEBPS-8171] Document Entra SCIM roles attribute setup (#38964)
dhdaviddai Aug 7, 2026
398649c
Update Kafka demo with connectors (#39008)
piochelepiotr Aug 7, 2026
96ab712
Instructions for creating RUM Operations from Datadog UI (#38406)
arti-arutiunov Aug 7, 2026
537dd6f
Regenerate client from commit d4260df of spec repo (#38999)
api-clients-generation-pipeline[bot] Aug 7, 2026
6dffec5
Document 7-day SDS example log retention for gov sites (#38976)
PronoyC Aug 7, 2026
251d056
Add note about env var (#39010)
maycmlee Aug 7, 2026
06ab28c
Remove Agent config template build dependency (#39006)
brett0000FF Aug 7, 2026
e48bebf
Document coverage report merging and partial coverage (#38727)
nikita-tkachenko-datadog Aug 7, 2026
a4fdb4e
Fix Edit button GitHub link after hugo directory migration (#39013)
janine-c Aug 7, 2026
b9fe955
move section (#39026)
maycmlee Aug 7, 2026
7013370
[DOCS-15338] Document default Session Replay retention via account te…
rtrieu Aug 7, 2026
a80c6b9
Add Node.js image_parts annotation example to LLM Observability SDK d…
cdfox Aug 7, 2026
3c35abc
[reorg fix] Clarify auto multi-line before/after example in Overview …
jhgilbert Aug 7, 2026
100385a
[MCPS-596] Document Codex CLI header for MCP Server toolsets (#38992)
jfree Aug 8, 2026
ba9a12b
Revise minimum version requirements for Datadog Agent (#39030)
ijkaylin Aug 8, 2026
090e37a
Fix tracking consent link in Browser SDK setup partial (#38856)
jhgilbert Aug 10, 2026
f7208d5
Updated basic instructions to introduce rules
arti-arutiunov Aug 2, 2026
252c0ee
Added screenshots
arti-arutiunov Aug 5, 2026
ab12e5d
Merge branch 'reorg-fix/pr-38673' of github.com:DataDog/documentation…
rtrieu Aug 10, 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
24 changes: 12 additions & 12 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,29 @@ Github:
- .github/**/*

Images:
- static/images/**/*
- hugo/static/images/**/*

Architecture:
- local/**/*
- layouts/**/*
- config/**/*
- assets/**/*
- hugo/local/**/*
- hugo/layouts/**/*
- hugo/config/**/*
- hugo/assets/**/*

$1:
- content/en/([^/]+)/.*
- hugo/content/en/([^/]+)/.*

FAQ:
- content/en/*/faq/*
- hugo/content/en/*/faq/*

Guide:
- content/en/*/guide/*
- hugo/content/en/*/guide/*

eci:
# Emerging Cloud Integrations team
- integrations-internal-core/oracle_cloud_infrastructure/**/*

cdocs:
- customization_config/
- content/en/**/*.mdoc.md
- layouts/shortcodes/**/*.mdoc.md
- content/.gitignore
- hugo/customization_config/
- hugo/content/en/**/*.mdoc.md
- hugo/layouts/shortcodes/**/*.mdoc.md
- hugo/content/.gitignore
21 changes: 21 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,26 @@
# Hugo

# Pre-Hugo-reorganization files left at the repository root. The canonical
# project files now live under /hugo; do not add root-level copies back to Git.
/.hugo_build.lock
/.yarn/
/_vendor/
/agent_config_types_list.txt
/content/
/data/
/examples/
/hugpython/
/integrations_data/
/layouts/
/local/
/Makefile.config
/node_modules/
/playwright-report/
/public/
/resources/
/static/
/test-results/

# htmltest tmp files
bin/htmltest
htmltest_report.txt
Expand Down
10 changes: 5 additions & 5 deletions .husky/check-section-index.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ def get_staged_files():
def get_top_level_dir(file_path):
"""Extract the top-level directory under content/en/ from a file path.

For example, 'content/en/new_section/sub/page.md' returns 'new_section'.
For example, 'hugo/content/en/new_section/sub/page.md' returns 'new_section'.
"""
parts = Path(file_path).parts
# parts: ('content', 'en', 'new_section', ...)
if len(parts) > 2:
return parts[2]
# parts: ('hugo', 'content', 'en', 'new_section', ...)
if len(parts) > 3:
return parts[3]
return None


Expand Down Expand Up @@ -83,7 +83,7 @@ def has_index_file(repo_root, dir_name):
return True
# Also check if either variant is staged (new but not yet on disk)
for name in ('_index.md', '_index.mdoc.md'):
relative = f'hugo/hugo/content/en/{dir_name}/{name}'
relative = f'hugo/content/en/{dir_name}/{name}'
try:
subprocess.run(
['git', 'show', f':{relative}'],
Expand Down
16 changes: 16 additions & 0 deletions REPO_REORG.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,22 @@ When an automatic fix is not possible, we'll defer to the author's best judgment

We'll institute a code freeze while the reorg is in progress, likely for a few hours on the morning of the reorg. We'll lift the freeze after the reorg changes have been merged, the build is confirmed to be operational, and the open PRs have been processed.

### Post migration cleanup

After the migration has been completed:
- Your local repo will have some redundant files hanging out in the root directory. We've added them to `.gitignore` to prevent anyone from adding them back to the repo, but they take up space and clutter your local directory.
- You need to move your `Makefile.config` to the `hugo/` directory.

You can run the following script to clean up your local repo and move the config file into the correct place:
```sh
./hugo/scripts/post-migration-cleanup.sh
```

The script deletes a lot of files, so it take a little while to complete.

## Owners

This project is owned by the WebOps Platform team (#webops-platform).



43 changes: 0 additions & 43 deletions hugo/config/_default/menus/api.en.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18553,49 +18553,6 @@ menu:
- ListRumMetrics
unstable: []
order: 1
- name: Rum Rate Limit
url: /api/latest/rum-rate-limit/
identifier: rum-rate-limit
generated: true
- name: Create or update a RUM rate limit configuration
url: /api/latest/rum-rate-limit/create-or-update-a-rum-rate-limit-configuration/
identifier: rum-rate-limit-create-or-update-a-rum-rate-limit-configuration
parent: rum-rate-limit
generated: true
params:
versions:
- v2
operationids:
- UpdateRumRateLimitConfig
unstable:
- v2
order: 2
- name: Get a RUM rate limit configuration
url: /api/latest/rum-rate-limit/get-a-rum-rate-limit-configuration/
identifier: rum-rate-limit-get-a-rum-rate-limit-configuration
parent: rum-rate-limit
generated: true
params:
versions:
- v2
operationids:
- GetRumRateLimitConfig
unstable:
- v2
order: 1
- name: Delete a RUM rate limit configuration
url: /api/latest/rum-rate-limit/delete-a-rum-rate-limit-configuration/
identifier: rum-rate-limit-delete-a-rum-rate-limit-configuration
parent: rum-rate-limit
generated: true
params:
versions:
- v2
operationids:
- DeleteRumRateLimitConfig
unstable:
- v2
order: 3
- name: Rum Replay Heatmaps
url: /api/latest/rum-replay-heatmaps/
identifier: rum-replay-heatmaps
Expand Down
21 changes: 16 additions & 5 deletions hugo/config/_default/menus/main.en.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5477,6 +5477,12 @@ menu:
identifier: openlineage_datadog_agent_for_openlineage
parent: openlineage_integrations
weight: 1000000
- name: Integration Overhead
url: data_observability/integration_overhead
pre: data-observability-wui
identifier: data_observability_integration_overhead
parent: data_observability_heading
weight: 90000
- name: Agent Observability
url: llm_observability/
pre: llm-observability
Expand Down Expand Up @@ -6244,31 +6250,36 @@ menu:
parent: code_coverage
identifier: code_coverage_configuration
weight: 2
- name: Coverage Calculation
url: code_coverage/coverage_calculation/
parent: code_coverage
identifier: code_coverage_coverage_calculation
weight: 3
- name: Monorepo Support
url: code_coverage/monorepo_support/
parent: code_coverage
identifier: code_coverage_monorepo_support
weight: 3
weight: 4
- name: Flags
url: code_coverage/flags/
parent: code_coverage
identifier: code_coverage_flags
weight: 4
weight: 5
- name: Carryforward
url: code_coverage/carryforward/
parent: code_coverage
identifier: code_coverage_carryforward
weight: 5
weight: 6
- name: Data Collected
url: code_coverage/data_collected/
parent: code_coverage
identifier: code_coverage_data_collected
weight: 5
weight: 7
- name: Dashboards
url: code_coverage/dashboards/
parent: code_coverage
identifier: code_coverage_dashboards
weight: 6
weight: 8
- name: PR Gates
url: pr_gates/
pre: ci
Expand Down
3 changes: 2 additions & 1 deletion hugo/content/en/account_management/scim/entra.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ When using SAML and SCIM together, Datadog strongly recommends disabling SAML ju

7. After you set your mappings, click {{< ui >}}Save{{< /ui >}}.

To provision a user's Datadog role (built-in or custom), map the `roles` attribute as shown above, using the `AppRoleAssignmentsComplex([appRoleAssignments])` expression for the Microsoft Entra ID attribute. Roles follow the SCIM multi-valued attribute convention defined in [RFC 7643][9]. If a SCIM request sends multiple roles, Datadog provisions only the roles that match a role in your organization. If none match, the user falls back to the org default role (Standard), and unmatched roles are logged to Audit Trail. For more details, see [SCIM][1].
To provision a user's Datadog role (built-in or custom), map the `roles` attribute as shown above, using the `AppRoleAssignmentsComplex([appRoleAssignments])` expression for the Microsoft Entra ID attribute. If `roles` is not available in the target attribute dropdown, add it as a **multi-valued** string attribute. For configuration instructions, see [Microsoft's attribute-mapping documentation][10]. Roles follow the SCIM multi-valued attribute convention defined in [RFC 7643][9]. If a SCIM request sends multiple roles, Datadog provisions only the roles that match a role in your organization. If none match, the user falls back to the org default role (Standard), and unmatched roles are logged to Audit Trail. For more details, see [SCIM][1].

### Group attributes

Expand All @@ -99,3 +99,4 @@ Group mapping is not supported.
[7]: https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference#cloud-application-administrator
[8]: https://learn.microsoft.com/en-us/entra/identity/app-provisioning/application-provisioning-config-problem-scim-compatibility#flags-to-alter-the-scim-behavior
[9]: https://www.rfc-editor.org/rfc/rfc7643.html#section-4.1.2
[10]: https://learn.microsoft.com/en-us/entra/identity/app-provisioning/customize-application-attributes#provisioning-a-role-to-a-scim-app
37 changes: 21 additions & 16 deletions hugo/content/en/agent/logs/auto_multiline_detection.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,31 +12,36 @@ algolia:
tags: ['advanced log filter']
---

<div class="alert alert-danger">This feature is available for Agent version <strong>7.65.0+</strong> and above. For older Agent versions or to explicitly enable the legacy implementation, see <a href="/agent/logs/auto_multiline_detection_legacy">Auto Multi-line Detection and Aggregation (Legacy)</a>. For Agent versions older than <strong>7.82.0</strong>, Auto multi-line Detection is disabled by default.</div>
<div class="alert alert-danger">This feature is available for Agent version <strong>7.65.0+</strong> and above. For older Agent versions or to explicitly enable the legacy implementation, see <a href="/agent/logs/auto_multiline_detection_legacy">(Legacy) Automatic Multi-line Detection and Aggregation</a>. For Agent versions older than <strong>7.82.0</strong>, auto multi-line detection is disabled by default.</div>

## Overview

Automatic multi-line detection allows the Agent to detect and aggregate common multi-line logs automatically.
For example, the Agent receives the following lines separately:
```
2024-08-13 17:15:17 INFO Starting request handler
Exception in thread "main" java.lang.NullPointerException
at com.example.MyClass.doSomething(MyClass.java:42)
at com.example.MyClass.main(MyClass.java:20)
2024-08-13 17:15:18 INFO Request handler stopped
```
With Auto multi-line detection enabled, the stack trace is aggregated into a single log:

For example, an application writes the following five lines. Without auto multi-line detection, the Agent sends each line as its own log, splitting the exception away from the message that introduced it:

```text
2024-08-13 17:15:17 ERROR Request handler failed -> log 1
Exception in thread "main" java.lang.NullPointerException -> log 2
at com.example.MyClass.doSomething(MyClass.java:42) -> log 3
at com.example.MyClass.main(MyClass.java:20) -> log 4
2024-08-13 17:15:18 INFO Request handler stopped -> log 5
```
2024-08-13 17:15:17 INFO Starting request handler
Exception in thread "main" java.lang.NullPointerException
at com.example.MyClass.doSomething(MyClass.java:42)
at com.example.MyClass.main(MyClass.java:20)
2024-08-13 17:15:18 INFO Request handler stopped

With auto multi-line detection enabled, by default, only lines that begin with a datetime start a new log. The exception and its stack trace are aggregated into the log that precedes them, so the same five lines are sent as two logs:

```text
2024-08-13 17:15:17 ERROR Request handler failed --+
Exception in thread "main" java.lang.NullPointerException |
at com.example.MyClass.doSomething(MyClass.java:42) |-> log 1
at com.example.MyClass.main(MyClass.java:20) --+

2024-08-13 17:15:18 INFO Request handler stopped -> log 2
```

## Getting started

Auto multi-line detection is enabled by default starting with Agent version `7.82.0`. To disable the Auto multi-line feature in your Agent configuration, set `auto_multi_line_detection` to `false` in your configuration file, or set the `DD_LOGS_CONFIG_AUTO_MULTI_LINE_DETECTION=false` environment variable:
Auto multi-line detection is enabled by default starting with Agent version `7.82.0`. To disable the auto multi-line feature in your Agent configuration, set `auto_multi_line_detection` to `false` in your configuration file, or set the `DD_LOGS_CONFIG_AUTO_MULTI_LINE_DETECTION=false` environment variable:

{{< tabs >}}
{{% tab "Configuration file" %}}
Expand Down
6 changes: 1 addition & 5 deletions hugo/content/en/api/v2/fleet-automation/examples.json

Large diffs are not rendered by default.

12 changes: 4 additions & 8 deletions hugo/content/en/api/v2/governance-console/examples.json

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions hugo/content/en/code_coverage/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ further_reading:
- link: "/code_coverage/configuration"
tag: "Documentation"
text: "Configure Code Coverage"
- link: "/code_coverage/coverage_calculation"
tag: "Documentation"
text: "Learn how Datadog calculates coverage"
- link: "/code_coverage/flags"
tag: "Documentation"
text: "Organize coverage data with flags"
Expand Down
98 changes: 98 additions & 0 deletions hugo/content/en/code_coverage/coverage_calculation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
---
title: Code Coverage Calculation
description: "Learn how Datadog merges coverage reports for a commit and how covered, uncovered, and partially covered lines affect total and patch coverage."
further_reading:
- link: "/code_coverage"
tag: "Documentation"
text: "Code Coverage"
- link: "/code_coverage/setup"
tag: "Documentation"
text: "Set up Code Coverage"
- link: "/code_coverage/flags"
tag: "Documentation"
text: "Organize coverage data with flags"
- link: "/code_coverage/carryforward"
tag: "Documentation"
text: "Keep total coverage accurate with carryforward"
- link: "/code_coverage/configuration"
tag: "Documentation"
text: "Configure Code Coverage"
---

## Overview

A commit usually has more than one coverage report. A CI pipeline might run unit, integration, and end-to-end tests in separate jobs. It might also split a test suite across parallel workers, or run the same suite against several runtime versions. Each of those jobs uploads its own report.

Datadog merges all of the reports it receives for the same repository and commit into a single dataset. The total coverage and patch coverage of a commit are computed from that merged dataset, not from any individual report. You don't need to merge reports yourself before uploading them.

Because merging happens on the Datadog side, the coverage percentage shown in Datadog can differ from the percentage reported by a single coverage tool run. For related guidance, see [Discrepancy between Datadog UI and coverage report values][1].

## Report merging

Merging is keyed on the repository and commit SHA pair. Every report uploaded for the same repository and commit contributes to the same merged dataset, regardless of which CI job, pipeline, or machine produced it.

Merging is incremental. As each report arrives, its data is added to the merged dataset and the coverage values are recomputed. A commit's coverage reflects every report received for it so far. Wait until all of your CI jobs have finished uploading before comparing coverage percentages to PR Gate thresholds or to values from a single local report.

The merged dataset is also the basis for the following:

- The total and patch coverage displayed for a commit and for its pull request
- [PR Gate][2] evaluation
- Per-service and per-code-owner coverage in [Monorepo Support][3]

[Flags][4] add a second layer on top of this. Reports sharing a flag are merged together into that flag's own dataset, while the unflagged view merges every report for the commit. For details, see [How flags work with report merging][5].

If [carryforward][7] is enabled, reports carried forward from ancestor commits are merged in the same way as reports uploaded directly for the commit.

## Line coverage statuses

Within the merged dataset, each executable line of each file has one of the following statuses:

| Status | Meaning |
|---|---|
| Covered | The line was executed, and if it contains branches, every branch was executed. |
| Partially covered | The line was executed, but not all of its branches were. |
| Uncovered | The line was never executed. |

Non-executable lines, such as comments, blank lines, and closing brackets, are excluded from coverage calculations. For coverage tools that report these lines as uncovered, see [Inaccurate coverage from non-executable lines][6].

### Files present in multiple reports

When the same file appears in more than one report, Datadog merges the file's line data instead of picking one report over another. An executable line is counted as covered when **any** of the reports containing that file marks it as covered.

For example, consider a commit with two reports that both contain `src/checkout.go`:

| Line | Unit test report | Integration test report | Merged result |
|---|---|---|---|
| 10 | Covered | Uncovered | Covered |
| 11 | Uncovered | Covered | Covered |
| 12 | Uncovered | Uncovered | Uncovered |

The merged coverage of a commit is therefore usually higher than the coverage of any single report. Splitting a test suite across parallel CI jobs does not lower the reported coverage.

### Partial coverage

A line is partially covered when it was executed but not all of its branches were. This applies to `if` statements as well as ternary operators, and to any other construct where a single line contains multiple execution paths.

For example, in the following line, only one of the two paths runs if `user` is always non-null in your tests:

{{< code-block lang="javascript" >}}
const name = user ? user.name : "anonymous";
{{< /code-block >}}

The line is executed, so it is not uncovered, but the `"anonymous"` branch is never taken, so the line is reported as partially covered.

**Partially covered lines are not counted as covered.** They do not contribute to the total coverage percentage or to the patch coverage percentage. To count such a line as covered, add test cases that exercise all of its branches.

Partial coverage is derived from the branch data in your coverage reports. If your coverage tool or report format doesn't include branch information, lines that were executed are reported as covered rather than partially covered.

## Further reading

{{< partial name="whats-next/whats-next.html" >}}

[1]: /code_coverage/setup#discrepancy-between-datadog-ui-and-coverage-report-values
[2]: /code_coverage/configuration#pr-gates
[3]: /code_coverage/monorepo_support
[4]: /code_coverage/flags
[5]: /code_coverage/flags#how-flags-work-with-report-merging
[6]: /code_coverage/setup#inaccurate-coverage-from-non-executable-lines
[7]: /code_coverage/carryforward
Loading
Loading