Explain the query is trying to do
[gitter.git] / scripts / utils / list-user-presence.js
bloba7614b068be11728ff73e5b279a1037ea7ec711b
1 #!/usr/bin/env node
2 /*jslint node:true, unused:true */
3 'use strict';
5 var userService = require('gitter-web-users');
6 var troupeService = require('gitter-web-rooms/lib/troupe-service');
7 var collections = require('gitter-web-utils/lib/collections');
8 var presence = require('gitter-web-presence');
9 var _ = require('lodash');
11 var shutdown = require('shutdown');
13 var opts = require('yargs')
14   .option('username', {
15     required: true,
16     description: 'username of user to list presence for',
17     string: true
18   })
19   .help('help')
20   .alias('help', 'h').argv;
22 var sockets;
23 userService
24   .findByUsername(opts.username)
25   .then(function(user) {
26     return presence.listAllSocketsForUser(user.id);
27   })
28   .then(function(socketIds) {
29     return presence.getSockets(socketIds);
30   })
31   .then(function(_sockets) {
32     //console.log(_sockets);
33     sockets = _.sortBy(_.values(_sockets), 'createdTime');
34     var troupeIds = _.pluck(sockets, 'troupeId');
35     return troupeService.findByIdsLean(troupeIds, { uri: 1 });
36   })
37   .then(function(troupes) {
38     // just modify it in place
39     var troupeHash = collections.indexById(troupes);
40     sockets.forEach(function(socket) {
41       if (troupeHash[socket.troupeId]) {
42         socket.troupe = troupeHash[socket.troupeId].uri;
43       }
44       // this is all the same anyway
45       delete socket.userId;
46     });
47     console.log(sockets);
48     /*
49     console.log(_.countBy(sockets, function(socket) {
50       // isostring seems to contain milliseconds
51       return socket.createdTime.toISOString();
52     }));
53     */
54     console.log('Total:', sockets.length);
55   })
56   .catch(function(err) {
57     console.error(err.stack);
58   })
59   .finally(function() {
60     shutdown.shutdownGracefully();
61   });