48 lines
No EOL
1.6 KiB
JavaScript
48 lines
No EOL
1.6 KiB
JavaScript
class NeighborsCache {
|
|
constructor() {
|
|
//this._max_age = 1000 * 60 * 60; // 1 hour
|
|
//this._max_age = 1000 * 60 * 5; // 5 minutes
|
|
this._max_age = 1000 * 15; // 15 seconds
|
|
this._cache = JSON.parse(localStorage.getItem('neighbor-cache')) || {};
|
|
}
|
|
|
|
reachable(domain) {
|
|
console.log('reachable neighbor ' + domain)
|
|
if (domain in this._cache) {
|
|
delete this._cache[domain];
|
|
localStorage.setItem('neighbor-cache', JSON.stringify(this._cache));
|
|
}
|
|
}
|
|
|
|
unreachable(domain) {
|
|
console.log('unreachable neighbor ' + domain)
|
|
this._cache[domain] = {time: Date.now()};
|
|
localStorage.setItem('neighbor-cache', JSON.stringify(this._cache));
|
|
}
|
|
|
|
queryUnreachable(domain) {
|
|
//return false if unreachable
|
|
if (domain in this._cache) {
|
|
if (this._cache[domain].time > Date.now() - this._max_age) {
|
|
console.log('skip unreachable neighbor ' + domain + ' ' + Math.ceil(
|
|
Date.now()/1000 - this._cache[domain].time/1000) + 's/' + Math.ceil(this._max_age/1000) + 's')
|
|
return true
|
|
} else {
|
|
delete this._cache[domain];
|
|
localStorage.setItem('neighbor-cache', JSON.stringify(this._cache));
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
list() {
|
|
return Object.entries(this._cache).map(([domain, elem]) => {
|
|
return {
|
|
domain: domain,
|
|
time: elem.time
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
export default NeighborsCache; |