{"id":51862635,"url":"https://github.com/basel5001/devops-dashboard","last_synced_at":"2026-07-24T10:01:48.230Z","repository":{"id":368446159,"uuid":"1285170668","full_name":"basel5001/devops-dashboard","owner":"basel5001","description":"DORA metrics dashboard - deployment frequency, lead time, MTTR, change failure rate","archived":false,"fork":false,"pushed_at":"2026-06-30T15:00:57.000Z","size":19,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-30T17:04:16.605Z","etag":null,"topics":["dashboard","devops","dora-metrics","fastapi","github-api","python","sre"],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/basel5001.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-30T14:44:57.000Z","updated_at":"2026-06-30T15:01:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/basel5001/devops-dashboard","commit_stats":null,"previous_names":["basel5001/devops-dashboard"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/basel5001/devops-dashboard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basel5001%2Fdevops-dashboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basel5001%2Fdevops-dashboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basel5001%2Fdevops-dashboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basel5001%2Fdevops-dashboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/basel5001","download_url":"https://codeload.github.com/basel5001/devops-dashboard/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basel5001%2Fdevops-dashboard/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35837268,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-24T02:00:07.870Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dashboard","devops","dora-metrics","fastapi","github-api","python","sre"],"created_at":"2026-07-24T10:01:48.160Z","updated_at":"2026-07-24T10:01:48.224Z","avatar_url":"https://github.com/basel5001.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"![CI](https://github.com/basel5001/devops-dashboard/actions/workflows/ci.yml/badge.svg)\n![Security](https://github.com/basel5001/devops-dashboard/actions/workflows/security.yml/badge.svg)\n\n# DevOps Dashboard - DORA Metrics\n\nA Python FastAPI application that collects [DORA metrics](https://dora.dev/) from GitHub repositories and displays them in a real-time web dashboard.\n\n## Architecture\n\n```\ndevops-dashboard/\n├── src/\n│   ├── collectors/\n│   │   └── github_collector.py   # GitHub API metrics collector\n│   ├── api/\n│   │   └── main.py               # FastAPI application\n│   └── dashboard/\n│       └── index.html             # Single-page dashboard UI\n├── tests/\n│   ├── test_collector.py          # Collector unit tests\n│   └── test_api.py                # API endpoint tests\n├── .github/workflows/\n│   ├── ci.yml                     # CI pipeline (test + lint + docker)\n│   ├── security.yml               # Security scanning\n│   └── renovate.yml               # Dependency updates\n├── Dockerfile                     # Multi-stage container build\n├── docker-compose.yml             # Docker Compose config\n├── requirements.txt               # Production dependencies\n├── requirements-dev.txt           # Development dependencies\n└── pyproject.toml                 # Ruff + pytest config\n```\n\n## DORA Metrics\n\nThe dashboard tracks the four key DORA metrics:\n\n| Metric | Description | How We Measure |\n|--------|-------------|----------------|\n| **Deployment Frequency** | How often code is deployed to production | Count of merged PRs per week |\n| **Lead Time for Changes** | Time from first commit to production | Average time from first commit on branch to PR merge |\n| **Mean Time to Recovery (MTTR)** | How quickly service is restored after an incident | Average time from issue labeled `bug`/`incident` to close |\n| **Change Failure Rate (CFR)** | Percentage of deployments causing failures | Ratio of PRs with `revert`/`hotfix`/`rollback` in title |\n\n### DORA Performance Benchmarks\n\n| Metric | Elite | High | Medium | Low |\n|--------|-------|------|--------|-----|\n| Deploy Frequency | \u003e1/day | 1/week-1/day | 1/month-1/week | \u003c1/month |\n| Lead Time | \u003c1 hour | \u003c1 day | \u003c1 week | \u003e1 week |\n| MTTR | \u003c1 hour | \u003c1 day | \u003c1 week | \u003e1 week |\n| Change Failure Rate | 0-5% | 5-10% | 10-15% | \u003e15% |\n\n## Screenshots\n\n\u003c!-- Add screenshots of the dashboard here --\u003e\n*Dashboard with dark theme, metric cards, and trend charts.*\n\n## Quick Start\n\n### Prerequisites\n\n- Python 3.11+\n- A GitHub personal access token with `repo` scope\n\n### Local Development\n\n```bash\n# Clone the repository\ngit clone https://github.com/basel5001/devops-dashboard.git\ncd devops-dashboard\n\n# Install dependencies\nmake install-dev\n\n# Configure environment\ncp .env.example .env\n# Edit .env with your GitHub token\n\n# Run the development server\nmake dev\n\n# Open http://localhost:8000 in your browser\n```\n\n### Docker\n\n```bash\n# Build and run with Docker Compose\ncp .env.example .env\n# Edit .env with your GitHub token\n\nmake docker-build\nmake docker-run\n\n# Open http://localhost:8000\n```\n\n### Running Tests\n\n```bash\nmake test\n```\n\n### Linting\n\n```bash\nmake lint\n```\n\n## GitHub Webhook Collector\n\nThe webhook collector receives real-time events from GitHub and calculates DORA metrics automatically.\n\n### Architecture\n\n```\nGitHub → Webhook POST → collector/webhook_handler.py → SQLite/PostgreSQL\n                                    ↓\n                          realtime/events.py (Event Bus)\n                                    ↓\n                          realtime/websocket_server.py → WebSocket clients\n                                    ↓\n                          dashboard/realtime.html (Live UI)\n```\n\n### Webhook Setup\n\n1. Go to your GitHub repository → Settings → Webhooks → Add webhook\n2. Set Payload URL to: `https://your-domain.com/webhooks/github`\n3. Content type: `application/json`\n4. Secret: Set a strong secret and configure `GITHUB_WEBHOOK_SECRET` env var\n5. Select events: `push`, `pull_request`, `deployment`, `deployment_status`, `issues`\n\n### WebSocket Real-time Updates\n\nConnect to `/ws/metrics` for live metric updates:\n\n```javascript\nconst ws = new WebSocket('ws://localhost:8000/ws/metrics');\nws.onmessage = (event) =\u003e {\n  const { type, data, timestamp } = JSON.parse(event.data);\n  // type: push, deployment, deployment_status, lead_time, incident_resolved\n};\n```\n\n### Real-time Dashboard\n\nOpen `/dashboard/realtime.html` for a live-updating DORA metrics dashboard with:\n- Metric cards with color-coded performance indicators\n- Recent deployments feed\n- Incident ticker with MTTR\n- WebSocket connection status indicator\n\n## API Endpoints\n\n| Method | Path | Description |\n|--------|------|-------------|\n| `GET` | `/` | Dashboard HTML page |\n| `GET` | `/health` | Health check |\n| `GET` | `/api/metrics/{owner}/{repo}?days=30` | Fetch DORA metrics |\n| `GET` | `/api/metrics/{owner}/{repo}/history` | Metrics history |\n| `POST` | `/webhooks/github` | GitHub webhook receiver |\n| `GET` | `/metrics/dora?repo=\u0026days=30` | Aggregated DORA metrics |\n| `WS` | `/ws/metrics` | WebSocket real-time updates |\n\n### Example\n\n```bash\ncurl http://localhost:8000/api/metrics/facebook/react?days=30\n```\n\n```json\n{\n  \"deployment_frequency\": 12.5,\n  \"lead_time_hours\": 18.3,\n  \"mttr_hours\": 4.2,\n  \"change_failure_rate\": 3.1,\n  \"period_days\": 30,\n  \"repo_name\": \"facebook/react\",\n  \"collected_at\": \"2024-01-15T10:30:00+00:00\"\n}\n```\n\n## Environment Variables\n\n| Variable | Description | Required |\n|----------|-------------|----------|\n| `GITHUB_TOKEN` | GitHub personal access token with `repo` scope | Yes |\n| `GITHUB_WEBHOOK_SECRET` | Webhook signature verification secret | Yes (for webhooks) |\n| `DATABASE_URL` | SQLite file path or PostgreSQL URL | No (default: `metrics.db`) |\n| `PORT` | Application port (default: `8000`) | No |\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feat/my-feature`)\n3. Commit your changes (`git commit -m 'feat: add my feature'`)\n4. Push to the branch (`git push origin feat/my-feature`)\n5. Open a Pull Request\n\n## License\n\nThis project is licensed under the MIT License. See [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbasel5001%2Fdevops-dashboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbasel5001%2Fdevops-dashboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbasel5001%2Fdevops-dashboard/lists"}