- Switch default repository to start empty when Postgres is configured; GraphDataLoaderHostedService loads real data from graph.graph_nodes/edges on startup and refreshes every 5 minutes - Keep InMemoryGraphRepository with hardcoded seed as fallback when no DB - Add Reload() method to InMemoryGraphRepository for hot-swapping data - Add GetAllNodesAsync/GetAllEdgesAsync to PostgresGraphRepository - Deprecate hardcoded seed data in InMemoryGraphRepository - Fix graph-api port mismatch: container listens on 8080 (ASPNETCORE_URLS) but compose mapped 80:80; corrected to 80:8080 + healthcheck to 8080 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Graph
Container(s): stellaops-graph-api Slot: 20 | Port: 8080 | Consumer Group: graph Resource Tier: medium
Note: Cartographer (Slot 21) has been merged into graph-api. The
cartographer.stella-ops.localhostname is now a network alias on the graph-api container for backwards compatibility. The Scheduler'sCartographer.BaseAddressconfig now points tohttp://graph.stella-ops.local.
Purpose
The Graph API service provides a dependency and service graph for the Stella Ops platform. It supports graph search, path queries, diff computation, lineage tracking, overlay projections, saved views, and export functionality. It serves as the central topology store for understanding relationships between components, images, and services.
It also hosts the Graph Indexer pipeline (SBOM ingestion, analytics, incremental change-stream processing) and the Cartographer-compatible build/overlay endpoints consumed by the Scheduler Worker.
API Surface
graph(via Router) — graph search, path queries, diff, lineage, overlay, saved views, export (GEXF/DOT/JSON), edge metadata, audit log, rate-limited access/api/graphs/builds(POST, GET) — Cartographer-compatible build endpoints (Scheduler contract)/api/graphs/overlays(POST, GET) — Cartographer-compatible overlay endpoints (Scheduler contract)
Storage
PostgreSQL (via Postgres:Graph for saved views and graph data); falls back to in-memory repository when no Postgres connection is configured.
Graph Indexer Persistence writes to graph.graph_nodes and graph.graph_edges tables.
Background Workers
GraphSavedViewsMigrationHostedService— migrates saved views on startupGraphAnalyticsHostedService— runs graph analytics pipeline (centrality, clustering)GraphChangeStreamProcessor— processes incremental graph change events