Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 6 additions & 0 deletions cisco_duo/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ The Cisco Duo integration seamlessly collects multi-factor authentication (MFA)

## Setup

<!-- partial
{{< site-region region="gov" >}}
<div class="alert alert-warning">This integration does not support Duo Federal accounts (<code>duofederal.com</code> domains). Only standard Duo accounts (<code>duosecurity.com</code> domains) are supported.</div>
{{< /site-region >}}
partial -->

### Configuration

#### Get API Credentials of Cisco Duo
Expand Down
1 change: 1 addition & 0 deletions datadog_checks_dev/changelog.d/23608.fixed
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix `get_agent_requirement_line` to ignore unknown OS platforms (e.g. `Supported OS::AIX`) when computing agent requirement lines.
Original file line number Diff line number Diff line change
Expand Up @@ -190,11 +190,15 @@ def make(ctx, checks, version, end, initial_release, skip_sign, sign_only, exclu
updated_checks.append(check)
# update the list of integrations to be shipped with the Agent
if repo_choice == 'core' and check not in NOT_CHECKS:
req_file = get_agent_release_requirements()
commit_targets.append(os.path.basename(req_file))
echo_waiting('Updating the Agent requirements file... ', nl=False)
update_agent_requirements(req_file, check, get_agent_requirement_line(check, version, ctx.obj))
echo_success('success!')
requirement_line = get_agent_requirement_line(check, version, ctx.obj)
if requirement_line is not None:
req_file = get_agent_release_requirements()
commit_targets.append(os.path.basename(req_file))
echo_waiting('Updating the Agent requirements file... ', nl=False)
update_agent_requirements(req_file, check, requirement_line)
echo_success('success!')
else:
echo_info(f'Skipping Agent requirements update for {check}: no supported platforms to include.')

echo_waiting('Committing files...')

Expand Down
14 changes: 12 additions & 2 deletions datadog_checks_dev/datadog_checks/dev/tooling/release.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@
from .utils import get_version_file, load_manifest

# Maps the Python platform strings to the ones we have in the manifest
PLATFORMS_TO_PY = {'windows': 'win32', 'mac_os': 'darwin', 'linux': 'linux2'}
ALL_PLATFORMS = sorted(PLATFORMS_TO_PY)
PLATFORMS_TO_PY = {'windows': 'win32', 'mac_os': 'darwin', 'linux': 'linux2', 'aix': 'aix'}
# OSes that are not included in the agent requirements file
PLATFORMS_IGNORE = frozenset({'aix'})
ALL_PLATFORMS = sorted(k for k in PLATFORMS_TO_PY if k not in PLATFORMS_IGNORE)
VERSION = re.compile(r'__version__ *= *(?:[\'"])(.+?)(?:[\'"])')
DATADOG_PACKAGE_PREFIX = 'datadog-'

Expand Down Expand Up @@ -124,6 +126,14 @@ def get_agent_requirement_line(check, version, app):
else:
platforms = sorted(m.get('supported_os', []))

if not platforms:
raise ManifestError(f"Can't parse the supported OS list for the check {check}: {platforms}")

platforms = [p for p in platforms if p not in PLATFORMS_IGNORE]

if not platforms:
return None

# all platforms
# using sets to ignore possible sorting in the overrides, if any
if set(platforms) == set(ALL_PLATFORMS):
Expand Down
69 changes: 69 additions & 0 deletions datadog_checks_dev/tests/tooling/test_release.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,75 @@ def test_get_agent_requirement_line_with_overrides(overrides: dict[str, list[str
assert res == expected_line


def _tile_manifest(supported_os_values):
return {
'tile': {
'classifier_tags': [f'Supported OS::{v}' for v in supported_os_values],
}
}


@pytest.mark.parametrize(
'classifier_supported_os, expected_line',
[
(['Linux', 'macOS', 'Windows', 'AIX'], 'datadog-foo==1.2.3'),
(['Linux', 'AIX'], "datadog-foo==1.2.3; sys_platform == 'linux2'"),
(['Linux', 'Windows', 'AIX'], "datadog-foo==1.2.3; sys_platform != 'darwin'"),
(['Linux', 'macOS', 'AIX'], "datadog-foo==1.2.3; sys_platform != 'win32'"),
(['macOS', 'Windows', 'AIX'], "datadog-foo==1.2.3; sys_platform != 'linux2'"),
],
ids=['all_plus_aix', 'linux_plus_aix', 'no_macos_plus_aix', 'no_windows_plus_aix', 'no_linux_plus_aix'],
)
def test_get_agent_requirement_line_tile_manifest_with_aix(classifier_supported_os, expected_line):
with mock.patch('datadog_checks.dev.tooling.release.load_manifest') as load:
load.return_value = _tile_manifest(classifier_supported_os)
assert get_agent_requirement_line('foo', '1.2.3', mock.Mock()) == expected_line


@pytest.mark.parametrize(
'supported_os, expected_line',
[
(['aix', 'linux', 'mac_os', 'windows'], 'datadog-foo==1.2.3'),
(['aix', 'linux'], "datadog-foo==1.2.3; sys_platform == 'linux2'"),
(['aix', 'linux', 'mac_os'], "datadog-foo==1.2.3; sys_platform != 'win32'"),
],
ids=['all_plus_aix', 'linux_plus_aix', 'no_windows_plus_aix'],
)
def test_get_agent_requirement_line_supported_os_with_aix(supported_os, expected_line):
with mock.patch('datadog_checks.dev.tooling.release.load_manifest') as load:
load.return_value = {'supported_os': supported_os}
assert get_agent_requirement_line('foo', '1.2.3', mock.Mock()) == expected_line


@pytest.mark.parametrize(
'manifest',
[
_tile_manifest(['AIX']),
{'supported_os': ['aix']},
],
ids=['tile', 'supported_os'],
)
def test_get_agent_requirement_line_returns_none_when_only_ignored_platforms(manifest):
with mock.patch('datadog_checks.dev.tooling.release.load_manifest') as load:
load.return_value = manifest
assert get_agent_requirement_line('foo', '1.2.3', mock.Mock()) is None


@pytest.mark.parametrize(
'manifest',
[
_tile_manifest([]),
{'supported_os': []},
],
ids=['tile', 'supported_os'],
)
def test_get_agent_requirement_line_raises_when_no_supported_os(manifest):
with mock.patch('datadog_checks.dev.tooling.release.load_manifest') as load:
load.return_value = manifest
with pytest.raises(ManifestError):
get_agent_requirement_line('foo', '1.2.3', mock.Mock())


def test_get_agent_requirement_line_with_overrides_no_manifest_no_override():
with mock.patch('datadog_checks.dev.tooling.release.load_manifest') as load:
load.return_value = {}
Expand Down
1 change: 1 addition & 0 deletions ddev/changelog.d/23601.added
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add decibel-milliwatt as a new canonical unit
1 change: 1 addition & 0 deletions ddev/src/ddev/cli/validate/metadata_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@
'volt',
'millivolt',
'deciwatt',
'decibel-milliwatt',
'decidegree celsius',
'span',
'exception',
Expand Down
57 changes: 10 additions & 47 deletions docusign/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,49 +8,13 @@ Docusign integration provides real-time insights into Docusign activities, such

## Setup

To collect Docusign logs, click **Authorize** to authenticate using OAuth.

### Prerequisites

- Docusign Developer Account
- Docusign account with a plan that includes Docusign Monitor


### Generate API credentials in Docusign

1. Log in to [Developer Admin Console][2].
2. Get your **Account Name** from the **Account Profile** page.
3. Access the **Apps and Keys** page under the **Integrations** section.
4. Obtain the **User ID** from the **My Account Information** section.
5. Click on **Add App and Integration Key** button.
6. Provide an App Name and click **Create App**.
7. Get your **Integration Key** from the General Info section.
8. Click on **Generate RSA**, to get **RSA Private Key**.
9. Click on **ADD URI**, set Redirect URI to `http://localhost/`.
10. Click on **Save** button.
11. Perform application consent by opening the accompanying Sample URL after replacing the placeholders
- URL: `<BASE_URI>/oauth/auth?response_type=code&scope=signature impersonation organization_read&client_id=<YOUR_INTEGRATION_KEY>&redirect_uri=<YOUR_REDIRECT_URI>`
- `<BASE_URI>`: Use `https://account-d.docusign.com` for Developer or `https://account.docusign.com` for Production.
- `<YOUR_INTEGRATION_KEY>`: Replace with your Integration Key (Client ID) obtained previously.
- `<YOUR_REDIRECT_URI>`: Replace with your redirect URI, e.g., `http://localhost/`.
- Sign in to your account if prompted to
- Click on **Allow Access**
- Note: _After selecting Accept, the browser will display a message saying that it can't load the page. You can safely ignore this page and close the tab._
12. To test the integration with Developer account, select `Developer` option for the **Account Type** configuration parameter of the integration.
13. Perform the [Go-Live][3] process for the App to access the [Production Account][4].
14. Navigate to the Admin console and perform steps 2 to 10 and update the respective configuration parameters for the integration.


### Connect your Docusign Account to Datadog

1. Add your Account Type, Docusign Account Name, User Id, Integration Key, and RSA Private Key
|Parameters|Description|
|--------------------|--------------------|
|Account Type|Dropdown to select the type of Docusign account (e.g., Developer or Production).|
|Docusign Account Name|The name associated with the Docusign account (case sensitive).|
|User ID |A GUID value that uniquely identifies a Docusign user.|
|Integration Key|A unique GUID that identifies a Docusign integration.|
|RSA Private Key|A cryptographic key for signing JWT tokens for secure API authentication.|
2. Click the Save button to save your settings.
To add a Docusign account, make sure that:

- The account has **admin access permission** within your Docusign organization. Otherwise, Datadog can't collect log events for you.
- The account is **not an admin** of more than one Docusign organization, as explained in [How to get monitoring data][2].
- The **Docusign Monitor** feature is enabled. This integration is only available for accounts with the paid version of [Monitor][3].

## Data Collected

Expand All @@ -68,10 +32,9 @@ The Docusign integration does not include any events.

## Support

For further assistance, contact [Datadog Support][5].
For further assistance, contact [Datadog Support][4].

[1]: https://www.docusign.com/
[2]: https://apps-d.docusign.com/admin/admin-dashboard
[3]: https://developers.docusign.com/platform/go-live/
[4]: https://apps.docusign.com/admin/admin-dashboard
[5]: https://docs.datadoghq.com/help/
[2]: https://developers.docusign.com/docs/monitor-api/how-to/get-monitoring-data/
[3]: https://www.docusign.com/products/monitor
[4]: https://docs.datadoghq.com/help/
46 changes: 29 additions & 17 deletions hubspot_content_hub/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,36 @@

The HubSpot Content Hub integration collects Activity Logs (audit, login, security) and Analytics Metrics (breakdown categories, content types), sending them to Datadog for detailed analysis. The logs are parsed and enriched for efficient searching, while the metrics provide insights into content performance.

Use Datadog [Reference Tables][5] to enrich your telemetry with metadata from HubSpot. You can map value fields to a primary key to automatically append these fields to logs or events containing that key.
Use Datadog [Reference Tables][2] to enrich your telemetry with metadata from HubSpot. You can map value fields to a primary key to automatically append these fields to logs or events containing that key.

The integration includes dashboards that show and analyze both Activity Logs and Analytics Metrics, making it easier to monitor and understand trends and issues.

## Setup

To integrate HubSpot with Datadog, Datadog connects to HubSpot using OAuth. The authenticated user must have owner permissions in the organizations that want to be integrated.
To integrate HubSpot with Datadog, you must authenticate as an owner of the HubSpot organization that Datadog fetches data from.

### Installation
### Metrics and Logs

1. Navigate to the [Integrations Page][2] and search for the "HubSpot Content Hub" integration.
2. Click the tile.
3. To add an account to install the integration, click the **Add Account** button.
4. Read the instructions in the modal and choose your telemetry and reference tables settings. Then, click the **Authorize** button, which redirects you to the HubSpot login page.
5. After logging in, you are prompted to select which HubSpot account you want to grant access to.
6. Click **Authorize**.
7. You're redirected back to Datadog's HubSpot tile with a new account. Datadog recommends changing the account name to something that is easier to remember. You can add multiple accounts with access to different organizations.
To collect HubSpot metrics and logs, click the **Authorize** button to authenticate using OAuth.

**Note**: HubSpot saves this authorization selection. To be prompted again or add new organizations, revoke app access in HubSpot (`User Preferences > Integrations > Connected Applications > Datadog - HubSpot OAuth App`), then restart the setup process.
### Companies Reference Tables

Import company data from HubSpot as a Reference Table to enrich your Datadog logs and metrics with CRM details. You can also join Reference Tables with Product Analytics to correlate activity data across accounts.

#### Get Started

- Enable **Companies Reference Table** and click the **Authorize** button.

#### After Setup

- Datadog automatically creates one Companies Reference Table for each account, using the format `hubspot_companies_hubspotaccountid`.
- Your [HubSpot Reference Tables][3] are available after a few minutes. Datadog automatically starts syncing data after the table is created.
- Use [Event Management][4] to monitor your Reference Table's creation. You'll see progress events, success confirmations, and any errors that occur.
- When ingestion succeeds, a [success event][5] appears for your Reference Table.

#### For Existing Accounts

- To create a Company Reference Table for an existing HubSpot account, edit the account and select the Companies Reference Table toggle.

## Data Collected

Expand All @@ -48,14 +59,15 @@ The HubSpot Content Hub integration does not include any events.

### Reference Tables

[Reference Tables][5] allow you to automatically enrich and join your telemetry with additional fields from Companies defined in your HubSpot account.
[Reference Tables][2] allow you to automatically enrich and join your telemetry with additional fields from Companies defined in your HubSpot account.

## Troubleshooting

Need help? Contact [Datadog support][3].
Need help? Contact [Datadog support][6].

[1]: https://www.hubspot.com/products/content
[2]: /integrations
[3]: https://app.hubspot.com/login
[4]: https://docs.datadoghq.com/help/
[5]: /reference-tables
[2]: /reference-tables
[3]: /reference-tables?order=desc&p=1&sort=updated_at&source=HUBSPOT_CONTENT_HUB
[4]: /event/explorer?query=source%3Ahubspot_content_hub&from_ts=1767286800000&to_ts=1767294000000&live=true
[5]: /event/explorer?query=source%3Ahubspot_content_hub%20status%3Aok&from_ts=1767286800000&to_ts=1767294000000&live=true
[6]: https://docs.datadoghq.com/help/
1 change: 1 addition & 0 deletions ibm_ace/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"Supported OS::Linux",
"Supported OS::Windows",
"Supported OS::macOS",
"Supported OS::AIX",
"Offering::Integration"
]
},
Expand Down
1 change: 1 addition & 0 deletions ibm_db2/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"Supported OS::Linux",
"Supported OS::macOS",
"Supported OS::Windows",
"Supported OS::AIX",
"Category::Data Stores",
"Category::Log Collection",
"Offering::Integration"
Expand Down
1 change: 1 addition & 0 deletions ibm_i/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"classifier_tags": [
"Supported OS::Linux",
"Supported OS::macOS",
"Supported OS::AIX",
"Category::OS & System",
"Offering::Integration"
]
Expand Down
1 change: 1 addition & 0 deletions ibm_mq/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
"Supported OS::Linux",
"Supported OS::Windows",
"Supported OS::macOS",
"Supported OS::AIX",
"Offering::Integration"
],
"resources": [
Expand Down
1 change: 1 addition & 0 deletions ibm_was/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"Supported OS::Linux",
"Supported OS::Windows",
"Supported OS::macOS",
"Supported OS::AIX",
"Offering::Integration"
]
},
Expand Down
33 changes: 11 additions & 22 deletions klaviyo/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,16 @@ Integrate Klaviyo with Datadog to gain insights into marketing campaign communic

