Skip to content

Commit 30ec04d

Browse files
wikisearch: per-upstream diagnostics
1 parent cee7bea commit 30ec04d

1 file changed

Lines changed: 8 additions & 5 deletions

File tree

index.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,25 +1024,28 @@ async function handleWikisearch(request) {
10241024
api,
10251025
api.replace('https://wiki.archlinux.org/api.php', 'https://iso.acreetionos.org:8448/wikiapi.php')
10261026
];
1027-
let lastErr = 'no attempt';
1027+
const attempts = [];
10281028
for (const upstreamUrl of upstreams) {
1029+
let lastErr = '';
10291030
try {
10301031
const upstream = await fetch(upstreamUrl, {
10311032
headers: { 'User-Agent': CHROME_UA, 'Accept': 'application/json' },
10321033
signal: AbortSignal.timeout(10000)
10331034
});
1034-
if (!upstream.ok) { lastErr = 'HTTP ' + upstream.status; continue; }
1035-
const data = await upstream.json();
1035+
if (!upstream.ok) { lastErr += ' [HTTP ' + upstream.status + ']'; continue; }
1036+
const ct = (upstream.headers.get('content-type') || '').slice(0, 40);
1037+
const data = await upstream.json().catch(e => { throw new Error('parse(' + ct + '): ' + e.message); });
10361038
const out = jsonResponse(data, {
10371039
headers: { 'Cache-Control': 'public, max-age=3600' }
10381040
}, request);
10391041
await cache.put(cacheKey, out.clone());
10401042
return out;
10411043
} catch (err) {
1042-
lastErr = String(err && err.message || err).slice(0, 120);
1044+
lastErr = String(err && err.message || err).slice(0, 160);
10431045
}
1046+
attempts.push({ url: upstreamUrl.slice(8, 40), result: lastErr || 'ok' });
10441047
}
1045-
return jsonResponse({ error: 'Wiki upstream unreachable', detail: lastErr }, { status: 502 }, request);
1048+
return jsonResponse({ error: 'Wiki upstream unreachable', attempts }, { status: 502 }, request);
10461049
}
10471050

10481051
async function handleChangelog(env) {

0 commit comments

Comments
 (0)