-
Notifications
You must be signed in to change notification settings - Fork 406
Expand file tree
/
Copy pathutil.js
More file actions
119 lines (107 loc) · 3.71 KB
/
Copy pathutil.js
File metadata and controls
119 lines (107 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
'use strict'
const {
EVP_EVENT_PLATFORM_SUBDOMAIN,
EVP_PROXY_PATH_V2,
EVP_PROXY_PATH_V4,
EVP_SUBDOMAIN_HEADER_NAME,
} = require('../../evp_proxy/constants')
const { createDirectEVPRoute } = require('../../evp_proxy/direct')
const { discoverEVPProxy } = require('../../evp_proxy/discovery')
const logger = require('../../log')
let missingRouteWarningLogged = false
/**
* Logs the unavailable exposure-delivery warning once.
*
* @returns {void}
*/
function warnExposureDeliveryUnavailable () {
if (missingRouteWarningLogged) return
missingRouteWarningLogged = true
logger.warn(
'Feature Flags exposure delivery is disabled because no compatible local EVP route or direct intake ' +
'credentials are available.'
)
}
/**
* Preserves Agent exposure delivery for the Remote Configuration source.
*
* @param {import('../../config')} config - Tracer configuration object
* @param {Function} setWriterEnabledValue - Callback to set the writer enabled state
* @returns {void}
*/
function setAgentStrategy (config, setWriterEnabledValue) {
discoverEVPProxy(config.url, {
supportedPaths: [EVP_PROXY_PATH_V2],
}, (error, route) => {
if (error) {
logger.debug('FFE Writer disabled - error getting agent info: %s', error.message)
setWriterEnabledValue(false)
return
}
if (route) {
logger.debug('FFE Writer enabled - agent has EVP proxy support')
setWriterEnabledValue(true, route)
} else {
logger.debug('FFE Writer disabled - agent does not have EVP proxy support')
setWriterEnabledValue(false)
}
})
}
/**
* Selects a local serverless receiver or authenticated direct intake.
*
* Local discovery is optional for delivery. A missing listener, discovery
* error, or incompatible receiver selects direct intake when credentials exist.
*
* @param {import('../../config')} config - Tracer configuration object
* @param {Function} setWriterEnabledValue - Callback to set the writer enabled state
* @returns {void}
*/
function setAgentlessStrategy (config, setWriterEnabledValue) {
const directRoute = createDirectEVPRoute(config, EVP_EVENT_PLATFORM_SUBDOMAIN)
discoverEVPProxy(config.url, {
supportedPaths: [EVP_PROXY_PATH_V4, EVP_PROXY_PATH_V2],
}, (error, localRoute) => {
if (localRoute) {
const route = {
...localRoute,
headers: {
[EVP_SUBDOMAIN_HEADER_NAME]: EVP_EVENT_PLATFORM_SUBDOMAIN,
},
...(directRoute && { fallback: directRoute }),
}
logger.debug('FFE Writer enabled with local EVP route %s', route.basePath)
setWriterEnabledValue(true, route)
return
}
if (directRoute) {
if (error) {
logger.debug('FFE Writer using direct EVP intake after local discovery failed: %s', error.message)
} else {
logger.debug('FFE Writer using direct EVP intake because no compatible local route was advertised')
}
setWriterEnabledValue(true, directRoute)
return
}
if (error) {
logger.debug('FFE Writer disabled - error getting local receiver info: %s', error.message)
}
warnExposureDeliveryUnavailable()
setWriterEnabledValue(false)
})
}
/**
* Applies the exposure-delivery strategy for the configured Feature Flags source.
*
* @param {import('../../config')} config - Tracer configuration object
* @param {Function} setWriterEnabledValue - Callback to set the writer enabled state
* @returns {void}
*/
function setExposureDeliveryStrategy (config, setWriterEnabledValue) {
if (config.featureFlags?.DD_FEATURE_FLAGS_CONFIGURATION_SOURCE === 'agentless') {
setAgentlessStrategy(config, setWriterEnabledValue)
return
}
setAgentStrategy(config, setWriterEnabledValue)
}
module.exports = { setExposureDeliveryStrategy }