From 84327db5fb43e637f70f0d0d170b12656ed0ac0d Mon Sep 17 00:00:00 2001 From: ajukes Date: Thu, 6 Apr 2023 16:24:44 +0100 Subject: [PATCH] added retrieve jaeger trace endpoint. --- lib/routes/api/recent-calls.js | 18 ++++++++++++++++++ lib/utils/jaeger-utils.js | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 lib/utils/jaeger-utils.js diff --git a/lib/routes/api/recent-calls.js b/lib/routes/api/recent-calls.js index 403d15bc..8d3e7c64 100644 --- a/lib/routes/api/recent-calls.js +++ b/lib/routes/api/recent-calls.js @@ -2,6 +2,8 @@ const router = require('express').Router(); const sysError = require('../error'); const {DbErrorBadRequest} = require('../../utils/errors'); const {getHomerApiKey, getHomerSipTrace, getHomerPcap} = require('../../utils/homer-utils'); +const {getJaegerTrace} = require('../../utils/jaeger-utils'); + const parseAccountSid = (url) => { const arr = /Accounts\/([^\/]*)/.exec(url); if (arr) return arr[1]; @@ -93,4 +95,20 @@ router.get('/:call_id/pcap', async(req, res) => { } }); +router.get('/trace/:trace_id', async(req, res) => { + const {logger} = req.app.locals; + const {trace_id} = req.params; + try { + const obj = await getJaegerTrace(logger, trace_id); + if (!obj) { + logger.info(`/RecentCalls: unable to get spans from jaeger for ${trace_id}`); + return res.sendStatus(404); + } + res.status(200).json(obj.result); + } catch (err) { + logger.error({err}, `/RecentCalls error retrieving jaeger trace ${trace_id}`); + res.sendStatus(500); + } +}); + module.exports = router; diff --git a/lib/utils/jaeger-utils.js b/lib/utils/jaeger-utils.js new file mode 100644 index 00000000..5a304323 --- /dev/null +++ b/lib/utils/jaeger-utils.js @@ -0,0 +1,18 @@ +const bent = require('bent'); +const getJSON = bent(process.env.JAEGER_BASE_URL || 'http://127.0.0.1', 'GET', 'json', 200); + +const getJaegerTrace = async(logger, traceId) => { + if (!process.env.JAEGER_BASE_URL) { + logger.debug('getJaegerTrace: jaeger integration not installed'); + return null; + } + try { + return await getJSON(`/api/v3/traces/${traceId}`); + } catch (err) { + logger.error({err}, `getJaegerTrace: Error retrieving spans for traceId ${traceId}`); + } +}; + +module.exports = { + getJaegerTrace +};