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:
parent
6b7f65c0b0
commit
11ca9e3009
5 changed files with 3 additions and 64 deletions
|
@ -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}) {
|
||||
|
|
|
@ -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;
|
||||
};
|
|
@ -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`);
|
||||
|
|
|
@ -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')
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
};
|
Loading…
Add table
Reference in a new issue