store pingHistory as player count directly

This commit is contained in:
Nick Krecklow 2020-05-08 02:52:48 -05:00
parent 37a88677cf
commit 3491c73b89
No known key found for this signature in database
GPG Key ID: 5F149FDE156FFA94
4 changed files with 25 additions and 42 deletions

View File

@ -111,12 +111,12 @@ export class App {
serverRegistration.initServerStatus(payload)
// pingHistory is only defined when the backend has previous ping data
// undefined pingHistory means this is a placeholder ping generated by the backend
if (typeof payload.pingHistory !== 'undefined') {
// playerCountHistory is only defined when the backend has previous ping data
// undefined playerCountHistory means this is a placeholder ping generated by the backend
if (typeof payload.playerCountHistory !== 'undefined') {
// Push the historical data into the graph
// This will trim and format the data so it is ready for the graph to render once init
serverRegistration.addGraphPoints(payload.pingHistory, timestampPoints)
serverRegistration.addGraphPoints(payload.playerCountHistory, timestampPoints)
}
// Create the plot instance internally with the restructured and cleaned data

View File

@ -96,8 +96,7 @@ export class ServerRegistration {
for (let i = 0; i < points.length; i++) {
const point = points[i]
const timestamp = timestampPoints[i]
this._graphData.push([timestamp, point.result ? point.result.players.online : 0])
this._graphData.push([timestamp, point])
}
}

View File

@ -67,6 +67,8 @@ export class SocketManager {
}
}
console.log(payload.servers)
payload.servers.forEach((serverPayload, serverId) => {
this._app.addServer(serverId, serverPayload, payload.timestampPoints)
})

View File

@ -16,8 +16,15 @@ class ServerRegistration {
}
handlePing (timestamp, resp, err, version) {
const playerCount = resp ? resp.players.online : 0
// Store into in-memory ping data
this.addPing(resp)
this._pingHistory.push(playerCount)
// Trim pingHistory to avoid memory leaks
if (this._pingHistory.length > this._app.pingController.getMaxServerGraphDataLength()) {
this._pingHistory.shift()
}
// Only notify the frontend to append to the historical graph
// if both the graphing behavior is enabled and the backend agrees
@ -25,8 +32,6 @@ class ServerRegistration {
let updateHistoryGraph = false
if (config.logToDatabase) {
const playerCount = resp ? resp.players.online : 0
if (this.addGraphPoint(resp !== undefined, playerCount, timestamp)) {
updateHistoryGraph = true
}
@ -90,27 +95,6 @@ class ServerRegistration {
return update
}
addPing (resp) {
const ping = {}
if (resp) {
// Append a result object
// This filters out unwanted data from resp
ping.result = {
players: {
online: resp.players.online
}
}
}
this._pingHistory.push(ping)
// Trim pingHistory to avoid memory leaks
if (this._pingHistory.length > this._app.pingController.getMaxServerGraphDataLength()) {
this._pingHistory.shift()
}
}
getPingHistory () {
if (this._pingHistory.length > 0) {
const payload = {
@ -127,21 +111,19 @@ class ServerRegistration {
payload.graphPeakData = graphPeakData
}
// Insert the latest update manually into the array
// This is a mutated copy of the last update to contain live metadata
// The metadata is used by the frontend for rendering
const lastPing = this._pingHistory[this._pingHistory.length - 1]
// Conditionally append to avoid defining fields with undefined values
if (lastPing.result) {
payload.result = lastPing.result
} else if (lastPing.error) {
payload.error = lastPing.error
// Assume the ping was a success and define result
// pingHistory does not keep error references, so its impossible to detect if this is an error
// It is also pointless to store that data since it will be short lived
payload.result = {
players: {
online: this._pingHistory[this._pingHistory.length - 1]
}
}
// Send a copy of pingHistory
// Omit the last value since it is contained within payload
payload.pingHistory = this._pingHistory.slice(0, this._pingHistory.length - 1)
// Include the last value even though it is contained within payload
// The frontend will only push to its graphData from playerCountHistory
payload.playerCountHistory = this._pingHistory
return payload
}