newrelic
Version:
New Relic agent
65 lines (56 loc) • 1.6 kB
JavaScript
/*
* Copyright 2020 New Relic Corporation. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*/
const mapToStreamingType = require('./map-to-streaming-type')
/**
* Specialized attribute collection class for use with infinite streaming.
* Currently designed to be sent over grpc via the v1.proto definition.
*
* @private
* @class
*/
class StreamingSpanAttributes {
constructor(attributes) {
if (attributes) {
this.addAttributes(attributes)
}
}
/**
* Add a key/value pair to the attribute collection.
* null/undefined values will be dropped.
*
* Does not apply filtering/truncation.
*
* @param {string} key Name of the attribute to be stored.
* @param {string|boolean|number} value Value of the attribute to be stored.
*/
addAttribute(key, value) {
const streamingValue = mapToStreamingType(value)
if (streamingValue) {
this[key] = streamingValue
return true
}
return false
}
/**
* Adds all attributes in an object to the attribute collection.
* null/undefined values will be dropped.
*
* Does not apply filtering/truncation.
*
* @param {object} [attributes] Attributes to add.
* @param {string} [attributes.key] Name of the attribute to be stored.
* @param {string|boolean|number} [attributes.value] Value of the attribute to be stored.
*/
addAttributes(attributes) {
if (!attributes) {
return
}
for (const [key, value] of Object.entries(attributes)) {
this.addAttribute(key, value)
}
}
}
module.exports = StreamingSpanAttributes