fixes for cloudflare

This commit is contained in:
Nathan Rashleigh committed 2024-09-11 00:05:04 +10:00
1 parent ae83ad54c4
commit 29610b49b2
4 files changed
+21 -20

No files matched your search

+1
View File
@@ -4,6 +4,7 @@ COPY . ./
# puppeteer deps # puppeteer deps
RUN apt-get update RUN apt-get update
# don't think about it
RUN apt-get install -y ca-certificates fonts-liberation libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release wget xdg-utils RUN apt-get install -y ca-certificates fonts-liberation libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release wget xdg-utils
RUN npm i RUN npm i
+9 -14
View File
@@ -77,12 +77,9 @@ export default async function createDiscogs(log: Log, pg: Pg) {
async function listings(want: Want) { async function listings(want: Want) {
const page = await browser.newPage() const page = await browser.newPage()
const url = `https://www.discogs.com/sell/release/${want.release}?limit=250` const url = `https://www.discogs.com/sell/release/${want.release}?limit=250`
log.info({ url }, 'fetching')
const res = await page.goto(url) const res = await page.goto(url)
log.debug({ status: res.status() }, 'status') log.debug({ status: res.status() }, 'status')
if (!res.ok()) throw new Error(res.statusText()) if (!res.ok()) throw new Error(res.statusText())
const els = await page.$$('.item_description_title[href]') const els = await page.$$('.item_description_title[href]')
const hrefs = await Promise.all(els.map(e => e.evaluate(e => e.href))) const hrefs = await Promise.all(els.map(e => e.evaluate(e => e.href)))
const ids = hrefs const ids = hrefs
@@ -92,6 +89,8 @@ export default async function createDiscogs(log: Log, pg: Pg) {
await page.close() await page.close()
if (ids.length === 0) log.warn({ res, url, ...wantDetails(want) }, "Want had zero listings")
const unlisted = await pg.listingRmUnlisted(want, ids); const unlisted = await pg.listingRmUnlisted(want, ids);
if (unlisted) log.info({ unlisted: unlisted, ...wantDetails(want) }, 'missing listings removed'); if (unlisted) log.info({ unlisted: unlisted, ...wantDetails(want) }, 'missing listings removed');
@@ -99,18 +98,14 @@ export default async function createDiscogs(log: Log, pg: Pg) {
// sometimes we get dodgy listings from discogs that throw perm errors // sometimes we get dodgy listings from discogs that throw perm errors
// we just want to ignore them // we just want to ignore them
const results = await Promise.allSettled(ids.map(id => listing(id, want))); // const results = await Promise.allSettled(ids.map(id => listing(id, want)));
// @ts-ignore
const validListings = results
.map(r => {
if (r.status === 'fulfilled') return r.value;
if (r.reason.response.status === 429) throw r.reason;
log.warn('listing fetch error', r)
return null
})
.filter(v => v);
return validListings; const results = []
for await (const id of ids) {
const r = await listing(id, want)
results.push(r)
}
return results;
} }
+8 -5
View File
@@ -29,8 +29,10 @@ export default function createEvents(log: Log, pg: Pg, discogs, offers, discord)
log.error('event error', e); log.error('event error', e);
}); });
const MAX_ATTEMPTS = 2; const MAX_ATTEMPTS = 3;
async function populateListings(want: Want, attempts = 0) { const SYNC_EVERY_MS = 60 * 1000
const RATE_LIMIT_WAIT_MS = (attempts) => attempts * 70 * 1000
async function populateListings(want: Want, attempts = 1) {
try { try {
const listings = await discogs.listings(want); const listings = await discogs.listings(want);
await pg.wantSynced(want); await pg.wantSynced(want);
@@ -38,8 +40,9 @@ export default function createEvents(log: Log, pg: Pg, discogs, offers, discord)
} catch (e) { } catch (e) {
log.error(e) log.error(e)
if (e.response.status === 429) { if (e.response.status === 429) {
log.warn('rate limited, trying again in 60s'); log.warn({ RATE_LIMIT_WAIT_MS: RATE_LIMIT_WAIT_MS(attempts), ...e.response.headers }, 'rate limited, trying again');
await setTimeout(60 * 1000);
await setTimeout(RATE_LIMIT_WAIT_MS(attempts));
if (attempts > MAX_ATTEMPTS) { if (attempts > MAX_ATTEMPTS) {
log.error(wantDetails(want), 'failed to populate listings') log.error(wantDetails(want), 'failed to populate listings')
} }
@@ -81,7 +84,7 @@ export default function createEvents(log: Log, pg: Pg, discogs, offers, discord)
if (wants.length === 0) { if (wants.length === 0) {
log.info('all listings up to date'); log.info('all listings up to date');
await setTimeout(60 * 1000) await setTimeout()
} }
} catch (e) { } catch (e) {
log.error(e, 'sync error') log.error(e, 'sync error')
+3 -1
View File
@@ -8,7 +8,9 @@ import * as toast from './../toast';
import OfferGroup from './../components/offer.group'; import OfferGroup from './../components/offer.group';
const GroupNav = (want) => { const GroupNav = (want) => {
const href = want._count.offers ? `#${want.release}` : null; if (!want._count.offers) return null
const href = `#${want.release}`;
return ( return (
<div class=''> <div class=''>
<a href={href}>{want.data.artists_sort} - {want.data.title}</a> <a href={href}>{want.data.artists_sort} - {want.data.title}</a>