Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

catch harvest callback error #275

Closed
wants to merge 2 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
57 changes: 31 additions & 26 deletions lib/harvest.js
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down Expand Up @@ -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')
}
})
}

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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()
]
}]
Expand All @@ -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)
]
}]
Expand Down