Fix config formatting
[gitter.git] / scripts / useful-queries / stats-for-tag.js
blob082c18b579308a60f6fab0fb2a8cbe279e3a2243
1 'use strict';
2 load('./csv.js');
3 rs.slaveOk();
5 var d0 = new Date('2016-08-01T00:00:00Z');
6 var d1 = new Date('2016-09-01T00:00:00Z');
7 var d2 = new Date('2016-10-01T00:00:00Z');
9 // var horizonTimestamp = Date.now() - 86400000 * 31;
11 function getStat(tag, start, end) {
12   var e = db.tagsynonyms.find({ synonym: tag }).map(function(f) {
13     return f.name;
14   });
15   var bases = [tag].concat(e);
16   var synonyms = db.tagsynonyms.find({ name: { $in: bases } }).map(function(f) {
17     return f.synonyms;
18   });
19   if (synonyms) {
20     synonyms.forEach(function(s) {
21       s.forEach(function(q) {
22         bases.push(q);
23       });
24     });
25   }
27   var troupeIds = db.troupes.find({ tags: { $in: bases } }, { _id: 1 }).map(function(f) {
28     return f._id;
29   });
31   var aggr = db.chatmessages.aggregate([
32     {
33       $match: {
34         _id: {
35           $gt: createIdForTimestampString(start),
36           $lt: createIdForTimestampString(end)
37         },
38         $and: [
39           {
40             toTroupeId: { $in: troupeIds },
41             sent: {
42               $gt: new Date(start),
43               $lt: new Date(end)
44             }
45           },
46           {
47             sent: { $type: 'date' }
48           }
49         ]
50       }
51     },
52     {
53       $group: {
54         _id: 1,
55         userIds: { $addToSet: '$fromUserId' },
56         roomIds: { $addToSet: '$toTroupeId' },
57         count: { $sum: 1 }
58       }
59     },
60     {
61       $project: {
62         _id: 0,
63         userIds: { $size: '$userIds' },
64         roomIds: { $size: '$roomIds' },
65         count: 1
66       }
67     }
68   ]);
70   return aggr.toArray()[0];
73 var tags = [
74   'JavaScript',
75   'Java',
76   'Android',
77   'Python',
78   'C#',
79   'PHP',
80   'JQuery',
81   'C++',
82   'HTML',
83   'iOS',
84   'CSS',
85   'C',
86   'Git',
87   'MySQL',
88   'AngularJS',
89   'SQL',
90   'dotNET',
91   'Swift',
92   'Objective-C',
93   'Node.js',
94   'R',
95   'Ruby'
96 ].map(function(f) {
97   return f.toLowerCase();
98 });
100 print(['tag', 'p1-users', 'p1-rooms', 'p1-msgs', 'p0-users', 'p0-rooms', 'p0-count'].join(','));
102 tags.forEach(function(tag) {
103   var s = getStat(tag, d1, d2);
104   var t = getStat(tag, d0, d1);
105   print([tag, s.userIds, s.roomIds, s.count, t.userIds, t.roomIds, t.count].join(','));