Repository navigation
Expand file tree
/
Copy pathindex.js
More file actions
98 lines (76 loc) · 2.65 KB
/
Copy pathindex.js
File metadata and controls
98 lines (76 loc) · 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
require('dotenv').config();
const RecorderService = require('./services/recorder/RecorderService');
const UploaderService = require('./services/uploader/UploaderService');
const mqttService = require('./services/mqtt/MqttService');
const migrationService = require('./db/migrationService');
const DatabaseService = require('./services/database/DatabaseService');
const { systemLogger: logger } = require('./utils/logger');
const CleanUpService = require('./services/cleanup/CleanUpService');
const args = process.argv.slice(2);
const mode = args[0] || 'all'; // Default to running both services
async function shutdown(signal) {
logger.warn(`Received ${signal}, shutting down...`);
try {
if (recorderService) {
recorderService.stop();
logger.info('Recorder service stopped successfully');
}
if (cleanupService) {
await cleanupService.stop();
logger.info('Cleanup service stopped successfully');
}
if (uploaderService) {
await uploaderService.stop();
logger.info('Uploader service stopped successfully');
}
await mqttService.disconnect();
DatabaseService.disconnect();
logger.success('Shutdown completed successfully');
process.exit(0);
} catch (error) {
logger.error(`Error during shutdown: ${error.message}`);
process.exit(1);
}
}
process.on('SIGINT', () => shutdown('SIGINT'));
process.on('SIGTERM', () => shutdown('SIGTERM'));
let recorderService = null;
let cleanupService = null;
let uploaderService = null;
function startRecorder() {
recorderService = new RecorderService();
recorderService.startRecording();
logger.success('Recorder service started');
}
async function startCleaner() {
cleanupService = new CleanUpService();
await cleanupService.initialize();
}
async function startUploader() {
uploaderService = new UploaderService();
await uploaderService.initialize();
logger.success('Uploader service started');
}
async function start() {
try {
logger.info(`Starting in mode: ${mode}`);
logger.info('Migrating database...');
await migrationService.runMigrations();
logger.success('Database migrated successfully');
logger.info('Initializing MQTT connection...');
await mqttService.connect();
logger.success('MQTT connection established successfully');
if (mode === 'all' || mode === 'recorder') {
startRecorder();
await startCleaner();
}
if (mode === 'all' || mode === 'uploader') {
await startUploader();
}
logger.success('Startup complete');
} catch (error) {
logger.error(`Error during startup: ${error.message}`);
shutdown('startup-error');
}
}
start()