123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- 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)
- }
- }
- }
|