Skip to content
Snippets Groups Projects
service.ts 1.38 KiB
import { api, getConnection, getTrashCollection } from '@rocket.chat/core-services';
import { Logger } from '@rocket.chat/logger';
import { broker } from '@rocket.chat/network-broker';
import { startTracing } from '@rocket.chat/tracing';
import polka from 'polka';

import { registerServiceModels } from '../../../../apps/meteor/ee/server/lib/registerServiceModels';
import { DatabaseWatcher } from '../../../../apps/meteor/server/database/DatabaseWatcher';
import { StreamHub } from './StreamHub';

const PORT = process.env.PORT || 3035;

(async () => {
	const { db, client } = await getConnection();

	startTracing({ service: 'stream-hub-service', db: client });

	registerServiceModels(db, await getTrashCollection());

	api.setBroker(broker);

	// TODO having to import Logger to pass as a param is a temporary solution. logger should come from the service (either from broker or api)
	const watcher = new DatabaseWatcher({ db, logger: Logger });

	api.registerService(new StreamHub(watcher, Logger));

	await api.start();

	polka()
		.get('/health', async function (_req, res) {
			try {
				await api.nodeList();

				if (watcher.isLastDocDelayed()) {
					throw new Error('No real time data received recently');
				}
			} catch (err) {
				console.error('Service not healthy', err);

				res.writeHead(500);
				res.end('not healthy');
				return;
			}

			res.end('ok');
		})
		.listen(PORT);
})();