Experimental port to Firebase hosting
This commit is contained in:
162
modules/utils/stats.js
Normal file
162
modules/utils/stats.js
Normal file
@ -0,0 +1,162 @@
|
||||
// import data from './data';
|
||||
import * as cloudflare from './cloudflare';
|
||||
// import * as blacklist from './blacklist';
|
||||
|
||||
// function prunePackages(packagesMap) {
|
||||
// return Promise.all(
|
||||
// Object.keys(packagesMap).map(packageName =>
|
||||
// blacklist.includesPackage(packageName).then(blacklisted => {
|
||||
// if (blacklisted) {
|
||||
// delete packagesMap[packageName];
|
||||
// }
|
||||
// })
|
||||
// )
|
||||
// ).then(() => packagesMap);
|
||||
// }
|
||||
|
||||
// export function createDayKey(date) {
|
||||
// return `${date.getUTCFullYear()}-${date.getUTCMonth()}-${date.getUTCDate()}`;
|
||||
// }
|
||||
|
||||
// export function createHourKey(date) {
|
||||
// return `${createDayKey(date)}-${date.getUTCHours()}`;
|
||||
// }
|
||||
|
||||
// export function createMinuteKey(date) {
|
||||
// return `${createHourKey(date)}-${date.getUTCMinutes()}`;
|
||||
// }
|
||||
|
||||
// function createScoresMap(array) {
|
||||
// const map = {};
|
||||
|
||||
// for (let i = 0; i < array.length; i += 2) {
|
||||
// map[array[i]] = parseInt(array[i + 1], 10);
|
||||
// }
|
||||
|
||||
// return map;
|
||||
// }
|
||||
|
||||
// function getScoresMap(key, n = 100) {
|
||||
// return new Promise((resolve, reject) => {
|
||||
// data.zrevrange(key, 0, n, 'withscores', (error, value) => {
|
||||
// if (error) {
|
||||
// reject(error);
|
||||
// } else {
|
||||
// resolve(createScoresMap(value));
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
// }
|
||||
|
||||
// function getPackageRequests(date, n = 100) {
|
||||
// return getScoresMap(`stats-packageRequests-${createDayKey(date)}`, n).then(
|
||||
// prunePackages
|
||||
// );
|
||||
// }
|
||||
|
||||
// function getPackageBandwidth(date, n = 100) {
|
||||
// return getScoresMap(`stats-packageBytes-${createDayKey(date)}`, n).then(
|
||||
// prunePackages
|
||||
// );
|
||||
// }
|
||||
|
||||
// function getProtocolRequests(date) {
|
||||
// return getScoresMap(`stats-protocolRequests-${createDayKey(date)}`);
|
||||
// }
|
||||
|
||||
// function addDailyMetricsToTimeseries(timeseries) {
|
||||
// const since = new Date(timeseries.since);
|
||||
|
||||
// return Promise.all([
|
||||
// getPackageRequests(since),
|
||||
// getPackageBandwidth(since),
|
||||
// getProtocolRequests(since)
|
||||
// ]).then(results => {
|
||||
// timeseries.requests.package = results[0];
|
||||
// timeseries.bandwidth.package = results[1];
|
||||
// timeseries.requests.protocol = results[2];
|
||||
// return timeseries;
|
||||
// });
|
||||
// }
|
||||
|
||||
// function sumMaps(maps) {
|
||||
// return maps.reduce((memo, map) => {
|
||||
// Object.keys(map).forEach(key => {
|
||||
// memo[key] = (memo[key] || 0) + map[key];
|
||||
// });
|
||||
|
||||
// return memo;
|
||||
// }, {});
|
||||
// }
|
||||
|
||||
// function addDailyMetrics(result) {
|
||||
// return Promise.all(result.timeseries.map(addDailyMetricsToTimeseries)).then(
|
||||
// () => {
|
||||
// result.totals.requests.package = sumMaps(
|
||||
// result.timeseries.map(timeseries => {
|
||||
// return timeseries.requests.package;
|
||||
// })
|
||||
// );
|
||||
|
||||
// result.totals.bandwidth.package = sumMaps(
|
||||
// result.timeseries.map(timeseries => timeseries.bandwidth.package)
|
||||
// );
|
||||
|
||||
// result.totals.requests.protocol = sumMaps(
|
||||
// result.timeseries.map(timeseries => timeseries.requests.protocol)
|
||||
// );
|
||||
|
||||
// return result;
|
||||
// }
|
||||
// );
|
||||
// }
|
||||
|
||||
function extractPublicInfo(data) {
|
||||
return {
|
||||
since: data.since,
|
||||
until: data.until,
|
||||
requests: {
|
||||
all: data.requests.all,
|
||||
cached: data.requests.cached,
|
||||
country: data.requests.country,
|
||||
status: data.requests.http_status
|
||||
},
|
||||
bandwidth: {
|
||||
all: data.bandwidth.all,
|
||||
cached: data.bandwidth.cached,
|
||||
country: data.bandwidth.country
|
||||
},
|
||||
threats: {
|
||||
all: data.threats.all,
|
||||
country: data.threats.country
|
||||
},
|
||||
uniques: {
|
||||
all: data.uniques.all
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const DomainNames = ['unpkg.com', 'npmcdn.com'];
|
||||
|
||||
function fetchStats(since, until) {
|
||||
return cloudflare.getZones(DomainNames).then(zones => {
|
||||
return cloudflare
|
||||
.getZoneAnalyticsDashboard(zones, since, until)
|
||||
.then(dashboard => {
|
||||
return {
|
||||
timeseries: dashboard.timeseries.map(extractPublicInfo),
|
||||
totals: extractPublicInfo(dashboard.totals)
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// const oneMinute = 1000 * 60;
|
||||
// const oneHour = oneMinute * 60;
|
||||
// const oneDay = oneHour * 24;
|
||||
|
||||
export function getStats(since, until) {
|
||||
const promise = fetchStats(since, until);
|
||||
// return until - since > oneDay ? promise.then(addDailyMetrics) : promise;
|
||||
return promise;
|
||||
}
|
||||
Reference in New Issue
Block a user