forked from seydx/camera.ui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcamera.ui.js
executable file
·122 lines (95 loc) · 3.95 KB
/
camera.ui.js
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/env node
process.title = 'camera.ui';
import fs from 'fs-extra';
import cluster from 'cluster';
import os from 'os';
import path from 'path';
import commander from 'commander';
import { fileURLToPath } from 'url';
import LoggerService from '../src/services/logger/logger.service.js';
import ConfigService from '../src/services/config/config.service.js';
import Interface from '../src/main.js';
let moduleName = 'camera.ui';
let globalInstalled = '1';
let sudoEnabled = '1';
let debugEnabled = '0';
let logTimestamps = '1';
let logColourful = '1';
let storagePath = path.resolve(os.homedir(), '.camera.ui');
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const packageJson = fs.readJsonSync(path.resolve(__dirname, '../package.json'));
commander
.allowUnknownOption()
.option('-D, --debug', 'Turn on debug level logging', () => (debugEnabled = '1'))
.option('-C, --no-color', 'Disable color in logging', () => (logColourful = '0'))
.option('-T, --no-timestamp', 'Do not issue timestamps in logging', () => (logTimestamps = '0'))
.option('--no-sudo', 'Disable sudo for updating through ui', () => (sudoEnabled = '0'))
.option('--no-global', 'Disable global (-g) prefix for updating through ui', () => (globalInstalled = '0'))
.option(
'-S, --storage-path [path]',
'Look for camera.ui files at [path] instead of the default location (~/.camera.ui)',
(p) => (storagePath = p)
)
.parse(process.argv);
// node-telegram-bot-api
process.env.NTBA_FIX_319 = 1;
process.env.NTBA_FIX_350 = 1;
process.env.CUI_SERVICE_MODE = '1';
process.env.CUI_LOG_COLOR = logColourful;
process.env.CUI_LOG_DEBUG = debugEnabled;
process.env.CUI_LOG_TIMESTAMPS = logTimestamps;
process.env.CUI_BASE_PATH = path.resolve(__dirname, '../');
process.env.CUI_STORAGE_PATH = storagePath;
process.env.CUI_STORAGE_CONFIG_FILE = path.resolve(storagePath, 'config.json');
process.env.CUI_STORAGE_DATABASE_PATH = path.resolve(storagePath, 'database');
process.env.CUI_STORAGE_DATABASE_USER_PATH = path.resolve(storagePath, 'database', 'user');
process.env.CUI_STORAGE_DATABASE_FILE = path.resolve(storagePath, 'database', 'database.json');
process.env.CUI_STORAGE_LOG_PATH = path.resolve(storagePath, 'logs');
process.env.CUI_STORAGE_LOG_FILE = path.resolve(storagePath, 'logs', 'camera.ui.log');
process.env.CUI_STORAGE_RECORDINGS_PATH = path.resolve(storagePath, 'recordings');
process.env.CUI_STORAGE_REPORTS_PATH = path.resolve(storagePath, 'reports');
process.env.CUI_MODULE_NAME = moduleName;
process.env.CUI_MODULE_VERSION = packageJson.version;
process.env.CUI_MODULE_GLOBAL = globalInstalled;
process.env.CUI_MODULE_SUDO = sudoEnabled;
process.env.CUI_VERSION = packageJson.version;
const logger = new LoggerService();
const configJson = fs.readJSONSync(process.env.CUI_STORAGE_CONFIG_FILE, { throws: false });
const config = new ConfigService(configJson);
if (cluster.isPrimary) {
const { log } = LoggerService;
let shuttingDown = false;
cluster.on('exit', (worker, code) => {
if (code !== 0 && !worker.exitedAfterDisconnect) {
const worker = cluster.fork();
log.info(`Restarting camera.ui with PID: ${worker.process.pid}`);
}
});
// eslint-disable-next-line no-unused-vars
const signalHandler = (signal, signalNumber) => {
if (shuttingDown) {
return;
}
shuttingDown = true;
log.warn(`Got ${signal}, shutting down camera.ui...`, 'System', 'system');
setTimeout(() => {
// eslint-disable-next-line unicorn/no-process-exit
process.exit(128 + signalNumber);
}, 5000);
cluster.disconnect();
};
const errorHandler = (error) => {
if (error.stack) {
log.info(error.stack);
}
if (!shuttingDown) {
process.kill(process.pid, 'SIGTERM');
}
};
process.on('SIGINT', signalHandler.bind(undefined, 'SIGINT', 2));
process.on('SIGTERM', signalHandler.bind(undefined, 'SIGTERM', 15));
process.on('uncaughtException', errorHandler);
cluster.fork();
} else {
new Interface(logger, config);
}