Current section

Files

Jump to
reckon_db assets store_inspector.svg
Raw

assets/store_inspector.svg

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 500">
<defs>
<linearGradient id="bgGrad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#1a1a2e;stop-opacity:1" />
<stop offset="100%" style="stop-color:#16213e;stop-opacity:1" />
</linearGradient>
<linearGradient id="inspectorGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#e94560;stop-opacity:1" />
<stop offset="100%" style="stop-color:#c73e54;stop-opacity:1" />
</linearGradient>
<linearGradient id="facadeGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#0f3460;stop-opacity:1" />
<stop offset="100%" style="stop-color:#0a2540;stop-opacity:1" />
</linearGradient>
<linearGradient id="khepriGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#533483;stop-opacity:1" />
<stop offset="100%" style="stop-color:#3d2666;stop-opacity:1" />
</linearGradient>
<linearGradient id="clientGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:#2d6a4f;stop-opacity:1" />
<stop offset="100%" style="stop-color:#1b4332;stop-opacity:1" />
</linearGradient>
<filter id="shadow" x="-10%" y="-10%" width="120%" height="120%">
<feDropShadow dx="2" dy="3" stdDeviation="3" flood-opacity="0.3"/>
</filter>
</defs>
<!-- Background -->
<rect width="800" height="500" fill="url(#bgGrad)" rx="8"/>
<!-- Title -->
<text x="400" y="35" text-anchor="middle" fill="#e0e0e0" font-family="monospace" font-size="16" font-weight="bold">Store Inspector Architecture</text>
<!-- Client Layer -->
<g filter="url(#shadow)">
<rect x="50" y="60" width="700" height="50" rx="8" fill="url(#clientGrad)" opacity="0.9"/>
<text x="400" y="82" text-anchor="middle" fill="#a0d0b0" font-family="monospace" font-size="11" font-weight="bold">Clients</text>
<text x="150" y="98" text-anchor="middle" fill="#d0e8d0" font-family="monospace" font-size="10">Observer UI</text>
<text x="400" y="98" text-anchor="middle" fill="#d0e8d0" font-family="monospace" font-size="10">esdb_gater_api</text>
<text x="650" y="98" text-anchor="middle" fill="#d0e8d0" font-family="monospace" font-size="10">CLI / REPL</text>
</g>
<!-- Arrow down -->
<line x1="400" y1="110" x2="400" y2="135" stroke="#666" stroke-width="2" marker-end="url(#arrowhead)"/>
<!-- Gateway Worker -->
<g filter="url(#shadow)">
<rect x="200" y="135" width="400" height="40" rx="8" fill="url(#facadeGrad)" opacity="0.9"/>
<text x="400" y="160" text-anchor="middle" fill="#8ab4f8" font-family="monospace" font-size="12" font-weight="bold">reckon_db_gateway_worker</text>
</g>
<!-- Arrow down -->
<line x1="400" y1="175" x2="400" y2="200" stroke="#666" stroke-width="2"/>
<!-- Store Inspector (center) -->
<g filter="url(#shadow)">
<rect x="200" y="200" width="400" height="60" rx="10" fill="url(#inspectorGrad)" opacity="0.95"/>
<text x="400" y="225" text-anchor="middle" fill="#fff" font-family="monospace" font-size="13" font-weight="bold">reckon_db_store_inspector</text>
<text x="400" y="248" text-anchor="middle" fill="#ffb3b3" font-family="monospace" font-size="10">store_stats | list_all_snapshots | list_subscriptions</text>
</g>
<!-- Arrows to facades -->
<line x1="280" y1="260" x2="130" y2="310" stroke="#e94560" stroke-width="1.5" stroke-dasharray="4"/>
<line x1="400" y1="260" x2="400" y2="310" stroke="#e94560" stroke-width="1.5" stroke-dasharray="4"/>
<line x1="520" y1="260" x2="670" y2="310" stroke="#e94560" stroke-width="1.5" stroke-dasharray="4"/>
<!-- Facade modules -->
<g filter="url(#shadow)">
<rect x="30" y="310" width="200" height="45" rx="6" fill="url(#facadeGrad)" opacity="0.85"/>
<text x="130" y="330" text-anchor="middle" fill="#8ab4f8" font-family="monospace" font-size="10" font-weight="bold">reckon_db_streams</text>
<text x="130" y="346" text-anchor="middle" fill="#6090c0" font-family="monospace" font-size="9">list_streams | get_version</text>
</g>
<g filter="url(#shadow)">
<rect x="260" y="310" width="280" height="45" rx="6" fill="url(#facadeGrad)" opacity="0.85"/>
<text x="400" y="330" text-anchor="middle" fill="#8ab4f8" font-family="monospace" font-size="10" font-weight="bold">reckon_db_snapshots_store</text>
<text x="400" y="346" text-anchor="middle" fill="#6090c0" font-family="monospace" font-size="9">list | get_latest</text>
</g>
<g filter="url(#shadow)">
<rect x="570" y="310" width="200" height="45" rx="6" fill="url(#facadeGrad)" opacity="0.85"/>
<text x="670" y="330" text-anchor="middle" fill="#8ab4f8" font-family="monospace" font-size="10" font-weight="bold">reckon_db_subscriptions</text>
<text x="670" y="346" text-anchor="middle" fill="#6090c0" font-family="monospace" font-size="9">list | find_by_name</text>
</g>
<!-- Arrows to Khepri -->
<line x1="130" y1="355" x2="250" y2="400" stroke="#666" stroke-width="1" stroke-dasharray="3"/>
<line x1="400" y1="355" x2="400" y2="400" stroke="#666" stroke-width="1" stroke-dasharray="3"/>
<line x1="670" y1="355" x2="550" y2="400" stroke="#666" stroke-width="1" stroke-dasharray="3"/>
<!-- Khepri -->
<g filter="url(#shadow)">
<rect x="200" y="400" width="400" height="55" rx="10" fill="url(#khepriGrad)" opacity="0.9"/>
<text x="400" y="425" text-anchor="middle" fill="#d0a0f0" font-family="monospace" font-size="12" font-weight="bold">Khepri / Ra (Raft)</text>
<text x="400" y="445" text-anchor="middle" fill="#a080c0" font-family="monospace" font-size="9">[streams] [snapshots] [subscriptions] [metadata]</text>
</g>
<!-- Legend -->
<text x="50" y="485" fill="#666" font-family="monospace" font-size="9">Read-only introspection — no data modification</text>
</svg>