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

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