This commit is contained in:
@@ -1,100 +0,0 @@
|
||||
const os = require('os');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const ip = require('ip');
|
||||
const { logger, logRequestInfo, ErrorLogger } = require('../config/logs');
|
||||
const packageJson = require('../package.json');
|
||||
const si = require('systeminformation');
|
||||
const fetch = require('node-fetch');
|
||||
|
||||
class SystemReport {
|
||||
static async generate() {
|
||||
const date = new Date();
|
||||
date.setDate(date.getDate() - 1);
|
||||
const previousDate = date.toISOString().split('T')[0];
|
||||
|
||||
const logFile = path.join(__dirname, '..', 'logs', `log-${previousDate}.log`);
|
||||
const logs = fs.readFileSync(logFile, 'utf-8');
|
||||
|
||||
const internalErrors = logs.split('\n').filter(line => /\[38;5;9mInternal-Error/.test(line));
|
||||
|
||||
if (internalErrors.length === 0) {
|
||||
logger.info('No internal errors in yesterday\'s logs. No report will be generated.');
|
||||
return null;
|
||||
}
|
||||
|
||||
function formatUptime(uptime) {
|
||||
const days = Math.floor(uptime / (24 * 60 * 60));
|
||||
uptime %= (24 * 60 * 60);
|
||||
const hours = Math.floor(uptime / (60 * 60));
|
||||
uptime %= (60 * 60);
|
||||
const minutes = Math.floor(uptime / 60);
|
||||
return `${days}d ${hours}h ${minutes}m`;
|
||||
}
|
||||
|
||||
const osInfo = {
|
||||
type: os.type(),
|
||||
platform: os.platform(),
|
||||
arch: os.arch(),
|
||||
release: os.release(),
|
||||
uptime: formatUptime(os.uptime()),
|
||||
loadavg: os.loadavg().map(load => (load / os.cpus().length) * 100)
|
||||
};
|
||||
|
||||
const networkInterfaces = os.networkInterfaces();
|
||||
const serverUptime = os.uptime();
|
||||
const systemLoad = os.loadavg();
|
||||
|
||||
const diskUsage = await si.fsSize();
|
||||
const cpuTemperature = await si.cpuTemperature();
|
||||
|
||||
const userInfo = os.userInfo();
|
||||
|
||||
const systemInfo = {
|
||||
memoryInfo: ((os.totalmem() - os.freemem()) / os.totalmem() * 100).toFixed(2),
|
||||
cpuInfo: (os.cpus().length / os.cpus().length * 100).toFixed(2),
|
||||
diskInfo: ((os.totalmem() - os.freemem()) / os.totalmem() * 100).toFixed(2),
|
||||
ipAddress: ip.address(),
|
||||
cdnVersion: packageJson.version,
|
||||
osInfo: osInfo,
|
||||
userInfo: userInfo,
|
||||
errors: internalErrors,
|
||||
networkInterfaces: networkInterfaces,
|
||||
serverUptime: serverUptime,
|
||||
systemLoad: systemLoad,
|
||||
diskUsage: diskUsage,
|
||||
cpuTemperature: cpuTemperature,
|
||||
};
|
||||
|
||||
const filename = path.join(__dirname, '..', 'report', `report_${previousDate}_${ip.address()}.json`);
|
||||
fs.writeFileSync(filename, JSON.stringify(systemInfo, null, 2));
|
||||
|
||||
logger.info("Preparing to send report...");
|
||||
logger.info("Report:", JSON.stringify(systemInfo, null, 2));
|
||||
|
||||
|
||||
try {
|
||||
const response = await fetch('https://cdn-apollon-p198-61m1.dinawo.fr/api/report/receive', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(systemInfo)
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! status: ${response.status}`);
|
||||
} else {
|
||||
const data = await response.json();
|
||||
logger.info('Report sent successfully. Response data:', data);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
logger.error('Failed to send report. Error:', error);
|
||||
}
|
||||
|
||||
return systemInfo;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = SystemReport;
|
||||
Reference in New Issue
Block a user