Commit 07bf3210 authored by nanahira's avatar nanahira

add retry

parent 5bb88798
......@@ -41,6 +41,12 @@ export class RetweetNotifierPluginConfig {
description: '是否在截图失败时放弃发送。需要使用 Puppeteer。',
})
safe: boolean;
@SchemaProperty({
description: 'Twitter 截图默认重试次数。',
default: 3,
})
retryCount: number;
}
export type RetweetNotifierPluginConfigLike =
......
......@@ -103,9 +103,18 @@ export default class RetweetNotifierPlugin extends SchedulePlugin(
return !existing?.length;
}
private async renderTweet(url: string) {
private async renderTweet(url: string, retry = 0) {
if (!this.ctx.puppeteer) return url;
this.logger.info(`Rendering tweet ${url}...`);
if (retry > this.config.retryCount) {
this.logger.error(
`Failed to render tweet ${url} after ${this.config.retryCount} retries`,
);
return url;
} else if (retry > 0) {
this.logger.warn(`Retrying to render tweet ${url}...`);
} else {
this.logger.info(`Rendering tweet ${url}...`);
}
const page = await this.ctx.puppeteer.page();
try {
await page.goto(url, { timeout: 300000, waitUntil: 'networkidle2' });
......@@ -115,14 +124,14 @@ export default class RetweetNotifierPlugin extends SchedulePlugin(
// const tweetComponent = page;
if (!tweetComponent) {
this.logger.warn(`Component not found for tweet ${url}`);
return url;
return this.renderTweet(url, retry + 1);
}
this.logger.info(`Taking screenshot of ${url}...`);
const screenshot = await tweetComponent.screenshot({ fullPage: false });
return segment.image(screenshot, 'image/png').toString();
} catch (e) {
this.logger.error(`Failed to render tweet ${url}: ${e}`);
return url;
this.logger.warn(`Failed to render tweet ${url}: ${e}`);
return this.renderTweet(url, retry + 1);
} finally {
await page.close();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment