635a130f0b
Build and Push Docker Images / detect-changes (push) Successful in 11s
Build and Push Docker Images / build-auth-api (push) Successful in 1m0s
Build and Push Docker Images / build-employee-api (push) Successful in 1m2s
Build and Push Docker Images / build-transit-api (push) Successful in 1m1s
Build and Push Docker Images / build-error-log-api (push) Successful in 1m5s
Build and Push Docker Images / build-admin-ui (push) Successful in 1m13s
Build and Push Docker Images / build-monitoring-ui (push) Successful in 1m15s
Build and Push Docker Images / deploy-test-node (push) Successful in 3s
### Summary of Changes
1. Documentation Consolidation:
• Relocated the docs/ folder and all repository .md files (README.md, DEPLOYMENT.md, DOCKER_README.md,
DOMAINS_README.md, GETTING_STARTED.md, CI_CD_PORTAINER_GUIDE.md, ADMIN_DEPLOYMENT_SUMMARY.md,
SECURITY_PRIVATE_FILES.md, handoff.md, azure-project-plan.md, plus service-specific READMEs) into .
• Updated document links in README.md.
2. AI Agent Project Map:
• Created PROJECT_MAP.md in the project root containing complete architecture diagrams, service specs, ports, DB
schemas, environment variables, and developer workflows.
• Added PROJECT_MAP.md to .gitignore.
3. Monitoring UI & Infrastructure Integration:
• Added monitoring_ui service to docker-compose.yml (port 5175).
• Configured Gitea workflow docker-build.yml for monitoring_ui builds.
• Added CORS middleware headers in index.js.
• Added nginx.conf copy step in Dockerfile.
──────
### Recommended Commit Message
docs: consolidate project documentation into monitoring_ui and add agent project map
- Move all markdown documentation files and docs/ folder into monitoring_ui/docs/
- Update documentation hub index (monitoring_ui/docs/README.md) with relative paths
- Generate comprehensive AI agent reference map (PROJECT_MAP.md) in repository root
- Add PROJECT_MAP.md and monitoring_ui build output/env overrides to .gitignore
- Integrate monitoring_ui service into docker-compose.yml and Gitea CI workflow
- Configure CORS handling in employee_api for monitoring dashboard access
──────
### Alternative Short Commit Message
refactor(docs): move docs to monitoring_ui and create AI agent PROJECT_MAP.md
496 lines
17 KiB
HTML
496 lines
17 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
<title>Request Lab | XTransit Operations</title>
|
||
<link rel="stylesheet" href="./theme.css" />
|
||
</head>
|
||
<body>
|
||
<div class="preview-root">
|
||
<header class="preview-header">
|
||
<div class="preview-header__brand">
|
||
<span class="preview-header__logo" aria-hidden="true">XT</span>
|
||
<span>XTransit Operations</span>
|
||
</div>
|
||
<div class="preview-header__actions">
|
||
<label class="preview-header__search" aria-label="Search operations">
|
||
<svg class="preview-icon" viewBox="0 0 24 24" aria-hidden="true">
|
||
<circle cx="11" cy="11" r="6.5" stroke-width="1.8"></circle>
|
||
<path
|
||
d="m16 16 4.2 4.2"
|
||
stroke-width="1.8"
|
||
stroke-linecap="round"
|
||
></path>
|
||
</svg>
|
||
<input
|
||
class="preview-form__input"
|
||
type="search"
|
||
placeholder="Search operations"
|
||
value=""
|
||
/>
|
||
</label>
|
||
<a class="preview-header__action" href="#" aria-label="Notifications">
|
||
<svg class="preview-icon" viewBox="0 0 24 24" aria-hidden="true">
|
||
<path
|
||
d="M18 9a6 6 0 0 0-12 0c0 7-3 7-3 9h18c0-2-3-2-3-9M10 21h4"
|
||
stroke-width="1.8"
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
></path>
|
||
</svg>
|
||
</a>
|
||
<span class="preview-avatar" aria-label="Signed in as Maya Chen"
|
||
>MC</span
|
||
>
|
||
</div>
|
||
</header>
|
||
|
||
<nav class="preview-nav" aria-label="Primary navigation">
|
||
<a class="preview-nav__link" href="./command-center.html"
|
||
><svg
|
||
class="preview-icon preview-icon--sm"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
>
|
||
<rect
|
||
x="4"
|
||
y="4"
|
||
width="6"
|
||
height="6"
|
||
rx="1"
|
||
stroke-width="1.8"
|
||
></rect>
|
||
<rect
|
||
x="14"
|
||
y="4"
|
||
width="6"
|
||
height="6"
|
||
rx="1"
|
||
stroke-width="1.8"
|
||
></rect>
|
||
<rect
|
||
x="4"
|
||
y="14"
|
||
width="6"
|
||
height="6"
|
||
rx="1"
|
||
stroke-width="1.8"
|
||
></rect>
|
||
<rect
|
||
x="14"
|
||
y="14"
|
||
width="6"
|
||
height="6"
|
||
rx="1"
|
||
stroke-width="1.8"
|
||
></rect></svg
|
||
>Command Center</a
|
||
>
|
||
<a class="preview-nav__link" href="./service-catalog.html"
|
||
><svg
|
||
class="preview-icon preview-icon--sm"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
>
|
||
<path
|
||
d="M5 5h14v14H5zM8 9h8M8 13h5"
|
||
stroke-width="1.8"
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
></path></svg
|
||
>Service Catalog</a
|
||
>
|
||
<a
|
||
class="preview-nav__link preview-nav__link--active"
|
||
href="#"
|
||
aria-current="page"
|
||
><svg
|
||
class="preview-icon preview-icon--sm"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
>
|
||
<path
|
||
d="M4 6h16M4 12h10M4 18h16"
|
||
stroke-width="1.8"
|
||
stroke-linecap="round"
|
||
></path>
|
||
<circle cx="17" cy="12" r="2" stroke-width="1.8"></circle></svg
|
||
>Request Lab</a
|
||
>
|
||
<a class="preview-nav__link" href="./incident-log.html"
|
||
><svg
|
||
class="preview-icon preview-icon--sm"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
>
|
||
<path
|
||
d="M12 4 21 20H3L12 4Z"
|
||
stroke-width="1.8"
|
||
stroke-linejoin="round"
|
||
></path>
|
||
<path
|
||
d="M12 9v5M12 17h.01"
|
||
stroke-width="1.8"
|
||
stroke-linecap="round"
|
||
></path></svg
|
||
>Incident Log</a
|
||
>
|
||
</nav>
|
||
|
||
<div class="preview-shell">
|
||
<aside class="preview-sidebar" aria-label="Operations sections">
|
||
<div class="preview-sidebar__section">Workspace</div>
|
||
<a class="preview-sidebar__item" href="./command-center.html"
|
||
><svg
|
||
class="preview-icon preview-icon--sm"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
>
|
||
<path
|
||
d="M4 13h6V4H4v9ZM14 20h6v-9h-6v9ZM14 8h6V4h-6v4ZM4 20h6v-3H4v3Z"
|
||
stroke-width="1.8"
|
||
stroke-linejoin="round"
|
||
></path></svg
|
||
>Command Center</a
|
||
>
|
||
<a class="preview-sidebar__item" href="./service-catalog.html"
|
||
><svg
|
||
class="preview-icon preview-icon--sm"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
>
|
||
<path
|
||
d="M7 4h10v4H7zM4 10h16v10H4zM8 14h8M8 17h5"
|
||
stroke-width="1.8"
|
||
stroke-linejoin="round"
|
||
stroke-linecap="round"
|
||
></path></svg
|
||
>Service Catalog</a
|
||
>
|
||
<a
|
||
class="preview-sidebar__item preview-sidebar__item--active"
|
||
href="#"
|
||
aria-current="page"
|
||
><svg
|
||
class="preview-icon preview-icon--sm"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
>
|
||
<path
|
||
d="M5 5h14v14H5zM8 9h8M8 13h5M8 17h8"
|
||
stroke-width="1.8"
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
></path></svg
|
||
>Request Lab</a
|
||
>
|
||
<a class="preview-sidebar__item" href="./incident-log.html"
|
||
><svg
|
||
class="preview-icon preview-icon--sm"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
>
|
||
<path
|
||
d="M12 4 21 20H3L12 4Z"
|
||
stroke-width="1.8"
|
||
stroke-linejoin="round"
|
||
></path>
|
||
<path
|
||
d="M12 9v5M12 17h.01"
|
||
stroke-width="1.8"
|
||
stroke-linecap="round"
|
||
></path></svg
|
||
>Incident Log</a
|
||
>
|
||
<div class="preview-sidebar__section">Tools</div>
|
||
<a class="preview-sidebar__item" href="#"
|
||
><svg
|
||
class="preview-icon preview-icon--sm"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
>
|
||
<path
|
||
d="M12 3v4M12 17v4M3 12h4M17 12h4M5.6 5.6l2.8 2.8M15.6 15.6l2.8 2.8M18.4 5.6l-2.8 2.8M8.4 15.6l-2.8 2.8"
|
||
stroke-width="1.8"
|
||
stroke-linecap="round"
|
||
></path>
|
||
<circle cx="12" cy="12" r="3.5" stroke-width="1.8"></circle></svg
|
||
>Environment</a
|
||
>
|
||
</aside>
|
||
|
||
<main class="preview-main">
|
||
<div class="preview-section-title">
|
||
<div>
|
||
<div class="preview-section-title__h">
|
||
<svg
|
||
class="preview-icon"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
>
|
||
<path
|
||
d="M4 5h16v14H4zM8 9h8M8 13h5"
|
||
stroke-width="1.8"
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
></path>
|
||
</svg>
|
||
Request Lab
|
||
</div>
|
||
<div class="preview-section-title__hint">
|
||
Run a bounded request against an approved upstream route and
|
||
inspect timing.
|
||
</div>
|
||
</div>
|
||
<span class="preview-badge"
|
||
><span class="preview-badge__dot"></span>Authenticated
|
||
session</span
|
||
>
|
||
</div>
|
||
|
||
<div class="preview-split">
|
||
<form class="preview-form" aria-label="Request builder">
|
||
<div class="preview-section-title">
|
||
<div class="preview-section-title__h">
|
||
<svg
|
||
class="preview-icon"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
>
|
||
<path
|
||
d="M5 6h14M5 12h9M5 18h14"
|
||
stroke-width="1.8"
|
||
stroke-linecap="round"
|
||
></path>
|
||
<circle cx="17" cy="12" r="2" stroke-width="1.8"></circle>
|
||
</svg>
|
||
Request builder
|
||
</div>
|
||
<span class="preview-section-title__hint"
|
||
>Allowlisted routes only</span
|
||
>
|
||
</div>
|
||
<div class="preview-form__field">
|
||
<label class="preview-form__label" for="preset">Preset</label>
|
||
<select class="preview-form__select" id="preset">
|
||
<option>
|
||
Transit API GET /schedules/overview Schedule summary
|
||
</option>
|
||
<option>Transit API GET /admin/drivers Driver roster</option>
|
||
<option>Employee API GET /health Service health</option>
|
||
</select>
|
||
</div>
|
||
<div class="preview-two-column">
|
||
<div class="preview-form__field">
|
||
<label class="preview-form__label" for="service"
|
||
>Service</label
|
||
>
|
||
<select class="preview-form__select" id="service">
|
||
<option>Transit API</option>
|
||
<option>Employee API</option>
|
||
<option>Auth API</option>
|
||
</select>
|
||
</div>
|
||
<div class="preview-form__field">
|
||
<label class="preview-form__label" for="method">Method</label>
|
||
<select class="preview-form__select" id="method">
|
||
<option>GET</option>
|
||
<option>POST</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
<div class="preview-form__field">
|
||
<label class="preview-form__label" for="path">Path</label>
|
||
<input
|
||
class="preview-form__input"
|
||
id="path"
|
||
type="text"
|
||
value="/schedules/overview"
|
||
/>
|
||
</div>
|
||
<div class="preview-two-column">
|
||
<div class="preview-form__field">
|
||
<label class="preview-form__label" for="timeout"
|
||
>Timeout</label
|
||
>
|
||
<input
|
||
class="preview-form__input"
|
||
id="timeout"
|
||
type="number"
|
||
value="5000"
|
||
/>
|
||
<span class="preview-form__hint">Milliseconds</span>
|
||
</div>
|
||
<div class="preview-form__field">
|
||
<label class="preview-form__label" for="query"
|
||
>Query fields</label
|
||
>
|
||
<input
|
||
class="preview-form__input"
|
||
id="query"
|
||
type="text"
|
||
value="date=2026-09-20"
|
||
/>
|
||
</div>
|
||
</div>
|
||
<div class="preview-form__field">
|
||
<label class="preview-form__label" for="body">Body</label>
|
||
<textarea
|
||
class="preview-form__textarea"
|
||
id="body"
|
||
placeholder="No request body for this GET route"
|
||
></textarea>
|
||
<span class="preview-form__hint"
|
||
>Safe limit: 10 requests per minute, 5-second timeout.</span
|
||
>
|
||
</div>
|
||
<section class="preview-error" aria-label="Request response">
|
||
<svg
|
||
class="preview-icon preview-icon--lg preview-error__icon"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
>
|
||
<path
|
||
d="M12 4 21 20H3L12 4Z"
|
||
stroke-width="1.8"
|
||
stroke-linejoin="round"
|
||
></path>
|
||
<path
|
||
d="M12 9v5M12 17h.01"
|
||
stroke-width="1.8"
|
||
stroke-linecap="round"
|
||
></path>
|
||
</svg>
|
||
<div class="preview-error__body">
|
||
<div class="preview-error__title">Request blocked</div>
|
||
<div class="preview-error__text">
|
||
Admin role required for /admin/drivers
|
||
</div>
|
||
<button
|
||
class="preview-btn preview-btn--secondary"
|
||
type="button"
|
||
>
|
||
Retry request
|
||
</button>
|
||
</div>
|
||
</section>
|
||
</form>
|
||
|
||
<section class="preview-table-wrap" aria-labelledby="history-title">
|
||
<div
|
||
class="preview-section-title"
|
||
style="padding: 20px 20px 12px"
|
||
>
|
||
<div class="preview-section-title__h" id="history-title">
|
||
<svg
|
||
class="preview-icon"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
>
|
||
<path
|
||
d="M4 5h16v15H4zM8 9h8M8 13h5M8 17h8"
|
||
stroke-width="1.8"
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
></path>
|
||
</svg>
|
||
Request history
|
||
</div>
|
||
<span class="preview-section-title__hint"
|
||
>Today, 09:00–12:00 UTC</span
|
||
>
|
||
</div>
|
||
<table class="preview-table">
|
||
<thead>
|
||
<tr>
|
||
<th>Request</th>
|
||
<th>Status</th>
|
||
<th>Duration</th>
|
||
<th>Time</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><strong>GET</strong> /schedules/overview</td>
|
||
<td>
|
||
<span class="preview-badge preview-badge--success"
|
||
>200 OK</span
|
||
>
|
||
</td>
|
||
<td>214 ms</td>
|
||
<td>11:42:18</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>GET</strong> /admin/drivers</td>
|
||
<td>
|
||
<span class="preview-badge preview-badge--danger"
|
||
>403</span
|
||
>
|
||
</td>
|
||
<td>88 ms</td>
|
||
<td>11:36:02</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>GET</strong> /health</td>
|
||
<td>
|
||
<span class="preview-badge preview-badge--success"
|
||
>200 OK</span
|
||
>
|
||
</td>
|
||
<td>42 ms</td>
|
||
<td>11:20:44</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>GET</strong> /schedules/overview</td>
|
||
<td>
|
||
<span class="preview-badge preview-badge--success"
|
||
>200 OK</span
|
||
>
|
||
</td>
|
||
<td>197 ms</td>
|
||
<td>10:58:09</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>GET</strong> /admin/drivers</td>
|
||
<td>
|
||
<span class="preview-badge preview-badge--danger"
|
||
>403</span
|
||
>
|
||
</td>
|
||
<td>91 ms</td>
|
||
<td>10:41:27</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</section>
|
||
</div>
|
||
|
||
<div class="preview-action-bar">
|
||
<span class="preview-form__hint"
|
||
>Requests are logged to the operations audit trail.</span
|
||
>
|
||
<button class="preview-btn preview-btn--secondary" type="button">
|
||
Clear
|
||
</button>
|
||
<button class="preview-btn preview-btn--primary" type="submit">
|
||
<svg
|
||
class="preview-icon preview-icon--sm"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
>
|
||
<path
|
||
d="m5 12 5 5L20 7"
|
||
stroke-width="2"
|
||
stroke-linecap="round"
|
||
stroke-linejoin="round"
|
||
></path></svg
|
||
>Run request
|
||
</button>
|
||
</div>
|
||
</main>
|
||
</div>
|
||
</div>
|
||
</body>
|
||
</html>
|