in packages/rum-core/src/common/apm-server.js [287:341]
sendEvents(events) {
if (events.length === 0) {
return
}
const transactions = []
const errors = []
for (let i = 0; i < events.length; i++) {
const event = events[i]
if (event[TRANSACTIONS]) {
transactions.push(event[TRANSACTIONS])
}
if (event[ERRORS]) {
errors.push(event[ERRORS])
}
}
if (transactions.length === 0 && errors.length === 0) {
return
}
const cfg = this._configService
const payload = {
[TRANSACTIONS]: transactions,
[ERRORS]: errors
}
const filteredPayload = cfg.applyFilters(payload)
if (!filteredPayload) {
this._loggingService.warn('Dropped payload due to filtering!')
return
}
const apiVersion = cfg.get('apiVersion')
/**
* Enable payload compression only when API version is > 2
*/
const compress = apiVersion > 2
let ndjson = []
const metadata = this.createMetaData()
const metadataKey = compress ? 'm' : 'metadata'
ndjson.push(
NDJSON.stringify({
[metadataKey]: compress ? compressMetadata(metadata) : metadata
})
)
ndjson = ndjson.concat(
this.ndjsonErrors(filteredPayload[ERRORS], compress),
this.ndjsonTransactions(filteredPayload[TRANSACTIONS], compress)
)
const ndjsonPayload = ndjson.join('')
const { intakeEndpoint } = this.getEndpoints()
return this._postJson(intakeEndpoint, ndjsonPayload)
}