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