sitios por defecto en js

y no usar gualeguaychu porque va muy lento
This commit is contained in:
Cat /dev/Nulo 2023-11-28 20:46:14 -03:00
parent 14b94d53df
commit 651cfae49f
2 changed files with 35 additions and 13 deletions

View file

@ -16,4 +16,4 @@ COPY pki/ca_intermediate_root_bundle.pem /usr/lib/ca_intermediate_root_bundle.pe
COPY --from=build /tmp/build/build.js /usr/local/bin/download_json.js COPY --from=build /tmp/build/build.js /usr/local/bin/download_json.js
ENV NODE_EXTRA_CA_CERTS=/usr/lib/ca_intermediate_root_bundle.pem ENV NODE_EXTRA_CA_CERTS=/usr/lib/ca_intermediate_root_bundle.pem
WORKDIR /data WORKDIR /data
CMD ["/sbin/tini", "node", "/usr/local/bin/download_json.js", "https://datos.gob.ar/data.json", "http://datos.energia.gob.ar/data.json", "https://datos.magyp.gob.ar/data.json", "https://datos.acumar.gov.ar/data.json", "https://datasets.datos.mincyt.gob.ar/data.json", "https://datos.arsat.com.ar/data.json", "https://datos.cultura.gob.ar/data.json", "https://datos.mininterior.gob.ar/data.json", "https://datos.produccion.gob.ar/data.json", "https://datos.salud.gob.ar/data.json", "https://datos.transporte.gob.ar/data.json", "https://ckan.ciudaddemendoza.gov.ar/data.json", "https://datos.santafe.gob.ar/data.json", "https://datosabiertos.chaco.gob.ar/data.json", "https://datosabiertos.gualeguaychu.gov.ar/data.json", "https://datosabiertos.mercedes.gob.ar/data.json", "http://luj-bue-datos.paisdigital.innovacion.gob.ar/data.json", "https://datosabiertos.desarrollosocial.gob.ar", "http://datos.mindef.gov.ar/data.json"] CMD ["/sbin/tini", "node", "/usr/local/bin/download_json.js"]

View file

