dd-trace
Version:
Datadog APM tracing client for JavaScript
36 lines (29 loc) • 1.12 kB
JavaScript
const fs = require('fs')
const { promisify } = require('util')
const { threadId } = require('worker_threads')
const writeFile = promisify(fs.writeFile)
const { EventSerializer } = require('./event_serializer')
const pad = (n) => String(n).padStart(2, '0')
function formatDateTime (t) {
return `${t.getUTCFullYear()}${pad(t.getUTCMonth() + 1)}${pad(t.getUTCDate())}` +
`T${pad(t.getUTCHours())}${pad(t.getUTCMinutes())}${pad(t.getUTCSeconds())}Z`
}
class FileExporter extends EventSerializer {
constructor (config = {}) {
super(config)
const { pprofPrefix } = config
this._pprofPrefix = pprofPrefix || ''
}
export (exportSpec) {
const { profiles, end } = exportSpec
const types = Object.keys(profiles)
const dateStr = formatDateTime(end)
const tasks = types.map(type => {
return writeFile(`${this._pprofPrefix}${type}_worker_${threadId}_${dateStr}.pprof`, profiles[type])
})
tasks.push(writeFile(`event_worker_${threadId}_${dateStr}.json`, this.getEventJSON(exportSpec)))
return Promise.all(tasks)
}
}
module.exports = { FileExporter }