You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wiki/server/core/metrics.mjs

67 lines
1.8 KiB

import { collectDefaultMetrics, register, Gauge } from 'prom-client'
import { toSafeInteger } from 'lodash-es'
export default {
customMetrics: {},
async init () {
if (WIKI.config.metrics.isEnabled) {
WIKI.logger.info('Initializing metrics...')
register.setDefaultLabels({
WIKI_INSTANCE: WIKI.INSTANCE_ID
})
collectDefaultMetrics()
this.customMetrics.groupsTotal = new Gauge({
name: 'wiki_groups_total',
help: 'Total number of groups',
async collect() {
const total = await WIKI.db.groups.query().count('* as total').first()
this.set(toSafeInteger(total.total))
}
})
this.customMetrics.pagesTotal = new Gauge({
name: 'wiki_pages_total',
help: 'Total number of pages',
async collect() {
const total = await WIKI.db.pages.query().count('* as total').first()
this.set(toSafeInteger(total.total))
}
})
this.customMetrics.tagsTotal = new Gauge({
name: 'wiki_tags_total',
help: 'Total number of tags',
async collect() {
const total = await WIKI.db.tags.query().count('* as total').first()
this.set(toSafeInteger(total.total))
}
})
this.customMetrics.usersTotal = new Gauge({
name: 'wiki_users_total',
help: 'Total number of users',
async collect() {
const total = await WIKI.db.users.query().count('* as total').first()
this.set(toSafeInteger(total.total))
}
})
WIKI.logger.info('Metrics ready [ OK ]')
} else {
this.customMetrics = {}
register.clear()
}
return this
},
async render (res) {
try {
res.contentType(register.contentType)
res.send(await register.metrics())
} catch (err) {
res.status(500).end(err.message)
}
}
}