UNPKG

deep-framework

Version:
95 lines (73 loc) 2.54 kB
var dgram = require('dgram'); var logger = require('./logger'); var DEFAULT_ADDRESS = '127.0.0.1'; var DEFAULT_PORT = 2000; var PROTOCOL_HEADER = '{"format": "json", "version": 1}'; var PROTOCOL_DELIMITER = '\n'; /** * Segment emitter module. * @module SegmentEmitter */ var SegmentEmitter = { socket: dgram.createSocket('udp4'), daemonAddress: DEFAULT_ADDRESS, daemonPort: DEFAULT_PORT, /** * Returns the formatted segment JSON string. */ format: function format(segment) { return PROTOCOL_HEADER + PROTOCOL_DELIMITER + segment.toString(); }, /** * Creates a UPD socket connection and send the formatted segment. * @param {Segment} segment - The segment to send to the daemon. */ send: function send(segment) { var socket = this.socket; var client = socket || dgram.createSocket('udp4'); var data = this.format(segment); var message = new Buffer(data); if (message.length > 64000) { logger.warn('Segment too large to send. Max size is 64 KB.'); return; } client.send(message, 0, message.length, this.daemonPort, this.daemonAddress, function(err) { if (err) logger.error('Error occured sending segment: ', err); else logger.info('UDP message sent: ' + segment); if (!socket) client.close(); }); }, /** * Configures the address and/or port the daemon is expected to be on. * @param {string} address - Address of the daemon the segments should be sent to. Should be formatted as an IPv4 address. * @module SegmentEmitter * @function setDaemonAddress */ setDaemonAddress: function setDaemonAddress(address) { if (!process.env.AWS_XRAY_DAEMON_ADDRESS) { processAddress(address); } }, /** * Forces the segment emitter to create a new socket on send, and close it on complete. * @module SegmentEmitter * @function disableReusableSocket */ disableReusableSocket: function() { delete this.socket; } }; var processAddress = function processAddress(rawAddress) { var splitAddress = rawAddress.split(':'); if (splitAddress[0] && splitAddress[0].indexOf('.') !== -1) SegmentEmitter.daemonAddress = splitAddress[0]; if (splitAddress[1]) SegmentEmitter.daemonPort = parseInt(splitAddress[1]); logger.info('Configured daemon address to ' + SegmentEmitter.daemonAddress + ':' + SegmentEmitter.daemonPort); }; if (process.env.AWS_XRAY_DAEMON_ADDRESS) processAddress(process.env.AWS_XRAY_DAEMON_ADDRESS); module.exports = SegmentEmitter;