Date: February 13, 2026 Project: FoodProject SOC Platform (Wazuh + Shuffle + IRIS-web + SOC Integrator)
The MVP platform is operational and running end-to-end in the lab environment. Core integrations are in place:
All major containers are currently up, and key health checks are passing.
run-combined-stack.sh)up, down, logs, status, helpwazuh, iris, shuffle, pagerduty, integrator)soc-status.sh)POST /mvp/incidents/ingestPOST /mvp/ioc/evaluatePOST /mvp/vpn/evaluateGET /mvp/config/policiesPUT /mvp/config/policiesGET /mvp/health/dependenciessoc-integrator-db)scripts/send-wazuh-test-events.shREADME.md.gitignoreCurrent stack status: UP
Healthy/available components:
Endpoint checks:
/health: OK@startuml
title FoodProject SOC Platform - System Architecture (MVP)
skinparam componentStyle rectangle
actor "Analyst" as analyst
cloud "External Log Sources" as logs
rectangle "SOC Shared Docker Network" {
node "Wazuh Stack" as wazuh {
component "Wazuh Manager" as wazuh_mgr
component "Wazuh Indexer" as wazuh_idx
component "Wazuh Dashboard" as wazuh_dash
}
node "Shuffle Stack" as shuffle {
component "Shuffle Frontend" as shuf_fe
component "Shuffle Backend" as shuf_be
component "Shuffle Orborus" as shuf_orb
component "Shuffle OpenSearch" as shuf_os
}
node "IRIS-web Stack" as iris {
component "IRIS Web App" as iris_app
database "IRIS DB" as iris_db
component "IRIS RabbitMQ" as iris_mq
}
node "SOC Integrator Stack" as integ {
component "soc-integrator API" as soc_api
database "soc-integrator-db" as soc_db
}
component "PagerDuty Stub" as pd_stub
}
logs --> wazuh_mgr : Security events
wazuh_mgr --> wazuh_idx : Index alerts
analyst --> wazuh_dash : Investigate alerts
wazuh_dash --> wazuh_idx : Query data
wazuh_mgr --> soc_api : Alert/incident input
soc_api --> soc_db : Persist incidents\npolicies\naudit
soc_api --> iris_app : Create/update cases
soc_api --> pd_stub : Escalation (MVP)
soc_api --> shuf_be : Trigger automation
shuf_fe --> shuf_be : UI/API
shuf_be --> shuf_os : Read/write workflow data
shuf_orb --> shuf_be : Execution queue polling
shuf_orb --> shuf_os : Workflow state interactions
iris_app --> iris_db : Case data
iris_app --> iris_mq : Async jobs
@enduml
Next milestone: MVP UAT Completion
Target outputs:
Date: February 26, 2026 Project: FoodProject SOC Platform (Wazuh + Shuffle + IRIS-web + SOC Integrator)
soc-integrator:
POST /ioc/enrichPOST /ioc/evaluateGET /ioc/historyPOST /ioc/upload-filePOST /ioc/evaluate-fileGET /ioc/analysis/{analysis_id}ioc_trace) and repository methods for audit/history.soc-integrator:
POST /iris/ticketsGET /iris/ticketsscripts/seed-iris-demo-data.shshuffle-workflows/sample-webhook-soc-integrator-iris-workflow.jsonshuffle-workflows/sample-webhook-soc-integrator-iris-workflow.mdscripts/update-shuffle-workflow-from-template.sh07ecad05-ff68-41cb-888d-96d1a8e8db4b) with:
http 1.4.0) to call soc-integrator ticket APIsoc-integrator by attaching soc-integrator service to Shuffle execution network(s) in:
compose-overrides/soc-integrator.ymlhttp://soc-integrator:8080/health.env and .env.* to root .gitignore (kept .env.example tracked).soc-integrator/.env for Shuffle, IRIS, VirusTotal, and AbuseIPDB.soc-integrator health endpoint: reachable.--forever) to simulation scripts for long-running lab traffic generation.scripts/send-wazuh-test-events.shscripts/send-wazuh-endpoint-agent-test-events.shscripts/ for firewall and endpoint scenarios with continuous mode enabledSecurity Detection & Threat Intelligence Enhancement Proposal-2.mdRequest:
curl -sS -X POST http://localhost:8088/ioc/enrich \
-H 'Content-Type: application/json' \
-d '{
"ioc_type": "domain",
"ioc_value": "google.com",
"sources": ["virustotal"]
}'
Sample response:
{
"success": true,
"ioc_type": "domain",
"ioc_value": "google.com",
"enrichment": {
"virustotal": {
"reputation": 120,
"last_analysis_stats": {
"malicious": 0,
"suspicious": 0,
"harmless": 90
}
}
}
}
Request:
curl -sS -X POST http://localhost:8088/ioc/evaluate \
-H 'Content-Type: application/json' \
-d '{
"ioc_type": "hash",
"ioc_value": "44d88612fea8a8f36de82e1278abb02f",
"sources": ["virustotal"]
}'
Sample response:
{
"success": true,
"matched": true,
"severity": "high",
"reason": "VirusTotal marked IOC as malicious",
"ioc_type": "hash",
"ioc_value": "44d88612fea8a8f36de82e1278abb02f"
}
Request:
curl -sS -X POST http://localhost:8088/iris/tickets \
-H 'Content-Type: application/json' \
-d '{
"title": "Suspicious domain detected",
"description": "Automated ticket from IOC evaluation pipeline",
"severity": "medium",
"source_ref": "shuffle-webhook-demo"
}'
Sample response:
{
"success": true,
"ticket_id": 53,
"case_id": 53,
"status": "open"
}
enrich for context, evaluate for action/verdict) that downstream automation can trust.soc-integrator history for audit, tuning, and UAT evidence.sequenceDiagram
autonumber
participant Sim as Log Simulator
participant Wz as Wazuh
participant Sh as Shuffle
participant SI as soc-integrator
participant VT as VirusTotal/AbuseIPDB
participant IR as IRIS
Sim->>Wz: Send FortiGate/Endpoint simulated logs
Wz->>Wz: Parse + correlate + trigger alert rule
Wz->>Sh: Trigger workflow (webhook/API)
Sh->>SI: POST /ioc/enrich (ioc_type, ioc_value)
SI->>VT: Query IOC intelligence
VT-->>SI: Enrichment data
SI-->>Sh: Enrichment result
Sh->>SI: POST /ioc/evaluate (ioc + enrichment context)
SI->>SI: Apply decision logic + write ioc_trace
SI-->>Sh: matched/severity/reason
alt matched == true
Sh->>SI: POST /iris/tickets
SI->>IR: Create ticket/case
IR-->>SI: ticket_id/case_id
SI-->>Sh: Ticket creation success
else matched == false
Sh-->>Sh: End workflow without ticket
end
| Group | Method | Endpoint | Notes |
|---|---|---|---|
| Core | GET | /health |
Service health and target configuration |
| Core | POST | /ingest/wazuh-alert |
Normalize inbound Wazuh alert payload |
| Core | POST | /action/create-incident |
Create PagerDuty incident |
| Core | POST | /action/trigger-shuffle |
Trigger Shuffle workflow execution |
| Core | POST | /action/create-iris-case |
Create IRIS case (legacy action endpoint) |
| IRIS | POST | /iris/tickets |
Create IRIS ticket/case via soc-integrator |
| IRIS | GET | /iris/tickets |
List/query IRIS tickets/cases |
| IOC | POST | /ioc/enrich |
IOC enrichment from configured intel sources |
| IOC | POST | /ioc/evaluate |
IOC decisioning/verdict |
| IOC | POST | /ioc/upload-file |
Upload file to IOC backend (VirusTotal flow) |
| IOC | GET | /ioc/analysis/{analysis_id} |
Retrieve IOC analysis status/result |
| IOC | POST | /ioc/evaluate-file |
Evaluate file indicator or uploaded sample |
| IOC | GET | /ioc/history |
Retrieve stored IOC trace history |
| Shuffle | GET | /shuffle/health |
Shuffle service reachability check |
| Shuffle | GET | /shuffle/auth-test |
Validate Shuffle API key access |
| Shuffle | POST | /shuffle/login |
Login against Shuffle API |
| Shuffle | POST | /shuffle/generate-apikey |
Generate Shuffle API key from credentials |
| Shuffle | GET | /shuffle/workflows |
List workflows |
| Shuffle | GET | /shuffle/workflows/{workflow_id} |
Get workflow detail |
| Shuffle | POST | /shuffle/workflows/{workflow_id}/execute |
Execute specific workflow |
| Shuffle | GET | /shuffle/apps |
List installed/available Shuffle apps |
| Shuffle | POST | /shuffle/proxy |
Generic proxy request to Shuffle API |
| Wazuh | GET | /sync/wazuh-version |
Fetch Wazuh version information |
| Wazuh | GET | /wazuh/auth-test |
Validate Wazuh API authentication |
| Wazuh | GET | /wazuh/manager-info |
Manager information |
| Wazuh | GET | /wazuh/agents |
List Wazuh agents |
| Wazuh | GET | /wazuh/alerts |
Query recent Wazuh alerts |
| Wazuh | GET | /wazuh/manager-logs |
Read manager logs |
| Wazuh | POST | /wazuh/sync-to-mvp |
Sync Wazuh alerts into MVP pipeline |
| Wazuh | GET | /wazuh/auto-sync/status |
Auto-sync loop status |
| MVP | POST | /mvp/incidents/ingest |
Ingest incident into MVP flow |
| MVP | POST | /mvp/ioc/evaluate |
Evaluate IOC under MVP policy |
| MVP | POST | /mvp/vpn/evaluate |
Evaluate VPN event under MVP policy |
| MVP | GET | /mvp/config/policies |
Read MVP policy configuration |
| MVP | PUT | /mvp/config/policies |
Update MVP policy configuration |
| MVP | GET | /mvp/health/dependencies |
Dependency health snapshot |
Additional FastAPI-generated endpoints:
GET /docsGET /openapi.json