Skip to content

Commit f889a63

Browse files
committed
[job] to fix user merges
1 parent 64a1ca5 commit f889a63

File tree

4 files changed

+47
-3
lines changed

4 files changed

+47
-3
lines changed

api/api.js

+1
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ if (cluster.isMaster) {
177177
jobs.job('api:ping').replace().schedule('every 1 day');
178178
jobs.job('api:clear').replace().schedule('every 1 day');
179179
jobs.job('api:clearTokens').replace().schedule('every 1 day');
180+
jobs.job('api:userMerge').replace().schedule('every 1 hour on the 10th min');
180181
}, 10000);
181182
} else {
182183
const taskManager = require('./utils/taskmanager.js');

api/jobs/userMerge.js

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
'use strict';
2+
3+
const job = require('../parts/jobs/job.js'),
4+
async = require('async'),
5+
moment = require('moment'),
6+
plugins = require('../../plugins/pluginManager.js'),
7+
log = require('../utils/log.js')('job:userMerge');
8+
9+
class UserMergeJob extends job.Job {
10+
run (db, done) {
11+
log.d('Merging users ...');
12+
var startTime = moment().subtract(1, 'hour').startOf('hour');
13+
var endTime = moment(startTime).endOf("hour");
14+
log.d("query from", startTime, "to", endTime);
15+
function handleMerge(app, done){
16+
db.collection('app_user_merges' + app._id).find({cd:{$gte: startTime.toDate(), $lte: endTime.toDate()}}).toArray(function(err, res){
17+
if(!err && res && res.length){
18+
log.d('Found merges for '+app._id+' ', res);
19+
for(var i = 0; i < res.length; i++){
20+
if(res[i].merged_to){
21+
log.d('Dispatching', {app_id:app._id+"", oldUser:{uid:res[i]._id}, newUser:{uid:res[i].merged_to}});
22+
plugins.dispatch("/i/device_id", {app_id:app._id+"", oldUser:{uid:res[i]._id}, newUser:{uid:res[i].merged_to}});
23+
}
24+
}
25+
}
26+
done();
27+
});
28+
}
29+
db.collection('apps').find({}).toArray(function (err, apps) {
30+
if(!err && apps && apps.length){
31+
async.forEach(apps, handleMerge, function(){
32+
log.d('Merging users finished ...');
33+
done();
34+
});
35+
}
36+
else{
37+
done(err);
38+
}
39+
});
40+
}
41+
}
42+
43+
module.exports = UserMergeJob;

api/parts/mgmt/apps.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ var appsApi = {},
140140
common.db.collection('app_users' + app.ops[0]._id).ensureIndex({"lac":1, "ls":1}, { background: true },function(err,res){});
141141
common.db.collection('app_users' + app.ops[0]._id).ensureIndex({"tsd":1}, { background: true },function(err,res){});
142142
common.db.collection('app_users' + app.ops[0]._id).ensureIndex({"did":1}, { background: true },function(err,res){});
143-
common.db.collection('app_user_merges' + app.ops[0]._id).ensureIndex({cd: 1}, {expireAfterSeconds: 60*60*2, background: true},function(err,res){});
143+
common.db.collection('app_user_merges' + app.ops[0]._id).ensureIndex({cd: 1}, {expireAfterSeconds: 60*60*3, background: true},function(err,res){});
144144
common.db.collection('metric_changes' + app.ops[0]._id).ensureIndex({ts:-1}, { background: true },function(err,res){});
145145
common.db.collection('metric_changes' + app.ops[0]._id).ensureIndex({uid:1}, { background: true },function(err,res){});
146146
plugins.dispatch("/i/apps/create", {params:params, appId:app.ops[0]._id, data:newApp});
@@ -326,7 +326,7 @@ var appsApi = {},
326326
common.db.collection('metric_changes' + appId).ensureIndex({uid:1}, { background: true },function(err,res){});
327327
});
328328
common.db.collection('app_user_merges' + appId).drop(function() {
329-
common.db.collection('app_user_merges' + appId).ensureIndex({cd: 1}, {expireAfterSeconds: 60*60*2, background: true},function(err,res){});
329+
common.db.collection('app_user_merges' + appId).ensureIndex({cd: 1}, {expireAfterSeconds: 60*60*3, background: true},function(err,res){});
330330
});
331331
if(params.qstring.args.period == "reset"){
332332
plugins.dispatch("/i/apps/reset", {params:params, appId:appId, data:app}, deleteEvents);

bin/scripts/add_indexes.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ countlyDb.collection('apps').find({}).toArray(function (err, apps) {
2525
countlyDb.collection('app_users' + app._id).ensureIndex({"lac":1, "ls":1}, { background: true },cb);
2626
countlyDb.collection('app_users' + app._id).ensureIndex({"tsd":1}, { background: true },cb);
2727
countlyDb.collection('app_users' + app._id).ensureIndex({"did":1}, { background: true },cb);
28-
countlyDb.collection('app_user_merges' + app._id).ensureIndex({cd: 1}, {expireAfterSeconds: 60*60*2, background: true},cb);
28+
countlyDb.collection('app_user_merges' + app._id).ensureIndex({cd: 1}, {expireAfterSeconds: 60*60*3, background: true},cb);
2929
countlyDb.collection('metric_changes' + app._id).ensureIndex({ts:-1}, { background: true },cb);
3030
countlyDb.collection('metric_changes' + app._id).ensureIndex({uid:1}, { background: true },cb);
3131
}

0 commit comments

Comments
 (0)