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