# GUI Reference — `sysreseval` ## Launching ```bash source venv/bin/activate && python3 src/sysreseval.py # dev sysreseval # production ``` One instance per user. A PID file at `/tmp/sysreseval-{uid}.pid` kills any prior instance on startup. ## Opening a project **File → Open Project** (or the `+` tab) shows a dialog built from `sre list --with-titles`. Leaves display each lab's translated `title` (from per-directory `titles.json` sidecars, generated by `sre make-titles`), falling back to the filename without `.py`. If the lab's `Flavor` sets `flavor_form_at_startup = True`, a form runs first. A progress dialog then tracks image pulls and container starts (JSON on stderr from `sre start`); the project tab appears when every machine is up. During an exam, **Open Project** is disabled — only pre-authorised exam labs open automatically. ## Project tabs | Tab | Content | |-----|---------| | **Schema** | SVG topology rendered by graphviz at lab start. Scroll = zoom, click-drag = pan. | | **Informations** | Markdown lab description from `self.informations` in `NetScheme.__init__()`. | | **Machines** | Per-machine state (polled from Kathara every 1 s), NAT network, ports, plus a *Connect* button opening an external terminal. | | **Questions** | Three types: `question_text` (free text), `question_form` (inline `@@{field:regex}@@` or `@@{field:>opt1\|opt2}@@`), `question_dummy` (display only). Persisted to `answers/answers.json` on every edit. | | **Evaluation** | Last grade table + *Start evaluation* button. Letter grades (OK/MEH/FAIL) appear when the lab sets `no_mark_on_self_grade`. A countdown replaces the button while `delay_between_self_grade` is active. | | **Terminals** | Embedded terminals per machine, launched via `params.terminal_cmd_prefix`. | `answers/answers.json` also carries metadata (`hostname`, `login`, `fullname`, `email`, `language`, `answers_updated_at`, plus `exam_*` fields in exam mode); see [Archive format](internals.md#archive-format) for the full schema. *Start evaluation* runs `sre eval --auto-eval` in a background thread. The periodic background eval (`eval_interval_without_exam_mode`) and `eval_before_exit` run plain `sre eval` (no cooldown, no log line, no stdout). ## Exam mode When `/var/lib/sre/exam.json` exists, the GUI switches modes: File → Open / Close / Close All are disabled, and answers re-save with an updated `exam_time_remaining` on every exam-config change. | Phase | Trigger | Shows / actions | |-------|---------|----------------| | Waiting | `now < start_after` | SRE logo + countdown to `start_after`. Calls `sre pre-start-exam` once ~60 s before `start_after`. | | Active | `start_after ≤ now < end` and exam projects up | Project tabs + remaining-time countdown. Calls `sre start-exam` once on entry, `sre eval-exam` every `eval_interval`; re-calls `pre-start-exam` if `labs` changes. | | Ended | `now ≥ end_before`, or `now ≥ started_at + duration` | Calls `sre eval-exam` then `sre end-exam` once; displays the *That's All Folks* logo. | ## Settings **File → Settings** (persisted in `~/.config/sysreseval`, INI): | Section | Setting | Default | Effect / applies | |---------|---------|---------|------------------| | Interface | Font size | 10 pt | Menus and dialog text; immediate | | Terminal | Font size | 12 pt | Terminals opened after the change | | Terminal | Color scheme | Black on White | `black_on_white` / `white_on_black`; new terminals | | Schema | Lines | Straight | Straight or curved edges; next lab open | | Schema | Spacing | 3 (0–9) | Node spacing; next lab open | | Schema | Nodes | Shapes | Icons or geometric shapes; next lab open | | Content | Font size | 12 pt | Informations + Questions panes; immediate |