Return top scores already sorted

This commit is contained in:
MICHAEL JACKSON 2017-05-30 09:20:45 -07:00
parent bca5babb7d
commit 9dc0630bb3
2 changed files with 27 additions and 12 deletions

View File

@ -52,16 +52,15 @@ Promise.all([
prettyBytes(results[3])
)
sumTopScores(pastSevenDays.map(date => `stats-packageRequests-${createDayKey(date)}`)).then(results => {
sumTopScores(pastSevenDays.map(date => `stats-packageRequests-${createDayKey(date)}`)).then(topPackages => {
console.log('\n## Top Packages This Week')
const topPackages = Object.keys(results).sort((a, b) => results[b] - results[a])
topPackages.forEach(result => {
result[1] = result[1].toLocaleString()
})
console.log(
table(topPackages.map(packageName => [
packageName,
results[packageName].toLocaleString()
]))
table(topPackages)
)
process.exit()

View File

@ -36,7 +36,7 @@ const createScoresMap = (array) => {
return map
}
const getTopScores = (key, n = 10) =>
const getScoresMap = (key, n = 10) =>
new Promise((resolve, reject) => {
db.zrevrange(key, 0, n, 'withscores', (error, value) => {
if (error) {
@ -47,12 +47,28 @@ const getTopScores = (key, n = 10) =>
})
})
const createTopScores = (map) =>
Object.keys(map)
.reduce((memo, key) => memo.concat([ [ key, map[key] ] ]), [])
.sort((a, b) => b[1] - a[1])
const getTopScores = (key, n) =>
getScoresMap(key, n).then(createTopScores)
const sumMaps = (maps) =>
maps.reduce((memo, map) => {
Object.keys(map).forEach(key => {
memo[key] = (memo[key] || 0) + map[key]
})
return memo
}, {})
const sumTopScores = (keys, n) =>
Promise.all(keys.map(key => getTopScores(key, n))).then(values => {
return values.reduce((memo, map) => {
Object.keys(map).forEach(key => {
memo[key] = (memo[key] || 0) + map[key]
})
Promise.all(keys.map(key => getScoresMap(key, n)))
.then(sumMaps)
.then(createTopScores)
return memo
}, {})