Reviewed-on: daoyoucloud/tachybase#1378 Reviewed-by: sealday <zhanglin@daoyoucloud.com> Co-authored-by: TomyJan <TomyJan6@gmail.com> Co-committed-by: TomyJan <TomyJan6@gmail.com>
48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
import { Plugin } from '@tachybase/server';
|
|
|
|
import initMeters from './meters';
|
|
import { InternalPrometheusExporter, PrometheusExporter } from './prometheus-exporters';
|
|
|
|
export class PluginPrometheusServer extends Plugin {
|
|
async afterAdd() {
|
|
this.app.on('beforeLoad', async (app) => {
|
|
const startServer = process.env.TELEMETRY_PROMETHEUS_SERVER === 'on';
|
|
let reader;
|
|
if (!startServer) {
|
|
reader = () => new InternalPrometheusExporter(app);
|
|
this.log.info('internal prometheus endpoint registered on /api/prometheus:metrics');
|
|
} else {
|
|
const port: number = Number(process.env.TELEMETRY_PROMETHEUS_PORT) || 9464;
|
|
reader = () =>
|
|
new PrometheusExporter(
|
|
{
|
|
port, // optional - default is 9464
|
|
},
|
|
() => {
|
|
this.log.info(`independent prometheus endpoint started on http://localhost:${port}/metrics`);
|
|
},
|
|
);
|
|
}
|
|
app.telemetry.metric.registerReader('prometheus', reader);
|
|
});
|
|
}
|
|
|
|
async beforeLoad() {}
|
|
|
|
async load() {
|
|
const meter = this.app.telemetry.metric.getMeter();
|
|
const meters = new initMeters(meter);
|
|
await meters.start();
|
|
}
|
|
|
|
async install() {}
|
|
|
|
async afterEnable() {}
|
|
|
|
async afterDisable() {}
|
|
|
|
async remove() {}
|
|
}
|
|
|
|
export default PluginPrometheusServer;
|