Repository URL to install this package:
|
Version:
0.0.3 ▾
|
import express from 'express'
import bodyParser from 'body-parser'
import cors from 'cors'
import { oneStorage } from '@skava/persistence'
import { LoggingMetaType } from './typings'
const app = express()
const corsOptions = {
origin: true,
credentials: true,
methods: ['GET', 'POST', 'OPTIONS'],
}
app.use(
cors(corsOptions)
)
app.use(
bodyParser.json()
)
app.use(
bodyParser.urlencoded({
extended: true,
})
)
const logs: LoggingMetaType[] = oneStorage.get('logs-dev') || []
export type GroupedLogItemType = { [key: string]: LoggingMetaType[] }
function fromLogsToGrouped(logList: LoggingMetaType[]) {
const grouped: GroupedLogItemType = {}
logList.forEach(item => {
const id = item.tracing.openTraceId
if (grouped[id] === undefined) {
grouped[id] = []
}
grouped[id].push(item)
})
return grouped
}
app.get('/', (req, res) => {
const grouped = fromLogsToGrouped(logs)
let html = `<ul>`
console.log(grouped)
Object.keys(grouped).forEach(key => {
html += `
<li>
<header>
<em>traceId: ${key}</em>
<br />
<small>sessionId: ${grouped[key][0].tracing.sessionId}</small>
</header>
<ol>
${grouped[key].filter(Boolean).reverse().map(item => `
<li>
<p>${item.meta.appName || 'no app name'}</p>
<p>span: ${item.tracing.openTraceSpanId} ${item.meta.spanName || ''}</p>
${
typeof item.timing === 'string'
? `<span>${item.timing}</span>`
: `
<span>
<span title="in nanoseconds">duration: </span>
<time
datetime="${item.timing.startTime}"
title="${item.timing.startTime}"
>${item.timing.durationInNanoSeconds}</time>
</span>`
}
${(item.meta.bytesReceived || item.meta.bytesSent) ? `<p>bytes: ${item.meta.bytesReceived} => ${item.meta.bytesSent}</p>` : '<p>no byte size 🔎</p>'}
<span>${item.cache.isCached ? '💸' : '🚫💰'}</span>
${item.cache.type ? `<p>cache type: ${item.cache.type}</p>` : ''}
</li>
`).join('\n')}
</ol>
</li>
`
})
html += '</ul>'
res.send(html)
// const logResponse = logs.map(log => JSON.stringify(log, undefined, 2)).join('<br />')
// res.send(logResponse)
})
// @todo
app.get('/:trace-id', (req, res) => {
res.send('todo - support trace id')
})
app.get('*', (req, res) => {
res.send({
spanId: req.get('x-b3-spanid'),
})
})
app.post('/trace', (req, res) => {
console.log({
body: req.body,
url: req.url,
headers: req.headers
})
logs.push(req.body)
oneStorage.set('logs-dev', logs)
res.end()
})
app.listen(7777, () => console.log('@skava/tracing listening on http://localhost:7777'))