feat: 更合适的记录与rkey限制

This commit is contained in:
手瓜一十雪
2025-01-19 15:55:56 +08:00
parent 16a29b0127
commit e7d0f6d6da
2 changed files with 22 additions and 6 deletions

View File

@@ -462,7 +462,7 @@ export class NTQQFileApi {
rkeyData.private_rkey = tempRkeyData.private_rkey; rkeyData.private_rkey = tempRkeyData.private_rkey;
rkeyData.online_rkey = tempRkeyData.expired_time > Date.now() / 1000; rkeyData.online_rkey = tempRkeyData.expired_time > Date.now() / 1000;
} catch (e) { } catch (e) {
this.context.logger.logError('获取rkey失败 Fallback Old Mode', e); this.context.logger.logDebug('获取rkey失败 Fallback Old Mode', e);
} }
} }

View File

@@ -15,6 +15,10 @@ export class RkeyManager {
private_rkey: '', private_rkey: '',
expired_time: 0, expired_time: 0,
}; };
private failureCount: number = 0;
private lastFailureTimestamp: number = 0;
private readonly FAILURE_LIMIT: number = 8;
private readonly ONE_DAY: number = 24 * 60 * 60 * 1000;
constructor(serverUrl: string[], logger: LogWrapper) { constructor(serverUrl: string[], logger: LogWrapper) {
this.logger = logger; this.logger = logger;
@@ -22,11 +26,21 @@ export class RkeyManager {
} }
async getRkey() { async getRkey() {
const now = new Date().getTime();
if (now - this.lastFailureTimestamp > this.ONE_DAY) {
this.failureCount = 0; // 重置失败计数器
}
if (this.failureCount >= this.FAILURE_LIMIT) {
this.logger.logError(`[Rkey] 服务存在异常, 图片使用FallBack机制`);
throw new Error('获取rkey失败次数过多请稍后再试');
}
if (this.isExpired()) { if (this.isExpired()) {
try { try {
await this.refreshRkey(); await this.refreshRkey();
} catch (e) { } catch (e) {
throw new Error(`获取rkey失败: ${e}`);//外抛 throw new Error(`${e}`);//外抛
} }
} }
return this.rkeyData; return this.rkeyData;
@@ -34,7 +48,6 @@ export class RkeyManager {
isExpired(): boolean { isExpired(): boolean {
const now = new Date().getTime() / 1000; const now = new Date().getTime() / 1000;
// console.log(`now: ${now}, expired_time: ${this.rkeyData.expired_time}`);
return now > this.rkeyData.expired_time; return now > this.rkeyData.expired_time;
} }
@@ -48,14 +61,17 @@ export class RkeyManager {
private_rkey: temp.private_rkey.slice(6), private_rkey: temp.private_rkey.slice(6),
expired_time: temp.expired_time expired_time: temp.expired_time
}; };
this.failureCount = 0;
return;
} catch (e) { } catch (e) {
this.logger.logError(`[Rkey] Get Rkey ${url} Error `, e); this.logger.logError(`[Rkey] 异常服务 ${url} 异常 / `, e);
this.failureCount++;
this.lastFailureTimestamp = new Date().getTime();
//是否为最后一个url //是否为最后一个url
if (url === this.serverUrl[this.serverUrl.length - 1]) { if (url === this.serverUrl[this.serverUrl.length - 1]) {
throw new Error(`获取rkey失败: ${e}`);//外抛 throw new Error(`获取rkey失败: ${e}`);//外抛
} }
} }
} }
} }
} }