78 lines
2.1 KiB
TypeScript
78 lines
2.1 KiB
TypeScript
import cors from '@fastify/cors';
|
|
import Fastify from 'fastify';
|
|
|
|
import type { IServiceClient } from '@openpanel/db';
|
|
import { redisPub } from '@openpanel/redis';
|
|
|
|
import eventRouter from './routes/event.router';
|
|
import exportRouter from './routes/export.router';
|
|
import liveRouter from './routes/live.router';
|
|
import miscRouter from './routes/misc.router';
|
|
import profileRouter from './routes/profile.router';
|
|
import { logger, logInfo } from './utils/logger';
|
|
|
|
declare module 'fastify' {
|
|
interface FastifyRequest {
|
|
projectId: string;
|
|
client: IServiceClient | null;
|
|
}
|
|
}
|
|
|
|
const port = parseInt(process.env.API_PORT || '3000', 10);
|
|
|
|
const startServer = async () => {
|
|
logInfo('Starting server');
|
|
try {
|
|
const fastify = Fastify({
|
|
logger: logger,
|
|
});
|
|
|
|
fastify.register(cors, {
|
|
origin: '*',
|
|
});
|
|
|
|
fastify.decorateRequest('projectId', '');
|
|
fastify.register(eventRouter, { prefix: '/event' });
|
|
fastify.register(profileRouter, { prefix: '/profile' });
|
|
fastify.register(liveRouter, { prefix: '/live' });
|
|
fastify.register(miscRouter, { prefix: '/misc' });
|
|
fastify.register(exportRouter, { prefix: '/export' });
|
|
fastify.setErrorHandler((error) => {
|
|
fastify.log.error(error);
|
|
});
|
|
fastify.get('/', (_request, reply) => {
|
|
reply.send({ name: 'openpanel sdk api' });
|
|
});
|
|
// fastify.get('/health-check', async (request, reply) => {
|
|
// try {
|
|
// await utils.healthCheck()
|
|
// reply.status(200).send()
|
|
// } catch (e) {
|
|
// reply.status(500).send()
|
|
// }
|
|
// })
|
|
if (process.env.NODE_ENV === 'production') {
|
|
for (const signal of ['SIGINT', 'SIGTERM']) {
|
|
process.on(signal, (err) => {
|
|
logger.fatal(err, `uncaught exception detected ${signal}`);
|
|
fastify.close().then((err) => {
|
|
process.exit(err ? 1 : 0);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
await fastify.listen({
|
|
host: process.env.NODE_ENV === 'production' ? '0.0.0.0' : 'localhost',
|
|
port,
|
|
});
|
|
|
|
// Notify when keys expires
|
|
redisPub.config('SET', 'notify-keyspace-events', 'Ex');
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
};
|
|
|
|
startServer();
|