diff --git a/packages/backend/src/core/activitypub/models/ApPersonService.ts b/packages/backend/src/core/activitypub/models/ApPersonService.ts index e70673dd9f..44582f6f7d 100644 --- a/packages/backend/src/core/activitypub/models/ApPersonService.ts +++ b/packages/backend/src/core/activitypub/models/ApPersonService.ts @@ -55,6 +55,7 @@ import type { ApLoggerService } from '../ApLoggerService.js'; import type { ApImageService } from './ApImageService.js'; import type { IActor, ICollection, IObject, IOrderedCollection } from '../type.js'; +import { renderInlineError } from '@/misc/render-inline-error.js'; const nameLength = 128; const summaryLength = 2048; @@ -820,11 +821,7 @@ export class ApPersonService implements OnModuleInit, OnApplicationShutdown { // Resolve to (Ordered)Collection Object const collection = user.featured ? await _resolver.resolveCollection(user.featured, true, user.uri).catch(err => { if (isRetryableError(err)) { - if (err instanceof IdentifiableError) { - 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}`); - } + this.logger.warn(`Failed to update featured notes: ${renderInlineError(err)}`); } else { this.logger.error('Failed to update featured notes:', err); } diff --git a/packages/backend/src/misc/render-inline-error.ts b/packages/backend/src/misc/render-inline-error.ts new file mode 100644 index 0000000000..36de0262ef --- /dev/null +++ b/packages/backend/src/misc/render-inline-error.ts @@ -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); +} diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index de74b883d5..341469e4e2 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -14,6 +14,7 @@ import { bindThis } from '@/decorators.js'; import { CheckModeratorsActivityProcessorService } from '@/queue/processors/CheckModeratorsActivityProcessorService.js'; import { StatusError } from '@/misc/status-error.js'; import { IdentifiableError } from '@/misc/identifiable-error.js'; +import { renderInlineError } from '@/misc/render-inline-error.js'; import { UserWebhookDeliverProcessorService } from './processors/UserWebhookDeliverProcessorService.js'; import { SystemWebhookDeliverProcessorService } from './processors/SystemWebhookDeliverProcessorService.js'; import { EndedPollNotificationProcessorService } from './processors/EndedPollNotificationProcessorService.js'; @@ -140,20 +141,8 @@ export class QueueProcessorService implements OnApplicationShutdown { // 何故かeがundefinedで来ることがある if (!e) return '?'; - if (e instanceof Bull.UnrecoverableError || e instanceof AbortError || e.name === 'AbortError') { - return `${e.name}: ${e.message}`; - } - - 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}`; + if (e instanceof Bull.UnrecoverableError || e instanceof AbortError || e.name === 'AbortError' || e instanceof StatusError || e instanceof IdentifiableError) { + return renderInlineError(e); } return { diff --git a/packages/backend/src/queue/processors/InboxProcessorService.ts b/packages/backend/src/queue/processors/InboxProcessorService.ts index 93d0a08003..a069d390db 100644 --- a/packages/backend/src/queue/processors/InboxProcessorService.ts +++ b/packages/backend/src/queue/processors/InboxProcessorService.ts @@ -32,6 +32,7 @@ import type { Config } from '@/config.js'; import { ApLogService, calculateDurationSince } from '@/core/ApLogService.js'; import { UpdateInstanceQueue } from '@/core/UpdateInstanceQueue.js'; import { isRetryableError } from '@/misc/is-retryable-error.js'; +import { renderInlineError } from '@/misc/render-inline-error.js'; import { QueueLoggerService } from '../QueueLoggerService.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 (e instanceof Error) { - return `skip: permanent error ${e.name}: ${e.message}`; - } else { - return `skip: permanent error ${e}`; - } + return `skip: permanent error ${renderInlineError(e)}`; } throw e;