diff --git a/db/proc.sql b/db/proc.sql index 34cad70..168f6ba 100644 --- a/db/proc.sql +++ b/db/proc.sql @@ -85,6 +85,11 @@ BEGIN INTO _result FROM daily WHERE day >= _start AND day < _end1; + ELSIF _package = 'R' THEN + SELECT _start AS start, _end AS end, SUM(count) AS downloads + INTO _result + FROM dailyr WHERE day >= _start AND day < _end1; + ELSE SELECT _start AS start, _end AS end, SUM(count) AS downloads, _package AS package INTO _result @@ -155,6 +160,16 @@ BEGIN ORDER BY daily.day ) row; + ELSIF _package = 'R' THEN + SELECT json_agg(row) AS downloads, _start AS start, _end AS end + INTO _result FROM ( + SELECT dailyr.day AS day, dailyr.os AS os, dailyr.version AS version, + sum(dailyr.count) AS downloads + FROM dailyr WHERE dailyr.day >= _start AND dailyr.day < _end1 + GROUP BY dailyr.day, dailyr.os, dailyr.version + ORDER BY dailyr.day + ) row; + ELSE SELECT json_agg(row) AS downloads, _start AS start, _end AS end, _package AS package diff --git a/routes/downloads.js b/routes/downloads.js index d0c8fdd..7a84d7c 100644 --- a/routes/downloads.js +++ b/routes/downloads.js @@ -35,36 +35,47 @@ function do_query(res, which, interval, package) { return true; } - var allres = [ ] - var reslen = package ? package.length : 1 - function save_result(result) { - allres.push(result) - if (allres.length == reslen) { - done() - res.set(200) - res.send(allres) - res.end(); - } + // Remove 'R' if not by itself + if (package && package.length && + (package.length != 1 || package[0] != 'R')) { + package = package.filter(function(x) { return x != 'R'; }); } - var fun = which == 'total' ? 'cl_total_json' : 'cl_daily_json'; - (package || ['NULL']).map(function(pkg) { - var q = 'SELECT ' + fun + '(\'' + interval + '\', ' + pkg + ')'; + do_pkg_query(res, which, interval, package, client, done); + }); +} - client.query(q, function(err, result) { - if (err) { - done(); - res.set(500); - res.end('{ "error": Cannot query DB", ' + - ' "email": "csardi.gabor+cranlogs@gmail.com" }'); - return true; - } +function do_pkg_query(res, which, interval, package, client, done) { + + var allres = [ ] + var reslen = package ? package.length : 1 + function save_result(result) { + allres.push(result) + if (allres.length == reslen) { + done() + res.set(200) + res.send(allres) + res.end(); + } + } - save_result(result['rows'][0][fun]) + var fun = which == 'total' ? 'cl_total_json' : 'cl_daily_json'; + (package || ['NULL']).map(function(pkg) { + var q = 'SELECT ' + fun + '(\'' + interval + '\', ' + pkg + ')'; + + client.query(q, function(err, result) { + if (err) { + done(); + res.set(500); + res.end('{ "error": Cannot query DB", ' + + ' "email": "csardi.gabor+cranlogs@gmail.com" }'); + return true; + } + + save_result(result['rows'][0][fun]) - }) }) - }); + }) } router.get('/', function(req, res) {