mirror of
https://codeberg.org/yeentown/barkey.git
synced 2025-07-07 12:36:57 +00:00
add renderInlineError to serialize errors in a consistent way
This commit is contained in:
parent
3808502f86
commit
61d0aeba2e
4 changed files with 42 additions and 36 deletions
|
@ -55,6 +55,7 @@ import type { ApLoggerService } from '../ApLoggerService.js';
|
||||||
|
|
||||||
import type { ApImageService } from './ApImageService.js';
|
import type { ApImageService } from './ApImageService.js';
|
||||||
import type { IActor, ICollection, IObject, IOrderedCollection } from '../type.js';
|
import type { IActor, ICollection, IObject, IOrderedCollection } from '../type.js';
|
||||||
|
import { renderInlineError } from '@/misc/render-inline-error.js';
|
||||||
|
|
||||||
const nameLength = 128;
|
const nameLength = 128;
|
||||||
const summaryLength = 2048;
|
const summaryLength = 2048;
|
||||||
|
@ -820,11 +821,7 @@ export class ApPersonService implements OnModuleInit, OnApplicationShutdown {
|
||||||
// Resolve to (Ordered)Collection Object
|
// Resolve to (Ordered)Collection Object
|
||||||
const collection = user.featured ? await _resolver.resolveCollection(user.featured, true, user.uri).catch(err => {
|
const collection = user.featured ? await _resolver.resolveCollection(user.featured, true, user.uri).catch(err => {
|
||||||
if (isRetryableError(err)) {
|
if (isRetryableError(err)) {
|
||||||
if (err instanceof IdentifiableError) {
|
this.logger.warn(`Failed to update featured notes: ${renderInlineError(err)}`);
|
||||||
this.logger.warn(`Failed to update featured notes: ${err.id}: ${err.message}`);
|
|
||||||
} else {
|
|
||||||
this.logger.warn(`Failed to update featured notes: ${err.name}: ${err.message}`);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
this.logger.error('Failed to update featured notes:', err);
|
this.logger.error('Failed to update featured notes:', err);
|
||||||
}
|
}
|
||||||
|
|
35
packages/backend/src/misc/render-inline-error.ts
Normal file
35
packages/backend/src/misc/render-inline-error.ts
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: hazelnoot and other Sharkey contributors
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { IdentifiableError } from '@/misc/identifiable-error.js';
|
||||||
|
import { StatusError } from '@/misc/status-error.js';
|
||||||
|
|
||||||
|
export function renderInlineError(err: unknown): string {
|
||||||
|
if (err instanceof IdentifiableError) {
|
||||||
|
if (err.message) {
|
||||||
|
return `${err.name} ${err.id}: ${err.message}`;
|
||||||
|
} else {
|
||||||
|
return `${err.name} ${err.id}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err instanceof StatusError) {
|
||||||
|
if (err.message) {
|
||||||
|
return `${err.name} ${err.statusCode}: ${err.message}`;
|
||||||
|
} else {
|
||||||
|
return `${err.name} ${err.statusCode}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err instanceof Error) {
|
||||||
|
if (err.message) {
|
||||||
|
return `${err.name}: ${err.message}`;
|
||||||
|
} else {
|
||||||
|
return err.name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return String(err);
|
||||||
|
}
|
|
@ -14,6 +14,7 @@ import { bindThis } from '@/decorators.js';
|
||||||
import { CheckModeratorsActivityProcessorService } from '@/queue/processors/CheckModeratorsActivityProcessorService.js';
|
import { CheckModeratorsActivityProcessorService } from '@/queue/processors/CheckModeratorsActivityProcessorService.js';
|
||||||
import { StatusError } from '@/misc/status-error.js';
|
import { StatusError } from '@/misc/status-error.js';
|
||||||
import { IdentifiableError } from '@/misc/identifiable-error.js';
|
import { IdentifiableError } from '@/misc/identifiable-error.js';
|
||||||
|
import { renderInlineError } from '@/misc/render-inline-error.js';
|
||||||
import { UserWebhookDeliverProcessorService } from './processors/UserWebhookDeliverProcessorService.js';
|
import { UserWebhookDeliverProcessorService } from './processors/UserWebhookDeliverProcessorService.js';
|
||||||
import { SystemWebhookDeliverProcessorService } from './processors/SystemWebhookDeliverProcessorService.js';
|
import { SystemWebhookDeliverProcessorService } from './processors/SystemWebhookDeliverProcessorService.js';
|
||||||
import { EndedPollNotificationProcessorService } from './processors/EndedPollNotificationProcessorService.js';
|
import { EndedPollNotificationProcessorService } from './processors/EndedPollNotificationProcessorService.js';
|
||||||
|
@ -140,20 +141,8 @@ export class QueueProcessorService implements OnApplicationShutdown {
|
||||||
// 何故かeがundefinedで来ることがある
|
// 何故かeがundefinedで来ることがある
|
||||||
if (!e) return '?';
|
if (!e) return '?';
|
||||||
|
|
||||||
if (e instanceof Bull.UnrecoverableError || e instanceof AbortError || e.name === 'AbortError') {
|
if (e instanceof Bull.UnrecoverableError || e instanceof AbortError || e.name === 'AbortError' || e instanceof StatusError || e instanceof IdentifiableError) {
|
||||||
return `${e.name}: ${e.message}`;
|
return renderInlineError(e);
|
||||||
}
|
|
||||||
|
|
||||||
if (e instanceof StatusError) {
|
|
||||||
if (e.statusMessage) {
|
|
||||||
return `${e.name} ${e.statusCode}: ${e.statusMessage}`;
|
|
||||||
} else {
|
|
||||||
return `${e.name} ${e.statusCode}`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e instanceof IdentifiableError) {
|
|
||||||
return `${e.name} ${e.id}: ${e.message}`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -32,6 +32,7 @@ import type { Config } from '@/config.js';
|
||||||
import { ApLogService, calculateDurationSince } from '@/core/ApLogService.js';
|
import { ApLogService, calculateDurationSince } from '@/core/ApLogService.js';
|
||||||
import { UpdateInstanceQueue } from '@/core/UpdateInstanceQueue.js';
|
import { UpdateInstanceQueue } from '@/core/UpdateInstanceQueue.js';
|
||||||
import { isRetryableError } from '@/misc/is-retryable-error.js';
|
import { isRetryableError } from '@/misc/is-retryable-error.js';
|
||||||
|
import { renderInlineError } from '@/misc/render-inline-error.js';
|
||||||
import { QueueLoggerService } from '../QueueLoggerService.js';
|
import { QueueLoggerService } from '../QueueLoggerService.js';
|
||||||
import type { InboxJobData } from '../types.js';
|
import type { InboxJobData } from '../types.js';
|
||||||
|
|
||||||
|
@ -300,24 +301,8 @@ export class InboxProcessorService implements OnApplicationShutdown {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e instanceof StatusError && !e.isRetryable) {
|
|
||||||
return `skip: permanent error ${e.statusCode}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e instanceof IdentifiableError && !e.isRetryable) {
|
|
||||||
if (e.message) {
|
|
||||||
return `skip: permanent error ${e.id}: ${e.message}`;
|
|
||||||
} else {
|
|
||||||
return `skip: permanent error ${e.id}`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isRetryableError(e)) {
|
if (!isRetryableError(e)) {
|
||||||
if (e instanceof Error) {
|
return `skip: permanent error ${renderInlineError(e)}`;
|
||||||
return `skip: permanent error ${e.name}: ${e.message}`;
|
|
||||||
} else {
|
|
||||||
return `skip: permanent error ${e}`;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
throw e;
|
throw e;
|
||||||
|
|
Loading…
Add table
Reference in a new issue