From d21302feab90dc0d439d60c20298d60dee6d6610 Mon Sep 17 00:00:00 2001 From: Montana Flynn Date: Fri, 10 Apr 2015 08:30:31 -0700 Subject: [PATCH 1/4] Add docker stars integration --- server.js | 31 +++++++++++++++++++++++++++++++ try.html | 4 ++++ 2 files changed, 35 insertions(+) diff --git a/server.js b/server.js index 38fad2c..5e14112 100644 --- a/server.js +++ b/server.js @@ -3202,6 +3202,37 @@ cache(function (data, match, sendBadge, request) { }); })); +// Docker Hub stars integration. +camp.route(/^\/docker\/stars\/([^\/]+)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, +cache(function(data, match, sendBadge, request) { + var user = match[1]; // eg, _ or mashape + var repo = match[2]; // eg, mockbin + var format = match[3]; + // Convert underscore to library for api path + user = user === '_' ? 'library' : user; + var baseURL = 'https://registry.hub.docker.com/v2/'; + var path = 'repositories/'+user+'/'+repo+'/stars/count/'; + var badgeData = getBadgeData('docker', data); + request(baseURL+path, function(err, res, buffer) { + if (err != null) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + } + try { + if (res.statusCode !== 200) { + throw new Error("Could not find repo on docker hub"); + } + badgeData.text[1] = buffer + " stars"; + badgeData.colorscheme = null; + badgeData.colorB = '#008bb8'; + sendBadge(format, badgeData); + } catch(e) { + badgeData.text[1] = 'invalid'; + sendBadge(format, badgeData); + } + }); +})); + // Any badge. camp.route(/^\/(:|badge\/)(([^-]|--)+)-(([^-]|--)+)-(([^-]|--)+)\.(svg|png|gif|jpg)$/, function(data, match, end, ask) { diff --git a/try.html b/try.html index 79dfa81..4e34c9f 100644 --- a/try.html +++ b/try.html @@ -553,6 +553,10 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable https://img.shields.io/dub/l/vibe-d.svg + Docker Stars: + + https://img.shields.io/docker/stars/mashape/mockbin.svg +

Your Badge

