github.com/grafana/pyroscope@v1.18.0/examples/language-sdk-instrumentation/nodejs/express/index.js (about)

     1  /* eslint-disable */
     2  const Pyroscope = require('@pyroscope/nodejs');
     3  
     4  const port = process.env['PORT'] || 5000;
     5  const region = process.env['REGION'] || 'default';
     6  const appName = process.env['APP_NAME'] || 'express';
     7  const pyroscopeUrl = process.env['PYROSCOPE_URL'] || 'http://pyroscope:4040';
     8  
     9  const express = require('express');
    10  const morgan = require('morgan');
    11  
    12  const app = express();
    13  app.use(morgan('dev'));
    14  app.get('/', (_, res) => {
    15    res.send('Available routes are: /bike, /car, /scooter');
    16  });
    17  
    18  const genericSearchHandler = (p) => (_, res) => {
    19    const time = +new Date() + p * 1000;
    20    let i = 0;
    21    while (+new Date() < time) {
    22      i = i + Math.random();
    23    }
    24    res.send('Vehicle found');
    25  };
    26  
    27  Pyroscope.init({
    28    appName: appName,
    29    serverAddress: pyroscopeUrl,
    30    tags: { region },
    31  });
    32  Pyroscope.start();
    33  
    34  app.get('/bike', function bikeSearchHandler(req, res) {
    35    Pyroscope.wrapWithLabels({ vehicle: 'bike' }, () =>
    36      genericSearchHandler(0.5)(req, res)
    37    );
    38  });
    39  
    40  app.get('/car', function carSearchHandler(req, res) {
    41    Pyroscope.wrapWithLabels({ vehicle: 'car' }, () =>
    42      genericSearchHandler(1)(req, res)
    43    );
    44  });
    45  
    46  app.get('/scooter', function scooterSearchHandler(req, res) {
    47    Pyroscope.wrapWithLabels({ vehicle: 'scooter' }, () =>
    48      genericSearchHandler(0.25)(req, res)
    49    );
    50  });
    51  
    52  app.listen(port, () => {
    53    console.log(
    54      `Server has started on port ${port}, use http://localhost:${port}`
    55    );
    56  });