Skip to content

Commit 8e6a3a5

Browse files
committed
Stats: data is now grouped by field.
1 parent 4ef32be commit 8e6a3a5

3 files changed

Lines changed: 44 additions & 7 deletions

File tree

js/stats.js

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,40 @@ function sqlAggregate(fn, f){
3232
return ', '+fn+'("'+f.column+'"'+num+')'+tcast+' AS "'+f.id+'_'+fn+'"'
3333
}
3434

35+
const fnPrep = fields => data => {
36+
// - nesting data per field
37+
const pStats = {
38+
count: data.count,
39+
}
40+
if(config.wTimestamp){
41+
// - last update
42+
pStats.u_date_max = data.u_date_max
43+
// - number of updates this week
44+
pStats.u_date_week_count = data.u_date_week_count
45+
// - first insert
46+
pStats.c_date_min = data.c_date_min
47+
}
48+
if(config.wComments){
49+
pStats.nb_comments = data.nb_comments
50+
}
51+
fields.forEach((f)=>{
52+
if(dico.fieldIsNumeric(f)){
53+
let item = {
54+
min: data[f.id+'_min'],
55+
max: data[f.id+'_max'],
56+
}
57+
if(data[f.id+'_avg']){
58+
item.avg = data[f.id+'_avg']
59+
}
60+
if(data[f.id+'_sum']){
61+
item.sum = data[f.id+'_sum']
62+
}
63+
pStats[f.id] = item
64+
}
65+
})
66+
return pStats
67+
}
68+
3569
// - returns a summary on a single table
3670
function numbers(req, res) {
3771
logger.logReq('GET STATS', req);
@@ -70,7 +104,7 @@ function numbers(req, res) {
70104
sql += ', sum(nb_comments::integer)::integer AS nb_comments'
71105
}
72106
sql += sqlFROM
73-
query.runQuery(res, sql, [], true);
107+
query.runQuery(res, sql, [], true, null, null, fnPrep(m.fields));
74108
}else{
75109
errors.badRequest(res, 'Invalid model: "'+mid+'".')
76110
}

js/utils/logger.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,7 @@ module.exports = {
8686
}
8787
},
8888

89-
logCount(nbRecords){
90-
green('Sending '+nbRecords+' records.');
91-
},
89+
logCount: (nbRecords, prep) => green('Sending '+nbRecords + (prep ? ' prepared' : '') + ' records.'),
9290

9391
green: green,
9492

js/utils/query.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ pool.on('error', function (err, client) {
2525
})
2626

2727
// - run a query and return the result in request
28-
function runQuery(res, sql, values, singleRecord, format, header){
28+
function runQuery(res, sql, values, singleRecord, format, header, fnPrep = null){
2929
logger.logSQL(sql);
3030

3131
// Get a Postgres client from the connection pool
@@ -53,8 +53,13 @@ function runQuery(res, sql, values, singleRecord, format, header){
5353
}
5454
return null;
5555
}else if(singleRecord){
56-
logger.logCount(results.length || 0);
57-
return res.json(results.length?results[0]:null);
56+
if(fnPrep){
57+
logger.logCount(1, true);
58+
return res.json(fnPrep(results[0]));
59+
}else{
60+
logger.logCount(1);
61+
return res.json(results.length?results[0]:null);
62+
}
5863
}else{
5964
res.setHeader('_count', nbRecords);
6065
if(nbRecords && results[0]._full_count){

0 commit comments

Comments
 (0)