pcdcpoints
Version:
Return point values for each team at Palmetto Cyber Defence Challenge 2018
79 lines (68 loc) • 2.02 kB
JavaScript
const request = require('request');
const parseString = require('xml2js').parseString;
const URL = 'http://pcdc2018.s3-website-us-east-1.amazonaws.com/PCDC_Scoring2018.xml';
const NUM_TEAMS = 8;
class Scores {
constructor () {}
init(cb) {
request.get(URL, (err, resp, body) => {
if (err) return cb(err);
if (resp.statusCode >= 300 || resp.statusCode < 200) {
return cb('Error getting page');
}
parseString(body, (err, result) => {
if (err) return cb(err);
this.webData = result.liveData;
return cb(null);
});
});
}
getId(number) {
return `Team${number}Data`;
}
getTeam(number) {
const id = this.getId(number);
return this.webData[id]
}
getTeamPoints(number) {
const id = this.getId(number);
let score = 0;
this.webData[id].forEach(box => {
let boxScore = parseInt(box.TeamScore[0]);
score += boxScore;
});
return score;
}
getScores() {
let scores = [];
for (let i = 1; i <= NUM_TEAMS; i++){
scores.push(this.getTeamPoints(i));
}
return scores;
}
// Example:
// { "HR": { score: 160, passed: 4, failed: 11 }, "DC01"... }
getTeamBoxes(number) {
let ret = {};
this.getTeam(number).forEach(box => {
let name = box.ServiceName[0];
ret[name] = {
score: parseInt(box.TeamScore[0]),
passed: parseInt(box.Passed[0]),
failed: parseInt(box.Failed[0]),
ip: box.HostName[0],
passing: box.TeamStatus[0] == "Passed"
};
});
return ret;
}
// @tillson
toAPI() {
let ret = [];
for (let i = 1; i <= NUM_TEAMS; i++){
ret.push(this.getTeamBoxes(i));
}
return ret;
}
}
module.exports = Scores;