UNPKG

koishi-plugin-exporter

Version:

Koishi OpenMetrics Exporter

94 lines (93 loc) 3.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.dau = void 0; const koishi_1 = require("koishi"); const prom_client_1 = require("prom-client"); const common_1 = require("../common"); const dau = (ctx, config, register) => { const dauBuffer = []; ctx.model.extend('exporter_dau', { user: { type: 'unsigned', nullable: false, }, date: { type: 'unsigned', nullable: false, }, count: { type: 'unsigned', nullable: false, }, }, { primary: ['user', 'date'], unique: [['user', 'date']], }); ctx.on('message-created', ({ platform, userId }) => dauBuffer.push({ platform, userId, })); new prom_client_1.Gauge({ name: common_1.prefix + common_1.metricNames.dau, help: 'Daily active user.', registers: [register], labelNames: ['instance_name'], async collect() { // Get current date const dateString = (0, common_1.getDateString)(ctx); const date = Number(dateString); // Get all items from buffer const items = dauBuffer.concat(); if (items.length) { // Reset buffer dauBuffer.length = 0; // Get all user ids const ids = await ctx.database.get('binding', { $or: items.map((x) => ({ platform: [x.platform], pid: [x.userId], })), }, ['aid']); // Insert all user ids for current date await ctx.database.upsert('exporter_dau', ids.map(({ aid }) => ({ user: aid, date, count: 0, }))); } // Get all records of current date const dau = await ctx.database .select('exporter_dau') .where({ date: [date], }) .execute((x) => koishi_1.$.count(x.user)); // Set DAU to length this.set({ instance_name: config.name, }, dau); }, }); new prom_client_1.Gauge({ name: common_1.prefix + common_1.metricNames.dau_yesterday, help: 'DAU yesterday.', registers: [register], labelNames: ['instance_name'], async collect() { // Get yesterday const date = Number((0, common_1.yesterday)((0, common_1.getDateString)(ctx))); // Get all records of yesterday const dau = await ctx.database .select('exporter_dau') .where({ date: [date], }) .execute((x) => koishi_1.$.count(x.user)); // Set DAU to length this.set({ instance_name: config.name, }, dau); }, }); }; exports.dau = dau;