github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/docs/diagrams/realtime-workflow.gv (about) 1 digraph from_cozy_move { 2 graph [splines=true]; 3 node [shape="box", fontname="lato", fontsize=11, margin=0.12, color="#297EF2", fontcolor="#32363F"]; 4 edge [color="#32363F"]; 5 ranksep=0.45; nodesep=1; 6 7 subgraph clients { 8 rank=same; margin=24; 9 client_1 [label="Client 1", shape="oval", color="#7F6BEE"]; 10 client_2 [label="Client 2", shape="oval", color="#7F6BEE"]; 11 } 12 13 subgraph cluster_stack_1 { 14 label="Stack 1"; labeljust="l"; fontname="lato"; fontsize=12; margin=24; 15 sub_1 [label="Subscriber"]; 16 hub_1 [label="Redis Hub"]; 17 mem_1 [label="Mem Hub"]; 18 } 19 20 redis [label="Redis", shape="cylinder", color="#7F6BEE", margin=0.2]; 21 22 subgraph cluster_stack_2 { 23 label="Stack 2"; labeljust="l"; fontname="lato"; fontsize=12; margin=24; 24 endpoint_2 [label="HTTP endpoint"]; 25 hub_2 [label="Redis Hub"]; 26 mem_2 [label="Mem Hub"]; 27 local_2 [label="Firehose topic"]; 28 sched_2 [label="Redis scheduler"]; 29 } 30 31 client_1 -> sub_1 [label="(1) WebSockets"]; 32 sub_1 -> mem_1 [label="(2) subscribe"]; 33 34 client_2 -> endpoint_2 [label="(3) HTTP request"]; 35 endpoint_2 -> hub_2 [label="(4) publish"] 36 hub_2 -> redis [label="(5) PUB"] 37 redis -> hub_2 [label="(6)"] 38 redis -> hub_1 [label="(6)"] 39 hub_2 -> mem_2 [label="(7)"] 40 hub_1 -> mem_1 [label="(7)"] 41 mem_1 -> sub_1 [label="(8)"] 42 sub_1 -> client_1 [label="(9)"] 43 44 hub_2 -> local_2 [label="(10) broadcast"] 45 local_2 -> sched_2 [label="(11)"] 46 47 // Hidden, to order the clusters/nodes 48 client_1 -> endpoint_2 [style="invis"]; 49 mem_1 -> redis [style="invis"]; 50 }