Skip to content

Commit

Permalink
feat: activated metrics
Browse files Browse the repository at this point in the history
  • Loading branch information
froid1911 committed Jul 29, 2024
1 parent 63bfc3d commit aae6e4a
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 18 deletions.
29 changes: 17 additions & 12 deletions api/src/app.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import type { Express } from 'express';
import express from 'express';
import { getChildLogger } from './logger';
import basePrisma from './database';
import { renderPlaygroundPage } from 'graphql-playground-html';
import * as Sentry from '@sentry/node';
import { nodeProfilingIntegration } from '@sentry/profiling-node';
import bodyParser from 'body-parser';
import prisma from './database';
import promBundle from 'express-prom-bundle';

import { dependencies } from '../package.json';
import { getChildLogger } from './logger';
import prisma from './database';
import register from './metrics';

const logger = getChildLogger({ msgPrefix: 'APP' });
const startupTime = new Date();
Expand All @@ -18,6 +19,13 @@ export const createApp = (): { app: Express; router: express.Router } => {
const app = express();
const router = express.Router();

const metricsMiddleware = promBundle({
includeMethod: true,
autoregister: false,
promRegistry: register,
});
app.use(metricsMiddleware);

// fixes request entity too large
app.use(bodyParser.json({ limit: '50mb' }));

Expand Down Expand Up @@ -51,7 +59,7 @@ export const createApp = (): { app: Express; router: express.Router } => {

app.get('/healthz', async (_req, res) => {
try {
await basePrisma.user.findFirst();
await prisma.user.findFirst();
} catch (error: any) {
return res.status(500).json({
status: `Failed database initialization check with error: ${error?.message}`,
Expand Down Expand Up @@ -81,18 +89,15 @@ export const createApp = (): { app: Express; router: express.Router } => {

router.get('/explorer/:driveId?', (req, res) => {
res.setHeader('Content-Type', 'text/html');
const basePath =
process.env.BASE_PATH === '/' ? '' : process.env.BASE_PATH || '';
const endpoint = `${basePath}${
req.params.driveId !== undefined ? `/d/${req.params.driveId}` : '/drives'
}`;
const basePath = process.env.BASE_PATH === '/' ? '' : process.env.BASE_PATH || '';
const endpoint = `${basePath}${req.params.driveId !== undefined ? `/d/${req.params.driveId}` : '/drives'}`;
res.send(
renderPlaygroundPage({
endpoint: endpoint,
endpoint,
settings: {
'request.credentials': 'include',
},
})
}),
);
});

Expand All @@ -110,7 +115,7 @@ export const createApp = (): { app: Express; router: express.Router } => {
}

const result = await prisma.document.closeScopeOfWorkIssue(
req.body.issue.number
req.body.issue.number,
);
if (!result) {
throw new Error('Failed to close issue');
Expand Down
18 changes: 12 additions & 6 deletions api/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
import type express from 'express';
import * as Sentry from "@sentry/node";
import * as Sentry from '@sentry/node';
import { type Server, createServer as createHttpServer } from 'http';
import { createApp } from './app';
import { addGraphqlRoutes } from './graphql/server';
import { getChildLogger } from './logger';
import { closeRedis } from './redis';
import { type Server, createServer as createHttpServer } from 'http';
import { closeRedis, initRedis } from './redis';
import { PORT } from './env';
import { errorHandler } from './middleware/errors';
import { initRedis } from './redis';
import "express-async-errors";
import 'express-async-errors';
import prisma from './database';
import register from './metrics';
import promBundle from 'express-prom-bundle';

const logger = getChildLogger({ msgPrefix: 'SERVER' });

Expand All @@ -34,14 +36,18 @@ async function startServer(
}

app.use(errorHandler);
app.get('/metrics', async (req: express.Request, res: express.Response) => {
const prismaMetrics = await prisma.$metrics.prometheus();
const appMetrics = await register.metrics();
return res.send(prismaMetrics + appMetrics);
});

const httpServer = createHttpServer(app);
return httpServer.listen({ port: PORT }, () => {
logger.info(`Running on ${PORT}`);
});
}


/* istanbul ignore next @preserve */
startServer(app, router)
.then((e) => {
Expand Down

0 comments on commit aae6e4a

Please sign in to comment.