diff --git a/lib/harvest.js b/lib/harvest.js index e104776d43..21db247279 100644 --- a/lib/harvest.js +++ b/lib/harvest.js @@ -2,7 +2,7 @@ const a = require('async') const CollectorResponse = require('./collector/response') -const logger = require('./logger').child({component: 'Harvest'}) +const logger = require('./logger').child({ component: 'Harvest' }) const FROM_MILLIS = 1e-3 const NAMES = require('./metrics/names') @@ -166,29 +166,34 @@ class HarvestStep { _doSend(payload, i, callback) { const self = this self._trySend(payload, function afterSend(err, response) { - if (err) { - return callback(err) - } + try { + if (err) { + return callback(err) + } - // Are we clearing our data? - if (!response.retainData) { - self._payloads[i] = null - } else { - logger.info('Failed to submit data to New Relic, data held for redelivery.') - } + // Are we clearing our data? + if (!response.retainData) { + self._payloads[i] = null + } else { + logger.info('Failed to submit data to New Relic, data held for redelivery.') + } - // Do we need to retry this endpoint right now? - if (response.retryAfter) { - const delay = response.retryAfter - logger.debug('Retrying sending to %s in %d ms', self._endpoint, delay) - setTimeout(() => self._doSend(payload, i, callback), delay) - return - } + // Do we need to retry this endpoint right now? + if (response.retryAfter) { + const delay = response.retryAfter + logger.debug('Retrying sending to %s in %d ms', self._endpoint, delay) + setTimeout(() => self._doSend(payload, i, callback), delay) + return + } - // Done! - self.result = response - self.payload = response.payload - callback() + // Done! + self.result = response + self.payload = response.payload + + callback() + } catch (err) { + console.warn(err, 'Failed to call callback method') + } }) } @@ -426,7 +431,7 @@ class TransactionTraceHarvest extends HarvestStep { constructor(harvest) { const traceAggr = harvest.agent.traces const maxTraceSegments = harvest.agent.config.max_trace_segments - const traces = [].concat(traceAggr.syntheticsTraces) + const traces = [].concat(traceAggr.syntheticsTraces) if (traceAggr.trace) { const trace = traceAggr.trace @@ -611,7 +616,7 @@ class Harvest { // Pull out and log any errors from harvest steps. const errors = results.map((r) => r.error).filter((e) => !!e) if (errors.length > 0) { - logger.warn({errors}, 'Errors during harvest!') + logger.warn({ errors }, 'Errors during harvest!') } // See if any endpoints told us to shutdown or restart. A shutdown trumps @@ -654,7 +659,7 @@ function _splitPayload(runId, queue) { toMerge: queue, payload: [ runId, - {reservoir_size: queue.limit, events_seen: queue.seen}, + { reservoir_size: queue.limit, events_seen: queue.seen }, queue.toArray() ] }] @@ -672,14 +677,14 @@ function _splitPayload(runId, queue) { toMerge: firstHalf, payload: [ runId, - {reservoir_size: limit, events_seen: seen}, + { reservoir_size: limit, events_seen: seen }, firstHalf.map(rawEventsToValues) ] }, { toMerge: events, payload: [ runId, - {reservoir_size: queue.limit - limit, events_seen: queue.seen - seen}, + { reservoir_size: queue.limit - limit, events_seen: queue.seen - seen }, events.map(rawEventsToValues) ] }]