Merge branch 'hotfix/21.56.9' into master
[gitter.git] / server / api / private / statsc.js
blobc54c61fbfb4ffaa4dbe3de5bb60ca0c705aabbf6
1 'use strict';
3 var env = require('gitter-web-env');
4 var stats = env.stats;
5 var logger = env.logger;
7 function parse(incoming) {
8   if (!incoming) return;
10   // Old way: just post an array
11   if (Array.isArray(incoming)) {
12     return { stats: incoming };
13   }
15   // New way: post a hash
16   if (incoming.stats && Array.isArray(incoming.stats)) {
17     return incoming;
18   }
21 function handleStats(incomingStats) {
22   var processed = parse(incomingStats);
23   if (!processed) return;
25   var tags;
26   if (processed.features && Array.isArray(processed.features)) {
27     tags = processed.features.map(function(feature) {
28       return 'feature_' + feature + ':1';
29     });
30   }
32   processed.stats.forEach(function(s) {
33     if (!s) return;
35     var stat = s.stat;
37     if (!stat || typeof stat !== 'string' || !stat.match(/^[\w\-\.]{2,80}$/)) {
38       /* Ignore */
39       return;
40     }
42     var statsName = 'client.' + stat;
43     if ('value' in s) {
44       var value = s.value;
45       if (typeof value !== 'number') return; /* Ignore */
46       stats.gaugeHF(statsName, value, 0.1, tags);
47       return;
48     }
50     if ('time' in s) {
51       var time = s.time;
52       if (typeof time !== 'number') return; /* Ignore */
53       stats.responseTime(statsName, time, tags);
54       return;
55     }
57     var count = s.count;
58     if (count) {
59       stats.eventHF(statsName, count || 1, 0.1, tags);
60       return;
61     }
62   });
65 module.exports = function(req, res) {
66   var stats = req.body;
68   try {
69     handleStats(stats);
70   } catch (e) {
71     logger.error('Problem dealing with stats: ' + e, { exception: e });
72   }
74   res.send('OK');