Files
scheduler/DESIGNPLAN.md
T
2026-06-09 09:40:05 -04:00

6.0 KiB

Scheduler

A test scheduler for the NJTH which compiles a schedule according to the rules and priority of the tests.

Inputs

  • Target test directory, test results directories
  • Estimated runtime for each type of test for calculations
  • Top priority tests
    • Allow user to manually override and enter tests that needs to be run tonight
  • Day time testing (Y/N)
    • if yes, enter how many hours
TestID Type ROT COE_Pairs RX_TX Priority Scheduled_on Completed
P2PRXAX001 P2P ROT1 RX 3 0
P2PRXAX004 P2P ROT1 [COERXAX001, COERXAX002] AX 2 0
P2PTXAX001 P2P ROT1 TX 3 0
COERXAX001 COE ROT1 RX 3 0
COERXAX002 COE ROT1 RX 3 0
P2PRXAX014 P2P ROT2 RX 3 0
P2PTXAX014 P2P ROT2 TX 3 0

Output

Backend

  • Compile a schedule that would require the lowest amount of time in total according to the following rules and priority:
    • Rules
      • Two tests' overlapping stations are located at the same test points, they can be run in the same night
        • i.e. when two tests have the same rotation
        • P2PRXAX001, P2PRXAX004, P2PTXAX001, COERXAX001, COERXAX002 can be run on the same night;
        • P2PRXAX014, P2PTXAX014 can be run on the same night
      • Up link down link p2p should run b2b (RX and TX)
        • Ex. P2PRXAX001 and P2PTXAX001 should run b2b
      • COE P2P bundle should run b2b
        • Ex. P2PRXAX001 and COERXAX001 and COERXAX002 should run b2b
    • Priority
      • 1: highest priority (run tonight)
      • 5: lowest priority
      • General priority: COE P2P pair -> P2P only -> P3P
        • Set priority of each test according to the type when first read in the tests P2P with COE pairing -> 2, P2P only -> 3, and P3P -> 4
      • Change priority to 1 for manually entered top priority tests, meaning it will be run tonight
    • Calculation
      • Use the estimate run time for each type of test to fit as many tests as possible in a shift of testing. One shift at night on weekdays is 16hrs, on weekends 24 hours with 1hr margin
      • Estimate run time
        • P2P: 85 mins
        • COE: 115 mins
        • P3P: 105 mins
      • If day time testing for today is yes,
    • Failed test management
      • After there's a modification to the result directories (results are in), and there are tests that are scheduled for last night but were not added to the result directories, meaning the test failed/invalid
      • Estimate how much time for rerun:
        • If user choose to rerun for next day, move the whole schedule down by a day

Frontend

  • Calendar

    Sun Mon Tue Wed Thu Fri Sat
    S1 TestId TestId TestId TestId TestId TestId TestId
    S2 TestId TestId TestId TestId TestId TestId TestId
    S3 TestId TestId TestId TestId TestId TestId TestId
    • List the order that the tests should be conducted after compiling
    • Split one day into 3 eight-hour shift
      • Shift 1 is daytime, on weekdays don't include unless day time testing for today is on. On weekends it is included
      • Shift 2 and 3 are night time
    • Hover over each tests to see test details: type, rotation
    • Display one week at a time, arrows to go to prev/next week
    • Today will be hightlighted or boxed
    • Colors:
      • Pending tests: gray
      • Completed tests: green
      • Failed tests: red
      • Invalid tests: yellow
  • Options (on the right of the calendar)

    • Day time testing for today: Yes or No
      • If yes, include shift 1 in todays testing
    • Top priority tests
      • Enter a list of comma separated TestIDs to make those test priority 1
  • Test Config for tonight

    • After the schedule is compiled, show where each station should be placed at what test point
  • Estimated Completion Date

  • Settings

    • Estimated run time for each type of test
    • Test exclusion
      • User can enter rules to exclude tests that will not be run
    • Manual priority override
    • Holidays
      • User can enter holidays and that day will be counted as a weekend (24hrs)
  • Failed Tests

    • Display a banner with:
      • A message saying what tests failed last night and requires a rerun
      • Estimate rerun time
      • Yes/No button for rerun during the day
        • If yes, display today's shift 1 with the rerun tests
        • If no, the rerun tests will be ran tonight, the whole schedule is shift down by one day, update the calendar

Layout

┌──────────────────────────────────────────────────────────────┐
| CGW453 Scheduler
|   ┌────────────────────────────────────┐  COMPLETION DATE
|   |                                    |
|   |              CALENDAR              |
|   |                                    |
|   |                                    |
|
|
|
|
|
└──────────────────────────────────────────────────────────────┘

Implementation

Backend

  • Python, FastAPI, SQLite for storage
  • graph.py
    • graph
      • Node: test
      • Edge: compatible
      • Adjacency list
      • Graph will not be modified
    • active_tests (set)
      • Keep track of tests that are not completed
      • Remove test from active_tests when test completed or is excluded
    • priorities (dict)
      • Keep track of test's priority
  • Methods
    • build_graph()

    • compatible(test1, test2) -> bool

      • all overlapping stations are at the same test point
    • Degree(t): len(graph[t] & active_tests)

    • Base node selection: priority -> degree

      base = min( active_tests, key=lambda t: (priority[t], -len(graph[t] & active_tests)))

Frontend

  • React