Skip to content

Commit fdb6c91

Browse files
committed
Merge shared EVP utilities into agentless routing
2 parents b9ec9c9 + 59ba684 commit fdb6c91

26 files changed

Lines changed: 779 additions & 779 deletions

.github/CODEOWNERS

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,6 @@
296296

297297
# Feature Flagging
298298
/integration-tests/openfeature/ @DataDog/feature-flagging-and-experimentation-sdk
299-
/packages/dd-trace/src/evp_proxy/ @DataDog/feature-flagging-and-experimentation-sdk
300299
/packages/dd-trace/src/openfeature/ @DataDog/feature-flagging-and-experimentation-sdk
301300
/packages/dd-trace/test/openfeature/ @DataDog/feature-flagging-and-experimentation-sdk
302301

@@ -385,12 +384,14 @@
385384
/packages/dd-trace/src/feature-registry.js @DataDog/lang-platform-js
386385
/packages/dd-trace/src/exporters/common/ @DataDog/lang-platform-js
387386
/packages/dd-trace/src/exporters/common/client-library-headers.js @DataDog/lang-platform-js @DataDog/feature-flagging-and-experimentation-sdk
387+
/packages/dd-trace/src/evp_proxy/ @DataDog/lang-platform-js
388388
/packages/dd-trace/src/guardrails/ @DataDog/lang-platform-js
389389
/packages/dd-trace/src/proxy.js @DataDog/lang-platform-js
390390
/packages/dd-trace/test/agent/ @DataDog/lang-platform-js
391391
/packages/dd-trace/test/dd-trace.spec.js @DataDog/lang-platform-js
392392
/packages/dd-trace/test/dogstatsd.spec.js @DataDog/lang-platform-js
393393
/packages/dd-trace/test/encode/ @DataDog/lang-platform-js
394+
/packages/dd-trace/test/evp_proxy/ @DataDog/lang-platform-js
394395
/packages/dd-trace/test/esm-named-exports.spec.js @DataDog/lang-platform-js
395396
/packages/dd-trace/test/exporter.spec.js @DataDog/lang-platform-js
396397
/packages/dd-trace/test/exporters/ @DataDog/lang-platform-js

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,14 @@
5757
"test:core:ci": "node scripts/c8-ci.js test:core",
5858
"test:code-origin": "mocha \"packages/datadog-code-origin/test/**/*.spec.js\"",
5959
"test:code-origin:ci": "node scripts/c8-ci.js test:code-origin",
60+
"test:evp_proxy": "mocha \"packages/dd-trace/test/evp_proxy/**/*.spec.js\"",
6061
"test:lambda": "mocha \"packages/dd-trace/test/lambda/**/*.spec.js\"",
6162
"test:lambda:ci": "node scripts/c8-ci.js test:lambda",
6263
"test:llmobs:sdk": "mocha --exclude \"packages/dd-trace/test/llmobs/plugins/**/*.spec.js\" \"packages/dd-trace/test/llmobs/**/*.spec.js\"",
6364
"test:llmobs:sdk:ci": "node scripts/c8-ci.js test:llmobs:sdk",
6465
"test:llmobs:plugins": "mocha \"packages/dd-trace/test/llmobs/plugins/@(${PLUGINS})/*.spec.js\"",
6566
"test:llmobs:plugins:ci": "yarn services && node scripts/c8-ci.js test:llmobs:plugins",
66-
"test:openfeature": "mocha \"packages/dd-trace/test/openfeature/**/*.spec.js\"",
67+
"test:openfeature": "mocha \"packages/dd-trace/test/evp_proxy/**/*.spec.js\" \"packages/dd-trace/test/openfeature/**/*.spec.js\"",
6768
"test:openfeature:ci": "node scripts/c8-ci.js test:openfeature",
6869
"test:plugins": "node --expose-gc ./node_modules/mocha/bin/mocha.js \"packages/datadog-plugin-@(${PLUGINS})/test/**/${SPEC:-*}*.spec.js\"",
6970
"test:plugins:ci": "yarn services && node scripts/c8-ci.js test:plugins",

packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const CiVisibilityExporter = require('../ci-visibility-exporter')
77
const { fetchAgentInfo } = require('../../../agent/info')
88
const { DEBUGGER_INPUT_V1 } = require('../../../debugger/constants')
99

10+
// TODO: Use the shared utilities in src/evp_proxy when this product migrates its EVP version policy.
1011
const AGENT_EVP_PROXY_PATH_PREFIX = '/evp_proxy/v'
1112
const AGENT_EVP_PROXY_PATH_REGEX = /\/evp_proxy\/v(\d+)\/?/
1213

packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class Writer extends BaseWriter {
4040
if (this._evpProxyPrefix) {
4141
options.path = `${this._evpProxyPrefix}/api/v2/citestcycle`
4242
delete options.headers['dd-api-key']
43+
// TODO: Migrate CI Visibility EVP headers and subdomains to the shared utilities in src/evp_proxy.
4344
options.headers['X-Datadog-EVP-Subdomain'] = 'citestcycle-intake'
4445
}
4546

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
'use strict'
22

33
module.exports = {
4-
EVP_PROXY_AGENT_BASE_PATH: '/evp_proxy/v2/',
4+
EVP_PROXY_PATH_V2: '/evp_proxy/v2',
5+
EVP_PROXY_PATH_V4: '/evp_proxy/v4',
56
EVP_SUBDOMAIN_HEADER_NAME: 'X-Datadog-EVP-Subdomain',
6-
EVP_PAYLOAD_SIZE_LIMIT: 5 << 20,
7+
EVP_EVENT_PLATFORM_SUBDOMAIN: 'event-platform-intake',
78
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
'use strict'
2+
3+
const { format } = require('node:url')
4+
5+
const { HttpsProxyAgent } = require('https-proxy-agent')
6+
const { getProxyForUrl } = require('proxy-from-env')
7+
8+
/**
9+
* @typedef {object} DirectEVPRoute
10+
* @property {'direct'} mode - Route mode
11+
* @property {URL} url - Direct intake URL
12+
* @property {string} basePath - Direct intake base path
13+
* @property {object} headers - Direct intake authentication headers
14+
* @property {import('node:https').Agent} [agent] - Optional HTTPS proxy agent
15+
*/
16+
17+
/**
18+
* Creates an authenticated direct EVP intake route.
19+
*
20+
* This helper does not perform local receiver discovery.
21+
*
22+
* @param {import('../config/config-base')} config - Tracer configuration
23+
* @param {string} intake - EVP intake subdomain
24+
* @returns {DirectEVPRoute|undefined} Direct route when credentials and site are available
25+
*/
26+
function createDirectEVPRoute (config, intake) {
27+
const apiKey = config.DD_API_KEY
28+
if (!apiKey || !config.site) return
29+
30+
try {
31+
const url = new URL(format({
32+
protocol: 'https:',
33+
hostname: `${intake}.${config.site}`,
34+
}))
35+
const proxyUrl = getProxyForUrl(url.href)
36+
const agent = proxyUrl ? new HttpsProxyAgent(proxyUrl) : undefined
37+
38+
return {
39+
mode: 'direct',
40+
url,
41+
basePath: '',
42+
headers: {
43+
'DD-API-KEY': apiKey,
44+
},
45+
...(agent && { agent }),
46+
}
47+
} catch {}
48+
}
49+
50+
module.exports = { createDirectEVPRoute }

0 commit comments

Comments
 (0)