Full plugins and server redesign
- Languages, issues and pr are now plugins (but enabled by default for retro-compatibility) - Query parameters are now parsed correctly - Redesigned server index with vue.js
This commit is contained in:
41
src/plugins/followup/index.mjs
Normal file
41
src/plugins/followup/index.mjs
Normal file
@@ -0,0 +1,41 @@
|
||||
//Setup
|
||||
export default function ({login, data, computed, pending, q}, {enabled = true} = {}) {
|
||||
//Check if plugin is enabled and requirements are met
|
||||
if (!enabled)
|
||||
return computed.plugins.followup = null
|
||||
if (("followup" in q)&&(!q.followup))
|
||||
return computed.plugins.followup = null
|
||||
console.debug(`metrics/compute/${login}/plugins > followup`)
|
||||
computed.svg.height += 70
|
||||
|
||||
//Plugin execution
|
||||
pending.push(new Promise(async solve => {
|
||||
try {
|
||||
//Define getters
|
||||
const followup = {
|
||||
issues:{
|
||||
get count() { return this.open + this.closed },
|
||||
get open() { return computed.repositories.issues_open },
|
||||
get closed() { return computed.repositories.issues_closed },
|
||||
},
|
||||
pr:{
|
||||
get count() { return this.open + this.merged },
|
||||
get open() { return computed.repositories.pr_open },
|
||||
get merged() { return computed.repositories.pr_merged }
|
||||
}
|
||||
}
|
||||
//Save results
|
||||
computed.plugins.followup = followup
|
||||
console.debug(`metrics/compute/${login}/plugins > followup > success`)
|
||||
console.debug(JSON.stringify(computed.plugins.followup))
|
||||
solve()
|
||||
}
|
||||
catch (error) {
|
||||
//Generic error
|
||||
computed.plugins.followup = {error:`An error occured`}
|
||||
console.debug(`metrics/compute/${login}/plugins > followup > error`)
|
||||
console.debug(error)
|
||||
solve()
|
||||
}
|
||||
}))
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
//Imports
|
||||
import followup from "./followup/index.mjs"
|
||||
import habits from "./habits/index.mjs"
|
||||
import languages from "./languages/index.mjs"
|
||||
import lines from "./lines/index.mjs"
|
||||
import pagespeed from "./pagespeed/index.mjs"
|
||||
import selfskip from "./selfskip/index.mjs"
|
||||
@@ -7,7 +9,9 @@
|
||||
|
||||
//Exports
|
||||
export default {
|
||||
followup,
|
||||
habits,
|
||||
languages,
|
||||
lines,
|
||||
pagespeed,
|
||||
selfskip,
|
||||
|
||||
42
src/plugins/languages/index.mjs
Normal file
42
src/plugins/languages/index.mjs
Normal file
@@ -0,0 +1,42 @@
|
||||
//Setup
|
||||
export default function ({login, data, computed, pending, q}, {enabled = true} = {}) {
|
||||
//Check if plugin is enabled and requirements are met
|
||||
if (!enabled)
|
||||
return computed.plugins.languages = null
|
||||
if (("languages" in q)&&(!q.languages))
|
||||
return computed.plugins.languages = null
|
||||
console.debug(`metrics/compute/${login}/plugins > languages`)
|
||||
computed.svg.height += 90
|
||||
|
||||
//Plugin execution
|
||||
pending.push(new Promise(async solve => {
|
||||
try {
|
||||
//Iterate through user's repositories and retrieve languages data
|
||||
const languages = {colors:{}, total:0, stats:{}}
|
||||
for (const repository of data.user.repositories.nodes) {
|
||||
for (const {size, node:{color, name}} of Object.values(repository.languages.edges)) {
|
||||
languages.stats[name] = (languages.stats[name] || 0) + size
|
||||
languages.colors[name] = color || "#ededed"
|
||||
languages.total += size
|
||||
}
|
||||
}
|
||||
//Compute languages stats
|
||||
Object.keys(languages.stats).map(name => languages.stats[name] /= languages.total)
|
||||
languages.favorites = Object.entries(languages.stats).sort(([an, a], [bn, b]) => b - a).slice(0, 8).map(([name, value]) => ({name, value, color:languages.colors[name], x:0}))
|
||||
for (let i = 1; i < languages.favorites.length; i++)
|
||||
languages.favorites[i].x = languages.favorites[i-1].x + languages.favorites[i-1].value
|
||||
//Save results
|
||||
computed.plugins.languages = languages
|
||||
console.debug(`metrics/compute/${login}/plugins > languages > success`)
|
||||
console.debug(JSON.stringify(computed.plugins.languages))
|
||||
solve()
|
||||
}
|
||||
catch (error) {
|
||||
//Generic error
|
||||
computed.plugins.languages = {error:`An error occured`}
|
||||
console.debug(`metrics/compute/${login}/plugins > languages > error`)
|
||||
console.debug(error)
|
||||
solve()
|
||||
}
|
||||
}))
|
||||
}
|
||||
@@ -20,6 +20,7 @@
|
||||
}
|
||||
//Save results
|
||||
computed.plugins.selfskip = {commits}
|
||||
computed.commits -= commits
|
||||
console.debug(`metrics/compute/${login}/plugins > selfskip > success`)
|
||||
console.debug(JSON.stringify(computed.plugins.selfskip))
|
||||
solve()
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
if (!q.traffic)
|
||||
return computed.plugins.traffic = null
|
||||
console.debug(`metrics/compute/${login}/plugins > traffic`)
|
||||
computed.svg.height += 20
|
||||
computed.svg.height += !q.lines ? 20 : 0
|
||||
|
||||
//Plugin execution
|
||||
pending.push(new Promise(async solve => {
|
||||
|
||||
Reference in New Issue
Block a user