## Setup

Follow the instructions below to configure this integration for Klaviyo Marketing and eCommerce events.
To authenticate this integration, you must have access to the following Klaviyo Scopes:

### Configuration
- `accounts:read`
- `events:read`
- `flows:read`
- `metrics:read`

#### Install Datadog Integration in Klaviyo
Within your Klaviyo account, first add the Datadog integration. The integration allows Datadog
to see Klaviyo events and metrics via the Klaviyo API.
To add a Klaviyo account, click **Authorize** and follow the instructions. After you are redirected back to this page and authentication succeeds, your logs should be available within 5 minutes.

1. Log in to your [Klaviyo account][2].
2. In the left-side panel, navigate to **Integrations**.
3. Click **Add integrations**.
4. Search for Datadog and click on the tile.
5. Click **Install**.
6. Navigate to Datadog, then log in.

#### Install Klaviyo Integration in Datadog
After the above installation within Klaviyo is performed, complete the Datadog integration by clicking
**Install Integration** which guides you through an authorization process with Klaviyo.

The authorization process will include an approval dialog which asks to give Datadog permission to
read Klaviyo events and metrics. The scopes involved for this
access are "accounts:read metrics:read events:read" and nothing more.
You can view your logs in the [Log Explorer][2]. Ensure you have a [Logs Index][3] set up for `source:klaviyo`.

## Data Collected

Expand All @@ -50,9 +38,10 @@ Klaviyo does not include any events.

## Troubleshooting

Need help? Contact [Datadog support][3].
Need help? Contact [Datadog support][4].

[1]: https://www.klaviyo.com/
[2]: https://www.klaviyo.com/login
[3]: https://docs.datadoghq.com/help/
[2]: /logs?query=source%3Aklaviyo%2A
[3]: /logs/pipelines/indexes
[4]: https://docs.datadoghq.com/help/

4 changes: 4 additions & 0 deletions lparstats/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# CHANGELOG - lparstats

<!-- towncrier release notes start -->

## 1.0.0 / 2026-05-13

* Initial Release ([#23451](https://github.com/DataDog/integrations-core/pull/23451))
2 changes: 1 addition & 1 deletion lparstats/datadog_checks/lparstats/__about__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
# All rights reserved
# Licensed under a 3-clause BSD style license (see LICENSE)

__version__ = '0.1.0'
__version__ = '1.0.0'
Loading
Loading