Skip to content

Commit 2ed1ac3

Browse files
travisjneumanclaude
andcommitted
feat: rebuild complete navigation chain across entire curriculum
Every resource now reachable via Next links. Chain interleaves docs, concepts, projects, practice tools for natural learning flow. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 1789817 commit 2ed1ac3

277 files changed

Lines changed: 1803 additions & 747 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

00_COMPUTER_LITERACY_PRIMER.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,5 +130,7 @@ Read error messages carefully. They almost always tell you what to fix.
130130
4. Errors are helpful clues, not failures
131131
5. You do not need to memorize anything — understanding the pattern is enough
132132

133-
## Next
134-
Go to [01_ROADMAP.md](./01_ROADMAP.md).
133+
---
134+
135+
| [← Prev](START_HERE.md) | [Home](README.md) | [Next →](01_ROADMAP.md) |
136+
|:---|:---:|---:|

01_ROADMAP.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,5 +243,7 @@ You are ready to advance when you can:
243243
- [Exercism Python](https://exercism.org/tracks/python)
244244
- [Real Python](https://realpython.com/tutorials/python/)
245245

246-
## Next
247-
Go to [02_GLOSSARY.md](./02_GLOSSARY.md).
246+
---
247+
248+
| [← Prev](00_COMPUTER_LITERACY_PRIMER.md) | [Home](README.md) | [Next →](02_GLOSSARY.md) |
249+
|:---|:---:|---:|

02_GLOSSARY.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,5 +149,7 @@ Use this file anytime you see unknown terms.
149149
- [Python Tutor](https://pythontutor.com/)
150150
- [Exercism Python](https://exercism.org/tracks/python)
151151

152-
## Next
153-
Go to [03_SETUP_ALL_PLATFORMS.md](./03_SETUP_ALL_PLATFORMS.md).
152+
---
153+
154+
| [← Prev](01_ROADMAP.md) | [Home](README.md) | [Next →](03_SETUP_ALL_PLATFORMS.md) |
155+
|:---|:---:|---:|

03_SETUP_ALL_PLATFORMS.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,5 +322,7 @@ You pass setup when you can:
322322
- [Automate the Boring Stuff](https://automatetheboringstuff.com/3e/)
323323
- [Python Tutor](https://pythontutor.com/)
324324

325-
## Next
326-
Go to [04_FOUNDATIONS.md](./04_FOUNDATIONS.md).
325+
---
326+
327+
| [← Prev](02_GLOSSARY.md) | [Home](README.md) | [Next →](concepts/what-is-a-variable.md) |
328+
|:---|:---:|---:|

04_FOUNDATIONS.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,5 +115,7 @@ You are ready for the next phase when you can:
115115
- [Automate the Boring Stuff](https://automatetheboringstuff.com/3e/)
116116
- [Exercism Python](https://exercism.org/tracks/python)
117117

118-
## Next
119-
Go to [09_QUALITY_TOOLING.md](./09_QUALITY_TOOLING.md).
118+
---
119+
120+
| [← Prev](projects/level-00-absolute-beginner/README.md) | [Home](README.md) | [Next →](concepts/how-loops-work.md) |
121+
|:---|:---:|---:|

05_AUTOMATION_FILES_EXCEL.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,5 +157,7 @@ Scoring rubric (0-2 each):
157157
- [Automate the Boring Stuff](https://automatetheboringstuff.com/3e/)
158158
- [Real Python Excel articles](https://realpython.com/tutorials/python/)
159159

160-
## Next
161-
Go to [06_SQL.md](./06_SQL.md).
160+
---
161+
162+
| [← Prev](concepts/virtual-environments.md) | [Home](README.md) | [Next →](projects/level-3/README.md) |
163+
|:---|:---:|---:|

06_SQL.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,5 +116,7 @@ You are ready for SolarWinds ingestion when you can:
116116
- Full schema pack for staging/reporting/cache/marts:
117117
- [13_ENTERPRISE_SAMPLE_SCHEMAS.md](./13_ENTERPRISE_SAMPLE_SCHEMAS.md)
118118

119-
## Next
120-
Go to [07_SOLARWINDS_ORION.md](./07_SOLARWINDS_ORION.md).
119+
---
120+
121+
| [← Prev](projects/level-3/README.md) | [Home](README.md) | [Next →](projects/level-4/README.md) |
122+
|:---|:---:|---:|

07_MONITORING_API_INTEGRATION.md

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
# 07 - Monitoring & API Integration (Read-First, Safe-by-Default)
2+
Home: [README](./README.md)
3+
4+
## Who this is for
5+
- Learners integrating external monitoring or telemetry APIs into Python data workflows.
6+
- Teams needing reliable API-based reporting and downstream dashboards.
7+
8+
## What you will build
9+
- Read-only ingestion jobs for external monitoring APIs.
10+
- Shared database cache tables for dashboard-friendly access.
11+
- A documented field mapping worksheet and data contract.
12+
13+
## Prerequisites
14+
- SQL ETL baseline from [06_SQL.md](./06_SQL.md).
15+
- API credentials (key or token) for your monitoring platform.
16+
- Database write access to cache schema.
17+
18+
## Step-by-step lab pack
19+
20+
### Step 1 - Read-only policy baseline
21+
Before any code:
22+
- confirm API scopes,
23+
- enforce read-only endpoints,
24+
- define timeout and retry standards.
25+
26+
No write operations are allowed until validation checklist passes.
27+
28+
### Step 2 - Monitoring API ingestion starter
29+
Use any monitoring or telemetry API you have access to. Good free options for learning:
30+
- [OpenWeatherMap API](https://openweathermap.org/api) (weather monitoring)
31+
- [GitHub API](https://docs.github.com/en/rest) (repository/event monitoring)
32+
- [UptimeRobot API](https://uptimerobot.com/api/) (uptime monitoring)
33+
34+
Initial pulls:
35+
- active alerts or events,
36+
- resource/node health status,
37+
- key metrics or utilization data.
38+
39+
### Step 3 - Secondary source ingestion
40+
Add a second data source to practice multi-source integration:
41+
- a different API endpoint from the same platform,
42+
- or a complementary monitoring service.
43+
44+
Initial pulls:
45+
- monitored instances or resources,
46+
- health and performance metrics,
47+
- alert/event summary.
48+
49+
### Step 4 - Shared database cache contract
50+
Create cache tables with source metadata:
51+
- `cache_monitoring_alerts`
52+
- `cache_monitoring_nodes`
53+
- `cache_perf_instances`
54+
- `cache_perf_metrics`
55+
56+
Required columns:
57+
- `source_system`
58+
- `collected_at_utc`
59+
- `entity_key`
60+
- `payload_hash`
61+
62+
### Step 5 - Field mapping worksheet
63+
Maintain this worksheet in your project docs:
64+
65+
| Entity | Source system | Collection cadence | Destination table | Owner |
66+
|---|---|---|---|---|
67+
| Active alerts | Monitoring API | Every 15 min | cache_monitoring_alerts | Monitoring team |
68+
| Node status | Monitoring API | Every 15 min | cache_monitoring_nodes | Monitoring team |
69+
| Instance health | Performance API | Every 30 min | cache_perf_instances | DBA team |
70+
| Performance metrics | Performance API | Hourly | cache_perf_metrics | DBA team |
71+
72+
### Step 6 - Daily ops report build
73+
Outputs:
74+
- `output/monitoring_daily.xlsx`
75+
- `output/monitoring_daily.html`
76+
- `logs/monitoring_run_YYYYMMDD.log`
77+
78+
Include:
79+
- top critical alerts,
80+
- down resource summary,
81+
- instance health snapshot,
82+
- stale data warnings.
83+
84+
## Expected output
85+
- Stable read-only ingestion from monitoring APIs.
86+
- Reliable cache tables for dashboards.
87+
- Traceable field mappings and data ownership.
88+
89+
## Break/fix drills
90+
1. Force token/auth failure and verify sanitized error logging.
91+
2. Simulate API timeout and validate retry/backoff.
92+
3. Remove required field from payload transform and verify reject behavior.
93+
94+
## Troubleshooting
95+
- auth errors:
96+
- validate credential scope,
97+
- test endpoint manually,
98+
- confirm clock/time sync for token validity.
99+
- schema drift:
100+
- compare payload keys against mapping worksheet,
101+
- route unknown fields to audit logs.
102+
- stale dashboards:
103+
- verify cache job schedule and `collected_at_utc` freshness checks.
104+
105+
## Mastery check
106+
Advance when you can:
107+
- describe your API data contracts,
108+
- prove read-only ingestion reliability,
109+
- explain fallback when source APIs are unavailable.
110+
111+
## Learning-style options (Play/Build/Dissect/Teach-back)
112+
- Play: vary polling intervals and compare freshness/cost tradeoffs.
113+
- Build: implement both ingestion jobs and cache writes.
114+
- Dissect: annotate one end-to-end payload transform.
115+
- Teach-back: present source-to-cache architecture to a peer.
116+
117+
## Primary Sources
118+
- [OpenWeatherMap API](https://openweathermap.org/api)
119+
- [GitHub REST API](https://docs.github.com/en/rest)
120+
- [requests library](https://docs.python-requests.org/en/latest/)
121+
- [SQLAlchemy tutorial](https://docs.sqlalchemy.org/en/20/tutorial/index.html)
122+
123+
## Optional Resources
124+
- [UptimeRobot API](https://uptimerobot.com/api/)
125+
- [httpx documentation](https://www.python-httpx.org/)
126+
127+
## Sample database schemas
128+
- Use this schema pack for cache and downstream marts:
129+
- [13_SAMPLE_DATABASE_SCHEMAS.md](./13_SAMPLE_DATABASE_SCHEMAS.md)
130+
131+
---
132+
133+
| [← Prev](projects/level-5/README.md) | [Home](README.md) | [Next →](concepts/http-explained.md) |
134+
|:---|:---:|---:|

07_SOLARWINDS_ORION.md

Lines changed: 0 additions & 130 deletions
This file was deleted.

08_DASHBOARDS.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,5 +99,7 @@ You are done when a non-technical user can:
9999
- If you want faster progress through this phase with less friction:
100100
- [14_NAVIGATION_AND_STUDY_WORKFLOW.md](./14_NAVIGATION_AND_STUDY_WORKFLOW.md)
101101

102-
## Next
103-
Go to [10_CAPSTONE_PROJECTS.md](./10_CAPSTONE_PROJECTS.md).
102+
---
103+
104+
| [← Prev](projects/level-7/README.md) | [Home](README.md) | [Next →](projects/level-8/README.md) |
105+
|:---|:---:|---:|

0 commit comments

Comments
 (0)