Skip to content
Herman Li edited this page Oct 9, 2020 · 6 revisions

Front End Specifications

Frameworks/Libraries Used

  • xterm.js
  • react

Commands Needed

  • ls
  • cat
  • rm
  • sbatch
  • scancel
  • squeue
  • Some sort of edit command for sbatch script files
  • date

Design

Terminal needs to be very similar to an actual terminal with a limited bash shell simulated because there is no way to put an actual bash shell in unless you directly connect to the server (which has multiple problems). Using limited commands it will need to sync up with server both the time and file structure. A text editor (separate and below the terminal) will be included to handle editing of batch script files because of the limited abilities to make a text editor built-in to the terminal simulation. All data to and from the server will be in JSON.

REST JSON Structure

{ "time": 0, "action": "edit config" "body": "config file text" }

Web Server Design/Approach

Frameworks/Libraries Used

  • cpp-httplib
  • wrench

Map of files holding file structure and data.

A while loop running server to wait for network connections (mostly handled by cpp-httplib) Needs to receive from client "time" and what it needs to do Format of message will be in json with the body containing time, action, and body (if needed) keys

Handling events with relation to Wrench - [BETTER] Option #1: wait for next event with TIMEOUT 0 and process them - This is probably best, but perhaps with TIMEOUT 0.01

- [OK too] Option #2: check on job statuses to find out
    - Are job statuses really updated? Yes, they are
    - Easy, but messages will pile-up
        
- If a job has finished successfully: my reply on the network will say something about .out and .err files generated

- Sleep (simulated) until time matches

UI Time Simulated Time: 0 0 100: sbatch 100: do the sbatch (job would complete at 1000) 110: sbatch 110: do the sbatch (job would complete at 10000) 2000: ls 2000: need to check on pending jobs, and figure what happened and fake the output files


Clone this wiki locally