X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fjob-queue%2Fhandlers%2Factivitypub-http-broadcast.ts;h=fbf01d2768f92ccd2ce2e6d2754d448fbecc9203;hb=9db437c8155f3563a33e22ed2896072a9f1fbdb0;hp=78878fc01a86556e301ceb3ab92960c86103f13e;hpb=2e3a0215d051dca1f7c8ef423564c8d37a255f77;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/job-queue/handlers/activitypub-http-broadcast.ts b/server/lib/job-queue/handlers/activitypub-http-broadcast.ts index 78878fc01..fbf01d276 100644 --- a/server/lib/job-queue/handlers/activitypub-http-broadcast.ts +++ b/server/lib/job-queue/handlers/activitypub-http-broadcast.ts @@ -1,16 +1,13 @@ -import * as kue from 'kue' +import { map } from 'bluebird' +import { Job } from 'bull' +import { ActorFollowHealthCache } from '@server/lib/actor-follow-health-cache' +import { ActivitypubHttpBroadcastPayload } from '@shared/models' import { logger } from '../../../helpers/logger' import { doRequest } from '../../../helpers/requests' -import { ActorFollowModel } from '../../../models/activitypub/actor-follow' -import { buildSignedRequestOptions, computeBody } from './utils/activitypub-http-utils' +import { BROADCAST_CONCURRENCY } from '../../../initializers/constants' +import { buildGlobalHeaders, buildSignedRequestOptions, computeBody } from './utils/activitypub-http-utils' -export type ActivitypubHttpBroadcastPayload = { - uris: string[] - signatureActorId?: number - body: any -} - -async function processActivityPubHttpBroadcast (job: kue.Job) { +async function processActivityPubHttpBroadcast (job: Job) { logger.info('Processing ActivityPub broadcast in job %d.', job.id) const payload = job.data as ActivitypubHttpBroadcastPayload @@ -19,27 +16,26 @@ async function processActivityPubHttpBroadcast (job: kue.Job) { const httpSignatureOptions = await buildSignedRequestOptions(payload) const options = { - method: 'POST', - uri: '', + method: 'POST' as 'POST', json: body, - httpSignature: httpSignatureOptions + httpSignature: httpSignatureOptions, + headers: buildGlobalHeaders(body) } const badUrls: string[] = [] const goodUrls: string[] = [] - for (const uri of payload.uris) { - options.uri = uri - + await map(payload.uris, async uri => { try { - await doRequest(options) + await doRequest(uri, options) goodUrls.push(uri) } catch (err) { + logger.debug('HTTP broadcast to %s failed.', uri, { err }) badUrls.push(uri) } - } + }, { concurrency: BROADCAST_CONCURRENCY }) - return ActorFollowModel.updateActorFollowsScore(goodUrls, badUrls, undefined) + return ActorFollowHealthCache.Instance.updateActorFollowsHealth(goodUrls, badUrls) } // ---------------------------------------------------------------------------