Prom-client metric value always shows 0 value inside worker function

85 Views Asked by At

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());
});

0

There are 0 best solutions below