From 6ccb7f7058f010cdea333793e3f3dd6d0996e0f9 Mon Sep 17 00:00:00 2001 From: Montana Flynn Date: Sun, 10 May 2015 23:35:13 -0700 Subject: [PATCH 2/4] Use new API, add metrics and general improvements --- server.js | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/server.js b/server.js index 5e14112..d6241dd 100644 --- a/server.js +++ b/server.js @@ -3179,22 +3179,22 @@ cache(function (data, match, sendBadge, request) { } try { var data = JSON.parse(buffer); - if (info === 'v') { - var vdata = versionColor(data); - badgeData.text[1] = vdata.version; - badgeData.colorscheme = vdata.color; - sendBadge(format, badgeData); - } else if (info == 'l') { - var license = data.info.license; - badgeData.text[0] = 'license'; - if (license == null) { - badgeData.text[1] = 'Unknown'; - } else { - badgeData.text[1] = license; - badgeData.colorscheme = 'blue'; - } - sendBadge(format, badgeData); + if (info === 'v') { + var vdata = versionColor(data); + badgeData.text[1] = vdata.version; + badgeData.colorscheme = vdata.color; + sendBadge(format, badgeData); + } else if (info == 'l') { + var license = data.info.license; + badgeData.text[0] = 'license'; + if (license == null) { + badgeData.text[1] = 'Unknown'; + } else { + badgeData.text[1] = license; + badgeData.colorscheme = 'blue'; } + sendBadge(format, badgeData); + } } catch(e) { badgeData.text[1] = 'invalid'; sendBadge(format, badgeData); @@ -3209,20 +3209,20 @@ cache(function(data, match, sendBadge, request) { var repo = match[2]; // eg, mockbin var format = match[3]; // Convert underscore to library for api path - user = user === '_' ? 'library' : user; - var baseURL = 'https://registry.hub.docker.com/v2/'; - var path = 'repositories/'+user+'/'+repo+'/stars/count/'; + var baseURL = 'http://docker.cloudbrain.io/'; + var path = user+'/'+repo; var badgeData = getBadgeData('docker', data); request(baseURL+path, function(err, res, buffer) { if (err != null) { badgeData.text[1] = 'inaccessible'; sendBadge(format, badgeData); + return; } try { - if (res.statusCode !== 200) { - throw new Error("Could not find repo on docker hub"); - } - badgeData.text[1] = buffer + " stars"; + var data = JSON.parse(buffer); + var stars = data.stars; + var starSuffix = data.stars === 1 ? " star" : " stars" + badgeData.text[1] = metric(stars) + starSuffix; badgeData.colorscheme = null; badgeData.colorB = '#008bb8'; sendBadge(format, badgeData); From 97566abfdfb18c213e59f67a686557ea46589d7c Mon Sep 17 00:00:00 2001 From: Montana Flynn Date: Sun, 10 May 2015 23:35:22 -0700 Subject: [PATCH 3/4] Change example badge --- try.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/try.html b/try.html index 4e34c9f..9f6b692 100644 --- a/try.html +++ b/try.html @@ -554,8 +554,8 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable https://img.shields.io/dub/l/vibe-d.svg Docker Stars: - - https://img.shields.io/docker/stars/mashape/mockbin.svg + + https://img.shields.io/docker/stars/mashape/kong.svg From ee99fb87abdf5b74634d10b02a57ba9d0e089450 Mon Sep 17 00:00:00 2001 From: Montana Flynn Date: Wed, 13 May 2015 01:11:28 -0700 Subject: [PATCH 4/4] Refactor and add pulls --- server.js | 41 +++++++++++++++++++++++++++++++++++------ try.html | 4 ++++ 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/server.js b/server.js index d6241dd..e692975 100644 --- a/server.js +++ b/server.js @@ -3205,14 +3205,13 @@ cache(function (data, match, sendBadge, request) { // Docker Hub stars integration. camp.route(/^\/docker\/stars\/([^\/]+)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, cache(function(data, match, sendBadge, request) { - var user = match[1]; // eg, _ or mashape - var repo = match[2]; // eg, mockbin + var user = match[1]; // eg, mashape + var repo = match[2]; // eg, kong var format = match[3]; - // Convert underscore to library for api path var baseURL = 'http://docker.cloudbrain.io/'; - var path = user+'/'+repo; + var path = user + '/' + repo; var badgeData = getBadgeData('docker', data); - request(baseURL+path, function(err, res, buffer) { + request(baseURL + path, function(err, res, buffer) { if (err != null) { badgeData.text[1] = 'inaccessible'; sendBadge(format, badgeData); @@ -3221,7 +3220,7 @@ cache(function(data, match, sendBadge, request) { try { var data = JSON.parse(buffer); var stars = data.stars; - var starSuffix = data.stars === 1 ? " star" : " stars" + var starSuffix = stars === 1 ? " star" : " stars"; badgeData.text[1] = metric(stars) + starSuffix; badgeData.colorscheme = null; badgeData.colorB = '#008bb8'; @@ -3233,6 +3232,36 @@ cache(function(data, match, sendBadge, request) { }); })); +// Docker Hub pulls integration. +camp.route(/^\/docker\/pulls\/([^\/]+)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, +cache(function(data, match, sendBadge, request) { + var user = match[1]; // eg, mashape + var repo = match[2]; // eg, kong + var format = match[3]; + var baseURL = 'http://docker.cloudbrain.io/'; + var path = user + '/' + repo; + var badgeData = getBadgeData('docker', data); + request(baseURL + path, function(err, res, buffer) { + if (err != null) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + return; + } + try { + var data = JSON.parse(buffer); + var pulls = data.pulls; + var pullSuffix = pulls === 1 ? " pull" : " pulls"; + badgeData.text[1] = metric(pulls) + pullSuffix; + badgeData.colorscheme = null; + badgeData.colorB = '#008bb8'; + sendBadge(format, badgeData); + } catch(e) { + badgeData.text[1] = 'invalid'; + sendBadge(format, badgeData); + } + }); +})); + // Any badge. camp.route(/^\/(:|badge\/)(([^-]|--)+)-(([^-]|--)+)-(([^-]|--)+)\.(svg|png|gif|jpg)$/, function(data, match, end, ask) { diff --git a/try.html b/try.html index 9f6b692..2502071 100644 --- a/try.html +++ b/try.html @@ -557,6 +557,10 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable https://img.shields.io/docker/stars/mashape/kong.svg + Docker Pulls: + + https://img.shields.io/docker/pulls/mashape/kong.svg +

Your Badge