@ -4,13 +4,36 @@ import { Agent, fetch, request, setGlobalDispatcher } from "undici";
import { join, normalize } from "node:path"; import { join, normalize } from "node:path";
import pLimit from "p-limit"; import pLimit from "p-limit";
const sitiosPorDefecto = [
"https://datos.gob.ar/data.json",
"http://datos.energia.gob.ar/data.json",
"https://datos.magyp.gob.ar/data.json",
"https://datos.acumar.gov.ar/data.json",
"https://datasets.datos.mincyt.gob.ar/data.json",
"https://datos.arsat.com.ar/data.json",
"https://datos.cultura.gob.ar/data.json",
"https://datos.mininterior.gob.ar/data.json",
"https://datos.produccion.gob.ar/data.json",
"https://datos.salud.gob.ar/data.json",
"https://datos.transporte.gob.ar/data.json",
"https://ckan.ciudaddemendoza.gov.ar/data.json",
"https://datos.santafe.gob.ar/data.json",
"https://datosabiertos.chaco.gob.ar/data.json",
"https://datosabiertos.mercedes.gob.ar/data.json",
"http://luj-bue-datos.paisdigital.innovacion.gob.ar/data.json",
"https://datosabiertos.desarrollosocial.gob.ar",
"http://datos.mindef.gov.ar/data.json",
];
// desactivado porque va MUY lento: datosabiertos.gualeguaychu.gov.ar
// FYI: al menos los siguientes dominios no tienen la cadena completa de certificados en HTTPS. tenemos que usar un hack (node_extra_ca_certs_mozilla_bundle) para conectarnos a estos sitios. (se puede ver con ssllabs.com) ojalá lxs administradorxs de estos servidores lo arreglen. // FYI: al menos los siguientes dominios no tienen la cadena completa de certificados en HTTPS. tenemos que usar un hack (node_extra_ca_certs_mozilla_bundle) para conectarnos a estos sitios. (se puede ver con ssllabs.com) ojalá lxs administradorxs de estos servidores lo arreglen.
// www.enargas.gov.ar, transparencia.enargas.gov.ar, www.energia.gob.ar, www.economia.gob.ar, datos.yvera.gob.ar // www.enargas.gov.ar, transparencia.enargas.gov.ar, www.energia.gob.ar, www.economia.gob.ar, datos.yvera.gob.ar
setGlobalDispatcher( setGlobalDispatcher(
new Agent({ new Agent({
pipelining: 0, pipelining: 0,
}) }),
); );
/** key es host /** key es host
@ -28,14 +51,13 @@ class StatusCodeError extends Error {
} }
} }
class TooManyRedirectsError extends Error {} class TooManyRedirectsError extends Error {}
const jsonUrls = process.argv.slice(2); let jsonUrls = process.argv.slice(2);
if (jsonUrls.length < 1) { if (jsonUrls.length < 1) {
console.error("Especificamente el url al json porfa"); jsonUrls = sitiosPorDefecto;
process.exit(1);
} }
for (const url of jsonUrls) for (const url of jsonUrls)
downloadFromData(url).catch((error) => downloadFromData(url).catch((error) =>
console.error(`${url} FALLÓ CON`, error) console.error(`${url} FALLÓ CON`, error),
); );
/** /**
@ -64,7 +86,7 @@ async function downloadFromData(jsonUrlString) {
return true; return true;
} catch (error) { } catch (error) {
errorFile.write( errorFile.write(
JSON.stringify(encodeError({ dataset, dist }, error)) + "\n" JSON.stringify(encodeError({ dataset, dist }, error)) + "\n",
); );
return false; return false;
} }
@ -75,7 +97,7 @@ async function downloadFromData(jsonUrlString) {
url: patchUrl(new URL(dist.downloadURL)), url: patchUrl(new URL(dist.downloadURL)),
outputPath, outputPath,
attempts: 0, attempts: 0,
})) })),
); );
const totalJobs = jobs.length; const totalJobs = jobs.length;
let nFinished = 0; let nFinished = 0;
@ -107,7 +129,7 @@ async function downloadFromData(jsonUrlString) {
process.stderr.write(`info[${jsonUrl.host}]: 0/${totalJobs} done\n`); process.stderr.write(`info[${jsonUrl.host}]: 0/${totalJobs} done\n`);
const interval = setInterval(() => { const interval = setInterval(() => {
process.stderr.write( process.stderr.write(
`info[${jsonUrl.host}]: ${nFinished}/${totalJobs} done\n` `info[${jsonUrl.host}]: ${nFinished}/${totalJobs} done\n`,
); );
}, 30000); }, 30000);
await Promise.all(promises); await Promise.all(promises);
@ -175,12 +197,12 @@ async function downloadDist({ dist, dataset, url, outputPath }) {
const fileDirPath = join( const fileDirPath = join(
outputPath, outputPath,
sanitizeSuffix(dataset.identifier), sanitizeSuffix(dataset.identifier),
sanitizeSuffix(dist.identifier) sanitizeSuffix(dist.identifier),
); );
await mkdir(fileDirPath, { recursive: true }); await mkdir(fileDirPath, { recursive: true });
const filePath = join( const filePath = join(
fileDirPath, fileDirPath,
sanitizeSuffix(dist.fileName || dist.identifier) sanitizeSuffix(dist.fileName || dist.identifier),
); );
if (!res.body) throw new Error("no body"); if (!res.body) throw new Error("no body");
@ -218,11 +240,11 @@ function sanitizeSuffix(path) {
*/ */
function chequearIdsDuplicados(jobs) { function chequearIdsDuplicados(jobs) {
const duplicated = hasDuplicates( const duplicated = hasDuplicates(
jobs.map((j) => `${j.dataset.identifier}/${j.dist.identifier}`) jobs.map((j) => `${j.dataset.identifier}/${j.dist.identifier}`),
); );
if (duplicated) { if (duplicated) {
console.error( console.error(
"ADVERTENCIA: ¡encontré duplicados! es posible que se pisen archivos entre si" "ADVERTENCIA: ¡encontré duplicados! es posible que se pisen archivos entre si",
); );
} }
} }