pereztr5 / cyboard

Scoring engine for cyber defense competitions
BSD 3-Clause "New" or "Revised" License
10 stars 4 forks source link

Improve the point allocation for points awarded from checks #15

Closed tbutts closed 3 months ago

tbutts commented 7 years ago

Points are awarded for each successful check of a service. The amount of points awarded is currently given per interval. Eg.

[checks.2]
check_name = "web"
points = [ 10, 0, 0 ]
# Where '10' is on success, and then 0 on 'partial', and 0 on 'failure'

This format completely fails at allowing admins to easily say and enact "the web service should be worth 500 pts over the competition". While their is a use for the current naive format of increments, we have had trouble in the past with easily calculating the correct score that should be given over the whole competition.

Unfortunately, calculating the discrete individual amount of awarded points is not as simple as taking the desired total over the competition divided by the interval rate, because certain checks are not enabled at the start of the competition. Additionally, #12 would cause this to be even more effort to get correct.

A dirty, but workable solution, would be to peek into the results table to get the earliest posted result for each check, and use that timestamp to programmatically determine when a check was enabled, Then you could get the proportion to award per discrete check attempt.