├── app ├── __init__.py ├── backend │ ├── __init__.py │ ├── api │ │ ├── __init__.py │ │ ├── api_router.py │ │ └── routers │ │ │ ├── crashed_containers.py │ │ │ └── auth.py │ ├── core │ │ ├── __init__.py │ │ ├── state.py │ │ ├── database.py │ │ ├── password_utils.py │ │ ├── security.py │ │ ├── logger.py │ │ └── config.py │ ├── models │ │ ├── __init__.py │ │ ├── user.py │ │ └── crashed_container.py │ ├── schemas │ │ ├── __init__.py │ │ ├── user_schema.py │ │ ├── chart_stats_schema.py │ │ └── crashed_container_schema.py │ ├── services │ │ ├── __init__.py │ │ ├── stats_service.py │ │ └── monitor_service.py │ ├── utils │ │ ├── __init__.py │ │ └── string_utils.py │ ├── notifications │ │ ├── __init__.py │ │ ├── apprise_client.py │ │ └── notification_manager.py │ └── repositories │ │ ├── __init__.py │ │ ├── user_repository.py │ │ └── crashed_container_repository.py └── dashboard │ ├── src │ ├── assets │ │ └── logo.png │ ├── components │ │ ├── spinner │ │ │ └── spinner.tsx │ │ ├── navbar │ │ │ └── navbar.tsx │ │ ├── chart │ │ │ └── chart.tsx │ │ ├── datepickerform │ │ │ └── datepickerform.tsx │ │ └── datepicker │ │ │ └── datepicker.tsx │ ├── utils │ │ └── utils.ts │ ├── main.tsx │ ├── api │ │ ├── auth.ts │ │ ├── client.ts │ │ └── crashedContainers.ts │ ├── models │ │ └── crashedContainer.ts │ ├── App.tsx │ ├── App.css │ ├── context │ │ └── auth.tsx │ ├── index.css │ └── pages │ │ ├── login │ │ └── index.tsx │ │ └── homepage │ │ └── index.tsx │ ├── tsconfig.json │ ├── .gitignore │ ├── vite.config.ts │ ├── index.html │ ├── eslint.config.js │ ├── tsconfig.node.json │ ├── tsconfig.app.json │ ├── package.json │ └── README.md ├── .gitignore ├── requirements.txt ├── docs └── images │ └── preview.png ├── .releaserc.json ├── Dockerfile ├── .github ├── FUNDING.yml └── workflows │ └── release.yml ├── LICENSE ├── example.env ├── CHANGELOG.md ├── main.py └── README.md /app/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/backend/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/backend/api/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/backend/core/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/backend/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/backend/schemas/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/backend/services/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/backend/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/backend/notifications/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/backend/repositories/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | .venv 3 | __pycache__/ 4 | *.py[cod] 5 | *.db -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kRYstall9/docker-surgeon/HEAD/requirements.txt -------------------------------------------------------------------------------- /docs/images/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kRYstall9/docker-surgeon/HEAD/docs/images/preview.png -------------------------------------------------------------------------------- /app/dashboard/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kRYstall9/docker-surgeon/HEAD/app/dashboard/src/assets/logo.png -------------------------------------------------------------------------------- /app/backend/core/state.py: -------------------------------------------------------------------------------- 1 | from app.backend.core.config import Config 2 | from logging import Logger 3 | 4 | config: Config | None = None 5 | logger: Logger | None = None -------------------------------------------------------------------------------- /app/dashboard/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { "path": "./tsconfig.app.json" }, 5 | { "path": "./tsconfig.node.json" } 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /app/dashboard/src/components/spinner/spinner.tsx: -------------------------------------------------------------------------------- 1 | export function Spinner() { 2 | return ( 3 |
4 | ); 5 | } 6 | -------------------------------------------------------------------------------- /app/backend/api/api_router.py: -------------------------------------------------------------------------------- 1 | from fastapi import APIRouter 2 | from app.backend.api.routers import auth, crashed_containers 3 | 4 | api_router = APIRouter() 5 | api_router.include_router(crashed_containers.router) 6 | api_router.include_router(auth.router) -------------------------------------------------------------------------------- /app/dashboard/src/utils/utils.ts: -------------------------------------------------------------------------------- 1 | export function formatLocalDate(date: Date){ 2 | const year = date.getFullYear(); 3 | const month = String(date.getMonth() + 1).padStart(2, "0"); 4 | const day = String(date.getDate()).padStart(2, "0"); 5 | 6 | return `${year}-${month}-${day}`; 7 | } -------------------------------------------------------------------------------- /app/dashboard/src/main.tsx: -------------------------------------------------------------------------------- 1 | import { StrictMode } from 'react' 2 | import { createRoot } from 'react-dom/client' 3 | import './index.css' 4 | import App from './App.tsx' 5 | 6 | createRoot(document.getElementById('root')!).render( 7 |Docker Surgeon
11 |{error}
95 |Summary
102 |Crash History
108 |{selected.logs}
} 141 | {!loading && 142 | (!selectedContainer || !selected) && 143 | containerLogs.length > 0 &&Select a container to view logs...
} 144 |