From 59e10ddeb03f463cf31119f5763ca0a377cb565e Mon Sep 17 00:00:00 2001 From: sagiegurari Date: Tue, 15 Sep 2015 17:41:41 +0300 Subject: [PATCH 1/5] total github downloads for all releases + all tags --- index.html | 8 ++++++++ server.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ try.html | 8 ++++++++ 3 files changed, 62 insertions(+) diff --git a/index.html b/index.html index 5601df2..07afae8 100644 --- a/index.html +++ b/index.html @@ -212,6 +212,10 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable

Downloads

+ + + + @@ -913,6 +917,10 @@ is where the current server got started. PeterDaveHello +
+ + sagiegurari +

:wq

diff --git a/server.js b/server.js index 7ebab7c..0ad8d05 100644 --- a/server.js +++ b/server.js @@ -2599,6 +2599,52 @@ cache(function(data, match, sendBadge, request) { }); })); + +// GitHub all releases download count integration. +camp.route(/^\/github\/downloads\/([^\/]+)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, +cache(function(data, match, sendBadge, request) { + var user = match[1]; // eg, atom/atom + var repo = match[2]; + var format = match[3]; + var apiUrl = 'https://api.github.com/repos/' + user + '/' + repo + '/releases'; + // Using our OAuth App secret grants us 5000 req/hour + // instead of the standard 60 req/hour. + if (serverSecrets) { + apiUrl += '?client_id=' + serverSecrets.gh_client_id + + '&client_secret=' + serverSecrets.gh_client_secret; + } + var badgeData = getBadgeData('downloads', data); + if (badgeData.template === 'social') { + badgeData.logo = badgeData.logo || logos.github; + } + // A special User-Agent is required: + // http://developer.github.com/v3/#user-agent-required + request(apiUrl, { headers: githubHeaders }, function(err, res, buffer) { + if (err) { + badgeData.text[1] = 'inaccessible'; + return sendBadge(format, badgeData); + } + try { + if ((+res.headers['x-ratelimit-remaining']) === 0) { + return; // Hope for the best in the cache. + } + var data = JSON.parse(buffer); + var downloads = 0; + data.forEach(function (tagData) { + tagData.assets.forEach(function (asset) { + downloads += asset.download_count; + }); + }); + badgeData.text[1] = metric(downloads) + ' total'; + badgeData.colorscheme = 'brightgreen'; + sendBadge(format, badgeData); + } catch(e) { + badgeData.text[1] = 'none'; + sendBadge(format, badgeData); + } + }); +})); + // GitHub release-download-count integration. camp.route(/^\/github\/downloads\/([^\/]+)\/([^\/]+)\/([^\/]+)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, cache(function(data, match, sendBadge, request) { diff --git a/try.html b/try.html index 919d7f0..4663040 100644 --- a/try.html +++ b/try.html @@ -211,6 +211,10 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable
Github All Releases: https://img.shields.io/github/downloads/atom/atom.svg
Github Releases: https://img.shields.io/github/downloads/atom/atom/latest/total.svg

Downloads

+ + + + @@ -920,6 +924,10 @@ is where the current server got started. PeterDaveHello +
+ + sagiegurari +

:wq

From 8c2652fb2c60d55f8809112a959e63b5bfa4aa54 Mon Sep 17 00:00:00 2001 From: sagiegurari Date: Mon, 21 Sep 2015 22:21:15 +0200 Subject: [PATCH 2/5] merge github download URLs and handler --- index.html | 4 +-- server.js | 87 ++++++++++++++++++++---------------------------------- try.html | 4 +-- 3 files changed, 36 insertions(+), 59 deletions(-) diff --git a/index.html b/index.html index 07afae8..adb1133 100644 --- a/index.html +++ b/index.html @@ -213,8 +213,8 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable

Downloads

