Carefully rewrite Koibasta/femida contest checking system
- No need to use Websockets because data is transfered from server to clients. It is better to use Server-Sent Events as in themis-quals contest checking system.
- Ruby code is ugly. Refactoring should be done.
- Using Ruby as backend along with Node.js as frontend with Beanstalkd as a transport mechanism is slow and not robust. Node.js is used because it has better support for Websockets, but as it said in p.1 Websockets will be replaced with Server-Sent Events which can be implemented in plain Ruby.
- Node.js is not suitable for making Telnet server which accepts flags. It will be better to use web endpoint to accept flags (though it's kinda ususual for CTFs).
- Managing system configuration is sort of complex stuff. There should be used some provisioning systems such as SaltStack or Chef.
- API for interacting between service checkers and contest checking system. It is considered stable.
- Good choice was made for data storage (PostgreSQL), checkers <=> system interaction (Beanstalkd), realtime events propagation (Redis).
- Provisioning system - Vagrant, SaltStack/Chef.
- Operating system - Ubuntu 14.04 Server.
- Data storage - PostgreSQL.
- Internal messaging server - Beanstalkd.
- Event propagation server - Redis.
- Backend - Ruby application (Sinatra) running on Thin server.
- Backend proxy, assets - Nginx.
- Website - ES6 (Babel), CommonJS (Browserify), Bootstrap & React.js for UI, EventSource for event propagation.
- Process management - Supervisor/God.