Commit 62aef8a2 authored by nanahira's avatar nanahira

fix domain resolve duplicate

parent fd9d712a
...@@ -3,9 +3,8 @@ ...@@ -3,9 +3,8 @@
"version": "1.0.0", "version": "1.0.0",
"description": "", "description": "",
"scripts": { "scripts": {
"build": "tsc", "start": "ts-node src/inventory.ts",
"start": "node build/inventory.js", "all": "npm start"
"all": "npm run build && npm start"
}, },
"dependencies": { "dependencies": {
"@types/ip": "^1.1.0", "@types/ip": "^1.1.0",
......
...@@ -12,7 +12,6 @@ set -e ...@@ -12,7 +12,6 @@ set -e
#cd .. #cd ..
mkdir -p result mkdir -p result
npm run build
npm start npm start
......
...@@ -74,10 +74,10 @@ class InventoryBuilder { ...@@ -74,10 +74,10 @@ class InventoryBuilder {
} }
} }
async resolveDomain(domain: string, ipv6: boolean) { domainResolveFunctions = new Map<string, ((result: string) => void)[]>();
if (!domain || domain.match(/(\d{1,3}\.){3}\d{1,3}/)) {
return domain; async resolveDomainProcess(domain: string, ipv6: boolean) {
} const cacheKey = `${domain}-${ipv6 ? ':v6' : 'v4'}`;
if (this.resolveCache.has(domain)) { if (this.resolveCache.has(domain)) {
return this.resolveCache.get(domain); return this.resolveCache.get(domain);
} }
...@@ -99,6 +99,30 @@ class InventoryBuilder { ...@@ -99,6 +99,30 @@ class InventoryBuilder {
return resolvedIP; return resolvedIP;
} }
async resolveDomain(domain: string, ipv6: boolean) {
if (!domain || domain.match(/(\d{1,3}\.){3}\d{1,3}/)) {
return domain;
}
return new Promise<string>(async(resolve) => {
const cacheKey = `${domain}-${ipv6 ? ':v6' : ':v4'}`;
if (this.resolveCache.has(cacheKey)) {
resolve(this.resolveCache.get(cacheKey));
} else {
let resolveFunctions = this.domainResolveFunctions.get(cacheKey);
if (!resolveFunctions) {
resolveFunctions = [];
this.domainResolveFunctions.set(cacheKey, resolveFunctions);
const result = await this.resolveDomainProcess(domain, ipv6);
resolve(result);
resolveFunctions.forEach(f => f(result));
this.domainResolveFunctions.delete(cacheKey);
} else {
resolveFunctions.push(resolve);
}
}
})
}
async load(sheetName: string): Promise<Record<string, any>[]> { async load(sheetName: string): Promise<Record<string, any>[]> {
const data = await fs.promises.readFile(path.join('data', `内网互联计划 - ${sheetName}.csv`)); const data = await fs.promises.readFile(path.join('data', `内网互联计划 - ${sheetName}.csv`));
// @ts-ignore // @ts-ignore
...@@ -422,7 +446,7 @@ class InventoryBuilder { ...@@ -422,7 +446,7 @@ class InventoryBuilder {
if (!localGateway.ipv6 && !remoteGateway.ipv4 && remoteGateway.ipv6) { if (!localGateway.ipv6 && !remoteGateway.ipv4 && remoteGateway.ipv6) {
remoteAddress = null; remoteAddress = null;
} }
const resolvedRemoteAddress = remoteAddress ? await this.resolveDomain(remoteAddress, !remoteGateway.ipv4 && remoteGateway.ipv6) : null; const resolvedRemoteAddress = remoteAddress ? await this.resolveDomain(remoteAddress, (!remoteGateway.ipv4 || localGateway.ipv6) && remoteGateway.ipv6) : null;
const remoteLocalAddress = remote.address; const remoteLocalAddress = remote.address;
const remoteNextMark = remote.nextMark; const remoteNextMark = remote.nextMark;
const remoteDestMark = remote.destMark; const remoteDestMark = remote.destMark;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment