import { HttpApp } from '../src/infra/http/http-app'; import { MetricsPlugin, MetricsPluginOptions } from '../src/infra/http/metrics'; import { GetRoute } from '../src/infra/http/route'; // Example usage of MetricsPlugin async function metricsPluginExample() { // Create HTTP app const app = new HttpApp(); // Configure metrics plugin options const metricsOptions: MetricsPluginOptions = { enabled: true, exposeEndpoint: true, metricsPath: '/metrics', metricsFormat: 'prometheus', // or 'json' or 'text' includeSystemMetrics: true, metrics: { responseTime: true, requestCount: true, errorRate: true, memoryUsage: true, cpuUsage: true }, collectInterval: 30000, // 30 seconds includeRouteParams: false, customLabels: { environment: 'development', service: 'example-app' } }; // Create and install metrics plugin const metricsPlugin = new MetricsPlugin(metricsOptions); // Install the plugin app.usePlugin(metricsPlugin); // Add some test routes app.mount(new GetRoute('/api/users', async (req, res) => { res.json({ users: ['user1', 'user2', 'user3'] }); })); app.mount(new GetRoute('/api/posts', async (req, res) => { res.json({ posts: ['post1', 'post2'] }); })); // Add a route that might cause errors for testing error metrics app.mount(new GetRoute('/api/error', async (req, res) => { res.status(500).json({ error: 'Internal server error' }); })); // Start the server await app.start(3000); console.log('Server started on port 3000'); console.log('Available endpoints:'); console.log(' GET /api/users - Get users'); console.log(' GET /api/posts - Get posts'); console.log(' GET /api/error - Test error metrics'); console.log(' GET /metrics - View collected metrics (Prometheus format)'); // Example of custom metrics const collector = metricsPlugin.getCollector(); // Record custom business metrics collector.counter('business_operations_total', 1, { operation: 'user_login' }); collector.histogram('business_operation_duration_seconds', 0.5, { operation: 'user_login' }); collector.gauge('active_users', 42); console.log('\nCustom metrics recorded:'); console.log('- business_operations_total'); console.log('- business_operation_duration_seconds'); console.log('- active_users'); // Graceful shutdown process.on('SIGINT', async () => { console.log('\nShutting down server...'); await app.stop(); process.exit(0); }); } // Run the example if (require.main === module) { metricsPluginExample().catch(console.error); } export { metricsPluginExample };