digraph DataSync { // Graph settings rankdir=LR; compound=true; fontname="Helvetica"; node [fontname="Helvetica", fontsize=11]; edge [fontname="Helvetica", fontsize=10]; // Title labelloc="t"; label="Deskmeter - Change Streams Data Sync"; fontsize=16; // Styling node [shape=box, style="rounded,filled"]; // Local MongoDB subgraph cluster_local_mongo { label="Local MongoDB (Replica Set)"; style=filled; color="#E8F5E9"; fillcolor="#E8F5E9"; oplog [label="Oplog", fillcolor="#C8E6C9", shape=cylinder]; subgraph cluster_collections { label="Collections"; style=dashed; color="#388E3C"; switch_coll [label="switch\n(workspace events)", fillcolor="#DCEDC8"]; task_coll [label="task\n(current tasks)", fillcolor="#DCEDC8"]; state_coll [label="state\n(current state)", fillcolor="#DCEDC8"]; history_coll [label="task_history\n(path cache)", fillcolor="#DCEDC8"]; } } // dmsync daemon subgraph cluster_dmsync { label="dmsync Daemon"; style=filled; color="#F3E5F5"; fillcolor="#F3E5F5"; watcher [label="Change Stream\nWatcher", fillcolor="#E1BEE7"]; resume_token [label="Resume Token\n(~/.dmsync-resume-token)", fillcolor="#E1BEE7", shape=note]; } // Remote MongoDB subgraph cluster_remote_mongo { label="Remote MongoDB (Docker)"; style=filled; color="#FFF3E0"; fillcolor="#FFF3E0"; remote_switch [label="switch", fillcolor="#FFE0B2"]; remote_task [label="task", fillcolor="#FFE0B2"]; remote_state [label="state", fillcolor="#FFE0B2"]; remote_history [label="task_history", fillcolor="#FFE0B2"]; } // Flow switch_coll -> oplog [style=invis]; task_coll -> oplog [style=invis]; state_coll -> oplog [style=invis]; history_coll -> oplog [style=invis]; oplog -> watcher [label="watch()", color="#7B1FA2", style=bold]; watcher -> resume_token [label="persist", color="#666", style=dashed]; resume_token -> watcher [label="resume_after", color="#666", style=dashed]; watcher -> remote_switch [label="upsert", color="#F57C00"]; watcher -> remote_task [label="upsert", color="#F57C00"]; watcher -> remote_state [label="upsert", color="#F57C00"]; watcher -> remote_history [label="upsert", color="#F57C00"]; }