Github All Releases: https://img.shields.io/github/downloads/atom/atom.svg
Github Releases: https://img.shields.io/github/downloads/atom/atom/latest/total.svg
- - + + diff --git a/server.js b/server.js index 0ad8d05..7407a9a 100644 --- a/server.js +++ b/server.js @@ -2599,52 +2599,6 @@ cache(function(data, match, sendBadge, request) { }); })); - -// GitHub all releases download count integration. -camp.route(/^\/github\/downloads\/([^\/]+)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, -cache(function(data, match, sendBadge, request) { - var user = match[1]; // eg, atom/atom - var repo = match[2]; - var format = match[3]; - var apiUrl = 'https://api.github.com/repos/' + user + '/' + repo + '/releases'; - // Using our OAuth App secret grants us 5000 req/hour - // instead of the standard 60 req/hour. - if (serverSecrets) { - apiUrl += '?client_id=' + serverSecrets.gh_client_id - + '&client_secret=' + serverSecrets.gh_client_secret; - } - var badgeData = getBadgeData('downloads', data); - if (badgeData.template === 'social') { - badgeData.logo = badgeData.logo || logos.github; - } - // A special User-Agent is required: - // http://developer.github.com/v3/#user-agent-required - request(apiUrl, { headers: githubHeaders }, function(err, res, buffer) { - if (err) { - badgeData.text[1] = 'inaccessible'; - return sendBadge(format, badgeData); - } - try { - if ((+res.headers['x-ratelimit-remaining']) === 0) { - return; // Hope for the best in the cache. - } - var data = JSON.parse(buffer); - var downloads = 0; - data.forEach(function (tagData) { - tagData.assets.forEach(function (asset) { - downloads += asset.download_count; - }); - }); - badgeData.text[1] = metric(downloads) + ' total'; - badgeData.colorscheme = 'brightgreen'; - sendBadge(format, badgeData); - } catch(e) { - badgeData.text[1] = 'none'; - sendBadge(format, badgeData); - } - }); -})); - // GitHub release-download-count integration. camp.route(/^\/github\/downloads\/([^\/]+)\/([^\/]+)\/([^\/]+)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, cache(function(data, match, sendBadge, request) { @@ -2653,8 +2607,13 @@ cache(function(data, match, sendBadge, request) { var tag = match[3]; var asset_name = match[4].toLowerCase(); // eg. total, atom-amd64.deb, atom.x86_64.rpm var format = match[5]; - var release_path = tag !== 'latest' ? 'tags/' + match[3] : 'latest'; - var apiUrl = 'https://api.github.com/repos/' + user + '/' + repo + '/releases/' + release_path; + var apiUrl = 'https://api.github.com/repos/' + user + '/' + repo + '/releases'; + var total = true; + if (tag !== 'total') { + total = false; + var release_path = tag !== 'latest' ? 'tags/' + match[3] : 'latest'; + apiUrl = apiUrl + '/' + release_path; + } // Using our OAuth App secret grants us 5000 req/hour // instead of the standard 60 req/hour. if (serverSecrets) { @@ -2678,14 +2637,32 @@ cache(function(data, match, sendBadge, request) { } var data = JSON.parse(buffer); var downloads = 0; - data.assets.forEach(function (asset) { - if (asset_name === 'total' || asset_name === asset.name.toLowerCase()) { - downloads += asset.download_count; + + var label; + if (total) { + data.forEach(function (tagData) { + tagData.assets.forEach(function (asset) { + if (asset_name === 'total' || asset_name === asset.name.toLowerCase()) { + downloads += asset.download_count; + } + }); + }); + + label = 'total'; + if (asset_name !== 'total') { + label += ' ' + '[' + asset_name + ']'; + } + } else { + data.assets.forEach(function (asset) { + if (asset_name === 'total' || asset_name === asset.name.toLowerCase()) { + downloads += asset.download_count; + } + }); + + label = tag !== 'latest' ? tag : ''; + if (asset_name !== 'total') { + label += ' ' + '[' + asset_name + ']'; } - }); - var label = tag !== 'latest' ? tag : ''; - if (asset_name !== 'total') { - label += ' ' + '[' + asset_name + ']'; } badgeData.text[1] = metric(downloads) + ' ' + label; badgeData.colorscheme = 'brightgreen'; diff --git a/try.html b/try.html index 4663040..835b41a 100644 --- a/try.html +++ b/try.html @@ -212,8 +212,8 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable

Downloads

Github All Releases: https://img.shields.io/github/downloads/atom/atom.svghttps://img.shields.io/github/downloads/atom/atom/total/total.svg
Github Releases:
- - + + From ec97d7a50694a776e25b223c34a5bfe0b9844ca1 Mon Sep 17 00:00:00 2001 From: sagiegurari Date: Mon, 12 Oct 2015 19:04:23 +0200 Subject: [PATCH 3/5] modify total github downloads URL pattern --- index.html | 4 ++-- server.js | 28 ++++++++++++++++++++-------- try.html | 4 ++-- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/index.html b/index.html index adb1133..cd8b212 100644 --- a/index.html +++ b/index.html @@ -213,8 +213,8 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable

Downloads

