Skip to content

Commit

Permalink
fixes leaks with error-cached geoservice APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
davelandry committed Apr 25, 2019
1 parent d048eda commit 99dc8f6
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 12 deletions.
76 changes: 67 additions & 9 deletions api/crosswalks.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,22 @@ module.exports = function(app) {
drilldown = "MSA-Tract";
}
else {
cut = await axios.get(`${CANON_LOGICLAYER_CUBE}/geoservice-api/relations/intersects/${id}?targetLevels=state&overlapSize=true`)
const url = `${CANON_LOGICLAYER_CUBE}/geoservice-api/relations/intersects/${id}?targetLevels=state&overlapSize=true`;
const cuts = await axios.get(url)
.then(resp => resp.data)
.then(arr => arr.sort((a, b) => b.overlap_size - a.overlap_size)[0].geoid)
.catch(() => "01000US");
.then(resp => {
if (resp.error) {
console.error(`[geoservice error] ${url}`);
console.error(resp.error);
return [];
}
else {
return resp || [];
}
})
.then(arr => arr.sort((a, b) => b.overlap_size - a.overlap_size))
.catch(() => []);
cut = cuts.length ? cuts[0].geoid : "01000US";
drilldown = level || "County";
}
}
Expand Down Expand Up @@ -84,10 +96,22 @@ module.exports = function(app) {
level = "State";
}
else if (prefix === "310") {
parent = await axios.get(`${CANON_LOGICLAYER_CUBE}/geoservice-api/relations/intersects/${id}?targetLevels=state&overlapSize=true`)
const url = `${CANON_LOGICLAYER_CUBE}/geoservice-api/relations/intersects/${id}?targetLevels=state&overlapSize=true`;
const parents = await axios.get(url)
.then(resp => resp.data)
.then(arr => arr.sort((a, b) => b.overlap_size - a.overlap_size)[0].geoid)
.catch(() => "01000US");
.then(resp => {
if (resp.error) {
console.error(`[geoservice error] ${url}`);
console.error(resp.error);
return [];
}
else {
return resp || [];
}
})
.then(arr => arr.sort((a, b) => b.overlap_size - a.overlap_size))
.catch(() => []);
parent = parents.length ? parents[0].geoid : "01000US";
level = "County";
}
else {
Expand Down Expand Up @@ -164,7 +188,18 @@ module.exports = function(app) {
: `${CANON_LOGICLAYER_CUBE}/geoservice-api/relations/intersects/${id}`;

let ids = await axios.get(url)
.then(resp => resp.data.map(d => d.geoid))
.then(resp => resp.data)
.then(resp => {
if (resp.error) {
console.error(`[geoservice error] ${url}`);
console.error(resp.error);
return [];
}
else {
return resp || [];
}
})
.then(resp => resp.map(d => d.geoid))
.catch(() => []);

ids.push("01000US");
Expand Down Expand Up @@ -405,7 +440,18 @@ module.exports = function(app) {

const parents = await axios.get(url)
.then(resp => resp.data)
.then(resp => {
if (resp.error) {
console.error(`[geoservice error] ${url}`);
console.error(resp.error);
return [];
}
else {
return resp || [];
}
})
.catch(() => []);

let ids = parents.map(d => d.geoid);
if (cache.pops[attr.id] > 250000) ids = ids.filter(d => cache.pops[d] > 250000);
if (!ids.includes("01000US")) ids.unshift("01000US");
Expand Down Expand Up @@ -437,8 +483,20 @@ module.exports = function(app) {

if (dimension === "Geography") {

const neighbors = await axios.get(`${CANON_LOGICLAYER_CUBE}/geoservice-api/neighbors/${id}`)
.then(resp => resp.data.map(d => d.geoid))
const url = `${CANON_LOGICLAYER_CUBE}/geoservice-api/neighbors/${id}`;
const neighbors = await axios.get(url)
.then(resp => resp.data)
.then(resp => {
if (resp.error) {
console.error(`[geoservice error] ${url}`);
console.error(resp.error);
return [];
}
else {
return resp || [];
}
})
.then(resp => resp.map(d => d.geoid))
.catch(() => []);

const attrs = await db.search
Expand Down
35 changes: 32 additions & 3 deletions canon.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,16 @@ module.exports = {
"Origin State": {
neighbors: {
url: id => `${CANON_LOGICLAYER_CUBE}/geoservice-api/neighbors/${id}`,
callback: arr => arr.map(d => d.geoid)
callback: resp => {
if (resp.error) {
console.error("[geoservice error]");
console.error(resp.error);
return [];
}
else {
return (resp || []).map(d => d.geoid);
}
}
},
parents: {
url: id => `${CANON_API}/api/parents/geo/${id}`,
Expand All @@ -90,7 +99,16 @@ module.exports = {
},
neighbors: {
url: id => `${CANON_LOGICLAYER_CUBE}/geoservice-api/neighbors/${id}`,
callback: arr => arr.map(d => d.geoid)
callback: resp => {
if (resp.error) {
console.error("[geoservice error]");
console.error(resp.error);
return [];
}
else {
return (resp || []).map(d => d.geoid);
}
}
},
parents: {
url: id => `${CANON_API}/api/parents/geo/${id}`,
Expand Down Expand Up @@ -149,7 +167,18 @@ module.exports = {
const targetLevel = level.toLowerCase();
return `${CANON_LOGICLAYER_CUBE}/geoservice-api/relations/intersects/${id}?targetLevels=${targetLevel}&overlapSize=true`;
},
callback: arr => arr.sort((a, b) => b.overlap_size - a.overlap_size)[0].geoid
callback: resp => {
let arr = [];
if (resp.error) {
console.error("[geoservice error]");
console.error(resp.error);
}
else {
arr = resp || [];
}
arr = arr.sort((a, b) => b.overlap_size - a.overlap_size);
return arr.length ? arr[0].geoid : "01000US";
}
},
"CIP": {
levels: {
Expand Down

0 comments on commit 99dc8f6

Please sign in to comment.