mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
Decaf cleanup: move functions to top level
This commit is contained in:
parent
afecfd5212
commit
6f69fb4869
1 changed files with 159 additions and 148 deletions
|
@ -1,4 +1,3 @@
|
|||
let Metrics
|
||||
console.log('using prometheus')
|
||||
|
||||
const ExpressCompression = require('compression')
|
||||
|
@ -13,173 +12,185 @@ const destructors = []
|
|||
|
||||
require('./uv_threadpool_size')
|
||||
|
||||
module.exports = Metrics = {
|
||||
register: prom.registry,
|
||||
function initialize(_name, opts = {}) {
|
||||
appname = _name
|
||||
collectDefaultMetrics({ timeout: 5000, prefix: buildPromKey() })
|
||||
if (opts.ttlInMinutes) {
|
||||
prom.ttlInMinutes = opts.ttlInMinutes
|
||||
}
|
||||
|
||||
initialize(_name, opts = {}) {
|
||||
appname = _name
|
||||
collectDefaultMetrics({ timeout: 5000, prefix: Metrics.buildPromKey() })
|
||||
if (opts.ttlInMinutes) {
|
||||
prom.ttlInMinutes = opts.ttlInMinutes
|
||||
}
|
||||
console.log(`ENABLE_TRACE_AGENT set to ${process.env.ENABLE_TRACE_AGENT}`)
|
||||
if (process.env.ENABLE_TRACE_AGENT === 'true') {
|
||||
console.log('starting google trace agent')
|
||||
const traceAgent = require('@google-cloud/trace-agent')
|
||||
|
||||
console.log(`ENABLE_TRACE_AGENT set to ${process.env.ENABLE_TRACE_AGENT}`)
|
||||
if (process.env.ENABLE_TRACE_AGENT === 'true') {
|
||||
console.log('starting google trace agent')
|
||||
const traceAgent = require('@google-cloud/trace-agent')
|
||||
const traceOpts = { ignoreUrls: [/^\/status/, /^\/health_check/] }
|
||||
traceAgent.start(traceOpts)
|
||||
}
|
||||
|
||||
const traceOpts = { ignoreUrls: [/^\/status/, /^\/health_check/] }
|
||||
traceAgent.start(traceOpts)
|
||||
}
|
||||
|
||||
console.log(`ENABLE_DEBUG_AGENT set to ${process.env.ENABLE_DEBUG_AGENT}`)
|
||||
if (process.env.ENABLE_DEBUG_AGENT === 'true') {
|
||||
console.log('starting google debug agent')
|
||||
const debugAgent = require('@google-cloud/debug-agent')
|
||||
debugAgent.start({
|
||||
allowExpressions: true,
|
||||
serviceContext: {
|
||||
service: appname,
|
||||
version: process.env.BUILD_VERSION
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
console.log(
|
||||
`ENABLE_PROFILE_AGENT set to ${process.env.ENABLE_PROFILE_AGENT}`
|
||||
)
|
||||
if (process.env.ENABLE_PROFILE_AGENT === 'true') {
|
||||
console.log('starting google profile agent')
|
||||
const profiler = require('@google-cloud/profiler')
|
||||
profiler.start({
|
||||
serviceContext: {
|
||||
service: appname,
|
||||
version: process.env.BUILD_VERSION
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Metrics.inc('process_startup')
|
||||
},
|
||||
|
||||
registerDestructor(func) {
|
||||
destructors.push(func)
|
||||
},
|
||||
|
||||
injectMetricsRoute(app) {
|
||||
app.get(
|
||||
'/metrics',
|
||||
ExpressCompression({
|
||||
level: parseInt(process.env.METRICS_COMPRESSION_LEVEL || '1', 10)
|
||||
}),
|
||||
function(req, res) {
|
||||
res.set('Content-Type', prom.registry.contentType)
|
||||
res.end(prom.registry.metrics())
|
||||
console.log(`ENABLE_DEBUG_AGENT set to ${process.env.ENABLE_DEBUG_AGENT}`)
|
||||
if (process.env.ENABLE_DEBUG_AGENT === 'true') {
|
||||
console.log('starting google debug agent')
|
||||
const debugAgent = require('@google-cloud/debug-agent')
|
||||
debugAgent.start({
|
||||
allowExpressions: true,
|
||||
serviceContext: {
|
||||
service: appname,
|
||||
version: process.env.BUILD_VERSION
|
||||
}
|
||||
)
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
buildPromKey(key = '') {
|
||||
return key.replace(/[^a-zA-Z0-9]/g, '_')
|
||||
},
|
||||
console.log(`ENABLE_PROFILE_AGENT set to ${process.env.ENABLE_PROFILE_AGENT}`)
|
||||
if (process.env.ENABLE_PROFILE_AGENT === 'true') {
|
||||
console.log('starting google profile agent')
|
||||
const profiler = require('@google-cloud/profiler')
|
||||
profiler.start({
|
||||
serviceContext: {
|
||||
service: appname,
|
||||
version: process.env.BUILD_VERSION
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
sanitizeValue(value) {
|
||||
return parseFloat(value)
|
||||
},
|
||||
inc('process_startup')
|
||||
}
|
||||
|
||||
set(key, value, sampleRate = 1) {
|
||||
console.log('counts are not currently supported')
|
||||
},
|
||||
function registerDestructor(func) {
|
||||
destructors.push(func)
|
||||
}
|
||||
|
||||
inc(key, sampleRate = 1, opts = {}) {
|
||||
key = Metrics.buildPromKey(key)
|
||||
opts.app = appname
|
||||
opts.host = hostname
|
||||
prom.metric('counter', key).inc(opts)
|
||||
if (process.env.DEBUG_METRICS) {
|
||||
console.log('doing inc', key, opts)
|
||||
function injectMetricsRoute(app) {
|
||||
app.get(
|
||||
'/metrics',
|
||||
ExpressCompression({
|
||||
level: parseInt(process.env.METRICS_COMPRESSION_LEVEL || '1', 10)
|
||||
}),
|
||||
function(req, res) {
|
||||
res.set('Content-Type', prom.registry.contentType)
|
||||
res.end(prom.registry.metrics())
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
count(key, count, sampleRate = 1, opts = {}) {
|
||||
key = Metrics.buildPromKey(key)
|
||||
opts.app = appname
|
||||
opts.host = hostname
|
||||
prom.metric('counter', key).inc(opts, count)
|
||||
if (process.env.DEBUG_METRICS) {
|
||||
console.log('doing count/inc', key, opts)
|
||||
}
|
||||
},
|
||||
function buildPromKey(key = '') {
|
||||
return key.replace(/[^a-zA-Z0-9]/g, '_')
|
||||
}
|
||||
|
||||
summary(key, value, opts = {}) {
|
||||
key = Metrics.buildPromKey(key)
|
||||
opts.app = appname
|
||||
opts.host = hostname
|
||||
prom.metric('summary', key).observe(opts, value)
|
||||
if (process.env.DEBUG_METRICS) {
|
||||
console.log('doing summary', key, value, opts)
|
||||
}
|
||||
},
|
||||
function sanitizeValue(value) {
|
||||
return parseFloat(value)
|
||||
}
|
||||
|
||||
timing(key, timeSpan, sampleRate, opts = {}) {
|
||||
key = Metrics.buildPromKey('timer_' + key)
|
||||
opts.app = appname
|
||||
opts.host = hostname
|
||||
prom.metric('summary', key).observe(opts, timeSpan)
|
||||
if (process.env.DEBUG_METRICS) {
|
||||
console.log('doing timing', key, opts)
|
||||
}
|
||||
},
|
||||
function set(key, value, sampleRate = 1) {
|
||||
console.log('counts are not currently supported')
|
||||
}
|
||||
|
||||
Timer: class {
|
||||
constructor(key, sampleRate = 1, opts = {}) {
|
||||
this.start = new Date()
|
||||
key = Metrics.buildPromKey(key)
|
||||
this.key = key
|
||||
this.sampleRate = sampleRate
|
||||
this.opts = opts
|
||||
}
|
||||
function inc(key, sampleRate = 1, opts = {}) {
|
||||
key = buildPromKey(key)
|
||||
opts.app = appname
|
||||
opts.host = hostname
|
||||
prom.metric('counter', key).inc(opts)
|
||||
if (process.env.DEBUG_METRICS) {
|
||||
console.log('doing inc', key, opts)
|
||||
}
|
||||
}
|
||||
|
||||
done() {
|
||||
const timeSpan = new Date() - this.start
|
||||
Metrics.timing(this.key, timeSpan, this.sampleRate, this.opts)
|
||||
return timeSpan
|
||||
}
|
||||
},
|
||||
function count(key, count, sampleRate = 1, opts = {}) {
|
||||
key = buildPromKey(key)
|
||||
opts.app = appname
|
||||
opts.host = hostname
|
||||
prom.metric('counter', key).inc(opts, count)
|
||||
if (process.env.DEBUG_METRICS) {
|
||||
console.log('doing count/inc', key, opts)
|
||||
}
|
||||
}
|
||||
|
||||
gauge(key, value, sampleRate = 1, opts = {}) {
|
||||
key = Metrics.buildPromKey(key)
|
||||
prom.metric('gauge', key).set(
|
||||
{
|
||||
app: appname,
|
||||
host: hostname,
|
||||
status: opts.status
|
||||
},
|
||||
this.sanitizeValue(value)
|
||||
)
|
||||
if (process.env.DEBUG_METRICS) {
|
||||
console.log('doing gauge', key, opts)
|
||||
}
|
||||
},
|
||||
function summary(key, value, opts = {}) {
|
||||
key = buildPromKey(key)
|
||||
opts.app = appname
|
||||
opts.host = hostname
|
||||
prom.metric('summary', key).observe(opts, value)
|
||||
if (process.env.DEBUG_METRICS) {
|
||||
console.log('doing summary', key, value, opts)
|
||||
}
|
||||
}
|
||||
|
||||
globalGauge(key, value, sampleRate = 1, opts = {}) {
|
||||
key = Metrics.buildPromKey(key)
|
||||
prom
|
||||
.metric('gauge', key)
|
||||
.set({ app: appname, status: opts.status }, this.sanitizeValue(value))
|
||||
},
|
||||
function timing(key, timeSpan, sampleRate, opts = {}) {
|
||||
key = buildPromKey('timer_' + key)
|
||||
opts.app = appname
|
||||
opts.host = hostname
|
||||
prom.metric('summary', key).observe(opts, timeSpan)
|
||||
if (process.env.DEBUG_METRICS) {
|
||||
console.log('doing timing', key, opts)
|
||||
}
|
||||
}
|
||||
|
||||
class Timer {
|
||||
constructor(key, sampleRate = 1, opts = {}) {
|
||||
this.start = new Date()
|
||||
key = buildPromKey(key)
|
||||
this.key = key
|
||||
this.sampleRate = sampleRate
|
||||
this.opts = opts
|
||||
}
|
||||
|
||||
done() {
|
||||
const timeSpan = new Date() - this.start
|
||||
timing(this.key, timeSpan, this.sampleRate, this.opts)
|
||||
return timeSpan
|
||||
}
|
||||
}
|
||||
|
||||
function gauge(key, value, sampleRate = 1, opts = {}) {
|
||||
key = buildPromKey(key)
|
||||
prom.metric('gauge', key).set(
|
||||
{
|
||||
app: appname,
|
||||
host: hostname,
|
||||
status: opts.status
|
||||
},
|
||||
this.sanitizeValue(value)
|
||||
)
|
||||
if (process.env.DEBUG_METRICS) {
|
||||
console.log('doing gauge', key, opts)
|
||||
}
|
||||
}
|
||||
|
||||
function globalGauge(key, value, sampleRate = 1, opts = {}) {
|
||||
key = buildPromKey(key)
|
||||
prom
|
||||
.metric('gauge', key)
|
||||
.set({ app: appname, status: opts.status }, this.sanitizeValue(value))
|
||||
}
|
||||
|
||||
function close() {
|
||||
for (const func of destructors) {
|
||||
func()
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
initialize,
|
||||
registerDestructor,
|
||||
injectMetricsRoute,
|
||||
buildPromKey,
|
||||
sanitizeValue,
|
||||
set,
|
||||
inc,
|
||||
count,
|
||||
summary,
|
||||
timing,
|
||||
Timer,
|
||||
gauge,
|
||||
globalGauge,
|
||||
close,
|
||||
|
||||
register: prom.registry,
|
||||
|
||||
mongodb: require('./mongodb'),
|
||||
http: require('./http'),
|
||||
open_sockets: require('./open_sockets'),
|
||||
event_loop: require('./event_loop'),
|
||||
memory: require('./memory'),
|
||||
|
||||
timeAsyncMethod: require('./timeAsyncMethod'),
|
||||
|
||||
close() {
|
||||
for (const func of destructors) {
|
||||
func()
|
||||
}
|
||||
}
|
||||
timeAsyncMethod: require('./timeAsyncMethod')
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue