UNPKG

dd-trace

Version:

Datadog APM tracing client for JavaScript

62 lines (48 loc) 1.89 kB
'use strict' const { EVP_EVENT_SIZE_LIMIT, EVP_PAYLOAD_SIZE_LIMIT } = require('../../constants/writers') const { DROPPED_VALUE_TEXT } = require('../../constants/text') const { DROPPED_IO_COLLECTION_ERROR } = require('../../constants/tags') const BaseWriter = require('../base') const telemetry = require('../../telemetry') const logger = require('../../../log') const tracerVersion = require('../../../../../../package.json').version class LLMObsSpanWriter extends BaseWriter { constructor (options) { super({ ...options, eventType: 'span' }) } append (event) { const eventSizeBytes = Buffer.from(JSON.stringify(event)).byteLength telemetry.recordLLMObsRawSpanSize(event, eventSizeBytes) const shouldTruncate = eventSizeBytes > EVP_EVENT_SIZE_LIMIT let processedEventSizeBytes = eventSizeBytes if (shouldTruncate) { logger.warn(`Dropping event input/output because its size (${eventSizeBytes}) exceeds the 1MB event size limit`) event = this._truncateSpanEvent(event) processedEventSizeBytes = Buffer.from(JSON.stringify(event)).byteLength } telemetry.recordLLMObsSpanSize(event, processedEventSizeBytes, shouldTruncate) if (this._bufferSize + eventSizeBytes > EVP_PAYLOAD_SIZE_LIMIT) { logger.debug('Flusing queue because queing next event will exceed EvP payload limit') this.flush() } super.append(event, eventSizeBytes) } makePayload (events) { return events.map(event => ({ '_dd.stage': 'raw', '_dd.tracer_version': tracerVersion, event_type: this._eventType, spans: [event] })) } _truncateSpanEvent (event) { event.meta.input = { value: DROPPED_VALUE_TEXT } event.meta.output = { value: DROPPED_VALUE_TEXT } event.collection_errors = [DROPPED_IO_COLLECTION_ERROR] return event } } module.exports = LLMObsSpanWriter