Github All Releases: https://img.shields.io/github/downloads/atom/atom.svghttps://img.shields.io/github/downloads/atom/atom/total/total.svg
Github Releases:
- - + + diff --git a/server.js b/server.js index 7407a9a..1f74111 100644 --- a/server.js +++ b/server.js @@ -2600,18 +2600,30 @@ cache(function(data, match, sendBadge, request) { })); // GitHub release-download-count integration. -camp.route(/^\/github\/downloads\/([^\/]+)\/([^\/]+)\/([^\/]+)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, +camp.route(/^\/github\/downloads\/([^\/]+)\/([^\/]+)\/([^\/]+)(\/[^\/]+)?\.(svg|png|gif|jpg|json)$/, cache(function(data, match, sendBadge, request) { var user = match[1]; // eg, qubyte/rubidium var repo = match[2]; - var tag = match[3]; - var asset_name = match[4].toLowerCase(); // eg. total, atom-amd64.deb, atom.x86_64.rpm - var format = match[5]; - var apiUrl = 'https://api.github.com/repos/' + user + '/' + repo + '/releases'; + + var tag; + var asset_name; + var format; var total = true; - if (tag !== 'total') { - total = false; - var release_path = tag !== 'latest' ? 'tags/' + match[3] : 'latest'; + if (match.length >= 6) { + tag = match[3]; + asset_name = match[4]; // eg. total, atom-amd64.deb, atom.x86_64.rpm + format = match[5]; + + var total = false; + } else { + asset_name = match[3]; // eg. total, atom-amd64.deb, atom.x86_64.rpm + format = match[4]; + } + asset_name = asset_name.toLowerCase(); + + var apiUrl = 'https://api.github.com/repos/' + user + '/' + repo + '/releases'; + if (!total) { + var release_path = tag !== 'latest' ? 'tags/' + tag : 'latest'; apiUrl = apiUrl + '/' + release_path; } // Using our OAuth App secret grants us 5000 req/hour diff --git a/try.html b/try.html index 835b41a..71a4668 100644 --- a/try.html +++ b/try.html @@ -212,8 +212,8 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable

Downloads

Github All Releases: https://img.shields.io/github/downloads/atom/atom/total/total.svghttps://img.shields.io/github/downloads/atom/atom/total.svg
Github Releases:
- - + + From 7fee788957bbfe1ef41ea4720ec1633621d2c117 Mon Sep 17 00:00:00 2001 From: sagiegurari Date: Wed, 14 Oct 2015 00:09:12 +0200 Subject: [PATCH 4/5] modify total github downloads URL pattern to support null tag --- server.js | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/server.js b/server.js index 1f74111..c79b964 100644 --- a/server.js +++ b/server.js @@ -2600,26 +2600,18 @@ cache(function(data, match, sendBadge, request) { })); // GitHub release-download-count integration. -camp.route(/^\/github\/downloads\/([^\/]+)\/([^\/]+)\/([^\/]+)(\/[^\/]+)?\.(svg|png|gif|jpg|json)$/, +camp.route(/^\/github\/downloads\/([^\/]+)\/([^\/]+)(\/[^\/]+)?\/([^\/]+)\.(svg|png|gif|jpg|json)$/, cache(function(data, match, sendBadge, request) { var user = match[1]; // eg, qubyte/rubidium var repo = match[2]; - var tag; - var asset_name; - var format; + var tag = match[3]; //null for all releases + var asset_name = match[4].toLowerCase(); // eg. total, atom-amd64.deb, atom.x86_64.rpm + var format = match[5]; var total = true; - if (match.length >= 6) { - tag = match[3]; - asset_name = match[4]; // eg. total, atom-amd64.deb, atom.x86_64.rpm - format = match[5]; - - var total = false; - } else { - asset_name = match[3]; // eg. total, atom-amd64.deb, atom.x86_64.rpm - format = match[4]; + if (tag) { + total = false; } - asset_name = asset_name.toLowerCase(); var apiUrl = 'https://api.github.com/repos/' + user + '/' + repo + '/releases'; if (!total) { From 6684a5cb8e41035c33001b9ee79c64bf050aa578 Mon Sep 17 00:00:00 2001 From: sagiegurari Date: Thu, 22 Oct 2015 16:13:24 +0200 Subject: [PATCH 5/5] ensure tag doesn't have leading '/' --- server.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server.js b/server.js index c79b964..d2e8b47 100644 --- a/server.js +++ b/server.js @@ -2608,6 +2608,11 @@ cache(function(data, match, sendBadge, request) { var tag = match[3]; //null for all releases var asset_name = match[4].toLowerCase(); // eg. total, atom-amd64.deb, atom.x86_64.rpm var format = match[5]; + + if (tag && (tag.indexOf('/') !== -1)) { + tag = tag.split('/').join(''); + } + var total = true; if (tag) { total = false;
Github All Releases: https://img.shields.io/github/downloads/atom/atom/total/total.svghttps://img.shields.io/github/downloads/atom/atom/total.svg
Github Releases: