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