In below code I want to set metrics whenever processData () gets called .(using prom-client),but gauge1 value always show,0 as value even after hitting /postmessage API successfully.
if I call processdata() function inside another api directly like below example. Example: router.get('/',(req,res){ processdata () }) then it works but, only When I call /postmessage API and it calls processdata() then it doesn't work.
//Main.js file
import {router as metricApiRoute,register} from 'api/route/matrics';
export const worker = new worker ('/worker/myfile.js');
import {router as metricRoutes} from '/api/route/mymatrics';
export const workerupdate = new worker('/worker/myfile.js');
//src/api/route/myapi.ts file
Import {workerupdate} from '../../main'
router.post('/postMessage', async (req, res) => {
try {
// Trigger the worker
workerupdate.postMessage('update');
res.status(200).json('update success')
} catch (err) {
res.status(404).json(err);
}
});
//myfile.ts file
import { parentPort } from 'worker_threads';
import processData from './processData';
import { testGauge} from '../routes/mymetric'
if (parentPort !== null ) {
parentPort.on('message', async (event: string) => {
if (event === 'update') {
await processData();
parentPort.postMessage('update_completed');
}
});
}
//Src/worker/processdata.ts
import {gauge1} from '../api/metrics'
Async function processData(){
//I want to set Gauge value here
gauge1.set(1)
}
// routes/api/metrics.ts file
import express from 'express';
const register = new client.Registry();
import client from 'prom-client';
client.collectDefaultMetrics({ register });
export const gauge1= new client.Gauge({
name:'testing',
help:'testing gauge'
})
register.registerMetrics(gauge1)
export const router express.Router();
router.get('/, async (req, res) => {
res.setHeader('Content-Type', register.contentType);
res.send(await register.metrics());
});