Loading crates/gkg-server/src/grpc/server.rs +12 −3 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ use std::sync::Arc; use clickhouse_client::ClickHouseConfiguration; use labkit_rs::correlation::grpc::server_interceptor; use ontology::Ontology; use tonic::transport::Server as TonicServer; use tracing::info; Loading @@ -27,10 +28,12 @@ impl GrpcServer { pub fn new( addr: SocketAddr, validator: Arc<JwtValidator>, ontology: Arc<Ontology>, clickhouse_config: &ClickHouseConfiguration, cluster_health: Arc<ClusterHealthChecker>, ) -> Self { let service = KnowledgeGraphServiceImpl::new(validator, clickhouse_config, cluster_health); let service = KnowledgeGraphServiceImpl::new(validator, ontology, clickhouse_config, cluster_health); Self { addr, service: KnowledgeGraphServiceServer::with_interceptor(service, server_interceptor), Loading Loading @@ -61,10 +64,16 @@ mod tests { let addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 50054); let validator = Arc::new(JwtValidator::new("test-secret-that-is-at-least-32-bytes-long", 0).unwrap()); let ontology = Arc::new(Ontology::load_embedded().expect("ontology must load")); let clickhouse_config = ClickHouseConfiguration::default(); let cluster_health = ClusterHealthChecker::default().into_arc(); let server = GrpcServer::new(addr, validator, &clickhouse_config, cluster_health); let server = GrpcServer::new( addr, validator, ontology, &clickhouse_config, cluster_health, ); assert_eq!(server.addr(), addr); } } crates/gkg-server/src/grpc/service.rs +14 −1 Original line number Diff line number Diff line Loading @@ -44,10 +44,10 @@ pub struct KnowledgeGraphServiceImpl { impl KnowledgeGraphServiceImpl { pub fn new( validator: Arc<JwtValidator>, ontology: Arc<Ontology>, clickhouse_config: &ClickHouseConfiguration, cluster_health: Arc<ClusterHealthChecker>, ) -> Self { let ontology = Arc::new(Ontology::load_embedded().expect("Failed to load ontology")); let client = Arc::new(clickhouse_config.build_client()); let tool_service = ToolService::new(Arc::clone(&ontology)); let query_pipeline = Loading Loading @@ -387,6 +387,10 @@ mod tests { JwtValidator::new("test-secret-that-is-at-least-32-bytes-long", 0).unwrap() } fn test_ontology() -> Arc<Ontology> { Arc::new(Ontology::load_embedded().expect("ontology must load")) } fn test_config() -> ClickHouseConfiguration { ClickHouseConfiguration::default() } Loading @@ -396,6 +400,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading @@ -421,6 +426,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading Loading @@ -448,6 +454,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading Loading @@ -481,6 +488,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading @@ -502,6 +510,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading @@ -517,6 +526,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading @@ -543,6 +553,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading @@ -564,6 +575,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading @@ -589,6 +601,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading crates/gkg-server/src/main.rs +9 −5 Original line number Diff line number Diff line Loading @@ -30,7 +30,8 @@ async fn main() -> anyhow::Result<()> { let args = Args::parse(); let config = AppConfig::load()?; ontology::constants::validate_ontology_constants(); let ontology = Arc::new(ontology::Ontology::load_embedded().expect("ontology must load")); ontology::constants::validate_ontology_constants(&ontology); let _metrics = labkit_rs::metrics::try_init_with_config(config.metrics.clone()).ok(); Loading @@ -47,7 +48,6 @@ async fn main() -> anyhow::Result<()> { let metrics = ScheduledTaskMetrics::new(); let lock_service = services.lock_service.clone(); let ontology = ontology::Ontology::load_embedded().expect("ontology must load"); let deletion_graph = Arc::new(config.graph.build_client()); let deletion_datalake = Arc::new(config.datalake.build_client()); let deletion_store: Arc<dyn NamespaceDeletionStore> = Loading Loading @@ -104,11 +104,11 @@ async fn main() -> anyhow::Result<()> { schedule: config.schedule.clone(), health_bind_address: config.indexer_health_bind_address, }; indexer::run(&indexer_config, shutdown) indexer::run(&indexer_config, ontology, shutdown) .await .map_err(Into::into) } Mode::Webserver => run_webserver(&config).await, Mode::Webserver => run_webserver(&config, ontology).await, }; signal_task.abort(); Loading @@ -116,7 +116,10 @@ async fn main() -> anyhow::Result<()> { result } async fn run_webserver(config: &AppConfig) -> anyhow::Result<()> { async fn run_webserver( config: &AppConfig, ontology: Arc<ontology::Ontology>, ) -> anyhow::Result<()> { let validator = Arc::new(JwtValidator::new( config.jwt_secret()?, config.jwt_clock_skew_secs, Loading @@ -131,6 +134,7 @@ async fn run_webserver(config: &AppConfig) -> anyhow::Result<()> { let grpc_server = GrpcServer::new( config.grpc_bind_address, validator, ontology, &config.graph, cluster_health, ); Loading crates/indexer/src/lib.rs +5 −4 Original line number Diff line number Diff line Loading @@ -119,7 +119,11 @@ pub enum IndexerError { } /// Runs the indexer until completion or until the token is cancelled. pub async fn run(config: &IndexerConfig, shutdown: CancellationToken) -> Result<(), IndexerError> { pub async fn run( config: &IndexerConfig, ontology: Arc<ontology::Ontology>, shutdown: CancellationToken, ) -> Result<(), IndexerError> { info!(url = %config.nats.url, "connecting to NATS"); let broker = Arc::new(NatsBroker::connect(&config.nats).await?); Loading @@ -138,9 +142,6 @@ pub async fn run(config: &IndexerConfig, shutdown: CancellationToken) -> Result< let registry = Arc::new(HandlerRegistry::default()); info!("loading embedded ontology"); let ontology = ontology::Ontology::load_embedded().map_err(HandlerInitError::new)?; info!("initializing SDLC handlers"); modules::sdlc::register_handlers(®istry, config, &ontology).await?; Loading crates/ontology/src/constants.rs +3 −4 Original line number Diff line number Diff line Loading @@ -40,9 +40,7 @@ pub const TRAVERSAL_PATH_COLUMN: &str = "traversal_path"; /// Panics if compile-time constants diverge from the embedded ontology YAML. /// /// Call this at startup and in a `#[test]` so CI catches stale constants. pub fn validate_ontology_constants() { let ontology = crate::Ontology::load_embedded().expect("embedded ontology must be valid"); pub fn validate_ontology_constants(ontology: &crate::Ontology) { assert_eq!( ontology.table_prefix(), GL_TABLE_PREFIX, Loading @@ -66,6 +64,7 @@ mod tests { #[test] fn ontology_constants_match_yaml() { validate_ontology_constants(); let ontology = crate::Ontology::load_embedded().expect("embedded ontology must be valid"); validate_ontology_constants(&ontology); } } Loading
crates/gkg-server/src/grpc/server.rs +12 −3 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ use std::sync::Arc; use clickhouse_client::ClickHouseConfiguration; use labkit_rs::correlation::grpc::server_interceptor; use ontology::Ontology; use tonic::transport::Server as TonicServer; use tracing::info; Loading @@ -27,10 +28,12 @@ impl GrpcServer { pub fn new( addr: SocketAddr, validator: Arc<JwtValidator>, ontology: Arc<Ontology>, clickhouse_config: &ClickHouseConfiguration, cluster_health: Arc<ClusterHealthChecker>, ) -> Self { let service = KnowledgeGraphServiceImpl::new(validator, clickhouse_config, cluster_health); let service = KnowledgeGraphServiceImpl::new(validator, ontology, clickhouse_config, cluster_health); Self { addr, service: KnowledgeGraphServiceServer::with_interceptor(service, server_interceptor), Loading Loading @@ -61,10 +64,16 @@ mod tests { let addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 50054); let validator = Arc::new(JwtValidator::new("test-secret-that-is-at-least-32-bytes-long", 0).unwrap()); let ontology = Arc::new(Ontology::load_embedded().expect("ontology must load")); let clickhouse_config = ClickHouseConfiguration::default(); let cluster_health = ClusterHealthChecker::default().into_arc(); let server = GrpcServer::new(addr, validator, &clickhouse_config, cluster_health); let server = GrpcServer::new( addr, validator, ontology, &clickhouse_config, cluster_health, ); assert_eq!(server.addr(), addr); } }
crates/gkg-server/src/grpc/service.rs +14 −1 Original line number Diff line number Diff line Loading @@ -44,10 +44,10 @@ pub struct KnowledgeGraphServiceImpl { impl KnowledgeGraphServiceImpl { pub fn new( validator: Arc<JwtValidator>, ontology: Arc<Ontology>, clickhouse_config: &ClickHouseConfiguration, cluster_health: Arc<ClusterHealthChecker>, ) -> Self { let ontology = Arc::new(Ontology::load_embedded().expect("Failed to load ontology")); let client = Arc::new(clickhouse_config.build_client()); let tool_service = ToolService::new(Arc::clone(&ontology)); let query_pipeline = Loading Loading @@ -387,6 +387,10 @@ mod tests { JwtValidator::new("test-secret-that-is-at-least-32-bytes-long", 0).unwrap() } fn test_ontology() -> Arc<Ontology> { Arc::new(Ontology::load_embedded().expect("ontology must load")) } fn test_config() -> ClickHouseConfiguration { ClickHouseConfiguration::default() } Loading @@ -396,6 +400,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading @@ -421,6 +426,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading Loading @@ -448,6 +454,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading Loading @@ -481,6 +488,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading @@ -502,6 +510,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading @@ -517,6 +526,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading @@ -543,6 +553,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading @@ -564,6 +575,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading @@ -589,6 +601,7 @@ mod tests { let validator = Arc::new(mock_validator()); let service = KnowledgeGraphServiceImpl::new( validator, test_ontology(), &test_config(), ClusterHealthChecker::default().into_arc(), ); Loading
crates/gkg-server/src/main.rs +9 −5 Original line number Diff line number Diff line Loading @@ -30,7 +30,8 @@ async fn main() -> anyhow::Result<()> { let args = Args::parse(); let config = AppConfig::load()?; ontology::constants::validate_ontology_constants(); let ontology = Arc::new(ontology::Ontology::load_embedded().expect("ontology must load")); ontology::constants::validate_ontology_constants(&ontology); let _metrics = labkit_rs::metrics::try_init_with_config(config.metrics.clone()).ok(); Loading @@ -47,7 +48,6 @@ async fn main() -> anyhow::Result<()> { let metrics = ScheduledTaskMetrics::new(); let lock_service = services.lock_service.clone(); let ontology = ontology::Ontology::load_embedded().expect("ontology must load"); let deletion_graph = Arc::new(config.graph.build_client()); let deletion_datalake = Arc::new(config.datalake.build_client()); let deletion_store: Arc<dyn NamespaceDeletionStore> = Loading Loading @@ -104,11 +104,11 @@ async fn main() -> anyhow::Result<()> { schedule: config.schedule.clone(), health_bind_address: config.indexer_health_bind_address, }; indexer::run(&indexer_config, shutdown) indexer::run(&indexer_config, ontology, shutdown) .await .map_err(Into::into) } Mode::Webserver => run_webserver(&config).await, Mode::Webserver => run_webserver(&config, ontology).await, }; signal_task.abort(); Loading @@ -116,7 +116,10 @@ async fn main() -> anyhow::Result<()> { result } async fn run_webserver(config: &AppConfig) -> anyhow::Result<()> { async fn run_webserver( config: &AppConfig, ontology: Arc<ontology::Ontology>, ) -> anyhow::Result<()> { let validator = Arc::new(JwtValidator::new( config.jwt_secret()?, config.jwt_clock_skew_secs, Loading @@ -131,6 +134,7 @@ async fn run_webserver(config: &AppConfig) -> anyhow::Result<()> { let grpc_server = GrpcServer::new( config.grpc_bind_address, validator, ontology, &config.graph, cluster_health, ); Loading
crates/indexer/src/lib.rs +5 −4 Original line number Diff line number Diff line Loading @@ -119,7 +119,11 @@ pub enum IndexerError { } /// Runs the indexer until completion or until the token is cancelled. pub async fn run(config: &IndexerConfig, shutdown: CancellationToken) -> Result<(), IndexerError> { pub async fn run( config: &IndexerConfig, ontology: Arc<ontology::Ontology>, shutdown: CancellationToken, ) -> Result<(), IndexerError> { info!(url = %config.nats.url, "connecting to NATS"); let broker = Arc::new(NatsBroker::connect(&config.nats).await?); Loading @@ -138,9 +142,6 @@ pub async fn run(config: &IndexerConfig, shutdown: CancellationToken) -> Result< let registry = Arc::new(HandlerRegistry::default()); info!("loading embedded ontology"); let ontology = ontology::Ontology::load_embedded().map_err(HandlerInitError::new)?; info!("initializing SDLC handlers"); modules::sdlc::register_handlers(®istry, config, &ontology).await?; Loading
crates/ontology/src/constants.rs +3 −4 Original line number Diff line number Diff line Loading @@ -40,9 +40,7 @@ pub const TRAVERSAL_PATH_COLUMN: &str = "traversal_path"; /// Panics if compile-time constants diverge from the embedded ontology YAML. /// /// Call this at startup and in a `#[test]` so CI catches stale constants. pub fn validate_ontology_constants() { let ontology = crate::Ontology::load_embedded().expect("embedded ontology must be valid"); pub fn validate_ontology_constants(ontology: &crate::Ontology) { assert_eq!( ontology.table_prefix(), GL_TABLE_PREFIX, Loading @@ -66,6 +64,7 @@ mod tests { #[test] fn ontology_constants_match_yaml() { validate_ontology_constants(); let ontology = crate::Ontology::load_embedded().expect("embedded ontology must be valid"); validate_ontology_constants(&ontology); } }