Last update
This commit is contained in:
parent
66a842846d
commit
7fcbc4349d
1 changed files with 13 additions and 11 deletions
24
index.js
24
index.js
|
|
@ -12,6 +12,7 @@ const log = require('./scripts/log.js');
|
||||||
const COOLDOWN_MS = 2000;
|
const COOLDOWN_MS = 2000;
|
||||||
const REPORTED_IP_COOLDOWN_MS = 7 * 60 * 60 * 1000;
|
const REPORTED_IP_COOLDOWN_MS = 7 * 60 * 60 * 1000;
|
||||||
const MAX_URL_LENGTH = 2000;
|
const MAX_URL_LENGTH = 2000;
|
||||||
|
const MAIN_DELAY = process.env.NODE_ENV === 'production' ? 2 * 60 * 60 * 1000 : 10 * 1000;
|
||||||
|
|
||||||
const fetchBlockedIPs = async () => {
|
const fetchBlockedIPs = async () => {
|
||||||
try {
|
try {
|
||||||
|
|
@ -30,7 +31,7 @@ const fetchBlockedIPs = async () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const isIPReportedRecently = (ip, reportedIPs) => {
|
const isIPReportedRecently = (ip, reportedIPs) => {
|
||||||
const lastReport = reportedIPs.find(entry => entry.ip === ip && entry.action === 'Reported');
|
const lastReport = reportedIPs.find(entry => entry.ip === ip && (entry.action === 'Reported' || entry.action.startsWith('Failed')));
|
||||||
if (!lastReport) return false;
|
if (!lastReport) return false;
|
||||||
|
|
||||||
const lastTimestamp = new Date(lastReport.timestamp).getTime();
|
const lastTimestamp = new Date(lastReport.timestamp).getTime();
|
||||||
|
|
@ -41,7 +42,7 @@ const isIPReportedRecently = (ip, reportedIPs) => {
|
||||||
|
|
||||||
const reportIP = async (event, url, country, cycleErrorCounts) => {
|
const reportIP = async (event, url, country, cycleErrorCounts) => {
|
||||||
if (!url) {
|
if (!url) {
|
||||||
logToCSV(new Date(), event.rayName, event.clientIP, url, 'Failed - URL too long', country);
|
logToCSV(new Date(), event.rayName, event.clientIP, url, 'Failed - Missing URL', country);
|
||||||
log('fail', `Error while reporting: ${event.clientIP}; URL: ${url}; (Missing URL)`);
|
log('fail', `Error while reporting: ${event.clientIP}; URL: ${url}; (Missing URL)`);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -66,8 +67,8 @@ const reportIP = async (event, url, country, cycleErrorCounts) => {
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err.response) {
|
if (err.response) {
|
||||||
if (err.response.status === 429) {
|
if (err.response.status === 429) {
|
||||||
logToCSV(new Date(), event.rayName, event.clientIP, url, 'Blocked - 429 Too Many Requests', country);
|
logToCSV(new Date(), event.rayName, event.clientIP, url, 'Failed - 429 Too Many Requests', country);
|
||||||
log('warn', `Rate limited (429) while reporting: ${event.clientIP}; URL: ${url};`);
|
log('fail', `Rate limited (429) while reporting: ${event.clientIP}; URL: ${url};`);
|
||||||
cycleErrorCounts.blocked++;
|
cycleErrorCounts.blocked++;
|
||||||
} else {
|
} else {
|
||||||
log('fail', `Error ${err.response.status} while reporting: ${event.clientIP}; URL: ${url}; (${err.response.data})`);
|
log('fail', `Error ${err.response.status} while reporting: ${event.clientIP}; URL: ${url}; (${err.response.data})`);
|
||||||
|
|
@ -83,13 +84,14 @@ const reportIP = async (event, url, country, cycleErrorCounts) => {
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
log('info', 'Starting IP reporting process...');
|
log('info', 'Starting IP reporting process...');
|
||||||
|
let cycleId = 1;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
log('info', '===================== New Reporting Cycle =====================');
|
log('info', '===================== New Reporting Cycle =====================');
|
||||||
|
|
||||||
const blockedIPEvents = await fetchBlockedIPs();
|
const blockedIPEvents = await fetchBlockedIPs();
|
||||||
if (!blockedIPEvents) {
|
if (!blockedIPEvents) {
|
||||||
log('warn', 'No events fetched, skipping cycle...');
|
log('fail', 'No events fetched, skipping cycle...');
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -105,7 +107,7 @@ const reportIP = async (event, url, country, cycleErrorCounts) => {
|
||||||
const country = event.clientCountryName;
|
const country = event.clientCountryName;
|
||||||
|
|
||||||
if (isIPReportedRecently(ip, reportedIPs)) {
|
if (isIPReportedRecently(ip, reportedIPs)) {
|
||||||
log('info', `IP ${ip} was reported recently. Skipping...`);
|
log('info', `IP ${ip} was reported or rate-limited recently. Skipping...`);
|
||||||
cycleSkippedCount++;
|
cycleSkippedCount++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -115,7 +117,7 @@ const reportIP = async (event, url, country, cycleErrorCounts) => {
|
||||||
if (!wasImageRequestLogged(ip, reportedIPs)) {
|
if (!wasImageRequestLogged(ip, reportedIPs)) {
|
||||||
logToCSV(new Date(), event.rayName, ip, url, 'Skipped - Image Request', country);
|
logToCSV(new Date(), event.rayName, ip, url, 'Skipped - Image Request', country);
|
||||||
if (!imageRequestLogged) {
|
if (!imageRequestLogged) {
|
||||||
log('info', 'Skipping image requests in this cycle.');
|
log('info', 'Skipping image requests in this cycle...');
|
||||||
imageRequestLogged = true;
|
imageRequestLogged = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -130,7 +132,7 @@ const reportIP = async (event, url, country, cycleErrorCounts) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log('info', 'Cycle Summary:');
|
log('info', `Cycle Summary [${cycleId}]:`);
|
||||||
log('info', `- Total IPs processed: ${cycleProcessedCount}`);
|
log('info', `- Total IPs processed: ${cycleProcessedCount}`);
|
||||||
log('info', `- Reported IPs: ${cycleReportedCount}`);
|
log('info', `- Reported IPs: ${cycleReportedCount}`);
|
||||||
log('info', `- Skipped IPs: ${cycleSkippedCount}`);
|
log('info', `- Skipped IPs: ${cycleSkippedCount}`);
|
||||||
|
|
@ -140,8 +142,8 @@ const reportIP = async (event, url, country, cycleErrorCounts) => {
|
||||||
log('info', `- Other errors: ${cycleErrorCounts.otherErrors}`);
|
log('info', `- Other errors: ${cycleErrorCounts.otherErrors}`);
|
||||||
log('info', '==================== End of Reporting Cycle ====================');
|
log('info', '==================== End of Reporting Cycle ====================');
|
||||||
|
|
||||||
const delay = process.env.NODE_ENV === 'production' ? 2 * 60 * 60 * 1000 : 10 * 1000;
|
log('info', `Waiting ${formatDelay(MAIN_DELAY)}...`);
|
||||||
log('info', `Waiting ${formatDelay(delay)}...`);
|
cycleId++;
|
||||||
await new Promise(resolve => setTimeout(resolve, delay));
|
await new Promise(resolve => setTimeout(resolve, MAIN_DELAY));
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
Loading…
Add table
Reference in a new issue