Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 26 additions & 15 deletions src/server/refresh.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const dataBasePath = process.env.DATA_BASE_PATH || '../assets/data'
const dataPath = process.env.DATA_PATH || '../assets/data/data.json'
const logPath = process.env.LOG_PATH || '../assets/data/log.json'
const configPath = process.env.CONFIG_PATH || './config.json'
const rateLimitStopError = 'RATE_LIMIT_STOP'

let interval = 150
let dataBuffer = {}
Expand Down Expand Up @@ -36,39 +37,49 @@ async function getAllContributorsInfo() {

// Record time
logBuffer.starttime = Date.now()
API.resetRateLimitExceeded()

Promise.mapSeries(contributors, async contributor => {
if (API.isRateLimitExceeded()) {
throw new Error(rateLimitStopError)
}

await Promise.delay(delay * 1000)

API.getContributorInfo(process.env.ORGANIZATION, contributor, includedRepositories, startDate).then( res => {
Config = jsonfile.readFileSync(configPath) // update Config
delay = Config.delay // update delay
const res = await API.getContributorInfo(process.env.ORGANIZATION, contributor, includedRepositories, startDate)
Config = jsonfile.readFileSync(configPath) // update Config
delay = Config.delay // update delay

if (res.avatarUrl !== '' && res.issuesNumber !== -1 && res.mergedPRsNumber !== -1 && res.openPRsNumber != -1) {
if (res && res.avatarUrl !== '' && res.issuesNumber !== -1 && res.mergedPRsNumber !== -1 && res.openPRsNumber != -1) {

dataBuffer = jsonfile.readFileSync(dataPath)
dataBuffer = jsonfile.readFileSync(dataPath)

if (Config.contributors.includes(contributor)) {
dataBuffer[`${contributor}`] = res
console.log(`${contributor} was updated: ${res.openPRsNumber} ${res.mergedPRsNumber} ${res.issuesNumber}`)
if (Config.contributors.includes(contributor)) {
dataBuffer[`${contributor}`] = res
console.log(`${contributor} was updated: ${res.openPRsNumber} ${res.mergedPRsNumber} ${res.issuesNumber}`)

// Update contributors infomation
jsonfile.writeFile(dataPath, dataBuffer, { spaces: 2 }, (err) => {
if (err) console.error(err)
})
}
// Update contributors infomation
jsonfile.writeFile(dataPath, dataBuffer, { spaces: 2 }, (err) => {
if (err) console.error(err)
})
}
})
}

// Record time
logBuffer.endtime = Date.now()

jsonfile.writeFile(logPath, logBuffer, { spaces: 2 }, (err) => {
if (err) console.error(err)
})
}).catch((err) => {
if (err.message === rateLimitStopError) {
console.log('[WARNING] Refresh cycle stopped because the GitHub API rate limit was reached.')
return
}

throw err
})
}

getAllContributorsInfo()
setInterval(getAllContributorsInfo, interval * delay * 1000)
setInterval(getAllContributorsInfo, interval * delay * 1000)
8 changes: 8 additions & 0 deletions src/server/util/API.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ const chalk = require('chalk')

const BASEURL = 'https://github.com'
const APIHOST = 'https://api.github.com'
let rateLimitExceeded = false

async function get(url, _authToken) {
try {
Expand Down Expand Up @@ -37,6 +38,9 @@ async function get(url, _authToken) {
process.exit()
break
default:
if (message.startsWith('API rate limit exceeded')) {
rateLimitExceeded = true
}
console.log(chalk.yellow('[WARNING] ' + message))
}
} else {
Expand Down Expand Up @@ -243,4 +247,8 @@ module.exports = {
checkRateLimit,
getStats,
getRanks,
isRateLimitExceeded: () => rateLimitExceeded,
resetRateLimitExceeded: () => {
rateLimitExceeded = false
},
}