Skip to content

Commit

Permalink
Switch charts.js to new API
Browse files Browse the repository at this point in the history
  • Loading branch information
pvorb committed Nov 22, 2017
1 parent 3f31701 commit 2e41a3f
Showing 1 changed file with 31 additions and 78 deletions.
109 changes: 31 additions & 78 deletions src/main/js/charts.js
Original file line number Diff line number Diff line change
Expand Up @@ -275,27 +275,18 @@ function requestData(url) {
});
}

function getSingleUrl(pkg, fromDate, toDate) {
return '/downloads/range/' + dateToDayKey(fromDate) + ':' + dateToDayKey(toDate) + '/' + encodeURIComponent(pkg);
}

function getDownloadsUrl(pkg, fromDate, toDate) {
var upperLimit = moment(fromDate).add(18, 'months');

var allUrls = [ ];
function getDownloadsUrl(packageNames, fromDate, untilDate) {

var startFrom = fromDate;
var startTo = upperLimit;

while (startTo < toDate) {
allUrls.push(getSingleUrl(pkg, startFrom, startTo));
startFrom = moment(startTo).add(1, 'day').toDate();
startTo = moment(startTo).add(18, 'months').toDate();
}
console.dir(packageNames);

allUrls.push(getSingleUrl(pkg, startFrom, toDate));
var packageNamesQueryString = '';
$.each(packageNames, function (i, packageName) {
packageNamesQueryString += 'package=' + encodeURIComponent(packageName) + '&';
});

return allUrls;
return '/api/download-counts?' + packageNamesQueryString
+ 'from=' + dateToDayKey(fromDate)
+ '&until=' + dateToDayKey(untilDate);
}

function sumUpDownloadCounts(downloadData) {
Expand All @@ -313,9 +304,9 @@ function sumUpDownloadCounts(downloadData) {
return {total: summedUpDownloads};
}

function drawCharts(downloadData, fromDate, toDate) {
function drawCharts(downloadData, fromDate, untilDate) {

var dateRange = getDateRange(fromDate, toDate);
var dateRange = getDateRange(fromDate, untilDate);

var dailyDownloadData = getDailyDownloadData(downloadData, dateRange);
showChart('days', 'Downloads per day', dailyDownloadData, 'datetime', 'Date');
Expand All @@ -334,7 +325,7 @@ function drawCharts(downloadData, fromDate, toDate) {

}

function showTotalDownloads(sanitizedData, fromDate, toDate, showSum) {
function showTotalDownloads(sanitizedData, fromDate, untilDate, showSum) {

var sum = 0;
var $table = $('<table class="alternating"><tr><td>package</td><td>downloads</td></tr></table>');
Expand All @@ -359,7 +350,7 @@ function showTotalDownloads(sanitizedData, fromDate, toDate, showSum) {

if (showSum) {
packageHtml = '<a href="charts.html?package=' + total.packageName
+ '&from=' + dateToDayKey(fromDate) + '&to=' + dateToDayKey(toDate) + '">'
+ '&from=' + dateToDayKey(fromDate) + '&to=' + dateToDayKey(untilDate) + '">'
+ total.packageName + '</a>';
} else {
packageHtml = total.packageName;
Expand All @@ -376,60 +367,22 @@ function showTotalDownloads(sanitizedData, fromDate, toDate, showSum) {
.after($table)
.after('<p>Total number of downloads between <em>'
+ dateToDayKey(fromDate) + '</em> and <em>'
+ dateToDayKey(toDate) + '</em>:');
+ dateToDayKey(untilDate) + '</em>:');
}

function getDownloadData(packageNames, fromDate, toDate) {
function getDownloadData(packageNames, fromDate, untilDate) {
return new Promise(function (accept, reject) {
var requestArray = [];
var packageNameToRequestIndex = [ ];
$.each(packageNames, function (index, packageName) {

var allUrls = getDownloadsUrl(packageName, fromDate, toDate);
var downloadsUrl = getDownloadsUrl(packageNames, fromDate, untilDate);

var allDataReqs = allUrls.map(function (url) {
return requestData(url)
});
var downloadData = requestData(downloadsUrl);

$.merge(requestArray, allDataReqs);
allUrls.map(function () {
packageNameToRequestIndex.push(packageName);
});

});

$.when.apply(this, requestArray).then(function () {

var requestResults = {};
if (requestArray.length === 1) {
// required: a single request needs to be handled differently,
// as compared to when multiple requests are made
requestResults[packageNameToRequestIndex[0]] = [ arguments[0] ];
} else {
$.each(arguments, function (index, response) {
var packageName = packageNameToRequestIndex[index];
if (requestResults[packageName] === undefined) {
requestResults[packageName] = [];
}
requestResults[packageName].push(response[0]);
});
}

var sanitizedData = {};
$.each(requestResults, function (packageName, result) {
sanitizedData[packageName] = {};
result.forEach(function (res) {
objectAssign(sanitizedData[packageName], sanitizeData(res));
});
});

return accept(sanitizedData);
});
return accept(downloadData);
});
}


function showPackageStats(packageNames, fromDate, toDate) {
function showPackageStats(packageNames, fromDate, untilDate) {

var joinedPackageNames = packageNames.join(', ');

Expand All @@ -451,21 +404,21 @@ function showPackageStats(packageNames, fromDate, toDate) {
$npmStat.after('<p id="loading"><img src="loading.gif" /></p>');

if (packageNames.length === 1) {
$npmStat.after('<p><a href="https://npmjs.org/package/' + packageNames + '">View package on npm</a></p>');
$npmStat.after('<p><a href="https://www.npmjs.com/package/' + packageNames + '">View package on npm</a></p>');
}

getDownloadData(packageNames, fromDate, toDate).then(function (sanitizedData) {
getDownloadData(packageNames, fromDate, untilDate).then(function (downloadData) {

$('#loading').remove();

showTotalDownloads(sanitizedData, fromDate, toDate, false);
showTotalDownloads(downloadData, fromDate, untilDate, false);

drawCharts(sanitizedData, fromDate, toDate);
drawCharts(downloadData, fromDate, untilDate);

});
}

function showAuthorStats(authorName, fromDate, toDate) {
function showAuthorStats(authorName, fromDate, untilDate) {
$('h2').html('Downloads for author <em>' + authorName + '</em>');
$nameType.val('author');
$('#name')
Expand All @@ -479,15 +432,15 @@ function showAuthorStats(authorName, fromDate, toDate) {
getPackagesForAuthor(authorName).then(function (response) {
var packageNames = getPackageList(response);

getDownloadData(packageNames, fromDate, toDate).then(function (sanitizedData) {
getDownloadData(packageNames, fromDate, untilDate).then(function (sanitizedData) {

$('#loading').remove();

showTotalDownloads(sanitizedData, fromDate, toDate, true);
showTotalDownloads(sanitizedData, fromDate, untilDate, true);

var summedUpDownloadCounts = sumUpDownloadCounts(sanitizedData);

drawCharts(summedUpDownloadCounts, fromDate, toDate);
drawCharts(summedUpDownloadCounts, fromDate, untilDate);

});

Expand Down Expand Up @@ -532,8 +485,8 @@ $(function () {
return;
}

var toDate = initDate(urlParams, 'to');
var fromDate = initDate(urlParams, 'from', toDate);
var untilDate = initDate(urlParams, 'to');
var fromDate = initDate(urlParams, 'from', untilDate);

if (packageNames) {
if (!(packageNames instanceof Array)) {
Expand All @@ -545,10 +498,10 @@ $(function () {
});

$('title').html('npm-stat: ' + packageNames.join(', '));
showPackageStats(packageNames, fromDate, toDate);
showPackageStats(packageNames, fromDate, untilDate);
} else if (authorName) {
$('title').html('npm-stat: ' + authorName);
showAuthorStats(authorName, fromDate, toDate);
showAuthorStats(authorName, fromDate, untilDate);
}
});

Expand Down

0 comments on commit 2e41a3f

Please sign in to comment.