@boxitworld/commons-backend 1.0.8 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/batch-locker/db/database.d.ts +1 -1
- package/dist/batch-locker/db/database.d.ts.map +1 -1
- package/dist/batch-locker/db/database.js +6 -5
- package/dist/batch-locker/db/database.js.map +1 -1
- package/dist/batch-locker/index.d.ts +0 -2
- package/dist/batch-locker/index.d.ts.map +1 -1
- package/dist/batch-locker/index.js +21 -32
- package/dist/batch-locker/index.js.map +1 -1
- package/dist/batch-locker/systemInfo/systemInfo.d.ts +14 -0
- package/dist/batch-locker/systemInfo/systemInfo.d.ts.map +1 -0
- package/dist/batch-locker/systemInfo/systemInfo.js +241 -0
- package/dist/batch-locker/systemInfo/systemInfo.js.map +1 -0
- package/dist/batch-locker/systemInfo/systemInfoBatchService.d.ts +5 -0
- package/dist/batch-locker/systemInfo/systemInfoBatchService.d.ts.map +1 -0
- package/dist/batch-locker/systemInfo/systemInfoBatchService.js +23 -0
- package/dist/batch-locker/systemInfo/systemInfoBatchService.js.map +1 -0
- package/dist/helpers/logs.d.ts +3 -0
- package/dist/helpers/logs.d.ts.map +1 -0
- package/dist/helpers/logs.js +20 -0
- package/dist/helpers/logs.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/batch-locker/db/database.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/batch-locker/db/database.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,SAAS,QAAa,OAAO,CAAC,OAAO,CAEjD,CAAC;AAEF,eAAO,MAAM,aAAa,qCAAkB,CAAC"}
|
|
@@ -3,27 +3,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getConnection = exports.connectDB = void 0;
|
|
4
4
|
const sequelize_1 = require("./sequelize");
|
|
5
5
|
const models_1 = require("./models");
|
|
6
|
+
const logs_1 = require("../../helpers/logs");
|
|
6
7
|
let isConnected = false;
|
|
7
|
-
const connectSQL = async (
|
|
8
|
+
const connectSQL = async () => {
|
|
8
9
|
try {
|
|
9
10
|
if (isConnected) {
|
|
10
11
|
return true;
|
|
11
12
|
}
|
|
12
13
|
await sequelize_1.sequelize.authenticate();
|
|
13
14
|
await (0, models_1.initializeModels)();
|
|
14
|
-
logs(`🎉 SQL Server db connected`);
|
|
15
|
+
(0, logs_1.logs)(`🎉 SQL Server db connected`);
|
|
15
16
|
isConnected = true;
|
|
16
17
|
return true;
|
|
17
18
|
}
|
|
18
19
|
catch (error) {
|
|
19
20
|
let errorMsg = (error instanceof Error) ? error.message : String(error);
|
|
20
|
-
logs(`❌ SQL db connection error: ${errorMsg}`);
|
|
21
|
+
(0, logs_1.logs)(`❌ SQL db connection error: ${errorMsg}`);
|
|
21
22
|
console.error('Full error:', error);
|
|
22
23
|
return false;
|
|
23
24
|
}
|
|
24
25
|
};
|
|
25
|
-
const connectDB = async (
|
|
26
|
-
return await connectSQL(
|
|
26
|
+
const connectDB = async () => {
|
|
27
|
+
return await connectSQL();
|
|
27
28
|
};
|
|
28
29
|
exports.connectDB = connectDB;
|
|
29
30
|
const getConnection = () => sequelize_1.sequelize;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/batch-locker/db/database.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AACxC,qCAA4C;
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/batch-locker/db/database.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AACxC,qCAA4C;AAC5C,6CAA0C;AAE1C,IAAI,WAAW,GAAG,KAAK,CAAC;AAGxB,MAAM,UAAU,GAAG,KAAK,IAAsB,EAAE;IAC5C,IAAI,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,qBAAS,CAAC,YAAY,EAAE,CAAC;QAG/B,MAAM,IAAA,yBAAgB,GAAE,CAAC;QAEzB,IAAA,WAAI,EAAC,4BAA4B,CAAC,CAAC;QACnC,WAAW,GAAG,IAAI,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,QAAQ,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,IAAA,WAAI,EAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC,CAAC;AAEK,MAAM,SAAS,GAAG,KAAK,IAAsB,EAAE;IAClD,OAAO,MAAM,UAAU,EAAE,CAAC;AAC9B,CAAC,CAAC;AAFW,QAAA,SAAS,aAEpB;AAEK,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,qBAAS,CAAC;AAAhC,QAAA,aAAa,iBAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/batch-locker/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/batch-locker/index.ts"],"names":[],"mappings":"AAYA,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmB;IAC1C,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAA+B;IAEpD,OAAO;WAIO,WAAW,IAAI,gBAAgB;YAO/B,sBAAsB;YAatB,kBAAkB;IAShC,OAAO,CAAC,yBAAyB;YAMnB,kBAAkB;YAmClB,YAAY;IAsD1B,OAAO,CAAC,cAAc;IAQT,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAsDlD,iBAAiB;IA4DlB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAczC,oBAAoB,IAAI;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAU1F,gBAAgB,IAAI,IAAI;IAMxB,OAAO,IAAI,IAAI;YAOR,UAAU;CAUzB"}
|
|
@@ -3,29 +3,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.BatchSyncService =
|
|
6
|
+
exports.BatchSyncService = void 0;
|
|
7
7
|
const models_1 = require("./db/models");
|
|
8
8
|
const batch_1 = require("../interfaces/shared/batch");
|
|
9
9
|
const axios_1 = __importDefault(require("axios"));
|
|
10
10
|
const const_1 = require("./const");
|
|
11
11
|
const tsyringe_1 = require("tsyringe");
|
|
12
|
+
const systemInfoBatchService_1 = require("./systemInfo/systemInfoBatchService");
|
|
13
|
+
const logs_1 = require("../helpers/logs");
|
|
12
14
|
const { IDPLATAFORMA } = process.env;
|
|
13
|
-
const sqlDateFormat = (date, type) => {
|
|
14
|
-
const newDate = new Date(date).toLocaleString("en-US").replace(",", "");
|
|
15
|
-
if (type) {
|
|
16
|
-
const sqlDate = new Date(date);
|
|
17
|
-
return `${sqlDate.getFullYear()}-${(sqlDate.getMonth() + 1).toString().padStart(2, "0")}-${sqlDate.getDate().toString().padStart(2, "0")} ${sqlDate.getHours().toString().padStart(2, "0")}:${sqlDate.getMinutes().toString().padStart(2, "0")}:${sqlDate.getSeconds().toString().padStart(2, "0")}`;
|
|
18
|
-
}
|
|
19
|
-
return newDate;
|
|
20
|
-
};
|
|
21
|
-
exports.sqlDateFormat = sqlDateFormat;
|
|
22
|
-
const logs = (log, type) => {
|
|
23
|
-
if (type)
|
|
24
|
-
console.log(log);
|
|
25
|
-
else
|
|
26
|
-
console.log(`${(0, exports.sqlDateFormat)(new Date())} - ${log}`);
|
|
27
|
-
};
|
|
28
|
-
exports.logs = logs;
|
|
29
15
|
class BatchSyncService {
|
|
30
16
|
constructor() {
|
|
31
17
|
this.processingTables = new Set();
|
|
@@ -81,7 +67,7 @@ class BatchSyncService {
|
|
|
81
67
|
}
|
|
82
68
|
await axios_1.default.post(systemCfg.endpoint, this.systemInfoQueue.data);
|
|
83
69
|
this.systemInfoQueue = null;
|
|
84
|
-
(0,
|
|
70
|
+
(0, logs_1.logs)(`✅ System info sent successfully from queue`);
|
|
85
71
|
}
|
|
86
72
|
catch (error) {
|
|
87
73
|
const queue = this.systemInfoQueue;
|
|
@@ -90,11 +76,11 @@ class BatchSyncService {
|
|
|
90
76
|
}
|
|
91
77
|
queue.retryCount++;
|
|
92
78
|
if (queue.retryCount >= this.maxRetries) {
|
|
93
|
-
(0,
|
|
79
|
+
(0, logs_1.logs)(`❌ Max retries reached for system info, discarding...`);
|
|
94
80
|
this.systemInfoQueue = null;
|
|
95
81
|
}
|
|
96
82
|
else {
|
|
97
|
-
(0,
|
|
83
|
+
(0, logs_1.logs)(`🔄 Retrying system info sync (${queue.retryCount}/${this.maxRetries})`);
|
|
98
84
|
}
|
|
99
85
|
}
|
|
100
86
|
}
|
|
@@ -146,29 +132,29 @@ class BatchSyncService {
|
|
|
146
132
|
throw new Error(`Table ${tableName} is not configured for sync`);
|
|
147
133
|
}
|
|
148
134
|
if (this.processingTables.has(tableName)) {
|
|
149
|
-
(0,
|
|
135
|
+
(0, logs_1.logs)(`⚠️ Table ${tableName} is already being processed`);
|
|
150
136
|
return;
|
|
151
137
|
}
|
|
152
138
|
try {
|
|
153
139
|
this.processingTables.add(tableName);
|
|
154
140
|
if (tableName === 'system') {
|
|
155
141
|
await this.processSystemInfo(Uuid);
|
|
156
|
-
(0,
|
|
142
|
+
(0, logs_1.logs)(`✅ Successfully synced system info`);
|
|
157
143
|
return;
|
|
158
144
|
}
|
|
159
145
|
const batch = await this.getOrCreateBatchRecord(tableName);
|
|
160
146
|
if (batch.status === batch_1.BatchStatus.PROCESSING) {
|
|
161
|
-
(0,
|
|
147
|
+
(0, logs_1.logs)(`⚠️ Table ${tableName} is already being processed`);
|
|
162
148
|
return;
|
|
163
149
|
}
|
|
164
150
|
await batch.update({ status: batch_1.BatchStatus.PROCESSING });
|
|
165
151
|
const { endpoint, batchSize } = const_1.TABLES_TO_SYNC[tableName];
|
|
166
152
|
await this.processBatch(tableName, batch, batch.lastProcessedId, endpoint, batchSize);
|
|
167
|
-
(0,
|
|
153
|
+
(0, logs_1.logs)(`✅ Successfully synced table ${tableName}`);
|
|
168
154
|
}
|
|
169
155
|
catch (error) {
|
|
170
156
|
const msg = error instanceof Error ? error.message : String(error);
|
|
171
|
-
(0,
|
|
157
|
+
(0, logs_1.logs)(`❌ Error syncing table ${tableName}: ${msg}`);
|
|
172
158
|
throw error;
|
|
173
159
|
}
|
|
174
160
|
finally {
|
|
@@ -180,7 +166,7 @@ class BatchSyncService {
|
|
|
180
166
|
const service = await this.getService('SystemInfoBatchService');
|
|
181
167
|
let records = await service.getRecords(0, 1);
|
|
182
168
|
if (records.length === 0) {
|
|
183
|
-
(0,
|
|
169
|
+
(0, logs_1.logs)(`⚠️ No system info available`);
|
|
184
170
|
return;
|
|
185
171
|
}
|
|
186
172
|
records[0].IdPlataforma = IDPLATAFORMA;
|
|
@@ -192,7 +178,7 @@ class BatchSyncService {
|
|
|
192
178
|
timestamp: Date.now(),
|
|
193
179
|
retryCount: 0
|
|
194
180
|
};
|
|
195
|
-
(0,
|
|
181
|
+
(0, logs_1.logs)(`🔄 No network - system info saved in memory queue`);
|
|
196
182
|
return;
|
|
197
183
|
}
|
|
198
184
|
console.log('records', records);
|
|
@@ -201,7 +187,7 @@ class BatchSyncService {
|
|
|
201
187
|
throw new Error('System table not configured');
|
|
202
188
|
}
|
|
203
189
|
await axios_1.default.post(systemCfg.endpoint, { logs: records, userId: 1 });
|
|
204
|
-
(0,
|
|
190
|
+
(0, logs_1.logs)(`✅ System info sent successfully`);
|
|
205
191
|
}
|
|
206
192
|
catch (error) {
|
|
207
193
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
@@ -214,11 +200,11 @@ class BatchSyncService {
|
|
|
214
200
|
timestamp: Date.now(),
|
|
215
201
|
retryCount: 0
|
|
216
202
|
};
|
|
217
|
-
(0,
|
|
203
|
+
(0, logs_1.logs)(`🔄 Network error - system info saved in memory queue: ${errorMessage}`);
|
|
218
204
|
}
|
|
219
205
|
}
|
|
220
206
|
else {
|
|
221
|
-
(0,
|
|
207
|
+
(0, logs_1.logs)(`❌ Error processing system info: ${errorMessage}`);
|
|
222
208
|
throw error;
|
|
223
209
|
}
|
|
224
210
|
}
|
|
@@ -231,7 +217,7 @@ class BatchSyncService {
|
|
|
231
217
|
}
|
|
232
218
|
catch (error) {
|
|
233
219
|
const msg = error instanceof Error ? error.message : String(error);
|
|
234
|
-
(0,
|
|
220
|
+
(0, logs_1.logs)(`❌ Error in batch sync for table ${table}: ${msg}`);
|
|
235
221
|
}
|
|
236
222
|
}
|
|
237
223
|
}
|
|
@@ -245,7 +231,7 @@ class BatchSyncService {
|
|
|
245
231
|
}
|
|
246
232
|
clearSystemQueue() {
|
|
247
233
|
this.systemInfoQueue = null;
|
|
248
|
-
(0,
|
|
234
|
+
(0, logs_1.logs)('🧹 System queue cleared manually');
|
|
249
235
|
}
|
|
250
236
|
destroy() {
|
|
251
237
|
if (this.retryInterval) {
|
|
@@ -255,6 +241,9 @@ class BatchSyncService {
|
|
|
255
241
|
}
|
|
256
242
|
async getService(serviceName) {
|
|
257
243
|
try {
|
|
244
|
+
if (serviceName === 'SystemInfoBatchService') {
|
|
245
|
+
return new systemInfoBatchService_1.SystemInfoBatchService();
|
|
246
|
+
}
|
|
258
247
|
return tsyringe_1.container.resolve(serviceName);
|
|
259
248
|
}
|
|
260
249
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/batch-locker/index.ts"],"names":[],"mappings":";;;;;;AAAA,wCAAoC;AACpC,sDAAyD;AACzD,kDAA0B;AAC1B,mCAAyC;AACzC,uCAAqC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/batch-locker/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SystemInfo } from '../../interfaces/shared/system';
|
|
2
|
+
export declare class SystemInfoService {
|
|
3
|
+
static getSystemInfo(): Promise<SystemInfo>;
|
|
4
|
+
private static getMemoryInfo;
|
|
5
|
+
private static getCpuInfo;
|
|
6
|
+
private static getDiskInfo;
|
|
7
|
+
private static getDiskInfoWindows;
|
|
8
|
+
private static getDiskInfoUnix;
|
|
9
|
+
private static getBatteryInfo;
|
|
10
|
+
private static getBatteryInfoWindows;
|
|
11
|
+
private static getBatteryInfoMac;
|
|
12
|
+
private static getBatteryInfoLinux;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=systemInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemInfo.d.ts","sourceRoot":"","sources":["../../../src/batch-locker/systemInfo/systemInfo.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAK5D,qBAAa,iBAAiB;WACR,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;mBAuBnC,aAAa;mBAcb,UAAU;mBAyBV,WAAW;mBAkBX,kBAAkB;mBAkClB,eAAe;mBA0Bf,cAAc;mBAed,qBAAqB;mBAqBrB,iBAAiB;mBAoBjB,mBAAmB;CAiBzC"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SystemInfoService = void 0;
|
|
37
|
+
const os = __importStar(require("os"));
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const util_1 = require("util");
|
|
40
|
+
const child_process_1 = require("child_process");
|
|
41
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
42
|
+
class SystemInfoService {
|
|
43
|
+
static async getSystemInfo() {
|
|
44
|
+
const [memory, cpu, disk, battery] = await Promise.all([
|
|
45
|
+
this.getMemoryInfo(),
|
|
46
|
+
this.getCpuInfo(),
|
|
47
|
+
this.getDiskInfo(),
|
|
48
|
+
this.getBatteryInfo()
|
|
49
|
+
]);
|
|
50
|
+
const base = {
|
|
51
|
+
memory,
|
|
52
|
+
cpu,
|
|
53
|
+
disk,
|
|
54
|
+
system: {
|
|
55
|
+
platform: os.platform(),
|
|
56
|
+
version: os.version(),
|
|
57
|
+
hostname: os.hostname(),
|
|
58
|
+
uptime: os.uptime()
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
return battery !== undefined ? { ...base, battery } : base;
|
|
62
|
+
}
|
|
63
|
+
static async getMemoryInfo() {
|
|
64
|
+
const total = os.totalmem();
|
|
65
|
+
const free = os.freemem();
|
|
66
|
+
const used = total - free;
|
|
67
|
+
const usagePercent = (used / total) * 100;
|
|
68
|
+
return {
|
|
69
|
+
total,
|
|
70
|
+
free,
|
|
71
|
+
used,
|
|
72
|
+
usagePercent: Math.round(usagePercent * 100) / 100
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
static async getCpuInfo() {
|
|
76
|
+
const cpus = os.cpus();
|
|
77
|
+
const loadAverage = os.loadavg();
|
|
78
|
+
let totalIdle = 0;
|
|
79
|
+
let totalTick = 0;
|
|
80
|
+
cpus.forEach(cpu => {
|
|
81
|
+
for (const type in cpu.times) {
|
|
82
|
+
totalTick += cpu.times[type];
|
|
83
|
+
}
|
|
84
|
+
totalIdle += cpu.times.idle;
|
|
85
|
+
});
|
|
86
|
+
const usage = 100 - ~~(100 * totalIdle / totalTick);
|
|
87
|
+
return {
|
|
88
|
+
model: cpus[0]?.model ?? 'Unknown',
|
|
89
|
+
cores: cpus.length,
|
|
90
|
+
usage,
|
|
91
|
+
loadAverage
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
static async getDiskInfo() {
|
|
95
|
+
try {
|
|
96
|
+
if (os.platform() === 'win32') {
|
|
97
|
+
return await this.getDiskInfoWindows();
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
return await this.getDiskInfoUnix();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.error('Error getting disk info:', error);
|
|
105
|
+
return {
|
|
106
|
+
total: 0,
|
|
107
|
+
free: 0,
|
|
108
|
+
used: 0,
|
|
109
|
+
usagePercent: 0
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
static async getDiskInfoWindows() {
|
|
114
|
+
try {
|
|
115
|
+
const { stdout } = await execAsync('wmic logicaldisk get size,freespace,caption');
|
|
116
|
+
const lines = stdout.trim().split('\n');
|
|
117
|
+
let totalSize = 0;
|
|
118
|
+
let totalFree = 0;
|
|
119
|
+
for (let i = 1; i < lines.length; i++) {
|
|
120
|
+
const line = (lines[i] ?? '').trim();
|
|
121
|
+
if (line) {
|
|
122
|
+
const parts = line.split(/\s+/);
|
|
123
|
+
if (parts.length >= 3) {
|
|
124
|
+
const free = parseInt(parts[1] ?? '0') || 0;
|
|
125
|
+
const size = parseInt(parts[2] ?? '0') || 0;
|
|
126
|
+
totalFree += free;
|
|
127
|
+
totalSize += size;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const used = totalSize - totalFree;
|
|
132
|
+
const usagePercent = totalSize > 0 ? (used / totalSize) * 100 : 0;
|
|
133
|
+
return {
|
|
134
|
+
total: totalSize,
|
|
135
|
+
free: totalFree,
|
|
136
|
+
used,
|
|
137
|
+
usagePercent: Math.round(usagePercent * 100) / 100
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
return { total: 0, free: 0, used: 0, usagePercent: 0 };
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
static async getDiskInfoUnix() {
|
|
145
|
+
try {
|
|
146
|
+
const { stdout } = await execAsync('df -k /');
|
|
147
|
+
const lines = stdout.trim().split('\n');
|
|
148
|
+
const dataLine = (lines[1] ?? '').trim();
|
|
149
|
+
if (!dataLine) {
|
|
150
|
+
return { total: 0, free: 0, used: 0, usagePercent: 0 };
|
|
151
|
+
}
|
|
152
|
+
const data = dataLine.split(/\s+/);
|
|
153
|
+
const total = (parseInt(data[1] ?? '0') || 0) * 1024;
|
|
154
|
+
const used = (parseInt(data[2] ?? '0') || 0) * 1024;
|
|
155
|
+
const free = (parseInt(data[3] ?? '0') || 0) * 1024;
|
|
156
|
+
const usagePercent = total > 0 ? (used / total) * 100 : 0;
|
|
157
|
+
return {
|
|
158
|
+
total,
|
|
159
|
+
free,
|
|
160
|
+
used,
|
|
161
|
+
usagePercent: Math.round(usagePercent * 100) / 100
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
return { total: 0, free: 0, used: 0, usagePercent: 0 };
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
static async getBatteryInfo() {
|
|
169
|
+
try {
|
|
170
|
+
if (os.platform() === 'win32') {
|
|
171
|
+
return await this.getBatteryInfoWindows();
|
|
172
|
+
}
|
|
173
|
+
else if (os.platform() === 'darwin') {
|
|
174
|
+
return await this.getBatteryInfoMac();
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
return await this.getBatteryInfoLinux();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
console.error('Error getting battery info:', error);
|
|
182
|
+
return undefined;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
static async getBatteryInfoWindows() {
|
|
186
|
+
try {
|
|
187
|
+
const { stdout } = await execAsync('wmic path Win32_Battery get BatteryStatus,EstimatedChargeRemaining');
|
|
188
|
+
const lines = stdout.trim().split('\n');
|
|
189
|
+
if (lines.length > 1) {
|
|
190
|
+
const data = (lines[1] ?? '').trim().split(/\s+/);
|
|
191
|
+
const status = parseInt(data[0] ?? '0');
|
|
192
|
+
const level = parseInt(data[1] ?? '0');
|
|
193
|
+
return {
|
|
194
|
+
level,
|
|
195
|
+
charging: status === 2
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
return undefined;
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
static async getBatteryInfoMac() {
|
|
205
|
+
try {
|
|
206
|
+
const { stdout } = await execAsync('pmset -g batt');
|
|
207
|
+
const match = stdout.match(/(\d+)%.*?(\w+)/);
|
|
208
|
+
if (match) {
|
|
209
|
+
const level = parseInt(match[1] ?? '0');
|
|
210
|
+
const charging = (match[2] ?? '').includes('charging');
|
|
211
|
+
return {
|
|
212
|
+
level,
|
|
213
|
+
charging
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
return undefined;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
static async getBatteryInfoLinux() {
|
|
223
|
+
try {
|
|
224
|
+
const batteryPath = '/sys/class/power_supply/BAT0';
|
|
225
|
+
if (fs.existsSync(batteryPath)) {
|
|
226
|
+
const capacity = fs.readFileSync(`${batteryPath}/capacity`, 'utf8').trim();
|
|
227
|
+
const status = fs.readFileSync(`${batteryPath}/status`, 'utf8').trim();
|
|
228
|
+
return {
|
|
229
|
+
level: parseInt(capacity),
|
|
230
|
+
charging: status === 'Charging'
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
return undefined;
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
return undefined;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
exports.SystemInfoService = SystemInfoService;
|
|
241
|
+
//# sourceMappingURL=systemInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemInfo.js","sourceRoot":"","sources":["../../../src/batch-locker/systemInfo/systemInfo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemInfoBatchService.d.ts","sourceRoot":"","sources":["../../../src/batch-locker/systemInfo/systemInfoBatchService.ts"],"names":[],"mappings":"AAIA,qBAAa,sBAAsB;IACpB,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;CAgB1C;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SystemInfoBatchService = void 0;
|
|
4
|
+
const systemInfo_1 = require("./systemInfo");
|
|
5
|
+
class SystemInfoBatchService {
|
|
6
|
+
async getRecords() {
|
|
7
|
+
try {
|
|
8
|
+
const systemInfo = await systemInfo_1.SystemInfoService.getSystemInfo();
|
|
9
|
+
return [{
|
|
10
|
+
id: Date.now(),
|
|
11
|
+
timestamp: new Date().toISOString(),
|
|
12
|
+
...systemInfo
|
|
13
|
+
}];
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
console.error('Error getting system info:', error);
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.SystemInfoBatchService = SystemInfoBatchService;
|
|
22
|
+
exports.default = SystemInfoBatchService;
|
|
23
|
+
//# sourceMappingURL=systemInfoBatchService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemInfoBatchService.js","sourceRoot":"","sources":["../../../src/batch-locker/systemInfo/systemInfoBatchService.ts"],"names":[],"mappings":";;;AAAA,6CAAiD;AAIjD,MAAa,sBAAsB;IAC1B,KAAK,CAAC,UAAU;QACrB,IAAI,CAAC;YAGH,MAAM,UAAU,GAAG,MAAM,8BAAiB,CAAC,aAAa,EAAE,CAAC;YAE3D,OAAO,CAAC;oBACN,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;oBACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,GAAG,UAAU;iBACd,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACnD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAjBD,wDAiBC;AAED,kBAAe,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/helpers/logs.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,GAAI,MAAM,GAAG,EAAE,OAAO,MAAM,WAQnD,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,KAAK,GAAG,EAAE,OAAO,MAAM,SAK3C,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logs = exports.sqlDateFormat = void 0;
|
|
4
|
+
const sqlDateFormat = (date, type) => {
|
|
5
|
+
const newDate = new Date(date).toLocaleString("en-US").replace(",", "");
|
|
6
|
+
if (type) {
|
|
7
|
+
const sqlDate = new Date(date);
|
|
8
|
+
return `${sqlDate.getFullYear()}-${(sqlDate.getMonth() + 1).toString().padStart(2, "0")}-${sqlDate.getDate().toString().padStart(2, "0")} ${sqlDate.getHours().toString().padStart(2, "0")}:${sqlDate.getMinutes().toString().padStart(2, "0")}:${sqlDate.getSeconds().toString().padStart(2, "0")}`;
|
|
9
|
+
}
|
|
10
|
+
return newDate;
|
|
11
|
+
};
|
|
12
|
+
exports.sqlDateFormat = sqlDateFormat;
|
|
13
|
+
const logs = (log, type) => {
|
|
14
|
+
if (type)
|
|
15
|
+
console.log(log);
|
|
16
|
+
else
|
|
17
|
+
console.log(`${(0, exports.sqlDateFormat)(new Date())} - ${log}`);
|
|
18
|
+
};
|
|
19
|
+
exports.logs = logs;
|
|
20
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/helpers/logs.ts"],"names":[],"mappings":";;;AACO,MAAM,aAAa,GAAG,CAAC,IAAS,EAAE,IAAa,EAAE,EAAE;IACtD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACxE,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACvS,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAA;AARU,QAAA,aAAa,iBAQvB;AAEM,MAAM,IAAI,GAAG,CAAC,GAAQ,EAAE,IAAa,EAAE,EAAE;IAE9C,IAAI,IAAI;QAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;QACtB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAA,qBAAa,EAAC,IAAI,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE5D,CAAC,CAAA;AALY,QAAA,IAAI,QAKhB"}
|