fix: worker naming, monitor commands, and findings CLI improvements

This PR addresses multiple issues and improvements across the CLI and backend:

**Worker Naming Fixes:**
- Fix worker container naming mismatch between CLI and docker-compose
- Update worker_manager.py to use docker compose commands with service names
- Remove worker_container field from workflows API, keep only worker_service
- Backend now correctly uses service names (worker-python, worker-secrets, etc.)

**Backend API Fixes:**
- Fix workflow name extraction from run_id in runs.py (was showing "unknown")
- Update monitor command suggestions from 'monitor stats' to 'monitor live'

**Monitor Command Consolidation:**
- Merge 'monitor stats' and 'monitor live' into single 'monitor live' command
- Add --once and --style flags for flexibility
- Remove all references to deprecated 'monitor stats' command

**Findings CLI Structure Improvements (Closes #18):**
- Move 'show' command from 'findings' (plural) to 'finding' (singular)
- Keep 'export' command in 'findings' (plural) as it exports all findings
- Remove broken 'analyze' command (imported non-existent function)
- Update all command suggestions to use correct paths
- Fix smart routing logic in main.py to handle new command structure
- Add export suggestions after viewing findings with unique timestamps
- Change default export format to SARIF (industry standard)

**Docker Compose:**
- Remove obsolete version field to fix deprecation warning

All commands tested and working:
- ff finding show <run-id> --rule <rule-id> ✓
- ff findings export <run-id> ✓
- ff finding <run-id> (direct viewing) ✓
- ff monitor live <run-id> ✓
This commit is contained in:
tduhamel42
2025-10-21 16:53:08 +02:00
parent 00e23450c9
commit 8c04ff7bda
9 changed files with 283 additions and 204 deletions
+8 -2
View File
@@ -55,9 +55,12 @@ async def get_run_status(
is_failed = workflow_status == "FAILED"
is_running = workflow_status == "RUNNING"
# Extract workflow name from run_id (format: workflow_name-unique_id)
workflow_name = run_id.rsplit('-', 1)[0] if '-' in run_id else "unknown"
return WorkflowStatus(
run_id=run_id,
workflow="unknown", # Temporal doesn't track workflow name in status
workflow=workflow_name,
status=workflow_status,
is_completed=is_completed,
is_failed=is_failed,
@@ -123,6 +126,9 @@ async def get_run_findings(
else:
sarif = {}
# Extract workflow name from run_id (format: workflow_name-unique_id)
workflow_name = run_id.rsplit('-', 1)[0] if '-' in run_id else "unknown"
# Metadata
metadata = {
"completion_time": status.get("close_time"),
@@ -130,7 +136,7 @@ async def get_run_findings(
}
return WorkflowFindings(
workflow="unknown",
workflow=workflow_name,
run_id=run_id,
sarif=sarif,
metadata=metadata
-1
View File
@@ -566,7 +566,6 @@ async def get_workflow_worker_info(
return {
"workflow": workflow_name,
"vertical": vertical,
"worker_container": f"fuzzforge-worker-{vertical}",
"worker_service": f"worker-{vertical}",
"task_queue": f"{vertical}-queue",
"required": True