or-uk-data-quality-checker/script-fetch.js

68 lines
1.7 KiB
JavaScript

const { wait } = require("./helpers");
const insomnium = require("./insomnium.json");
const fs = require("fs");
const WAIT_BETWEEN_REQS_MS = 500;
const PER_PAGE=500;
const groups = insomnium.resources
.filter(res => res._type === "request_group");
const las = insomnium.resources
.filter(res =>
res._type === "request" &&
res.name === "/services")
.map(res => ({
group: groups.find(group => group._id == res.parentId),
res
}));
(async() => {
console.log('Fetching LAs...');
for (let la of las) {
const laName = la.group.name;
console.log(`Fetching services for ${laName}...`);
const services = await fetchServices(la.res.url);
console.log(`Found ${services.length} services for ${laName}!`);
await writeServices(laName, services);
}
})();
async function fetchServices(ep) {
let page = 1;
let services = [];
do {
const pagedEp = `${ep}?page=${page}&per_page=${PER_PAGE}`;
const resp = await fetch(pagedEp);
console.log(pagedEp);
if (!resp.ok) {
console.warn(`Could not fetch services for ${ep}. Skipping. (Resp code ${resp.status})`);
return [];
}
const json = await resp.json();
services = [...services, ...json.content];
if (json.last == true) {
console.log("All services found!")
break;
}
console.log(`Loaded ${services.length} of total ${json.totalElements}...`);
page++;
await wait(WAIT_BETWEEN_REQS_MS);
} while (true);
return services;
}
async function writeServices(name, services) {
await fs.promises.writeFile(`data/${name}.json`, JSON.stringify(services, null, 2));
}