1. Was ist Franklyn?

  • Ermöglicht praxisnahes Arbeiten bei Leistungsfeststellungen

  • Besonders: Recherche im Internet

    • z.B. Stack Overflow, Dokumentation

  • Gleichzeitige Gewissheit für Lehrpersonen

    • einhalten von Regeln

      • keine Kommunikation zwischen den Schülern

      • kein Kopieren von fertigen Programmen/Lösungen

1.1. Architektur

Architektur
Diagram

2. Aktueller Stand

2.1. main-Branch

2.1.1. Server:

  • Programmiert in: Java mit Quarkus

  • Recorder-Part

    • Holt sich die Screenshots in bestimmten veränderbaren Intervallen von den Openboxen und speichert diese ab.

    • Auf Anfrage wird hier aus den gesammelten Screenshots ein Video erstellt.

  • Server-Part

    • Stellt Websocket-Verbindungen mit den verschiedenen Openbox-Clients und managed diese.

    • Stellt die verschiedenen Server-Metrics über Endpoints zur Verfügung

2.1.2. Openbox:

  • Programmiert in: Rust

  • Sendet Screenshots an den Server bei Anfrage.

  • Hier können sich Schüler dann bei einem Test einschreiben.

Openbox
status report 2024 10 07 openbox
Openbox Logged-In
status report 2024 10 07 openbox logged in

2.1.3. Instructor Frontend:

  • Programmiert in: Angular

  • Patrol-Mode

    • Hierbei handelt es sich um eine Anzeige aller Schüler (Openbox-Clients), die der Server kennt.

    • Man kann sehen, ob ein Schüler eingeloggt ist

    • Wenn man auf einen Schüler klickt, sieht man dessen aktuellen Screenshot, welcher in einem Intervall neu geholt wird.

    • Unten kann man in einer eigenen Statusleiste den aktuellen Stand der Applikation sehen (Einstellungen).

    • Settings

      • Patrol Mode:

        • Die Ansicht wird automatisch zwischen den verschiedenen eingeloggten Schülern gewechselt.

      • Patrol-Speed

        • Die Geschwindigkeit, mit der zwischen den Schülern gewechselt wird, wenn der Patrol-Mode an ist.

      • Get client interval

        • Die Geschwindigkeit mit der überprüft wird, ob der Server neue Schüler "kennt" und die neuesten Fotos vom Server holt.

      • Screenshot capture interval

        • Die Geschwindigkeit mit der sich der Server die neuen Screenshots von den Openbox-Clients holt.

Settings
status report 2024 10 07 instructor frontend settings
Patrol-Mode
status report 2024 10 07 instructor frontend patrol mode
  • Video-Viewer

    • Der Video-Viewer ist eine Anzeige aller vorhandenen Videos, die der Server bis jetzt aufgenommen hat.

    • Man kann sich die Videos auch einzeln oder alle auf einmal herunterladen.

Video-Viewer
status report 2024 10 07 instructor frontend video viewer
  • Metrics-Dashboard

    • Das Metrics-Dashboard ist eine Anzeige für die verschiedenen Daten des Servers (CPU utilization, Disk usage, Memory utilization).

Metrics Dashboard
status report 2024 10 07 instructor frontend metrics dashboard

2.2. develop-Branch

Unterschiede zum Main-Branch:

  • Einige fixes + Dokumentation

  • Andere Branches:

    • Umbau zur Mehrtestfähigkeit im Frontend, Server und in der Openbox.

2.3. Schnittstellen

2.3.1. Screenshots

  1. POST "/screenshot/{username}/alpha" oder POST "{username}/beta"

    • Posten von Alpha und Beta Frames als Stream zusammen mit dem Benutzernamen als.

    • Username:

      • PathParam: "username"

      • String

    • Bild:

      • RestForm: "image"

      • APPLICATION_OCTET_STREAM

    • Die Daten werden in gewissen festgelegten Intervallen übertragen.

  2. GET "/screenshot/{username}"

    • Abholen von Screenshots ohne spezifische Dimensionen:

    • Username:

      • PathParam: "username"

      • String

    • Rückgabewert:

      • Bild als ByteArrayOutputStream.

  3. GET "/screenshot/{username}/{width}/{height}"

    • Abholen von Screenshots mit spezifischen Dimensionen:

    • Username:

      • PathParam: "username"

      • String

    • Breite:

      • PathParam: "width"

      • int

    • Höhe:

      • PathParam: "height"

      • int

    • Rückgabewert:

      • Bild als ByteArrayOutputStream.

  4. GET "/screenshot/intervalSpeed"

    • Holen des Intervalls als Integer Response.

  5. POST "/screenshot/updateInterval"

    • Updaten des Intervalls (in Sekunden) mit dem die Screenshots von den Openbox-Clients geholt werden.

    • IntervalUpdateDto:

      • Format:

{
    "newInterval": 10
}

2.3.2. Videos

  1. GET "/video/download"

    • Es werden Videos mit den Screenshots, der am Server eingetragenen User, erstellt und in eine ".zip" Datei verpackt und als APPLICATION_OCTET_STREAM zurückgesendet.

  2. GET "/video/download/{username}"

    • Es wird ein Video mit den Screenshots, eines am Server eingetragenen Users, erstellt und in eine ".zip" Datei verpackt und als APPLICATION_OCTET_STREAM zurückgesendet.

    • Username:

      • PathParam: "username"

      • String

  3. GET "/video/{username}"

    • Es wird ein Video mit den Screenshots, eines am Server eingetragenen Users, erstellt und als APPLICATION_OCTET_STREAM zurückgesendet.

    • Username:

      • PathParam: "username"

      • String

2.3.3. State

  1. POST "/state/reset"

    • Trennt die Verbindung mit allen Examinees und löscht alle Screenshots und Videos vom Server.

  2. GET "/state/system-metrics"

    • Sendet alle aktuellen System-Daten des Servers zurück.

    • Format:

System-Metrics-Dto
{
        "cpuUsagePercent": 0.0,
        "totalDiskSpaceInBytes": 0.0,
        "remainingDiskSpaceInBytes": 0.0,
        "savedScreenshotsSizeInBytes": 0.0,
        "maxAvailableMemoryInBytes": 0.0,
        "totalUsedMemoryInBytes": 0.0
}

2.3.4. Examinees

  1. Examinee Websocket

    • Openbox-Clients können sich hierhin verbinden und es wird periodisch überprüft, ob sie noch verbunden sind und über diese Verbindung bekommt der Server die Alpha- und Beta-Frames der Openbox-Clients.

  2. GET "/examinees"

    • Holt alle Examinees und deren Connection-Status

    • Format:

Examinee-Dto
{
  "username": "test-user",
  "connected": true
}

2.4. Development Workflow

Wir haben unterschiedliche CI/CD Scripts, sowie einen Workflow, der uns bei einer Pull Request auf den Main-Branch einen neuen Release, sowie eine Dokumentation aller Commits per Person seit dem letzten Release erstellt.

3. Nächste Schritte

Mehrtestfähigkeit in allen Bereichen