commit 60fd4810ff159604cc4cca08f503a9d7a1ed610a Author: Mia Wu Date: Tue Jun 9 09:40:05 2026 -0400 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/DESIGNPLAN.md b/DESIGNPLAN.md new file mode 100644 index 0000000..5ceebe8 --- /dev/null +++ b/DESIGNPLAN.md @@ -0,0 +1,142 @@ +# 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 \ No newline at end of file diff --git a/backend/app.py b/backend/app.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/db.py b/backend/db.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/scanner.py b/backend/scanner.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/watcher.py b/backend/watcher.py new file mode 100644 index 0000000..e69de29