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

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