diff options
-rw-r--r-- | mx-aaaa/README.md | 3 | ||||
-rw-r--r-- | mx-aaaa/modules/mx-aaaa.js | 12 | ||||
-rw-r--r-- | mx-aaaa/resolve-mx-aaaa.css | 4 | ||||
-rw-r--r-- | mx-aaaa/resolve-mx-aaaa.html | 2 | ||||
-rw-r--r-- | mx-aaaa/resolve-mx-aaaa.js | 59 |
5 files changed, 54 insertions, 26 deletions
diff --git a/mx-aaaa/README.md b/mx-aaaa/README.md index 243875b..1868097 100644 --- a/mx-aaaa/README.md +++ b/mx-aaaa/README.md @@ -6,4 +6,5 @@ https://dxdxdt.github.io/mx-aaaa  -Made to track progress of major service providers' transition to IPv6. +Made to track progress of major service providers' transition to IPv6. Try the +list from https://gist.github.com/tbrianjones/5992856. 5% as of August 2024. diff --git a/mx-aaaa/modules/mx-aaaa.js b/mx-aaaa/modules/mx-aaaa.js index 807f691..ae26594 100644 --- a/mx-aaaa/modules/mx-aaaa.js +++ b/mx-aaaa/modules/mx-aaaa.js @@ -135,10 +135,13 @@ export class ResolveMXAAAA { } // Get all MX + let i = 0; for (const domain of list) { const q_mx = await resolver.resolve('MX', domain); let has_a = 0, has_aaaa = 0; + this.onresolve('start', { domain: domain }, ret); + for (let mx of q_mx) { // don't need the number part const d = mx.search(/\s+/); @@ -183,6 +186,15 @@ export class ResolveMXAAAA { ret.counts.has_a += has_a; ret.counts.has_aaaa += has_aaaa; + i += 1; + + this.onresolve('end', { + domain: domain, + progress: { + cur: i, + cnt: list.length + } + }, ret); } return ret; diff --git a/mx-aaaa/resolve-mx-aaaa.css b/mx-aaaa/resolve-mx-aaaa.css index 43d7db2..47691c4 100644 --- a/mx-aaaa/resolve-mx-aaaa.css +++ b/mx-aaaa/resolve-mx-aaaa.css @@ -6,6 +6,10 @@ div.domainCard { border-radius: 1ch; } +div.beigeDomainCard { + background-color: beige; +} + div.redDomainCard { background-color: red; } diff --git a/mx-aaaa/resolve-mx-aaaa.html b/mx-aaaa/resolve-mx-aaaa.html index d9d3082..bd520e2 100644 --- a/mx-aaaa/resolve-mx-aaaa.html +++ b/mx-aaaa/resolve-mx-aaaa.html @@ -32,7 +32,7 @@ </table> <div> <h2>Output</h2> - <pre id="output"></pre> + <pre id="output" contenteditable></pre> </div> </body> diff --git a/mx-aaaa/resolve-mx-aaaa.js b/mx-aaaa/resolve-mx-aaaa.js index 870626a..76dfd3b 100644 --- a/mx-aaaa/resolve-mx-aaaa.js +++ b/mx-aaaa/resolve-mx-aaaa.js @@ -6,6 +6,27 @@ const rt_output = document.getElementById('output'); const i_txtlist = document.getElementById('txtlist'); const rt_hlist = document.getElementById('hlist'); +let progressCounter = 0; +let progress = { + cur: 0, + cnt: 0 +}; + +function doProgressRender () { + const dots = '.'.repeat(progressCounter); + let progressStr; + + if (progress.cnt > 0) { + const percent = (progress.cur / progress.cnt * 100).toFixed(2); + progressStr = `(${progress.cur}/${progress.cnt} ${percent})`; + } + else { + progressStr = ''; + } + rt_status.innerText = `in progress ${progressStr} ${dots}`; + progressCounter = (progressCounter + 1) % 4; +} + function onresolvereducer (what, obj, map) { try { const cnt_mx = map.mxmap[obj.domain].mx.length; @@ -19,21 +40,21 @@ function onresolvereducer (what, obj, map) { else if ((cnt_a > 0 && cnt_mx !== cnt_a) || (cnt_aaaa > 0 && cnt_mx !== cnt_aaaa)) { - return ['redDomainCard', 'some mx missing']; + return 'redDomainCard'; } else if (cnt_aaaa > 0) { if (cnt_a > 0) { - return ['greenDomainCard', 'dual stack']; + return 'greenDomainCard'; } else { - return ['magentaDomainCard', 'ipv6 only']; + return 'magentaDomainCard'; } } else if (cnt_a > 0) { - return ['yellowDomainCard', 'ipv4 only']; + return 'yellowDomainCard'; } else { - return ['redDomainCard', 'no a or aaaa']; + return 'redDomainCard'; } } @@ -42,23 +63,21 @@ function onresolvereducer (what, obj, map) { const statusLine = card.getElementsByClassName('domainStatus')[0]; statusLine.innerText = `mx: ${cnt_mx}, a: ${cnt_a}, aaaa: ${cnt_aaaa}`; - switch (what) { - case 'a': - case 'aaaa': + + if (what === 'end') { const d = determineCard(); + if (d) { - card.classList = `domainCard ${d[0]}`; - statusLine.innerText += ` (${d[1]})`; + card.classList = `domainCard ${d}`; } - break; + progress = obj.progress; } - } catch (e) { console.error(e); } finally { - rt_output.innerText += what + ': ' + JSON.stringify(obj) + '\n'; + console.log(what + ': ' + JSON.stringify(obj) + '\n'); } } @@ -70,10 +89,10 @@ function initCards (list) { const statusLine = document.createElement('span'); statusLine.className = 'domainStatus'; - statusLine.innerText = 'mx: 0, a: 0, aaaa: 0 (pending)'; + statusLine.innerText = 'mx: 0, a: 0, aaaa: 0'; const card = document.createElement('div'); - card.classList = 'domainCard redDomainCard'; + card.classList = 'domainCard beigeDomainCard'; card.id = `resolve-mx-card-${domain}`; rt_cardHolder.appendChild(card); @@ -83,16 +102,9 @@ function initCards (list) { } new Promise(async function () { - let progressCounter = 0; - function doProgressRender () { - const dots = '.'.repeat(progressCounter); - - rt_status.innerText = 'in progress ' + dots; - progressCounter = (progressCounter + 1) % 4; - } + const progressRenderTimer = setInterval(doProgressRender, 500); doProgressRender(); - const progressRenderTimer = setInterval(doProgressRender, 500); try { let txt = localStorage.getItem("domains"); @@ -116,7 +128,6 @@ new Promise(async function () { const percent = (result.counts.has_aaaa / result.counts.mx * 100).toFixed(2); rt_status.innerText = `SUCCESS: ${result.counts.has_aaaa} of ${result.counts.mx} service providers have AAAA (${percent}%)`; - rt_output.innerText += '\n'; rt_output.innerText += JSON.stringify(result, null, '\t'); } catch (e) { |