graph TD;
C("INFERNOde Web Client") -.-> |"HTTP Request"| S["INFERNOde Server"];
style C fill:#D6F5D8
style S fill: #C1EFF5
linkStyle 0 stroke:green,color:green,stroke-dasharray: 5 5;
CM("Monitoring Tool") -.-> |"HTTP Request"| S
style CM fill:#D6F5D8
linkStyle 1 stroke:green,color:green,stroke-dasharray: 5 5;
S --> |"GET /health"| RH{"Health Router"};
S --> |"/api"| RA{"API Router"};
S --> |"404"| RNF{"Not Found Router"};
RNF --> MNF[["Not Found MW"]];
MNF -.-> |"404 HTTP Response"| C;
linkStyle 6 stroke:red,color:red,stroke-dasharray: 5 5;
RA --> |"/api/captures/*"| RC{"Capture Router"};
RA --> |"/api/dtrace/*"| RT{"Dtrace Router"};
RA --> |"/api/diff/*"| RD{"Diff Router"};
RA --> |"/api/app/*"| RAP{"App Router"};
RT --> |"POST /api/dtrace/run/flamegraph"| RRC{{"Run and Capture Route: Flame Graph"}};
RRC -.-> |"HTTP Response"| C;
linkStyle 12 stroke:red,color:red,stroke-dasharray: 5 5;
RC --> |"GET /api/captures/1"| RCG1{"Retrieve Capture by ID Route"};
subgraph "Retrieve Capture by ID ";
RCG1 --> MFD[["File MW: Deliver SVG"]];
end;
MFD -.-> |"HTTP Response"| C;
linkStyle 15 stroke:red,color:red,stroke-dasharray: 5 5;