******** Overview ******** Why? ==== The goal of the ScoringEngine is to keep track of service up time in a blue teams/red team competition. How does it work? ================= The general idea of the ScoringEngine is broken up into 3 separate processes, Engine, Worker, and Web. Engine ^^^^^^ The engine is responsible for tasking `Checks` that are used to verify network services each round, and determining/saving their results to the database. This process runs for the entire competition, and will sleep for a certain amount of time before starting on to the next round. Worker ^^^^^^ The worker connects to Redis and waits for `Checks` to get tasked in order to run them against the target service. Once it receives a `Check`, it executes the command and sends the output back to the Engine. Web ^^^ The web application provides a graphical view of the Competition. This includes things like a bar graph of all team's scores as well as a table of the current round's results. This can also be used to configure the properties of each service per team. External Resources ^^^^^^^^^^^^^^^^^^ We currently use `MySQL `_ as the database, and `Redis `_ as the data store for tasks while they are getting scheduled. Putting it all together ^^^^^^^^^^^^^^^^^^^^^^^ - The `Engine` starts - The first `Round` starts - The `Engine` tasks `Checks` out to the `Workers` - The `Workers` execute the `Checks` and return the output to the `Engine` - The `Engine` waits for all `Checks` to finish - The `Engine` determines the results of each `Check`, and saves the results to the DB - The `Engine` ends the `Round` - The `Engine` sleeps for some time - The second `Round` starts - ... .. include:: screenshots.rst