From cb60151c0e900af41b4ac9a67967afda7cd3bc8a Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Fri, 6 Jan 2023 10:50:57 -0500 Subject: [PATCH] Add status api --- backend/src/app.ts | 8 +++++++- backend/src/helpers/rateLimiter.ts | 4 +++- backend/src/routes/status/index.ts | 5 +++++ backend/src/routes/status/status.ts | 15 +++++++++++++++ 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 backend/src/routes/status/index.ts create mode 100644 backend/src/routes/status/status.ts diff --git a/backend/src/app.ts b/backend/src/app.ts index 1e1bbb593..000fa647d 100644 --- a/backend/src/app.ts +++ b/backend/src/app.ts @@ -1,7 +1,7 @@ // eslint-disable-next-line @typescript-eslint/no-var-requires const { patchRouterParam } = require('./utils/patchAsyncRoutes'); -import express from 'express'; +import express, { Request, Response } from 'express'; import helmet from 'helmet'; import cors from 'cors'; import cookieParser from 'cookie-parser'; @@ -43,6 +43,8 @@ import { apiKeyData as v2APIKeyDataRouter, } from './routes/v2'; +import { healthCheck } from './routes/status'; + import { getLogger } from './utils/logger'; import { RouteNotFoundError } from './utils/errors'; import { requestErrorHandler } from './middleware/requestErrorHandler'; @@ -101,6 +103,10 @@ app.use('/api/v2/secret', v2SecretRouter); app.use('/api/v2/service-token', v2ServiceTokenDataRouter); app.use('/api/v2/api-key-data', v2APIKeyDataRouter); + +// Server status +app.use('/api', healthCheck) + //* Handle unrouted requests and respond with proper error message as well as status code app.use((req, res, next) => { if (res.headersSent) return next(); diff --git a/backend/src/helpers/rateLimiter.ts b/backend/src/helpers/rateLimiter.ts index 6171559af..55ac3be0c 100644 --- a/backend/src/helpers/rateLimiter.ts +++ b/backend/src/helpers/rateLimiter.ts @@ -6,7 +6,9 @@ const apiLimiter = rateLimit({ max: 450, standardHeaders: true, legacyHeaders: false, - skip: (request) => request.path === '/healthcheck' + skip: (request) => { + return request.path === '/healthcheck' || request.path === '/api/status' + } }); // 5 requests per hour diff --git a/backend/src/routes/status/index.ts b/backend/src/routes/status/index.ts new file mode 100644 index 000000000..815ceab17 --- /dev/null +++ b/backend/src/routes/status/index.ts @@ -0,0 +1,5 @@ +import healthCheck from './healthCheck'; + +export { + healthCheck +} \ No newline at end of file diff --git a/backend/src/routes/status/status.ts b/backend/src/routes/status/status.ts new file mode 100644 index 000000000..4ab82cca9 --- /dev/null +++ b/backend/src/routes/status/status.ts @@ -0,0 +1,15 @@ +import express, { Request, Response } from 'express'; + +const router = express.Router(); + +router.get( + '/status', + (req: Request, res: Response) => { + res.status(200).json({ + date: new Date(), + message: 'Ok', + }) + } +); + +export default router \ No newline at end of file