mirror of
https://github.com/mblanke/ThreatHunt.git
synced 2026-03-01 05:50:21 -05:00
feat: Add Playbook Manager, Saved Searches, and Timeline View components
- Implemented PlaybookManager for creating and managing investigation playbooks with templates. - Added SavedSearches component for managing bookmarked queries and recurring scans. - Introduced TimelineView for visualizing forensic event timelines with zoomable charts. - Enhanced backend processing with auto-queued jobs for dataset uploads and improved database concurrency. - Updated frontend components for better user experience and performance optimizations. - Documented changes in update log for future reference.
This commit is contained in:
26
.gitignore
vendored
26
.gitignore
vendored
@@ -1,4 +1,4 @@
|
|||||||
# ── Python ────────────────────────────────────
|
# ── Python ────────────────────────────────────
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.py[cod]
|
*.py[cod]
|
||||||
*$py.class
|
*$py.class
|
||||||
@@ -8,34 +8,34 @@ build/
|
|||||||
*.egg
|
*.egg
|
||||||
.eggs/
|
.eggs/
|
||||||
|
|
||||||
# ── Virtual environments ─────────────────────
|
# ── Virtual environments ─────────────────────
|
||||||
venv/
|
venv/
|
||||||
.venv/
|
.venv/
|
||||||
env/
|
env/
|
||||||
|
|
||||||
# ── IDE / Editor ─────────────────────────────
|
# ── IDE / Editor ─────────────────────────────
|
||||||
.vscode/
|
.vscode/
|
||||||
.idea/
|
.idea/
|
||||||
*.swp
|
*.swp
|
||||||
*.swo
|
*.swo
|
||||||
*~
|
*~
|
||||||
|
|
||||||
# ── OS ────────────────────────────────────────
|
# ── OS ────────────────────────────────────────
|
||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
|
|
||||||
# ── Environment / Secrets ────────────────────
|
# ── Environment / Secrets ────────────────────
|
||||||
.env
|
.env
|
||||||
*.env.local
|
*.env.local
|
||||||
|
|
||||||
# ── Database ─────────────────────────────────
|
# ── Database ─────────────────────────────────
|
||||||
*.db
|
*.db
|
||||||
*.sqlite3
|
*.sqlite3
|
||||||
|
|
||||||
# ── Uploads ──────────────────────────────────
|
# ── Uploads ──────────────────────────────────
|
||||||
uploads/
|
uploads/
|
||||||
|
|
||||||
# ── Node / Frontend ──────────────────────────
|
# ── Node / Frontend ──────────────────────────
|
||||||
node_modules/
|
node_modules/
|
||||||
frontend/build/
|
frontend/build/
|
||||||
frontend/.env.local
|
frontend/.env.local
|
||||||
@@ -43,14 +43,18 @@ npm-debug.log*
|
|||||||
yarn-debug.log*
|
yarn-debug.log*
|
||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
|
|
||||||
# ── Docker ───────────────────────────────────
|
# ── Docker ───────────────────────────────────
|
||||||
docker-compose.override.yml
|
docker-compose.override.yml
|
||||||
|
|
||||||
# ── Test / Coverage ──────────────────────────
|
# ── Test / Coverage ──────────────────────────
|
||||||
.coverage
|
.coverage
|
||||||
htmlcov/
|
htmlcov/
|
||||||
.pytest_cache/
|
.pytest_cache/
|
||||||
.mypy_cache/
|
.mypy_cache/
|
||||||
|
|
||||||
# ── Alembic ──────────────────────────────────
|
# ── Alembic ──────────────────────────────────
|
||||||
alembic/versions/*.pyc
|
alembic/versions/*.pyc
|
||||||
|
|
||||||
|
*.db-wal
|
||||||
|
*.db-shm
|
||||||
|
|
||||||
|
|||||||
@@ -196,3 +196,12 @@ async def root():
|
|||||||
"openwebui": settings.OPENWEBUI_URL,
|
"openwebui": settings.OPENWEBUI_URL,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/health", tags=["health"])
|
||||||
|
async def health():
|
||||||
|
return {
|
||||||
|
"service": "ThreatHunt API",
|
||||||
|
"version": settings.APP_VERSION,
|
||||||
|
"status": "ok",
|
||||||
|
}
|
||||||
|
|||||||
4
scripts/dev-up.cmd
Normal file
4
scripts/dev-up.cmd
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
@echo off
|
||||||
|
setlocal
|
||||||
|
powershell -ExecutionPolicy Bypass -File "%~dp0dev-up.ps1" %*
|
||||||
|
exit /b %errorlevel%
|
||||||
@@ -37,11 +37,11 @@ Write-Step 'Container status'
|
|||||||
docker compose ps
|
docker compose ps
|
||||||
|
|
||||||
Write-Step 'Health checks'
|
Write-Step 'Health checks'
|
||||||
$backendOk = Wait-Http200 -url 'http://localhost:8000/openapi.json' -timeoutSeconds $HealthTimeoutSeconds
|
$backendOk = Wait-Http200 -url 'http://localhost:8000/health' -timeoutSeconds $HealthTimeoutSeconds
|
||||||
$frontendOk = if ($BackendOnly) { $true } else { Wait-Http200 -url 'http://localhost:3000/' -timeoutSeconds $HealthTimeoutSeconds }
|
$frontendOk = if ($BackendOnly) { $true } else { Wait-Http200 -url 'http://localhost:3000/' -timeoutSeconds $HealthTimeoutSeconds }
|
||||||
|
|
||||||
if (-not $backendOk) {
|
if (-not $backendOk) {
|
||||||
Write-Error 'Backend health check failed: http://localhost:8000/openapi.json did not return HTTP 200 in time.'
|
Write-Error 'Backend health check failed: http://localhost:8000/health did not return HTTP 200 in time.'
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
if (-not $frontendOk) {
|
if (-not $frontendOk) {
|
||||||
@@ -50,7 +50,7 @@ if (-not $frontendOk) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Write-Step 'All good'
|
Write-Step 'All good'
|
||||||
Write-Host 'Backend: http://localhost:8000/openapi.json (OK)' -ForegroundColor Green
|
Write-Host 'Backend: http://localhost:8000/health (OK)' -ForegroundColor Green
|
||||||
if (-not $BackendOnly) {
|
if (-not $BackendOnly) {
|
||||||
Write-Host 'Frontend: http://localhost:3000/ (OK)' -ForegroundColor Green
|
Write-Host 'Frontend: http://localhost:3000/ (OK)' -ForegroundColor Green
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user