0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-03-04 02:01:58 -05:00

Removed job queue handling within the email analytics job (#22243)

ref https://linear.app/ghost/issue/ENG-2026/

This is being removed as the JobQueueManager is being removed. By
removing this, we can allow the queue to deplete itself before stripping
out that functionality.
This commit is contained in:
Steve Larson 2025-02-19 10:29:30 -06:00 committed by GitHub
parent 6b7f65c0b0
commit 11ca9e3009
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 3 additions and 64 deletions

View file

@ -1,6 +1,4 @@
const logging = require('@tryghost/logging');
const JobManager = require('../../services/jobs');
const path = require('path');
class EmailAnalyticsServiceWrapper {
init() {
@ -13,7 +11,6 @@ class EmailAnalyticsServiceWrapper {
const MailgunProvider = require('@tryghost/email-analytics-provider-mailgun');
const {EmailRecipientFailure, EmailSpamComplaintEvent, Email} = require('../../models');
const StartEmailAnalyticsJobEvent = require('./events/StartEmailAnalyticsJobEvent');
const {MemberEmailAnalyticsUpdateEvent} = require('@tryghost/member-events');
const domainEvents = require('@tryghost/domain-events');
const config = require('../../../shared/config');
const settings = require('../../../shared/settings-cache');
@ -62,20 +59,6 @@ class EmailAnalyticsServiceWrapper {
domainEvents.subscribe(StartEmailAnalyticsJobEvent, async () => {
await this.startFetch();
});
domainEvents.subscribe(MemberEmailAnalyticsUpdateEvent, async (event) => {
const memberId = event.data.memberId;
await JobManager.addQueuedJob({
name: `update-member-email-analytics-${memberId}`,
metadata: {
job: path.resolve(__dirname, 'jobs/update-member-email-analytics'),
name: 'update-member-email-analytics',
data: {
memberId
}
}
});
});
}
async fetchLatestOpenedEvents({maxEvents} = {maxEvents: Infinity}) {

View file

@ -1,13 +0,0 @@
const queries = require('../../lib/queries');
/**
* Updates email analytics for a specific member
*
* @param {Object} options - The options object
* @param {string} options.memberId - The ID of the member to update analytics for
* @returns {Promise<Object>} The result of the aggregation query (1/0)
*/
module.exports = async function updateMemberEmailAnalytics({memberId}) {
const result = await queries.aggregateMemberStats(memberId);
return result;
};

View file

@ -1,7 +1,6 @@
const EventProcessingResult = require('./EventProcessingResult');
const logging = require('@tryghost/logging');
const errors = require('@tryghost/errors');
const {MemberEmailAnalyticsUpdateEvent} = require('@tryghost/member-events');
/**
* @typedef {import('@tryghost/email-service').EmailEventProcessor} EmailEventProcessor
@ -525,14 +524,8 @@ module.exports = class EmailAnalyticsService {
// @ts-expect-error
const memberMetric = this.prometheusClient?.getMetric('email_analytics_aggregate_member_stats_count');
for (const memberId of memberIds) {
if (this.config?.get('services:jobs:queue:enabled')) {
// With the queue enabled we will dispatch an event to update the member email analytics on the background queue (multithreaded :))
// job manager has its own metrics
await this.domainEvents.dispatch(MemberEmailAnalyticsUpdateEvent.create({memberId}));
} else {
await this.aggregateMemberStats(memberId);
memberMetric?.inc();
}
await this.aggregateMemberStats(memberId);
memberMetric?.inc();
}
endTime = Date.now() - startTime;
logging.info(`[EmailAnalytics] Aggregating for ${memberIds.length} members took ${endTime}ms`);

View file

@ -12,6 +12,5 @@ module.exports = {
SubscriptionActivatedEvent: require('./lib/SubscriptionActivatedEvent'),
SubscriptionCancelledEvent: require('./lib/SubscriptionCancelledEvent'),
OfferRedemptionEvent: require('./lib/OfferRedemptionEvent'),
MemberLinkClickEvent: require('./lib/MemberLinkClickEvent'),
MemberEmailAnalyticsUpdateEvent: require('./lib/MemberEmailAnalyticsUpdateEvent')
MemberLinkClickEvent: require('./lib/MemberLinkClickEvent')
};

View file

@ -1,23 +0,0 @@
/**
* @typedef {object} MemberEmailAnalyticsUpdateEventData
* @prop {string} memberId
*/
module.exports = class MemberEmailAnalyticsUpdateEvent {
/**
* @param {MemberEmailAnalyticsUpdateEventData} data
* @param {Date} timestamp
*/
constructor(data, timestamp) {
this.data = data;
this.timestamp = timestamp;
}
/**
* @param {MemberEmailAnalyticsUpdateEventData} data
* @param {Date} [timestamp]
*/
static create(data, timestamp) {
return new MemberEmailAnalyticsUpdateEvent(data, timestamp ?? new Date);
}
};