Files
metrics/source/plugins/gists/index.mjs
2021-01-23 14:23:14 +01:00

45 lines
1.8 KiB
JavaScript

//Setup
export default async function ({login, graphql, q, queries}, {enabled = false} = {}) {
//Plugin execution
try {
//Check if plugin is enabled and requirements are met
if ((!enabled)||(!q.gists))
return null
//Query gists from GitHub API
const gists = []
{
//Iterate through gists
let cursor = null
let pushed = 0
do {
console.debug(`metrics/compute/${login}/plugins > gists > retrieving gists after ${cursor}`)
const {user:{gists:{edges, nodes, totalCount}}} = await graphql(queries.gists({login, after:cursor ? `after: "${cursor}"` : ""}))
cursor = edges?.[edges?.length-1]?.cursor
gists.push(...nodes)
gists.totalCount = totalCount
pushed = nodes.length
} while ((pushed)&&(cursor))
console.debug(`metrics/compute/${login}/plugins > gists > loaded ${gists.length} gists`)
}
//Iterate through gists
console.debug(`metrics/compute/${login}/plugins > gists > processing ${gists.length} gists`)
let stargazers = 0, forks = 0, comments = 0, files = 0
for (const gist of gists) {
//Skip forks
if (gist.isFork)
continue
//Compute stars, forks, comments and files count
stargazers += gist.stargazerCount
forks += gist.forks.totalCount
comments += gist.comments.totalCount
files += gist.files.length
}
//Results
return {totalCount:gists.totalCount, stargazers, forks, files, comments}
}
//Handle errors
catch (error) {
throw {error:{message:"An error occured", instance:error}}
}
}