const handleError = err => { this.emit('error', request, err); const { message, stack } = err; span.setTag(Tags.ERROR, true); span.log({ message, stack }); if (shouldWriteHead) { shouldWriteHead = false; let statusCode = 500; if (err.code === TEMPLATE_NOT_FOUND) { statusCode = 404; } span.setTag(Tags.HTTP_STATUS_CODE, statusCode); response.writeHead(statusCode, responseHeaders); // To render with custom error template if (typeof err.presentable === 'string') { response.end(`${err.presentable}`); } else { response.end(INTERNAL_SERVER_ERROR); } span.finish(); } else { contentLengthStream.end(); } }
response.writeHead(500, responseHeaders); response.end(INTERNAL_SERVER_ERROR); span.finish(); });
this.stream.end(); span.finish();
test('#finish(finishTime) - transaction', setup(function (t) { const startTime = Date.now() - 1000 const finishTime = startTime + 2000.123 const tracer = new Tracer(getAgent()) const span = tracer.startSpan('foo', { startTime }) span.finish(finishTime) t.equal(span._span.timestamp, startTime * 1000) t.equal(span._span._timer.duration, 2000.123) t.equal(span._span.duration(), 2000.123) t.end() }))
setInterval(() => { const span = tracer.startSpan('requesting-authorization'); const ctx = { span }; payment.authorizeCreditCard(ctx, randomCreditCard(), 100) .then((authorization) => { const { status, approvalCode } = authorization; console.log(`::api:: authorization received ${approvalCode} - ${status}`); }).catch((err) => { console.warn(`::api:: error received`, err); }).finally(()=> { span.finish(); }); }, 4000);
app.get('/internal/hello', function (req, res) { const span = tracer.startSpan("GET /internal/hello"); resPayload = '{"Hello_Node": '+ args_app.port +'}' res.send(resPayload); span.log({ res: resPayload }); span.finish(); });
test('#finish() - transaction', setup(function (t) { const tracer = new Tracer(getAgent()) const span = tracer.startSpan('foo') t.equal(span._span.ended, false) span.finish() t.equal(span._span.ended, true) t.end() }))
test('#finish(finishTime) - span', setup(function (t) { const startTime = Date.now() - 1000 const finishTime = startTime + 2000.123 const tracer = new Tracer(getAgent()) tracer.startSpan('foo') const span = tracer.startSpan('bar', { startTime }) span.finish(finishTime) t.equal(span._span.timestamp, startTime * 1000) t.equal(span._span._timer.duration, 2000.123) t.equal(span._span.duration(), 2000.123) t.end() }))
// Server //> handlers app.get('/', function (req, res) { const span = tracer.startSpan("GET /"); d = Date.now() || 0 resPayload = '{"timestamp": '+ d + ',"version": "'+ config.version +'"}' res.send(resPayload); span.log({ res: resPayload }); span.finish(); });
const sayHello = helloTo => { const span = tracer.startSpan("say-hello"); span.setTag("hello-to", helloTo); const helloStr = `Hello, ${helloTo}!`; span.log({ event: "string-format", value: helloStr, }); console.log(helloStr); span.log({ event: "print-string" }); span.finish(); }
test('#startSpan() - ended transaction', setup(function (t) { const tracer = new Tracer(getAgent()) const span1 = tracer.startSpan('foo') span1.finish() const span2 = tracer.startSpan('bar') t.equal(span1._isTransaction, true) t.equal(span2._isTransaction, true) t.equal(span1.context()._context.parentId, undefined) t.equal(span2.context()._context.parentId, undefined) t.end() }))
app.get('/internal/ping', function (req, res) { const span = tracer.startSpan("GET /internal/ping"); resPayload = '{"response": "pong"}' res.send(resPayload); span.log({ res: resPayload }); span.finish(); });
test('#finish() - span', setup(function (t) { const tracer = new Tracer(getAgent()) tracer.startSpan('foo') const span = tracer.startSpan('bar') t.equal(span._span.ended, false) span.finish() t.equal(span._span.ended, true) t.end() }))
/* GET readiness probe response. */ router.get('/ready', async function(req, res, next) { const span = tracer.startSpan('redis_ping') try { let pingval = await db.ping() if (pingval) { res.send('yes'); span.setTag("RedisPing", true) span.finish() } else { span.setTag("RedisPing", false) span.finish() res.status(500).json({ error: "redis.ping was false" }) } } catch (error) { span.setTag(Tags.ERROR, error.toString()) span.finish() res.status(500).json({ error: error.toString() }) } });