sendEvents()

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)
  }