mirror of
https://github.com/whyour/qinglong.git
synced 2025-05-23 06:46:09 +08:00
54 lines
1.4 KiB
TypeScript
54 lines
1.4 KiB
TypeScript
import express from 'express';
|
|
import Logger from '../loaders/logger';
|
|
import { metricsService } from './metrics';
|
|
import { Service } from 'typedi';
|
|
import { Server } from 'http';
|
|
|
|
@Service()
|
|
export class HttpServerService {
|
|
private server?: Server = undefined;
|
|
|
|
async initialize(expressApp: express.Application, port: number) {
|
|
try {
|
|
return new Promise((resolve, reject) => {
|
|
this.server = expressApp.listen(port, '0.0.0.0', () => {
|
|
Logger.debug(`✌️ HTTP service started successfully`);
|
|
metricsService.record('http_service_start', 1, {
|
|
port: port.toString(),
|
|
});
|
|
resolve(this.server);
|
|
});
|
|
|
|
this.server?.on('error', (err: Error) => {
|
|
Logger.error('Failed to start HTTP service:', err);
|
|
reject(err);
|
|
});
|
|
});
|
|
} catch (err) {
|
|
Logger.error('Failed to start HTTP service:', err);
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
async shutdown() {
|
|
try {
|
|
if (this.server) {
|
|
await new Promise((resolve) => {
|
|
this.server?.close(() => {
|
|
Logger.debug('HTTP service stopped');
|
|
metricsService.record('http_service_stop', 1);
|
|
resolve(null);
|
|
});
|
|
});
|
|
}
|
|
} catch (err) {
|
|
Logger.error('Error while shutting down HTTP service:', err);
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
getServer() {
|
|
return this.server;
|
|
}
|
|
}
|