mirror of
https://github.com/MrUnknownDE/utools.git
synced 2026-04-06 00:32:04 +02:00
56 lines
2.1 KiB
JavaScript
56 lines
2.1 KiB
JavaScript
// backend/maxmind.js
|
|
const geoip = require('@maxmind/geoip2-node');
|
|
const pino = require('pino');
|
|
const Sentry = require("@sentry/node");
|
|
|
|
// Minimaler Logger für dieses Modul
|
|
const logger = pino({ level: process.env.LOG_LEVEL || 'info' });
|
|
|
|
let cityReaderInstance = null;
|
|
let asnReaderInstance = null;
|
|
|
|
async function initializeMaxMind() {
|
|
if (cityReaderInstance && asnReaderInstance) {
|
|
logger.debug('MaxMind databases already loaded.');
|
|
return { cityReader: cityReaderInstance, asnReader: asnReaderInstance };
|
|
}
|
|
|
|
try {
|
|
logger.info('Loading MaxMind databases...');
|
|
const cityDbPath = process.env.GEOIP_CITY_DB || './data/GeoLite2-City.mmdb';
|
|
const asnDbPath = process.env.GEOIP_ASN_DB || './data/GeoLite2-ASN.mmdb';
|
|
logger.info({ cityDbPath, asnDbPath }, 'Database paths');
|
|
|
|
// Verwende Promise.all für paralleles Laden
|
|
const [cityReader, asnReader] = await Promise.all([
|
|
geoip.Reader.open(cityDbPath),
|
|
geoip.Reader.open(asnDbPath)
|
|
]);
|
|
|
|
cityReaderInstance = cityReader;
|
|
asnReaderInstance = asnReader;
|
|
logger.info('MaxMind databases loaded successfully.');
|
|
return { cityReader: cityReaderInstance, asnReader: asnReaderInstance };
|
|
|
|
} catch (error) {
|
|
logger.fatal({ error: error.message, stack: error.stack }, 'Could not initialize MaxMind databases.');
|
|
Sentry.captureException(error);
|
|
// Wirf den Fehler weiter, damit der Serverstart fehlschlägt
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
// Funktion zum Abrufen der Reader (stellt sicher, dass sie initialisiert wurden)
|
|
function getMaxMindReaders() {
|
|
if (!cityReaderInstance || !asnReaderInstance) {
|
|
// Dieser Fall sollte im normalen Betrieb nicht auftreten, da initialize() beim Serverstart aufgerufen wird.
|
|
logger.error('MaxMind readers accessed before initialization!');
|
|
throw new Error('MaxMind readers not initialized. Call initializeMaxMind() first.');
|
|
}
|
|
return { cityReader: cityReaderInstance, asnReader: asnReaderInstance };
|
|
}
|
|
|
|
module.exports = {
|
|
initializeMaxMind,
|
|
getMaxMindReaders,
|
|
}; |