centralize shift behavior into TimeTracker func

This commit is contained in:
Nick Krecklow 2020-05-11 18:16:41 -05:00
parent c2f6d04e72
commit 7136851123
No known key found for this signature in database
GPG Key ID: 5F149FDE156FFA94
2 changed files with 12 additions and 22 deletions

View File

@ -26,23 +26,13 @@ class ServerRegistration {
const playerCount = resp ? resp.players.online : null
// Store into in-memory ping data
this._pingHistory.push(playerCount)
// Trim pingHistory to avoid memory leaks
if (this._pingHistory.length > TimeTracker.getMaxServerGraphDataLength()) {
this._pingHistory.shift()
}
TimeTracker.pushAndShift(this._pingHistory, playerCount, TimeTracker.getMaxServerGraphDataLength())
// Only notify the frontend to append to the historical graph
// if both the graphing behavior is enabled and the backend agrees
// that the ping is eligible for addition
if (updateHistoryGraph) {
this.graphData.push(playerCount)
// Trim old graphPoints according to #getMaxGraphDataLength
if (this.graphData.length > TimeTracker.getMaxGraphDataLength()) {
this.graphData.shift()
}
TimeTracker.pushAndShift(this.graphData, playerCount, TimeTracker.getMaxGraphDataLength())
}
// Delegate out update payload generation

View File

@ -10,11 +10,7 @@ class TimeTracker {
newPingTimestamp () {
const timestamp = new Date().getTime()
this._points.push(timestamp)
if (this._points.length > TimeTracker.getMaxServerGraphDataLength()) {
this._points.shift()
}
TimeTracker.pushAndShift(this._points, timestamp, TimeTracker.getMaxServerGraphDataLength())
// Flag each group as history graph additions each minute
// This is sent to the frontend for graph updates
@ -24,11 +20,7 @@ class TimeTracker {
this._lastHistoryGraphUpdate = timestamp
// Push into timestamps array to update backend state
this._historicalTimestamps.push(timestamp)
if (this._historicalTimestamps.length > TimeTracker.getMaxGraphDataLength()) {
this._historicalTimestamps.shift()
}
TimeTracker.pushAndShift(this._historicalTimestamps, timestamp, TimeTracker.getMaxGraphDataLength())
}
return {
@ -60,6 +52,14 @@ class TimeTracker {
static getMaxGraphDataLength () {
return Math.ceil(config.graphDuration / config.rates.pingAll)
}
static pushAndShift (array, value, maxLength) {
array.push(value)
if (array.length > maxLength) {
array.shift()
}
}
}
module.exports = TimeTracker