@godspeedsystems/core
Version: 
> 4th Generation Declarative Microservice Framework
64 lines (63 loc) • 2.56 kB
JavaScript
// import bodyParser from 'body-parser';
// import express from 'express';
// import { pinoHttp } from 'pino-http';
// import fileUpload from 'express-fileupload';
// import promMid from '@mindgrep/express-prometheus-middleware';
// import Prometheus from 'prom-client';
// import swaggerUI from 'swagger-ui-express';
// import config from 'config';
// import { logger } from '../logger';
// import { PlainObject } from '../types';
// import { promClient } from '../telemetry/monitoring';
// import { generateSwaggerJSON } from './swagger';
// // here we are going to configure all the routes of the application
// // like, /api-docs, /metrics
// const prepareRouter = async (app: express.Application, datasources: PlainObject, events: PlainObject, definitions: PlainObject) => {
//   const loggerExpress = pinoHttp({
//     logger: logger,
//     autoLogging: true,
//   });
//   // @ts-ignore
//   const request_body_limit = config.request_body_limit || 50 * 1024 * 1024;
//   // @ts-ignore
//   const file_size_limit = config.file_size_limit || 50 * 1024 * 1024;
//   app.use(bodyParser.urlencoded({ extended: true, limit: request_body_limit }));
//   app.use(bodyParser.json({ limit: request_body_limit }));
//   app.use(loggerExpress);
//   // file upload
//   app.use(
//     fileUpload({
//       useTempFiles: true,
//       //@ts-ignore
//       limits: { fileSize: file_size_limit },
//     })
//   );
//   // prometheus middleware
//   app.use(
//     promMid({
//       collectDefaultMetrics: true,
//       requestDurationBuckets: Prometheus.exponentialBuckets(0.2, 3, 6),
//       requestLengthBuckets: Prometheus.exponentialBuckets(512, 2, 10),
//       responseLengthBuckets: Prometheus.exponentialBuckets(512, 2, 10),
//     })
//   );
//   // expose metrics route
//   app.get('/metrics', async (req: express.Request, res: express.Response) => {
//     let prismaMetrics: string = '';
//     for (let ds in datasources) {
//       if (datasources[ds].type === 'datastore') {
//         const prismaClient = datasources[ds].client;
//         prismaMetrics += await prismaClient.$metrics.prometheus({
//           globalLabels: { server: process.env.HOSTNAME, datasource: `${ds}` },
//         });
//       }
//     }
//     let appMetrics = await promClient.register.metrics();
//     res.end(appMetrics + prismaMetrics);
//   });
//   // expose SwaggerUI
//   const swaggerJson = generateSwaggerJSON(events, definitions);
//   app.use('/api-docs', swaggerUI.serve, swaggerUI.setup(swaggerJson));
// };
// export { prepareRouter };
;