This repository was archived by the owner on May 7, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
code rabbit test #122
Merged
Merged
code rabbit test #122
Changes from all commits
Commits
Show all changes
75 commits
Select commit
Hold shift + click to select a range
eba3f63
Add initial content to branch test
moonshadow2 44f9701
cleaning files
IanRohrbacher cdb3164
cleaning files
IanRohrbacher 006be1f
Add Rocky SvelteKit project
moonshadow2 11e6cc1
Edited README setup steps and Added dev port option
IanRohrbacher 38eadae
Add initial content to branch test
moonshadow2 349caa1
cleaning files
IanRohrbacher 4410a8f
Add Rocky SvelteKit project
moonshadow2 35b5026
Edited README setup steps and Added dev port option
IanRohrbacher a69c8dc
Api key generation demo
ISmaglinski dbeb41b
Moved to folder
ISmaglinski 3376fe0
Moved to api-key-gen folder
ISmaglinski 17900e9
Moved to api-key-gen folder
ISmaglinski 0f37caf
Moved to api-key-gen folder
ISmaglinski 47f9997
Moved to api-key-gen folder
ISmaglinski a911b5e
Create README.md for API key generation demo
ISmaglinski 33b79f2
Login page added layout removed
chrisvuletich e0a534f
login
chrisvuletich 91fec8c
Removed layout.svelte
chrisvuletich cb32930
Changed to offical kent colors
chrisvuletich 7f4f6d7
removed everything
IanRohrbacher 5b94bcb
this shouldnt be here rn
IanRohrbacher ed055aa
Add files via upload
zeigenbrod bde3712
Add files via upload
zeigenbrod e29e264
moved files into a folder
IanRohrbacher b038988
Added styles folder
chrisvuletich 3b15745
Added initial route folder structure
chrisvuletich 59fa5e6
Restructured with component based views
chrisvuletich bd11b09
update readme and add gitignore
IanRohrbacher e76c36b
Merge branch 'interface' into demo
IanRohrbacher df5fe8d
fixing the sveltekit folder
IanRohrbacher 87bb351
Merge branch 'burndown-chart' into demo
IanRohrbacher 2908a97
compiling branches
IanRohrbacher 8a8d476
Merge branch 'demo' into development
IanRohrbacher 434c59d
removed old folder
IanRohrbacher af8cb7b
fixing folder name
IanRohrbacher 23dfa28
creating base folder
IanRohrbacher 1302c3e
Merge branch 'mongita' into development
IanRohrbacher 359cc16
created simple flask server
IanRohrbacher 1dd9e3c
Merge branch 'flask-backend' into development
IanRohrbacher 4108054
Update .gitignore
IanRohrbacher 9c74459
frontend topbar, sidebar
chrisvuletich f9450af
Update README.md
zeigenbrod a136835
grave markers in markdown
IanRohrbacher 21a1983
Update main.py | Setting up Monita
zeigenbrod 5b26dc7
remove temp function
IanRohrbacher d364da1
Add files via upload
zeigenbrod 1c99336
Fixed login and no scroll
IanRohrbacher 2c99918
frontend finalize layout, sidebar, topbar, frame store nav
chrisvuletich a76f02d
Merge dev into chris/frontend
chrisvuletich 3d76972
Fixed PR: | added h1 for visuals
chrisvuletich 4a9a72d
Added new logo to topbar
chrisvuletich 6471117
Set Up Mongita DB Scheme
d-gurbano ae997d8
Centralize frames and unify app layout
IanRohrbacher 470a8e6
Merge pull request #105 from Spring-2026-Software-Engineering/chris/f…
IanRohrbacher 057a199
removed mongita folder
IanRohrbacher 7a05b58
Update +layout.svelte
IanRohrbacher 2bea06c
Updated README
d-gurbano b9e8474
edited readme
d-gurbano 88fcea9
Set Up Mongita DB Scheme
d-gurbano 5d2f4de
Updated README
d-gurbano 63f7077
edited readme
d-gurbano 053f80d
edited gitignore
d-gurbano 1955197
Added test page with working DB tests, and modified Mongita w/ flask(…
70acad7
Updated README
d-gurbano 2637bcc
Add tests using in-memory Mongita DB
d-gurbano 079c31a
Update test_db.py
d-gurbano ec87c1f
Update AnalyticsView.svelte
simran0821 c05e659
Added dashboard card components and a view to switch between card and…
moonshadow2 582161c
Added right side widget panel and reusable widget cards
chrisvuletich 27bc17f
Merge branch 'development' into mod-database
IanRohrbacher b4f57a8
Merge pull request #117 from Spring-2026-Software-Engineering/mod-dat…
IanRohrbacher fa776c6
Reorganize components and extract styles
IanRohrbacher f22ea2a
Merge branch 'simran0821-patch-1' into development
IanRohrbacher 1f419e4
Add and Fixed analytics from #121
IanRohrbacher File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| node_modules | ||
| db.json |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| Api key generation demo | ||
| Makes a key under sk_kent_(key) then stores its hash into a db.json file. I also added a 12 hour timeout to the keys which can be changed but after 12 hours the key dies. | ||
| To test this start with | ||
| 1. ```npm install``` in terminal | ||
| 2. ```npx ts-node api-key-thing.ts generate``` to generate the key and store the hash in a db.json file | ||
| 3. finally copy the given key and use ```npx ts-node api-key-thing.ts validate sk_kent_(your_key_here)``` gives you a access granted if it worked or access denied just for now and gives you your id and time created/expires. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,53 @@ | ||
| # Make Milestone and Overall Burndown Chart | ||
|
|
||
| ### Get to repository in your CLI | ||
|
|
||
| Make sure you are logged in to your github account on the CLI, and make sure the repository is | ||
| cloned on your device. | ||
|
|
||
| Use ```cd Rocky``` to go to the repo on your device. If the repo is kept within other folders, | ||
| you will need to add the full path. | ||
|
|
||
| ## Milestone Chart | ||
|
|
||
| 1. Go into milestone_burndown.py and change the date bounds for the chart to match the sprint dates. | ||
|
|
||
| 2. Paste this code in to the CLI, changing the name to match the milestone name: | ||
|
|
||
| ``` | ||
| ( | ||
| echo "closedAt,createdAt,number,state,title" | ||
| gh issue list --state all --limit 1000 \ | ||
| --milestone "Sprint 3 | Setting up demo" \ | ||
| --json closedAt,createdAt,number,state,title \ | ||
| --jq '.[] | [.closedAt, .createdAt, .number, .state, .title] | @csv' | ||
| ) > milestone_issues.csv | ||
| ``` | ||
|
|
||
|
|
||
| 3. Run milestoneBurndown.py in your CLI like this: | ||
|
|
||
| ``` | ||
| Python3 milestoneBurndown.py | ||
| ``` | ||
|
|
||
| ## Overall Chart | ||
|
|
||
| 1. paste this code in to the CLI: | ||
|
|
||
| ``` | ||
| ( | ||
| echo "closedAt,createdAt,number,state,title" | ||
| gh issue list --state all --limit 1000 \ | ||
| --json closedAt,createdAt,number,state,title \ | ||
| --jq '.[] | [.closedAt, .createdAt, .number, .state, .title] | @csv' | ||
| ) > issues.csv | ||
| ``` | ||
|
|
||
|
|
||
| 2. Run it in your CLI like this: | ||
|
|
||
| ``` | ||
| python3 burndown.py | ||
| ``` | ||
|
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,73 @@ | ||
| import pandas as pd | ||
| import matplotlib.pyplot as plt | ||
| from pathlib import Path | ||
| import sys | ||
|
|
||
|
|
||
| CSV_FILE = "issues.csv" | ||
| CREATED_COLUMN = "createdAt" | ||
| CLOSED_COLUMN = "closedAt" | ||
|
|
||
| PROJECT_START = pd.Timestamp("2026-02-11") | ||
| PROJECT_END = pd.Timestamp("2026-04-20") | ||
|
|
||
|
|
||
| # load CSV | ||
| file_path = Path(CSV_FILE) | ||
| if not file_path.is_file(): | ||
| print(f"Error: File '{CSV_FILE}' not found.") | ||
| sys.exit(1) | ||
|
|
||
| df = pd.read_csv(CSV_FILE, encoding='utf-8-sig', quotechar='"') | ||
| df.columns = df.columns.str.strip() | ||
| print("Columns found:", df.columns.tolist()) | ||
|
|
||
| # Convert dates | ||
| def parse_datetime(series): | ||
| series = pd.to_datetime(series, errors='coerce', utc=True) | ||
| return series.dt.tz_convert(None) | ||
|
|
||
| df[CREATED_COLUMN] = parse_datetime(df[CREATED_COLUMN]) | ||
| df[CLOSED_COLUMN] = parse_datetime(df[CLOSED_COLUMN]) | ||
|
|
||
| # Date ranges | ||
| today = pd.Timestamp.today().normalize() | ||
|
|
||
| all_dates = pd.date_range(PROJECT_START, PROJECT_END) # for axis + ideal | ||
| actual_dates = pd.date_range(PROJECT_START, min(today, PROJECT_END)) # blue only | ||
|
|
||
| total_issues = df.shape[0] | ||
|
|
||
|
|
||
| # Actual burndown (blue) | ||
| remaining = [] | ||
| for date in actual_dates: | ||
| open_issues = df[ | ||
| df[CLOSED_COLUMN].isna() | (df[CLOSED_COLUMN] > date) | ||
| ].shape[0] | ||
| remaining.append(open_issues) | ||
|
|
||
|
|
||
| # Ideal burndown (red) | ||
| ideal_line = [ | ||
| total_issues - (total_issues * i / (len(all_dates) - 1)) | ||
| for i in range(len(all_dates)) | ||
| ] | ||
|
|
||
| # Plot | ||
| plt.figure(figsize=(12,6)) | ||
|
|
||
| plt.plot(actual_dates, remaining, marker='o', label='Actual') # stops at today | ||
| plt.plot(all_dates, ideal_line, linestyle='--', color='red', label='Ideal') # full range | ||
|
|
||
| plt.title("Delta Burndown Chart") | ||
| plt.xlabel("Date") | ||
| plt.ylabel("Remaining Issues") | ||
| plt.grid(True) | ||
| plt.xticks(rotation=45) | ||
| plt.ylim(0, total_issues + 1) | ||
| plt.xlim(PROJECT_START, PROJECT_END) | ||
|
|
||
| plt.legend() | ||
| plt.tight_layout() | ||
| plt.show() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| ( | ||
| echo "closedAt,createdAt,number,state,title" | ||
| gh issue list --state all --limit 1000 \ | ||
| --json closedAt,createdAt,number,state,title \ | ||
| --jq '.[] | [.closedAt, .createdAt, .number, .state, .title] | @csv' | ||
| ) > issues.csv |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,74 @@ | ||
| import pandas as pd | ||
| import matplotlib.pyplot as plt | ||
| from pathlib import Path | ||
| import sys | ||
|
|
||
|
|
||
| CSV_FILE = "milestone_issues.csv" | ||
| CREATED_COLUMN = "createdAt" | ||
| CLOSED_COLUMN = "closedAt" | ||
|
|
||
| PROJECT_START = pd.Timestamp("2026-02-18") | ||
| PROJECT_END = pd.Timestamp("2026-02-25") | ||
|
|
||
|
|
||
| # load CSV | ||
| file_path = Path(CSV_FILE) | ||
| if not file_path.is_file(): | ||
| print(f"Error: File '{CSV_FILE}' not found.") | ||
| sys.exit(1) | ||
|
|
||
| df = pd.read_csv(CSV_FILE, encoding='utf-8-sig', quotechar='"') | ||
| df.columns = df.columns.str.strip() | ||
| print("Columns found:", df.columns.tolist()) | ||
|
|
||
| # Convert dates | ||
| def parse_datetime(series): | ||
| series = pd.to_datetime(series, errors='coerce', utc=True) | ||
| return series.dt.tz_convert(None) | ||
|
|
||
| df[CREATED_COLUMN] = parse_datetime(df[CREATED_COLUMN]) | ||
| df[CLOSED_COLUMN] = parse_datetime(df[CLOSED_COLUMN]) | ||
|
|
||
| # Date ranges | ||
| today = pd.Timestamp.today().normalize() | ||
|
|
||
| all_dates = pd.date_range(PROJECT_START, PROJECT_END) # for axis + ideal | ||
| actual_dates = pd.date_range(PROJECT_START, min(today, PROJECT_END)) # blue only | ||
|
|
||
| total_issues = df.shape[0] | ||
|
|
||
|
|
||
| # Actual burndown (blue) | ||
| remaining = [] | ||
| for date in actual_dates: | ||
| open_issues = df[ | ||
| df[CLOSED_COLUMN].isna() | (df[CLOSED_COLUMN] > date) | ||
| ].shape[0] | ||
| remaining.append(open_issues) | ||
|
|
||
|
|
||
| # Ideal burndown (red) | ||
| ideal_line = [ | ||
| total_issues - (total_issues * i / (len(all_dates) - 1)) | ||
| for i in range(len(all_dates)) | ||
| ] | ||
|
|
||
| # Plot | ||
| plt.figure(figsize=(12,6)) | ||
|
|
||
| plt.plot(actual_dates, remaining, marker='o', label='Actual') # stops at today | ||
| plt.plot(all_dates, ideal_line, linestyle='--', color='red', label='Ideal') # full range | ||
|
|
||
| plt.title("Delta Sprint 03 Burndown Chart") | ||
| plt.xlabel("Date") | ||
| plt.ylabel("Remaining Issues") | ||
| plt.grid(True) | ||
| plt.xticks(rotation=45) | ||
| plt.ylim(0, total_issues + 1) | ||
| plt.xlim(PROJECT_START, PROJECT_END) | ||
|
|
||
| plt.legend() | ||
| plt.tight_layout() | ||
| plt.show() | ||
|
|
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| # Created by venv; see https://docs.python.org/3/library/venv.html | ||
| * | ||
| !test_db.py | ||
| __pycache__ | ||
| ../mongita | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,83 @@ | ||
| # Create and run Virtual environment | ||
|
|
||
| ```cmd | ||
| REM Create | ||
| cd .\rocky-backend | ||
| py -3 -m venv .venv | ||
| REM Activate | ||
| .venv\Scripts\activate | ||
| ``` | ||
|
|
||
| > If activation is blocked, run this first in PowerShell: | ||
| > `Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser` | ||
|
|
||
| # Install Dependencies | ||
|
|
||
| ```cmd | ||
| pip install -r requirements.txt | ||
| ``` | ||
|
|
||
| # Running Flask | ||
|
|
||
| ```cmd | ||
| python main.py flask --app main run --debug | ||
|
|
||
| OR | ||
|
|
||
| python main.py | ||
|
|
||
| ``` | ||
|
|
||
| # Adding a New Collection | ||
|
|
||
| To add a new collection (e.g. `assignments`), open `main.py` and follow these steps: | ||
|
|
||
| ### 1. Register the collection (after the existing ones) | ||
| ```python | ||
| assignments = db["assignments"] | ||
| ``` | ||
|
|
||
| ### 2. Add routes | ||
|
|
||
| ```python | ||
| @app.route("/assignments", methods=["POST"]) | ||
| def create_assignment(): | ||
| data = request.json | ||
| data["created_at"] = datetime.now(timezone.utc).isoformat() | ||
| assignments.insert_one(data) | ||
| return jsonify({"message": "Assignment created"}) | ||
|
|
||
| @app.route("/assignments", methods=["GET"]) | ||
| def get_assignments(): | ||
| result = list(assignments.find()) | ||
| for a in result: | ||
| a["_id"] = str(a["_id"]) | ||
| return jsonify(result) | ||
|
|
||
| @app.route("/assignments/<assignment_id>", methods=["GET"]) | ||
| def get_assignment(assignment_id): | ||
| assignment = assignments.find_one({"_id": ObjectId(assignment_id)}) | ||
| if not assignment: | ||
| return jsonify({"error": "Assignment not found"}), 404 | ||
| assignment["_id"] = str(assignment["_id"]) | ||
| return jsonify(assignment) | ||
|
|
||
| @app.route("/assignments/<assignment_id>", methods=["PUT"]) | ||
| def update_assignment(assignment_id): | ||
| data = request.json | ||
| assignments.update_one({"_id": ObjectId(assignment_id)}, {"$set": data}) | ||
| return jsonify({"message": "Assignment updated"}) | ||
|
|
||
| @app.route("/assignments/<assignment_id>", methods=["DELETE"]) | ||
| def delete_assignment(assignment_id): | ||
| assignments.delete_one({"_id": ObjectId(assignment_id)}) | ||
| return jsonify({"message": "Assignment deleted"}) | ||
| ``` | ||
|
|
||
| ### 3. Test with Postman / Thunder Client | ||
| - **POST** `http://127.0.0.1:5000/assignments` with `Content-Type: application/json` and a JSON body | ||
| - **GET** `http://127.0.0.1:5000/assignments` to retrieve all | ||
| - **DELETE** `http://127.0.0.1:5000/assignments/<id>` to remove one | ||
|
|
||
| > Data is stored on disk in `mongita/rocky_db/<collection_name>/` — stopping Flask does not erase data. | ||
|
|
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
*here will hide nearly the entire backend from source control.Ignoring everything and only unignoring
test_db.pywill cause new backend code/docs/config to be skipped unless manually force-added. That’s a high-risk default for maintainability and CI reliability.Suggested safer `.gitignore` shape
🤖 Prompt for AI Agents