Fixes in selection of subscribers
This commit is contained in:
parent
01d1a903a2
commit
89eabea0de
3 changed files with 24 additions and 20 deletions
|
@ -318,7 +318,7 @@ export default class Status extends Component {
|
||||||
// The periodic task runs all the time, so that we don't have to worry about starting/stopping it as a reaction to the buttons.
|
// The periodic task runs all the time, so that we don't have to worry about starting/stopping it as a reaction to the buttons.
|
||||||
await this.refreshEntity();
|
await this.refreshEntity();
|
||||||
if (this.refreshTimeoutHandler) { // For some reason the task gets rescheduled if server is restarted while the page is shown. That why we have this check here.
|
if (this.refreshTimeoutHandler) { // For some reason the task gets rescheduled if server is restarted while the page is shown. That why we have this check here.
|
||||||
this.refreshTimeoutId = setTimeout(this.refreshTimeoutHandler, 2000);
|
this.refreshTimeoutId = setTimeout(this.refreshTimeoutHandler, 10000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -101,11 +101,9 @@ async function listTestUsersDTAjax(context, campaignId, params) {
|
||||||
This is supposed to produce queries like this:
|
This is supposed to produce queries like this:
|
||||||
|
|
||||||
select * from (
|
select * from (
|
||||||
(select `subscription__1`.`email`, 2 AS campaign_list_id, 1 AS list, NULL AS segment from `subscription__1` left join `campaign_messages` on
|
(select `subscription__1`.`email`, 2 AS campaign_list_id, 1 AS list, NULL AS segment from `subscription__1` where `subscription__1`.`status` = 1 and `subscription__1`.`is_test` = true)
|
||||||
`campaign_messages`.`subscription` = `subscription__1`.`id` where `subscription__1`.`status` = 1 and `subscription__1`.`is_test` = true)
|
|
||||||
UNION ALL
|
UNION ALL
|
||||||
(select `subscription__2`.`email`, 4 AS campaign_list_id, 2 AS list, NULL AS segment from `subscription__2` left join `campaign_messages` on
|
(select `subscription__2`.`email`, 4 AS campaign_list_id, 2 AS list, NULL AS segment from `subscription__2` where `subscription__2`.`status` = 1 and `subscription__2`.`is_test` = true)
|
||||||
`campaign_messages`.`subscription` = `subscription__2`.`id` where `subscription__2`.`status` = 1 and `subscription__2`.`is_test` = true)
|
|
||||||
) as `test_subscriptions` inner join `lists` on `test_subscriptions`.`list` = `lists`.`id` inner join `segments` on `test_subscriptions`.`segment` = `segments`.`id`
|
) as `test_subscriptions` inner join `lists` on `test_subscriptions`.`list` = `lists`.`id` inner join `segments` on `test_subscriptions`.`segment` = `segments`.`id`
|
||||||
inner join `namespaces` on `lists`.`namespace` = `namespaces`.`id`
|
inner join `namespaces` on `lists`.`namespace` = `namespaces`.`id`
|
||||||
|
|
||||||
|
@ -573,16 +571,17 @@ async function getSubscribersQueryGeneratorTx(tx, campaignId, onlyUnsent, batchS
|
||||||
/*
|
/*
|
||||||
This is supposed to produce queries like this:
|
This is supposed to produce queries like this:
|
||||||
|
|
||||||
select count(*) as `subscriptionsToSend` from `campaign_lists` inner join (
|
select ... from `campaign_lists` inner join (
|
||||||
select `email`, min(`campaign_list_id`) as `campaign_list_id`, max(`sent`) as `sent` from (
|
select `email`, min(`campaign_list_id`) as `campaign_list_id`, max(`sent`) as `sent` from (
|
||||||
(select `subscription__1`.`email`, 2 AS campaign_list_id, campaign_messages.id IS NOT NULL AS sent from `subscription__1` left join `campaign_messages` on
|
(select `subscription__2`.`email`, 8 AS campaign_list_id, related_campaign_messages.id IS NOT NULL AS sent from `subscription__2` left join
|
||||||
`campaign_messages`.`subscription` = `subscription__1`.`id` where `campaign_messages`.`campaign` = 1 and `campaign_messages`.`list` = 1 and `subscription__1`.`status` = 1)
|
(select * from `campaign_messages` where `campaign_messages`.`campaign` = 1 and `campaign_messages`.`list` = 2)
|
||||||
|
as `related_campaign_messages` on `related_campaign_messages`.`subscription` = `subscription__2`.`id` where `subscription__2`.`status` = 1)
|
||||||
UNION ALL
|
UNION ALL
|
||||||
(select `subscription__2`.`email`, 4 AS campaign_list_id, campaign_messages.id IS NOT NULL AS sent from `subscription__2` left join `campaign_messages` on
|
(select `subscription__1`.`email`, 9 AS campaign_list_id, related_campaign_messages.id IS NOT NULL AS sent from `subscription__1` left join
|
||||||
`campaign_messages`.`subscription` = `subscription__2`.`id` where `campaign_messages`.`campaign` = 1 and `campaign_messages`.`list` = 2 and `subscription__2`.`status` = 1)
|
(select * from `campaign_messages` where `campaign_messages`.`campaign` = 1 and `campaign_messages`.`list` = 1)
|
||||||
)
|
as `related_campaign_messages` on `related_campaign_messages`.`subscription` = `subscription__1`.`id` where `subscription__1`.`status` = 1)
|
||||||
as `pending_subscriptions_all` where `sent` = false group by `email`
|
) as `pending_subscriptions_all` where `sent` = false group by `email`)
|
||||||
) as `pending_subscriptions` on `campaign_lists`.`id` = `pending_subscriptions`.`campaign_list_id` where `campaign_lists`.`campaign` = 1 limit 1
|
as `pending_subscriptions` on `campaign_lists`.`id` = `pending_subscriptions`.`campaign_list_id` where `campaign_lists`.`campaign` = '1'
|
||||||
|
|
||||||
This was too much for Knex, so we partially construct these queries directly as strings;
|
This was too much for Knex, so we partially construct these queries directly as strings;
|
||||||
*/
|
*/
|
||||||
|
@ -595,14 +594,19 @@ async function getSubscribersQueryGeneratorTx(tx, campaignId, onlyUnsent, batchS
|
||||||
const subsTable = subscriptions.getSubscriptionTableName(cpgList.list);
|
const subsTable = subscriptions.getSubscriptionTableName(cpgList.list);
|
||||||
|
|
||||||
const sqlQry = knex.from(subsTable)
|
const sqlQry = knex.from(subsTable)
|
||||||
.leftJoin('campaign_messages', 'campaign_messages.subscription', subsTable + '.id')
|
.leftJoin(
|
||||||
|
function () {
|
||||||
|
return this.from('campaign_messages')
|
||||||
.where('campaign_messages.campaign', cpgList.campaign)
|
.where('campaign_messages.campaign', cpgList.campaign)
|
||||||
.where('campaign_messages.list', cpgList.list)
|
.where('campaign_messages.list', cpgList.list)
|
||||||
|
.as('related_campaign_messages');
|
||||||
|
},
|
||||||
|
'related_campaign_messages.subscription', subsTable + '.id')
|
||||||
.where(subsTable + '.status', SubscriptionStatus.SUBSCRIBED)
|
.where(subsTable + '.status', SubscriptionStatus.SUBSCRIBED)
|
||||||
.where(function() {
|
.where(function() {
|
||||||
addSegmentQuery(this);
|
addSegmentQuery(this);
|
||||||
})
|
})
|
||||||
.select([subsTable + '.email', knex.raw('? AS campaign_list_id', [cpgList.id]), knex.raw('campaign_messages.id IS NOT NULL AS sent')])
|
.select([subsTable + '.email', knex.raw('? AS campaign_list_id', [cpgList.id]), knex.raw('related_campaign_messages.id IS NOT NULL AS sent')])
|
||||||
.toSQL().toNative();
|
.toSQL().toNative();
|
||||||
|
|
||||||
subsQrys.push(sqlQry);
|
subsQrys.push(sqlQry);
|
||||||
|
|
|
@ -27,7 +27,7 @@ const workerBatchSize = 100;
|
||||||
const messageQueue = new Map(); // campaignId -> [{listId, email}]
|
const messageQueue = new Map(); // campaignId -> [{listId, email}]
|
||||||
const messageQueueCont = new Map(); // campaignId -> next batch callback
|
const messageQueueCont = new Map(); // campaignId -> next batch callback
|
||||||
|
|
||||||
const workerSchedulerCont = null;
|
let workerSchedulerCont = null;
|
||||||
|
|
||||||
|
|
||||||
function messagesProcessed(workerId) {
|
function messagesProcessed(workerId) {
|
||||||
|
@ -202,7 +202,7 @@ async function spawnWorker(workerId) {
|
||||||
return resolve();
|
return resolve();
|
||||||
|
|
||||||
} else if (msg.type === 'messages-processed') {
|
} else if (msg.type === 'messages-processed') {
|
||||||
messageProcessed(workerId);
|
messagesProcessed(workerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue