omnibase_infra 0.2.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- omnibase_infra/__init__.py +101 -0
- omnibase_infra/adapters/adapter_onex_tool_execution.py +451 -0
- omnibase_infra/capabilities/__init__.py +15 -0
- omnibase_infra/capabilities/capability_inference_rules.py +211 -0
- omnibase_infra/capabilities/contract_capability_extractor.py +221 -0
- omnibase_infra/capabilities/intent_type_extractor.py +160 -0
- omnibase_infra/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/configs/widget_mapping.yaml +176 -0
- omnibase_infra/constants_topic_patterns.py +26 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +264 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +141 -0
- omnibase_infra/decorators/__init__.py +29 -0
- omnibase_infra/decorators/allow_any.py +109 -0
- omnibase_infra/dlq/__init__.py +90 -0
- omnibase_infra/dlq/constants_dlq.py +57 -0
- omnibase_infra/dlq/models/__init__.py +26 -0
- omnibase_infra/dlq/models/enum_replay_status.py +37 -0
- omnibase_infra/dlq/models/model_dlq_replay_record.py +135 -0
- omnibase_infra/dlq/models/model_dlq_tracking_config.py +184 -0
- omnibase_infra/dlq/service_dlq_tracking.py +611 -0
- omnibase_infra/enums/__init__.py +132 -0
- omnibase_infra/enums/enum_any_type_violation.py +104 -0
- omnibase_infra/enums/enum_backend_type.py +27 -0
- omnibase_infra/enums/enum_capture_outcome.py +42 -0
- omnibase_infra/enums/enum_capture_state.py +88 -0
- omnibase_infra/enums/enum_chain_violation_type.py +119 -0
- omnibase_infra/enums/enum_circuit_state.py +51 -0
- omnibase_infra/enums/enum_confirmation_event_type.py +27 -0
- omnibase_infra/enums/enum_consumer_group_purpose.py +92 -0
- omnibase_infra/enums/enum_contract_type.py +84 -0
- omnibase_infra/enums/enum_dedupe_strategy.py +46 -0
- omnibase_infra/enums/enum_dispatch_status.py +191 -0
- omnibase_infra/enums/enum_environment.py +46 -0
- omnibase_infra/enums/enum_execution_shape_violation.py +103 -0
- omnibase_infra/enums/enum_handler_error_type.py +111 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -0
- omnibase_infra/enums/enum_handler_source_mode.py +86 -0
- omnibase_infra/enums/enum_handler_source_type.py +87 -0
- omnibase_infra/enums/enum_handler_type.py +77 -0
- omnibase_infra/enums/enum_handler_type_category.py +61 -0
- omnibase_infra/enums/enum_infra_transport_type.py +73 -0
- omnibase_infra/enums/enum_introspection_reason.py +154 -0
- omnibase_infra/enums/enum_kafka_acks.py +99 -0
- omnibase_infra/enums/enum_message_category.py +213 -0
- omnibase_infra/enums/enum_node_archetype.py +74 -0
- omnibase_infra/enums/enum_node_output_type.py +185 -0
- omnibase_infra/enums/enum_non_retryable_error_category.py +224 -0
- omnibase_infra/enums/enum_policy_type.py +32 -0
- omnibase_infra/enums/enum_registration_state.py +261 -0
- omnibase_infra/enums/enum_registration_status.py +33 -0
- omnibase_infra/enums/enum_registry_response_status.py +28 -0
- omnibase_infra/enums/enum_response_status.py +26 -0
- omnibase_infra/enums/enum_retry_error_category.py +98 -0
- omnibase_infra/enums/enum_security_rule_id.py +103 -0
- omnibase_infra/enums/enum_selection_strategy.py +91 -0
- omnibase_infra/enums/enum_topic_standard.py +42 -0
- omnibase_infra/enums/enum_validation_severity.py +78 -0
- omnibase_infra/errors/__init__.py +160 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_binding_resolution.py +128 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +95 -0
- omnibase_infra/errors/error_consul.py +132 -0
- omnibase_infra/errors/error_container_wiring.py +243 -0
- omnibase_infra/errors/error_event_bus_registry.py +105 -0
- omnibase_infra/errors/error_infra.py +610 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +115 -0
- omnibase_infra/errors/error_vault.py +123 -0
- omnibase_infra/event_bus/__init__.py +72 -0
- omnibase_infra/event_bus/configs/kafka_event_bus_config.yaml +84 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +797 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1716 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +180 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +771 -0
- omnibase_infra/event_bus/models/__init__.py +29 -0
- omnibase_infra/event_bus/models/config/__init__.py +20 -0
- omnibase_infra/event_bus/models/config/model_kafka_event_bus_config.py +693 -0
- omnibase_infra/event_bus/models/model_dlq_event.py +206 -0
- omnibase_infra/event_bus/models/model_dlq_metrics.py +304 -0
- omnibase_infra/event_bus/models/model_event_headers.py +115 -0
- omnibase_infra/event_bus/models/model_event_message.py +60 -0
- omnibase_infra/event_bus/testing/__init__.py +26 -0
- omnibase_infra/event_bus/testing/adapter_protocol_event_publisher_inmemory.py +418 -0
- omnibase_infra/event_bus/testing/model_publisher_metrics.py +64 -0
- omnibase_infra/event_bus/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +82 -0
- omnibase_infra/handlers/filesystem/__init__.py +48 -0
- omnibase_infra/handlers/filesystem/enum_file_system_operation.py +35 -0
- omnibase_infra/handlers/filesystem/model_file_system_request.py +298 -0
- omnibase_infra/handlers/filesystem/model_file_system_result.py +166 -0
- omnibase_infra/handlers/handler_consul.py +795 -0
- omnibase_infra/handlers/handler_db.py +1046 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +2015 -0
- omnibase_infra/handlers/handler_http.py +926 -0
- omnibase_infra/handlers/handler_intent.py +387 -0
- omnibase_infra/handlers/handler_manifest_persistence.contract.yaml +184 -0
- omnibase_infra/handlers/handler_manifest_persistence.py +1539 -0
- omnibase_infra/handlers/handler_mcp.py +1430 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +428 -0
- omnibase_infra/handlers/mcp/__init__.py +19 -0
- omnibase_infra/handlers/mcp/adapter_onex_to_mcp.py +446 -0
- omnibase_infra/handlers/mcp/protocols.py +178 -0
- omnibase_infra/handlers/mcp/transport_streamable_http.py +352 -0
- omnibase_infra/handlers/mixins/__init__.py +47 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +338 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +542 -0
- omnibase_infra/handlers/mixins/mixin_consul_topic_index.py +585 -0
- omnibase_infra/handlers/mixins/mixin_vault_initialization.py +338 -0
- omnibase_infra/handlers/mixins/mixin_vault_retry.py +412 -0
- omnibase_infra/handlers/mixins/mixin_vault_secrets.py +450 -0
- omnibase_infra/handlers/mixins/mixin_vault_token.py +365 -0
- omnibase_infra/handlers/models/__init__.py +286 -0
- omnibase_infra/handlers/models/consul/__init__.py +81 -0
- omnibase_infra/handlers/models/consul/enum_consul_operation_type.py +57 -0
- omnibase_infra/handlers/models/consul/model_consul_deregister_payload.py +51 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_config.py +153 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_payload.py +89 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_found_payload.py +55 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_not_found_payload.py +49 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_recurse_payload.py +50 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_item.py +33 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_put_payload.py +41 -0
- omnibase_infra/handlers/models/consul/model_consul_register_payload.py +53 -0
- omnibase_infra/handlers/models/consul/model_consul_retry_config.py +66 -0
- omnibase_infra/handlers/models/consul/model_payload_consul.py +66 -0
- omnibase_infra/handlers/models/consul/registry_payload_consul.py +214 -0
- omnibase_infra/handlers/models/graph/__init__.py +35 -0
- omnibase_infra/handlers/models/graph/enum_graph_operation_type.py +20 -0
- omnibase_infra/handlers/models/graph/model_graph_execute_payload.py +38 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_config.py +54 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_payload.py +44 -0
- omnibase_infra/handlers/models/graph/model_graph_query_payload.py +40 -0
- omnibase_infra/handlers/models/graph/model_graph_record.py +22 -0
- omnibase_infra/handlers/models/http/__init__.py +50 -0
- omnibase_infra/handlers/models/http/enum_http_operation_type.py +29 -0
- omnibase_infra/handlers/models/http/model_http_body_content.py +45 -0
- omnibase_infra/handlers/models/http/model_http_get_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_http_handler_payload.py +90 -0
- omnibase_infra/handlers/models/http/model_http_post_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_payload_http.py +66 -0
- omnibase_infra/handlers/models/http/registry_payload_http.py +212 -0
- omnibase_infra/handlers/models/mcp/__init__.py +23 -0
- omnibase_infra/handlers/models/mcp/enum_mcp_operation_type.py +24 -0
- omnibase_infra/handlers/models/mcp/model_mcp_handler_config.py +40 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_call.py +32 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_result.py +45 -0
- omnibase_infra/handlers/models/model_consul_handler_response.py +96 -0
- omnibase_infra/handlers/models/model_db_describe_response.py +83 -0
- omnibase_infra/handlers/models/model_db_query_payload.py +95 -0
- omnibase_infra/handlers/models/model_db_query_response.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_config.py +98 -0
- omnibase_infra/handlers/models/model_filesystem_delete_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_delete_result.py +77 -0
- omnibase_infra/handlers/models/model_filesystem_directory_entry.py +75 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_result.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_payload.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_result.py +68 -0
- omnibase_infra/handlers/models/model_filesystem_read_payload.py +62 -0
- omnibase_infra/handlers/models/model_filesystem_read_result.py +61 -0
- omnibase_infra/handlers/models/model_filesystem_write_payload.py +70 -0
- omnibase_infra/handlers/models/model_filesystem_write_result.py +55 -0
- omnibase_infra/handlers/models/model_graph_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_handler_response.py +103 -0
- omnibase_infra/handlers/models/model_http_handler_response.py +101 -0
- omnibase_infra/handlers/models/model_manifest_metadata.py +75 -0
- omnibase_infra/handlers/models/model_manifest_persistence_config.py +62 -0
- omnibase_infra/handlers/models/model_manifest_query_payload.py +90 -0
- omnibase_infra/handlers/models/model_manifest_query_result.py +97 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_payload.py +44 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_result.py +98 -0
- omnibase_infra/handlers/models/model_manifest_store_payload.py +47 -0
- omnibase_infra/handlers/models/model_manifest_store_result.py +67 -0
- omnibase_infra/handlers/models/model_operation_context.py +187 -0
- omnibase_infra/handlers/models/model_qdrant_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_retry_state.py +162 -0
- omnibase_infra/handlers/models/model_vault_handler_response.py +98 -0
- omnibase_infra/handlers/models/qdrant/__init__.py +44 -0
- omnibase_infra/handlers/models/qdrant/enum_qdrant_operation_type.py +26 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_collection_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_delete_payload.py +36 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_config.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_payload.py +54 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_result.py +30 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_upsert_payload.py +36 -0
- omnibase_infra/handlers/models/vault/__init__.py +69 -0
- omnibase_infra/handlers/models/vault/enum_vault_operation_type.py +35 -0
- omnibase_infra/handlers/models/vault/model_payload_vault.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_delete_payload.py +57 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_config.py +148 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_payload.py +101 -0
- omnibase_infra/handlers/models/vault/model_vault_list_payload.py +58 -0
- omnibase_infra/handlers/models/vault/model_vault_renew_token_payload.py +67 -0
- omnibase_infra/handlers/models/vault/model_vault_retry_config.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_secret_payload.py +106 -0
- omnibase_infra/handlers/models/vault/model_vault_write_payload.py +66 -0
- omnibase_infra/handlers/models/vault/registry_payload_vault.py +213 -0
- omnibase_infra/handlers/registration_storage/__init__.py +43 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_mock.py +392 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +922 -0
- omnibase_infra/handlers/registration_storage/models/__init__.py +23 -0
- omnibase_infra/handlers/registration_storage/models/model_delete_registration_request.py +58 -0
- omnibase_infra/handlers/registration_storage/models/model_update_registration_request.py +73 -0
- omnibase_infra/handlers/registration_storage/protocol_registration_persistence.py +191 -0
- omnibase_infra/handlers/service_discovery/__init__.py +43 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_consul.py +1051 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_mock.py +258 -0
- omnibase_infra/handlers/service_discovery/models/__init__.py +22 -0
- omnibase_infra/handlers/service_discovery/models/model_discovery_result.py +64 -0
- omnibase_infra/handlers/service_discovery/models/model_registration_result.py +138 -0
- omnibase_infra/handlers/service_discovery/models/model_service_info.py +109 -0
- omnibase_infra/handlers/service_discovery/protocol_discovery_operations.py +170 -0
- omnibase_infra/idempotency/__init__.py +94 -0
- omnibase_infra/idempotency/models/__init__.py +43 -0
- omnibase_infra/idempotency/models/model_idempotency_check_result.py +85 -0
- omnibase_infra/idempotency/models/model_idempotency_guard_config.py +130 -0
- omnibase_infra/idempotency/models/model_idempotency_record.py +86 -0
- omnibase_infra/idempotency/models/model_idempotency_store_health_check_result.py +81 -0
- omnibase_infra/idempotency/models/model_idempotency_store_metrics.py +140 -0
- omnibase_infra/idempotency/models/model_postgres_idempotency_store_config.py +299 -0
- omnibase_infra/idempotency/protocol_idempotency_store.py +184 -0
- omnibase_infra/idempotency/store_inmemory.py +265 -0
- omnibase_infra/idempotency/store_postgres.py +923 -0
- omnibase_infra/infrastructure/__init__.py +0 -0
- omnibase_infra/migrations/001_create_event_ledger.sql +166 -0
- omnibase_infra/migrations/001_drop_event_ledger.sql +18 -0
- omnibase_infra/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +656 -0
- omnibase_infra/mixins/mixin_dict_like_accessors.py +146 -0
- omnibase_infra/mixins/mixin_envelope_extraction.py +119 -0
- omnibase_infra/mixins/mixin_node_introspection.py +2670 -0
- omnibase_infra/mixins/mixin_retry_execution.py +386 -0
- omnibase_infra/mixins/protocol_circuit_breaker_aware.py +133 -0
- omnibase_infra/models/__init__.py +144 -0
- omnibase_infra/models/bindings/__init__.py +59 -0
- omnibase_infra/models/bindings/constants.py +144 -0
- omnibase_infra/models/bindings/model_binding_resolution_result.py +103 -0
- omnibase_infra/models/bindings/model_operation_binding.py +44 -0
- omnibase_infra/models/bindings/model_operation_bindings_subcontract.py +152 -0
- omnibase_infra/models/bindings/model_parsed_binding.py +52 -0
- omnibase_infra/models/corpus/__init__.py +17 -0
- omnibase_infra/models/corpus/model_capture_config.py +133 -0
- omnibase_infra/models/corpus/model_capture_result.py +86 -0
- omnibase_infra/models/discovery/__init__.py +42 -0
- omnibase_infra/models/discovery/model_dependency_spec.py +319 -0
- omnibase_infra/models/discovery/model_discovered_capabilities.py +50 -0
- omnibase_infra/models/discovery/model_introspection_config.py +330 -0
- omnibase_infra/models/discovery/model_introspection_performance_metrics.py +169 -0
- omnibase_infra/models/discovery/model_introspection_task_config.py +116 -0
- omnibase_infra/models/dispatch/__init__.py +155 -0
- omnibase_infra/models/dispatch/model_debug_trace_snapshot.py +114 -0
- omnibase_infra/models/dispatch/model_dispatch_context.py +439 -0
- omnibase_infra/models/dispatch/model_dispatch_error.py +336 -0
- omnibase_infra/models/dispatch/model_dispatch_log_context.py +400 -0
- omnibase_infra/models/dispatch/model_dispatch_metadata.py +228 -0
- omnibase_infra/models/dispatch/model_dispatch_metrics.py +496 -0
- omnibase_infra/models/dispatch/model_dispatch_outcome.py +317 -0
- omnibase_infra/models/dispatch/model_dispatch_outputs.py +231 -0
- omnibase_infra/models/dispatch/model_dispatch_result.py +436 -0
- omnibase_infra/models/dispatch/model_dispatch_route.py +279 -0
- omnibase_infra/models/dispatch/model_dispatcher_metrics.py +275 -0
- omnibase_infra/models/dispatch/model_dispatcher_registration.py +352 -0
- omnibase_infra/models/dispatch/model_materialized_dispatch.py +141 -0
- omnibase_infra/models/dispatch/model_parsed_topic.py +135 -0
- omnibase_infra/models/dispatch/model_topic_parser.py +725 -0
- omnibase_infra/models/dispatch/model_tracing_context.py +285 -0
- omnibase_infra/models/errors/__init__.py +45 -0
- omnibase_infra/models/errors/model_handler_validation_error.py +594 -0
- omnibase_infra/models/errors/model_infra_error_context.py +99 -0
- omnibase_infra/models/errors/model_message_type_registry_error_context.py +71 -0
- omnibase_infra/models/errors/model_timeout_error_context.py +110 -0
- omnibase_infra/models/handlers/__init__.py +80 -0
- omnibase_infra/models/handlers/model_bootstrap_handler_descriptor.py +162 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +82 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +200 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -0
- omnibase_infra/models/handlers/model_handler_source_config.py +220 -0
- omnibase_infra/models/health/__init__.py +9 -0
- omnibase_infra/models/health/model_health_check_result.py +40 -0
- omnibase_infra/models/lifecycle/__init__.py +39 -0
- omnibase_infra/models/logging/__init__.py +51 -0
- omnibase_infra/models/logging/model_log_context.py +756 -0
- omnibase_infra/models/mcp/__init__.py +15 -0
- omnibase_infra/models/mcp/model_mcp_contract_config.py +80 -0
- omnibase_infra/models/mcp/model_mcp_server_config.py +67 -0
- omnibase_infra/models/mcp/model_mcp_tool_definition.py +73 -0
- omnibase_infra/models/mcp/model_mcp_tool_parameter.py +35 -0
- omnibase_infra/models/model_node_identity.py +126 -0
- omnibase_infra/models/model_retry_error_classification.py +78 -0
- omnibase_infra/models/projection/__init__.py +43 -0
- omnibase_infra/models/projection/model_capability_fields.py +112 -0
- omnibase_infra/models/projection/model_registration_projection.py +434 -0
- omnibase_infra/models/projection/model_registration_snapshot.py +322 -0
- omnibase_infra/models/projection/model_sequence_info.py +182 -0
- omnibase_infra/models/projection/model_snapshot_topic_config.py +591 -0
- omnibase_infra/models/projectors/__init__.py +41 -0
- omnibase_infra/models/projectors/model_projector_column.py +289 -0
- omnibase_infra/models/projectors/model_projector_discovery_result.py +65 -0
- omnibase_infra/models/projectors/model_projector_index.py +270 -0
- omnibase_infra/models/projectors/model_projector_schema.py +415 -0
- omnibase_infra/models/projectors/model_projector_validation_error.py +63 -0
- omnibase_infra/models/projectors/util_sql_identifiers.py +115 -0
- omnibase_infra/models/registration/__init__.py +68 -0
- omnibase_infra/models/registration/commands/__init__.py +15 -0
- omnibase_infra/models/registration/commands/model_node_registration_acked.py +108 -0
- omnibase_infra/models/registration/events/__init__.py +56 -0
- omnibase_infra/models/registration/events/model_node_became_active.py +103 -0
- omnibase_infra/models/registration/events/model_node_liveness_expired.py +103 -0
- omnibase_infra/models/registration/events/model_node_registration_accepted.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_received.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_timed_out.py +112 -0
- omnibase_infra/models/registration/events/model_node_registration_initiated.py +107 -0
- omnibase_infra/models/registration/events/model_node_registration_rejected.py +104 -0
- omnibase_infra/models/registration/model_event_bus_topic_entry.py +59 -0
- omnibase_infra/models/registration/model_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +190 -0
- omnibase_infra/models/registration/model_node_event_bus_config.py +99 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +195 -0
- omnibase_infra/models/registration/model_node_metadata.py +79 -0
- omnibase_infra/models/registration/model_node_registration.py +162 -0
- omnibase_infra/models/registration/model_node_registration_record.py +162 -0
- omnibase_infra/models/registry/__init__.py +29 -0
- omnibase_infra/models/registry/model_domain_constraint.py +202 -0
- omnibase_infra/models/registry/model_message_type_entry.py +271 -0
- omnibase_infra/models/resilience/__init__.py +9 -0
- omnibase_infra/models/resilience/model_circuit_breaker_config.py +227 -0
- omnibase_infra/models/routing/__init__.py +25 -0
- omnibase_infra/models/routing/model_routing_entry.py +52 -0
- omnibase_infra/models/routing/model_routing_subcontract.py +70 -0
- omnibase_infra/models/runtime/__init__.py +49 -0
- omnibase_infra/models/runtime/model_contract_security_config.py +41 -0
- omnibase_infra/models/runtime/model_discovery_error.py +81 -0
- omnibase_infra/models/runtime/model_discovery_result.py +162 -0
- omnibase_infra/models/runtime/model_discovery_warning.py +74 -0
- omnibase_infra/models/runtime/model_failed_plugin_load.py +63 -0
- omnibase_infra/models/runtime/model_handler_contract.py +296 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +129 -0
- omnibase_infra/models/runtime/model_plugin_load_context.py +93 -0
- omnibase_infra/models/runtime/model_plugin_load_summary.py +124 -0
- omnibase_infra/models/security/__init__.py +50 -0
- omnibase_infra/models/security/classification_levels.py +99 -0
- omnibase_infra/models/security/model_environment_policy.py +145 -0
- omnibase_infra/models/security/model_handler_security_policy.py +107 -0
- omnibase_infra/models/security/model_security_error.py +81 -0
- omnibase_infra/models/security/model_security_validation_result.py +328 -0
- omnibase_infra/models/security/model_security_warning.py +67 -0
- omnibase_infra/models/snapshot/__init__.py +27 -0
- omnibase_infra/models/snapshot/model_field_change.py +65 -0
- omnibase_infra/models/snapshot/model_snapshot.py +270 -0
- omnibase_infra/models/snapshot/model_snapshot_diff.py +203 -0
- omnibase_infra/models/snapshot/model_subject_ref.py +81 -0
- omnibase_infra/models/types/__init__.py +71 -0
- omnibase_infra/models/validation/__init__.py +89 -0
- omnibase_infra/models/validation/model_any_type_validation_result.py +118 -0
- omnibase_infra/models/validation/model_any_type_violation.py +141 -0
- omnibase_infra/models/validation/model_category_match_result.py +345 -0
- omnibase_infra/models/validation/model_chain_violation.py +166 -0
- omnibase_infra/models/validation/model_coverage_metrics.py +316 -0
- omnibase_infra/models/validation/model_execution_shape_rule.py +159 -0
- omnibase_infra/models/validation/model_execution_shape_validation.py +208 -0
- omnibase_infra/models/validation/model_execution_shape_validation_result.py +294 -0
- omnibase_infra/models/validation/model_execution_shape_violation.py +122 -0
- omnibase_infra/models/validation/model_localhandler_validation_result.py +139 -0
- omnibase_infra/models/validation/model_localhandler_violation.py +100 -0
- omnibase_infra/models/validation/model_output_validation_params.py +74 -0
- omnibase_infra/models/validation/model_validate_and_raise_params.py +84 -0
- omnibase_infra/models/validation/model_validation_error_params.py +84 -0
- omnibase_infra/models/validation/model_validation_outcome.py +287 -0
- omnibase_infra/nodes/__init__.py +57 -0
- omnibase_infra/nodes/architecture_validator/__init__.py +79 -0
- omnibase_infra/nodes/architecture_validator/contract.yaml +252 -0
- omnibase_infra/nodes/architecture_validator/contract_architecture_validator.yaml +203 -0
- omnibase_infra/nodes/architecture_validator/mixins/__init__.py +16 -0
- omnibase_infra/nodes/architecture_validator/mixins/mixin_file_path_rule.py +92 -0
- omnibase_infra/nodes/architecture_validator/models/__init__.py +36 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_request.py +56 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_result.py +311 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_violation.py +163 -0
- omnibase_infra/nodes/architecture_validator/models/model_rule_check_result.py +265 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_request.py +105 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_result.py +314 -0
- omnibase_infra/nodes/architecture_validator/node.py +262 -0
- omnibase_infra/nodes/architecture_validator/node_architecture_validator.py +383 -0
- omnibase_infra/nodes/architecture_validator/protocols/__init__.py +9 -0
- omnibase_infra/nodes/architecture_validator/protocols/protocol_architecture_rule.py +225 -0
- omnibase_infra/nodes/architecture_validator/registry/__init__.py +28 -0
- omnibase_infra/nodes/architecture_validator/registry/registry_infra_architecture_validator.py +106 -0
- omnibase_infra/nodes/architecture_validator/validators/__init__.py +104 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_direct_dispatch.py +422 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_handler_publishing.py +481 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_orchestrator_fsm.py +491 -0
- omnibase_infra/nodes/contract_registry_reducer/__init__.py +29 -0
- omnibase_infra/nodes/contract_registry_reducer/contract.yaml +255 -0
- omnibase_infra/nodes/contract_registry_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_contract_registry_state.py +266 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_cleanup_topic_references.py +55 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_deactivate_contract.py +58 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_mark_stale.py +49 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_heartbeat.py +71 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_topic.py +66 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_upsert_contract.py +92 -0
- omnibase_infra/nodes/contract_registry_reducer/node.py +121 -0
- omnibase_infra/nodes/contract_registry_reducer/reducer.py +784 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/registry_infra_contract_registry_reducer.py +101 -0
- omnibase_infra/nodes/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +167 -0
- omnibase_infra/nodes/effects/models/__init__.py +32 -0
- omnibase_infra/nodes/effects/models/model_backend_result.py +190 -0
- omnibase_infra/nodes/effects/models/model_effect_idempotency_config.py +92 -0
- omnibase_infra/nodes/effects/models/model_registry_request.py +132 -0
- omnibase_infra/nodes/effects/models/model_registry_response.py +263 -0
- omnibase_infra/nodes/effects/protocol_consul_client.py +89 -0
- omnibase_infra/nodes/effects/protocol_effect_idempotency_store.py +143 -0
- omnibase_infra/nodes/effects/protocol_postgres_adapter.py +96 -0
- omnibase_infra/nodes/effects/registry_effect.py +525 -0
- omnibase_infra/nodes/effects/store_effect_idempotency_inmemory.py +425 -0
- omnibase_infra/nodes/handlers/consul/contract.yaml +85 -0
- omnibase_infra/nodes/handlers/db/contract.yaml +72 -0
- omnibase_infra/nodes/handlers/graph/contract.yaml +127 -0
- omnibase_infra/nodes/handlers/http/contract.yaml +74 -0
- omnibase_infra/nodes/handlers/intent/contract.yaml +66 -0
- omnibase_infra/nodes/handlers/mcp/contract.yaml +69 -0
- omnibase_infra/nodes/handlers/vault/contract.yaml +91 -0
- omnibase_infra/nodes/node_intent_storage_effect/__init__.py +50 -0
- omnibase_infra/nodes/node_intent_storage_effect/contract.yaml +194 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/__init__.py +24 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_input.py +141 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_output.py +130 -0
- omnibase_infra/nodes/node_intent_storage_effect/node.py +94 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/__init__.py +35 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/registry_infra_intent_storage.py +294 -0
- omnibase_infra/nodes/node_ledger_projection_compute/__init__.py +50 -0
- omnibase_infra/nodes/node_ledger_projection_compute/contract.yaml +104 -0
- omnibase_infra/nodes/node_ledger_projection_compute/node.py +284 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/__init__.py +29 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/registry_infra_ledger_projection.py +118 -0
- omnibase_infra/nodes/node_ledger_write_effect/__init__.py +82 -0
- omnibase_infra/nodes/node_ledger_write_effect/contract.yaml +200 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/__init__.py +22 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_append.py +372 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_query.py +597 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/__init__.py +31 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_append_result.py +54 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_entry.py +92 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query.py +53 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query_result.py +41 -0
- omnibase_infra/nodes/node_ledger_write_effect/node.py +89 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/__init__.py +13 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/protocol_ledger_persistence.py +127 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/registry_infra_ledger_write.py +121 -0
- omnibase_infra/nodes/node_registration_orchestrator/README.md +542 -0
- omnibase_infra/nodes/node_registration_orchestrator/__init__.py +120 -0
- omnibase_infra/nodes/node_registration_orchestrator/contract.yaml +482 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/__init__.py +53 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_introspected.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_registration_acked.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_runtime_tick.py +373 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/__init__.py +62 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_heartbeat.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_introspected.py +694 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_registration_acked.py +458 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_runtime_tick.py +364 -0
- omnibase_infra/nodes/node_registration_orchestrator/introspection_event_router.py +544 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/__init__.py +75 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_intent_payload.py +194 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_registration_intent.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_intent_execution_result.py +50 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_node_liveness_expired.py +107 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_config.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_input.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_output.py +166 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_intent_payload.py +235 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_upsert_intent.py +68 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_execution_result.py +384 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_state.py +60 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registration_intent.py +177 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registry_intent.py +247 -0
- omnibase_infra/nodes/node_registration_orchestrator/node.py +195 -0
- omnibase_infra/nodes/node_registration_orchestrator/plugin.py +909 -0
- omnibase_infra/nodes/node_registration_orchestrator/protocols.py +439 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/registry_infra_node_registration_orchestrator.py +528 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +393 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +743 -0
- omnibase_infra/nodes/node_registration_reducer/__init__.py +15 -0
- omnibase_infra/nodes/node_registration_reducer/contract.yaml +301 -0
- omnibase_infra/nodes/node_registration_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/node_registration_reducer/models/model_validation_result.py +113 -0
- omnibase_infra/nodes/node_registration_reducer/node.py +139 -0
- omnibase_infra/nodes/node_registration_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_registration_reducer/registry/registry_infra_node_registration_reducer.py +79 -0
- omnibase_infra/nodes/node_registration_storage_effect/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_storage_effect/contract.yaml +220 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/__init__.py +44 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_delete_result.py +132 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_record.py +199 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_update.py +155 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_details.py +123 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_result.py +117 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_query.py +100 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_result.py +136 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_upsert_result.py +127 -0
- omnibase_infra/nodes/node_registration_storage_effect/node.py +112 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/__init__.py +22 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/protocol_registration_persistence.py +333 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/__init__.py +23 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/registry_infra_registration_storage.py +215 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +677 -0
- omnibase_infra/nodes/node_registry_effect/handlers/__init__.py +70 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_deregister.py +211 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_register.py +212 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_partial_retry.py +417 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_deactivate.py +215 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_upsert.py +208 -0
- omnibase_infra/nodes/node_registry_effect/models/__init__.py +43 -0
- omnibase_infra/nodes/node_registry_effect/models/model_partial_retry_request.py +92 -0
- omnibase_infra/nodes/node_registry_effect/node.py +165 -0
- omnibase_infra/nodes/node_registry_effect/registry/__init__.py +27 -0
- omnibase_infra/nodes/node_registry_effect/registry/registry_infra_registry_effect.py +196 -0
- omnibase_infra/nodes/node_service_discovery_effect/__init__.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/contract.yaml +246 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/__init__.py +67 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_health_status.py +72 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_service_discovery_operation.py +58 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_query.py +99 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_result.py +98 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_health_check_config.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_query_metadata.py +63 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_registration_result.py +130 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_details.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_result.py +119 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_info.py +106 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_registration.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/node.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/__init__.py +14 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/protocol_discovery_operations.py +279 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/__init__.py +13 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/registry_infra_service_discovery.py +222 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +37 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +87 -0
- omnibase_infra/nodes/reducers/models/model_payload_ledger_append.py +133 -0
- omnibase_infra/nodes/reducers/models/model_payload_postgres_upsert_registration.py +60 -0
- omnibase_infra/nodes/reducers/models/model_registration_confirmation.py +166 -0
- omnibase_infra/nodes/reducers/models/model_registration_state.py +433 -0
- omnibase_infra/nodes/reducers/registration_reducer.py +1138 -0
- omnibase_infra/observability/__init__.py +143 -0
- omnibase_infra/observability/constants_metrics.py +91 -0
- omnibase_infra/observability/factory_observability_sink.py +525 -0
- omnibase_infra/observability/handlers/__init__.py +118 -0
- omnibase_infra/observability/handlers/handler_logging_structured.py +967 -0
- omnibase_infra/observability/handlers/handler_metrics_prometheus.py +1120 -0
- omnibase_infra/observability/handlers/model_logging_handler_config.py +71 -0
- omnibase_infra/observability/handlers/model_logging_handler_response.py +77 -0
- omnibase_infra/observability/handlers/model_metrics_handler_config.py +172 -0
- omnibase_infra/observability/handlers/model_metrics_handler_payload.py +135 -0
- omnibase_infra/observability/handlers/model_metrics_handler_response.py +101 -0
- omnibase_infra/observability/hooks/__init__.py +74 -0
- omnibase_infra/observability/hooks/hook_observability.py +1223 -0
- omnibase_infra/observability/models/__init__.py +30 -0
- omnibase_infra/observability/models/enum_required_log_context_key.py +77 -0
- omnibase_infra/observability/models/model_buffered_log_entry.py +117 -0
- omnibase_infra/observability/models/model_logging_sink_config.py +73 -0
- omnibase_infra/observability/models/model_metrics_sink_config.py +156 -0
- omnibase_infra/observability/sinks/__init__.py +69 -0
- omnibase_infra/observability/sinks/sink_logging_structured.py +809 -0
- omnibase_infra/observability/sinks/sink_metrics_prometheus.py +710 -0
- omnibase_infra/plugins/__init__.py +27 -0
- omnibase_infra/plugins/examples/__init__.py +28 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer.py +271 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer_error_handling.py +210 -0
- omnibase_infra/plugins/models/__init__.py +21 -0
- omnibase_infra/plugins/models/model_plugin_context.py +76 -0
- omnibase_infra/plugins/models/model_plugin_input_data.py +58 -0
- omnibase_infra/plugins/models/model_plugin_output_data.py +62 -0
- omnibase_infra/plugins/plugin_compute_base.py +449 -0
- omnibase_infra/projectors/__init__.py +30 -0
- omnibase_infra/projectors/contracts/__init__.py +63 -0
- omnibase_infra/projectors/contracts/registration_projector.yaml +370 -0
- omnibase_infra/projectors/projection_reader_registration.py +1559 -0
- omnibase_infra/projectors/snapshot_publisher_registration.py +1329 -0
- omnibase_infra/protocols/__init__.py +104 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -0
- omnibase_infra/protocols/protocol_container_aware.py +200 -0
- omnibase_infra/protocols/protocol_dispatch_engine.py +152 -0
- omnibase_infra/protocols/protocol_event_bus_like.py +127 -0
- omnibase_infra/protocols/protocol_event_projector.py +96 -0
- omnibase_infra/protocols/protocol_idempotency_store.py +142 -0
- omnibase_infra/protocols/protocol_message_dispatcher.py +247 -0
- omnibase_infra/protocols/protocol_message_type_registry.py +306 -0
- omnibase_infra/protocols/protocol_plugin_compute.py +368 -0
- omnibase_infra/protocols/protocol_projector_schema_validator.py +82 -0
- omnibase_infra/protocols/protocol_registry_metrics.py +215 -0
- omnibase_infra/protocols/protocol_snapshot_publisher.py +396 -0
- omnibase_infra/protocols/protocol_snapshot_store.py +567 -0
- omnibase_infra/runtime/__init__.py +445 -0
- omnibase_infra/runtime/binding_config_resolver.py +2771 -0
- omnibase_infra/runtime/binding_resolver.py +753 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/constants_notification.py +75 -0
- omnibase_infra/runtime/constants_security.py +70 -0
- omnibase_infra/runtime/contract_handler_discovery.py +587 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +51 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/contract_loaders/operation_bindings_loader.py +789 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -0
- omnibase_infra/runtime/emit_daemon/__init__.py +97 -0
- omnibase_infra/runtime/emit_daemon/cli.py +844 -0
- omnibase_infra/runtime/emit_daemon/client.py +811 -0
- omnibase_infra/runtime/emit_daemon/config.py +535 -0
- omnibase_infra/runtime/emit_daemon/daemon.py +812 -0
- omnibase_infra/runtime/emit_daemon/event_registry.py +477 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_request.py +139 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_response.py +191 -0
- omnibase_infra/runtime/emit_daemon/queue.py +618 -0
- omnibase_infra/runtime/enums/__init__.py +18 -0
- omnibase_infra/runtime/enums/enum_config_ref_scheme.py +33 -0
- omnibase_infra/runtime/enums/enum_scheduler_status.py +170 -0
- omnibase_infra/runtime/envelope_validator.py +179 -0
- omnibase_infra/runtime/event_bus_subcontract_wiring.py +466 -0
- omnibase_infra/runtime/handler_bootstrap_source.py +507 -0
- omnibase_infra/runtime/handler_contract_config_loader.py +603 -0
- omnibase_infra/runtime/handler_contract_source.py +750 -0
- omnibase_infra/runtime/handler_identity.py +81 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2046 -0
- omnibase_infra/runtime/handler_registry.py +329 -0
- omnibase_infra/runtime/handler_source_resolver.py +367 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kafka_contract_source.py +984 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +402 -0
- omnibase_infra/runtime/mixins/__init__.py +24 -0
- omnibase_infra/runtime/mixins/mixin_projector_notification_publishing.py +566 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +778 -0
- omnibase_infra/runtime/models/__init__.py +229 -0
- omnibase_infra/runtime/models/model_batch_lifecycle_result.py +217 -0
- omnibase_infra/runtime/models/model_binding_config.py +168 -0
- omnibase_infra/runtime/models/model_binding_config_cache_stats.py +135 -0
- omnibase_infra/runtime/models/model_binding_config_resolver_config.py +329 -0
- omnibase_infra/runtime/models/model_cached_secret.py +138 -0
- omnibase_infra/runtime/models/model_compute_key.py +138 -0
- omnibase_infra/runtime/models/model_compute_registration.py +97 -0
- omnibase_infra/runtime/models/model_config_cache_entry.py +61 -0
- omnibase_infra/runtime/models/model_config_ref.py +331 -0
- omnibase_infra/runtime/models/model_config_ref_parse_result.py +125 -0
- omnibase_infra/runtime/models/model_contract_load_result.py +224 -0
- omnibase_infra/runtime/models/model_domain_plugin_config.py +92 -0
- omnibase_infra/runtime/models/model_domain_plugin_result.py +270 -0
- omnibase_infra/runtime/models/model_duplicate_response.py +54 -0
- omnibase_infra/runtime/models/model_enabled_protocols_config.py +61 -0
- omnibase_infra/runtime/models/model_event_bus_config.py +54 -0
- omnibase_infra/runtime/models/model_failed_component.py +55 -0
- omnibase_infra/runtime/models/model_health_check_response.py +168 -0
- omnibase_infra/runtime/models/model_health_check_result.py +229 -0
- omnibase_infra/runtime/models/model_lifecycle_result.py +245 -0
- omnibase_infra/runtime/models/model_logging_config.py +42 -0
- omnibase_infra/runtime/models/model_optional_correlation_id.py +167 -0
- omnibase_infra/runtime/models/model_optional_string.py +94 -0
- omnibase_infra/runtime/models/model_optional_uuid.py +110 -0
- omnibase_infra/runtime/models/model_policy_context.py +100 -0
- omnibase_infra/runtime/models/model_policy_key.py +138 -0
- omnibase_infra/runtime/models/model_policy_registration.py +139 -0
- omnibase_infra/runtime/models/model_policy_result.py +103 -0
- omnibase_infra/runtime/models/model_policy_type_filter.py +157 -0
- omnibase_infra/runtime/models/model_projector_notification_config.py +171 -0
- omnibase_infra/runtime/models/model_projector_plugin_loader_config.py +47 -0
- omnibase_infra/runtime/models/model_protocol_registration_config.py +65 -0
- omnibase_infra/runtime/models/model_retry_policy.py +105 -0
- omnibase_infra/runtime/models/model_runtime_config.py +150 -0
- omnibase_infra/runtime/models/model_runtime_contract_config.py +268 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_config.py +625 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_metrics.py +233 -0
- omnibase_infra/runtime/models/model_runtime_tick.py +193 -0
- omnibase_infra/runtime/models/model_secret_cache_stats.py +82 -0
- omnibase_infra/runtime/models/model_secret_mapping.py +63 -0
- omnibase_infra/runtime/models/model_secret_resolver_config.py +107 -0
- omnibase_infra/runtime/models/model_secret_resolver_metrics.py +111 -0
- omnibase_infra/runtime/models/model_secret_source_info.py +72 -0
- omnibase_infra/runtime/models/model_secret_source_spec.py +66 -0
- omnibase_infra/runtime/models/model_security_config.py +109 -0
- omnibase_infra/runtime/models/model_shutdown_batch_result.py +75 -0
- omnibase_infra/runtime/models/model_shutdown_config.py +94 -0
- omnibase_infra/runtime/models/model_transition_notification_outbox_config.py +112 -0
- omnibase_infra/runtime/models/model_transition_notification_outbox_metrics.py +140 -0
- omnibase_infra/runtime/models/model_transition_notification_publisher_metrics.py +357 -0
- omnibase_infra/runtime/projector_plugin_loader.py +1462 -0
- omnibase_infra/runtime/projector_schema_manager.py +565 -0
- omnibase_infra/runtime/projector_shell.py +1330 -0
- omnibase_infra/runtime/protocol_contract_descriptor.py +92 -0
- omnibase_infra/runtime/protocol_contract_source.py +92 -0
- omnibase_infra/runtime/protocol_domain_plugin.py +474 -0
- omnibase_infra/runtime/protocol_handler_discovery.py +221 -0
- omnibase_infra/runtime/protocol_handler_plugin_loader.py +327 -0
- omnibase_infra/runtime/protocol_lifecycle_executor.py +435 -0
- omnibase_infra/runtime/protocol_policy.py +366 -0
- omnibase_infra/runtime/protocols/__init__.py +37 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -0
- omnibase_infra/runtime/publisher_topic_scoped.py +294 -0
- omnibase_infra/runtime/registry/__init__.py +93 -0
- omnibase_infra/runtime/registry/mixin_message_type_query.py +326 -0
- omnibase_infra/runtime/registry/mixin_message_type_registration.py +354 -0
- omnibase_infra/runtime/registry/registry_event_bus_binding.py +268 -0
- omnibase_infra/runtime/registry/registry_message_type.py +542 -0
- omnibase_infra/runtime/registry/registry_protocol_binding.py +445 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_contract_source.py +693 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1185 -0
- omnibase_infra/runtime/runtime_contract_config_loader.py +406 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2112 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1651 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +2350 -0
- omnibase_infra/runtime/service_runtime_host_process.py +3493 -0
- omnibase_infra/runtime/transition_notification_outbox.py +1190 -0
- omnibase_infra/runtime/transition_notification_publisher.py +765 -0
- omnibase_infra/runtime/util_container_wiring.py +1124 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +723 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/schemas/schema_transition_notification_outbox.sql +245 -0
- omnibase_infra/services/__init__.py +89 -0
- omnibase_infra/services/corpus_capture.py +684 -0
- omnibase_infra/services/mcp/__init__.py +31 -0
- omnibase_infra/services/mcp/mcp_server_lifecycle.py +449 -0
- omnibase_infra/services/mcp/service_mcp_tool_discovery.py +411 -0
- omnibase_infra/services/mcp/service_mcp_tool_registry.py +329 -0
- omnibase_infra/services/mcp/service_mcp_tool_sync.py +565 -0
- omnibase_infra/services/registry_api/__init__.py +40 -0
- omnibase_infra/services/registry_api/main.py +261 -0
- omnibase_infra/services/registry_api/models/__init__.py +66 -0
- omnibase_infra/services/registry_api/models/model_capability_widget_mapping.py +38 -0
- omnibase_infra/services/registry_api/models/model_pagination_info.py +48 -0
- omnibase_infra/services/registry_api/models/model_registry_discovery_response.py +73 -0
- omnibase_infra/services/registry_api/models/model_registry_health_response.py +49 -0
- omnibase_infra/services/registry_api/models/model_registry_instance_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_node_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_summary.py +60 -0
- omnibase_infra/services/registry_api/models/model_response_list_instances.py +43 -0
- omnibase_infra/services/registry_api/models/model_response_list_nodes.py +51 -0
- omnibase_infra/services/registry_api/models/model_warning.py +49 -0
- omnibase_infra/services/registry_api/models/model_widget_defaults.py +28 -0
- omnibase_infra/services/registry_api/models/model_widget_mapping.py +51 -0
- omnibase_infra/services/registry_api/routes.py +371 -0
- omnibase_infra/services/registry_api/service.py +837 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +898 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +699 -0
- omnibase_infra/services/service_timeout_scanner.py +394 -0
- omnibase_infra/services/session/__init__.py +56 -0
- omnibase_infra/services/session/config_consumer.py +137 -0
- omnibase_infra/services/session/config_store.py +139 -0
- omnibase_infra/services/session/consumer.py +1007 -0
- omnibase_infra/services/session/protocol_session_aggregator.py +117 -0
- omnibase_infra/services/session/store.py +997 -0
- omnibase_infra/services/snapshot/__init__.py +31 -0
- omnibase_infra/services/snapshot/service_snapshot.py +647 -0
- omnibase_infra/services/snapshot/store_inmemory.py +637 -0
- omnibase_infra/services/snapshot/store_postgres.py +1279 -0
- omnibase_infra/shared/__init__.py +8 -0
- omnibase_infra/testing/__init__.py +10 -0
- omnibase_infra/testing/utils.py +23 -0
- omnibase_infra/topics/__init__.py +45 -0
- omnibase_infra/topics/platform_topic_suffixes.py +140 -0
- omnibase_infra/topics/util_topic_composition.py +95 -0
- omnibase_infra/types/__init__.py +48 -0
- omnibase_infra/types/type_cache_info.py +49 -0
- omnibase_infra/types/type_dsn.py +173 -0
- omnibase_infra/types/type_infra_aliases.py +60 -0
- omnibase_infra/types/typed_dict/__init__.py +29 -0
- omnibase_infra/types/typed_dict/typed_dict_envelope_build_params.py +115 -0
- omnibase_infra/types/typed_dict/typed_dict_introspection_cache.py +128 -0
- omnibase_infra/types/typed_dict/typed_dict_performance_metrics_cache.py +140 -0
- omnibase_infra/types/typed_dict_capabilities.py +64 -0
- omnibase_infra/utils/__init__.py +117 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_atomic_file.py +261 -0
- omnibase_infra/utils/util_consumer_group.py +232 -0
- omnibase_infra/utils/util_datetime.py +372 -0
- omnibase_infra/utils/util_db_transaction.py +239 -0
- omnibase_infra/utils/util_dsn_validation.py +333 -0
- omnibase_infra/utils/util_env_parsing.py +264 -0
- omnibase_infra/utils/util_error_sanitization.py +457 -0
- omnibase_infra/utils/util_pydantic_validators.py +477 -0
- omnibase_infra/utils/util_retry_optimistic.py +281 -0
- omnibase_infra/utils/util_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -0
- omnibase_infra/validation/contracts/security.validation.yaml +114 -0
- omnibase_infra/validation/enums/__init__.py +11 -0
- omnibase_infra/validation/enums/enum_contract_violation_severity.py +13 -0
- omnibase_infra/validation/infra_validators.py +1514 -0
- omnibase_infra/validation/linter_contract.py +907 -0
- omnibase_infra/validation/mixin_any_type_classification.py +120 -0
- omnibase_infra/validation/mixin_any_type_exemption.py +580 -0
- omnibase_infra/validation/mixin_any_type_reporting.py +106 -0
- omnibase_infra/validation/mixin_execution_shape_violation_checks.py +596 -0
- omnibase_infra/validation/mixin_node_archetype_detection.py +254 -0
- omnibase_infra/validation/models/__init__.py +15 -0
- omnibase_infra/validation/models/model_contract_lint_result.py +101 -0
- omnibase_infra/validation/models/model_contract_violation.py +41 -0
- omnibase_infra/validation/service_validation_aggregator.py +395 -0
- omnibase_infra/validation/validation_exemptions.yaml +2033 -0
- omnibase_infra/validation/validator_any_type.py +715 -0
- omnibase_infra/validation/validator_chain_propagation.py +839 -0
- omnibase_infra/validation/validator_execution_shape.py +465 -0
- omnibase_infra/validation/validator_localhandler.py +261 -0
- omnibase_infra/validation/validator_registration_security.py +410 -0
- omnibase_infra/validation/validator_routing_coverage.py +1020 -0
- omnibase_infra/validation/validator_runtime_shape.py +915 -0
- omnibase_infra/validation/validator_security.py +513 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.6.dist-info/METADATA +197 -0
- omnibase_infra-0.2.6.dist-info/RECORD +833 -0
- omnibase_infra-0.2.6.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.6.dist-info/entry_points.txt +5 -0
- omnibase_infra-0.2.6.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,525 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Factory for creating observability sinks.
|
|
4
|
+
|
|
5
|
+
This module provides a factory for creating observability infrastructure components
|
|
6
|
+
including metrics sinks, logging sinks, and observability hooks. The factory
|
|
7
|
+
supports configuration-based creation and optional singleton behavior for
|
|
8
|
+
resource-efficient sink management.
|
|
9
|
+
|
|
10
|
+
Factory Pattern Benefits:
|
|
11
|
+
- Centralized sink creation with consistent configuration
|
|
12
|
+
- Singleton support for shared sink instances across components
|
|
13
|
+
- Configuration validation before sink creation
|
|
14
|
+
- Easy testing via factory injection
|
|
15
|
+
|
|
16
|
+
Configuration Models:
|
|
17
|
+
The factory defines two configuration models for sink creation:
|
|
18
|
+
- ModelMetricsSinkConfig: Configuration for Prometheus metrics sinks
|
|
19
|
+
- ModelLoggingSinkConfig: Configuration for structured logging sinks
|
|
20
|
+
|
|
21
|
+
These models can be populated from ONEX contract subcontracts or created
|
|
22
|
+
directly with sensible defaults.
|
|
23
|
+
|
|
24
|
+
Usage Example:
|
|
25
|
+
```python
|
|
26
|
+
from omnibase_infra.observability import FactoryObservabilitySink
|
|
27
|
+
|
|
28
|
+
# Create factory instance
|
|
29
|
+
factory = FactoryObservabilitySink()
|
|
30
|
+
|
|
31
|
+
# Create sinks with defaults
|
|
32
|
+
metrics_sink = factory.create_metrics_sink()
|
|
33
|
+
logging_sink = factory.create_logging_sink()
|
|
34
|
+
hook = factory.create_hook(metrics_sink=metrics_sink)
|
|
35
|
+
|
|
36
|
+
# Or use singleton pattern for shared instances
|
|
37
|
+
metrics_sink_1 = factory.get_or_create_metrics_sink()
|
|
38
|
+
metrics_sink_2 = factory.get_or_create_metrics_sink()
|
|
39
|
+
assert metrics_sink_1 is metrics_sink_2 # Same instance
|
|
40
|
+
|
|
41
|
+
# With custom configuration
|
|
42
|
+
from omnibase_infra.observability.models import (
|
|
43
|
+
ModelMetricsSinkConfig,
|
|
44
|
+
ModelLoggingSinkConfig,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
metrics_config = ModelMetricsSinkConfig(
|
|
48
|
+
metric_prefix="myapp",
|
|
49
|
+
histogram_buckets=(0.01, 0.05, 0.1, 0.5, 1.0, 5.0),
|
|
50
|
+
)
|
|
51
|
+
custom_metrics_sink = factory.create_metrics_sink(config=metrics_config)
|
|
52
|
+
|
|
53
|
+
logging_config = ModelLoggingSinkConfig(
|
|
54
|
+
max_buffer_size=2000,
|
|
55
|
+
output_format="console",
|
|
56
|
+
)
|
|
57
|
+
custom_logging_sink = factory.create_logging_sink(config=logging_config)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
See Also:
|
|
61
|
+
- SinkMetricsPrometheus: Prometheus metrics sink implementation
|
|
62
|
+
- SinkLoggingStructured: Structured logging sink implementation
|
|
63
|
+
- HookObservability: Observability pipeline hook
|
|
64
|
+
- omnibase_core.models.observability.ModelMetricsPolicy: Cardinality policy
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
from __future__ import annotations
|
|
68
|
+
|
|
69
|
+
import logging
|
|
70
|
+
import threading
|
|
71
|
+
from typing import TYPE_CHECKING
|
|
72
|
+
|
|
73
|
+
from omnibase_infra.observability.hooks import HookObservability
|
|
74
|
+
from omnibase_infra.observability.models.model_logging_sink_config import (
|
|
75
|
+
ModelLoggingSinkConfig,
|
|
76
|
+
)
|
|
77
|
+
from omnibase_infra.observability.models.model_metrics_sink_config import (
|
|
78
|
+
ModelMetricsSinkConfig,
|
|
79
|
+
)
|
|
80
|
+
from omnibase_infra.observability.sinks import (
|
|
81
|
+
SinkLoggingStructured,
|
|
82
|
+
SinkMetricsPrometheus,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
if TYPE_CHECKING:
|
|
86
|
+
from omnibase_core.models.observability import ModelMetricsPolicy
|
|
87
|
+
from omnibase_spi.protocols.observability import ProtocolHotPathMetricsSink
|
|
88
|
+
|
|
89
|
+
_logger = logging.getLogger(__name__)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class FactoryObservabilitySink:
|
|
93
|
+
"""Factory for creating observability sinks and hooks.
|
|
94
|
+
|
|
95
|
+
This factory provides centralized creation of observability components
|
|
96
|
+
with support for configuration-based instantiation and singleton patterns.
|
|
97
|
+
It ensures consistent configuration across all observability infrastructure
|
|
98
|
+
and enables easy testing through factory injection.
|
|
99
|
+
|
|
100
|
+
Singleton Support:
|
|
101
|
+
The factory maintains optional singleton instances for metrics and
|
|
102
|
+
logging sinks. Use get_or_create_* methods to leverage singleton
|
|
103
|
+
behavior, or create_* methods for independent instances.
|
|
104
|
+
|
|
105
|
+
Singletons are useful when:
|
|
106
|
+
- Multiple components share the same metrics endpoint
|
|
107
|
+
- You want to minimize Prometheus metric registry duplication
|
|
108
|
+
- Resource efficiency is important
|
|
109
|
+
|
|
110
|
+
Thread Safety:
|
|
111
|
+
The factory uses a threading.Lock to ensure thread-safe singleton
|
|
112
|
+
creation. Multiple threads calling get_or_create_* concurrently
|
|
113
|
+
will receive the same singleton instance.
|
|
114
|
+
|
|
115
|
+
Warning - Test Isolation:
|
|
116
|
+
Singleton state persists across tests when using the same factory
|
|
117
|
+
instance. This can cause test pollution where state from one test
|
|
118
|
+
affects another. To ensure test isolation:
|
|
119
|
+
|
|
120
|
+
1. Call clear_singletons() in test fixtures (setup/teardown)
|
|
121
|
+
2. Create a fresh factory instance per test
|
|
122
|
+
3. Use create_* methods instead of get_or_create_* for isolation
|
|
123
|
+
|
|
124
|
+
Example pytest fixture::
|
|
125
|
+
|
|
126
|
+
@pytest.fixture
|
|
127
|
+
def observability_factory():
|
|
128
|
+
factory = FactoryObservabilitySink()
|
|
129
|
+
yield factory
|
|
130
|
+
factory.clear_singletons() # Clean up after test
|
|
131
|
+
|
|
132
|
+
Attributes:
|
|
133
|
+
_metrics_sink_instance: Cached singleton metrics sink (or None).
|
|
134
|
+
_logging_sink_instance: Cached singleton logging sink (or None).
|
|
135
|
+
_lock: Threading lock for thread-safe singleton creation.
|
|
136
|
+
|
|
137
|
+
Example:
|
|
138
|
+
```python
|
|
139
|
+
# Create factory
|
|
140
|
+
factory = FactoryObservabilitySink()
|
|
141
|
+
|
|
142
|
+
# Independent instances (new each time)
|
|
143
|
+
sink1 = factory.create_metrics_sink()
|
|
144
|
+
sink2 = factory.create_metrics_sink()
|
|
145
|
+
assert sink1 is not sink2
|
|
146
|
+
|
|
147
|
+
# Singleton instances (same each time)
|
|
148
|
+
sink3 = factory.get_or_create_metrics_sink()
|
|
149
|
+
sink4 = factory.get_or_create_metrics_sink()
|
|
150
|
+
assert sink3 is sink4
|
|
151
|
+
|
|
152
|
+
# Create hook with metrics sink
|
|
153
|
+
hook = factory.create_hook(metrics_sink=sink3)
|
|
154
|
+
```
|
|
155
|
+
"""
|
|
156
|
+
|
|
157
|
+
def __init__(self) -> None:
|
|
158
|
+
"""Initialize the observability sink factory.
|
|
159
|
+
|
|
160
|
+
Creates an empty factory with no cached singleton instances.
|
|
161
|
+
Singletons are created lazily on first get_or_create_* call.
|
|
162
|
+
"""
|
|
163
|
+
self._metrics_sink_instance: SinkMetricsPrometheus | None = None
|
|
164
|
+
self._logging_sink_instance: SinkLoggingStructured | None = None
|
|
165
|
+
self._lock = threading.Lock()
|
|
166
|
+
|
|
167
|
+
_logger.debug("FactoryObservabilitySink initialized")
|
|
168
|
+
|
|
169
|
+
# =========================================================================
|
|
170
|
+
# METRICS SINK CREATION
|
|
171
|
+
# =========================================================================
|
|
172
|
+
|
|
173
|
+
def create_metrics_sink(
|
|
174
|
+
self,
|
|
175
|
+
config: ModelMetricsSinkConfig | None = None,
|
|
176
|
+
policy: ModelMetricsPolicy | None = None,
|
|
177
|
+
) -> SinkMetricsPrometheus:
|
|
178
|
+
"""Create a new Prometheus metrics sink instance.
|
|
179
|
+
|
|
180
|
+
Creates a fresh SinkMetricsPrometheus instance with the provided
|
|
181
|
+
configuration. Each call creates an independent sink - use
|
|
182
|
+
get_or_create_metrics_sink() for singleton behavior.
|
|
183
|
+
|
|
184
|
+
Args:
|
|
185
|
+
config: Optional configuration for the metrics sink. If None,
|
|
186
|
+
default configuration is used (no prefix, standard buckets).
|
|
187
|
+
policy: Optional cardinality policy for label validation. If None,
|
|
188
|
+
the sink uses its default policy that forbids high-cardinality
|
|
189
|
+
labels and warns on violations.
|
|
190
|
+
|
|
191
|
+
Returns:
|
|
192
|
+
A new SinkMetricsPrometheus instance configured according to
|
|
193
|
+
the provided parameters.
|
|
194
|
+
|
|
195
|
+
Example:
|
|
196
|
+
```python
|
|
197
|
+
# With defaults
|
|
198
|
+
sink = factory.create_metrics_sink()
|
|
199
|
+
|
|
200
|
+
# With custom config
|
|
201
|
+
config = ModelMetricsSinkConfig(metric_prefix="api")
|
|
202
|
+
sink = factory.create_metrics_sink(config=config)
|
|
203
|
+
|
|
204
|
+
# With custom policy
|
|
205
|
+
from omnibase_core.models.observability import ModelMetricsPolicy
|
|
206
|
+
policy = ModelMetricsPolicy(max_label_value_length=64)
|
|
207
|
+
sink = factory.create_metrics_sink(policy=policy)
|
|
208
|
+
```
|
|
209
|
+
"""
|
|
210
|
+
effective_config = config or ModelMetricsSinkConfig()
|
|
211
|
+
|
|
212
|
+
_logger.debug(
|
|
213
|
+
"Creating new SinkMetricsPrometheus",
|
|
214
|
+
extra={
|
|
215
|
+
"metric_prefix": effective_config.metric_prefix,
|
|
216
|
+
"histogram_buckets": effective_config.histogram_buckets,
|
|
217
|
+
"has_custom_policy": policy is not None,
|
|
218
|
+
},
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
return SinkMetricsPrometheus(
|
|
222
|
+
policy=policy,
|
|
223
|
+
histogram_buckets=effective_config.histogram_buckets,
|
|
224
|
+
metric_prefix=effective_config.metric_prefix,
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
def get_or_create_metrics_sink(
|
|
228
|
+
self,
|
|
229
|
+
config: ModelMetricsSinkConfig | None = None,
|
|
230
|
+
policy: ModelMetricsPolicy | None = None,
|
|
231
|
+
) -> SinkMetricsPrometheus:
|
|
232
|
+
"""Get existing or create new singleton metrics sink.
|
|
233
|
+
|
|
234
|
+
Returns the cached singleton metrics sink if one exists, otherwise
|
|
235
|
+
creates a new one with the provided configuration and caches it.
|
|
236
|
+
|
|
237
|
+
Thread Safety:
|
|
238
|
+
This method is thread-safe. Multiple concurrent calls will
|
|
239
|
+
receive the same singleton instance.
|
|
240
|
+
|
|
241
|
+
Note:
|
|
242
|
+
Configuration and policy are only used on first call when the
|
|
243
|
+
singleton is created. Subsequent calls ignore these parameters
|
|
244
|
+
and return the existing instance. To create a sink with different
|
|
245
|
+
configuration, use create_metrics_sink() instead.
|
|
246
|
+
|
|
247
|
+
Args:
|
|
248
|
+
config: Optional configuration for sink creation. Only used if
|
|
249
|
+
no singleton exists yet.
|
|
250
|
+
policy: Optional cardinality policy for sink creation. Only used
|
|
251
|
+
if no singleton exists yet.
|
|
252
|
+
|
|
253
|
+
Returns:
|
|
254
|
+
The singleton SinkMetricsPrometheus instance.
|
|
255
|
+
|
|
256
|
+
Example:
|
|
257
|
+
```python
|
|
258
|
+
# First call creates the singleton
|
|
259
|
+
sink1 = factory.get_or_create_metrics_sink(
|
|
260
|
+
config=ModelMetricsSinkConfig(metric_prefix="myapp")
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
# Subsequent calls return the same instance
|
|
264
|
+
sink2 = factory.get_or_create_metrics_sink()
|
|
265
|
+
assert sink1 is sink2
|
|
266
|
+
```
|
|
267
|
+
"""
|
|
268
|
+
with self._lock:
|
|
269
|
+
if self._metrics_sink_instance is None:
|
|
270
|
+
self._metrics_sink_instance = self.create_metrics_sink(
|
|
271
|
+
config=config,
|
|
272
|
+
policy=policy,
|
|
273
|
+
)
|
|
274
|
+
_logger.debug("Created singleton SinkMetricsPrometheus")
|
|
275
|
+
elif config is not None or policy is not None:
|
|
276
|
+
_logger.debug(
|
|
277
|
+
"Returning existing singleton SinkMetricsPrometheus; "
|
|
278
|
+
"provided config/policy ignored",
|
|
279
|
+
extra={
|
|
280
|
+
"config_provided": config is not None,
|
|
281
|
+
"policy_provided": policy is not None,
|
|
282
|
+
},
|
|
283
|
+
)
|
|
284
|
+
return self._metrics_sink_instance
|
|
285
|
+
|
|
286
|
+
# =========================================================================
|
|
287
|
+
# LOGGING SINK CREATION
|
|
288
|
+
# =========================================================================
|
|
289
|
+
|
|
290
|
+
def create_logging_sink(
|
|
291
|
+
self,
|
|
292
|
+
config: ModelLoggingSinkConfig | None = None,
|
|
293
|
+
) -> SinkLoggingStructured:
|
|
294
|
+
"""Create a new structured logging sink instance.
|
|
295
|
+
|
|
296
|
+
Creates a fresh SinkLoggingStructured instance with the provided
|
|
297
|
+
configuration. Each call creates an independent sink - use
|
|
298
|
+
get_or_create_logging_sink() for singleton behavior.
|
|
299
|
+
|
|
300
|
+
Args:
|
|
301
|
+
config: Optional configuration for the logging sink. If None,
|
|
302
|
+
default configuration is used (1000 buffer, JSON output).
|
|
303
|
+
|
|
304
|
+
Returns:
|
|
305
|
+
A new SinkLoggingStructured instance configured according to
|
|
306
|
+
the provided parameters.
|
|
307
|
+
|
|
308
|
+
Example:
|
|
309
|
+
```python
|
|
310
|
+
# With defaults
|
|
311
|
+
sink = factory.create_logging_sink()
|
|
312
|
+
|
|
313
|
+
# With custom config
|
|
314
|
+
config = ModelLoggingSinkConfig(
|
|
315
|
+
max_buffer_size=5000,
|
|
316
|
+
output_format="console",
|
|
317
|
+
)
|
|
318
|
+
sink = factory.create_logging_sink(config=config)
|
|
319
|
+
```
|
|
320
|
+
"""
|
|
321
|
+
effective_config = config or ModelLoggingSinkConfig()
|
|
322
|
+
|
|
323
|
+
_logger.debug(
|
|
324
|
+
"Creating new SinkLoggingStructured",
|
|
325
|
+
extra={
|
|
326
|
+
"max_buffer_size": effective_config.max_buffer_size,
|
|
327
|
+
"output_format": effective_config.output_format,
|
|
328
|
+
},
|
|
329
|
+
)
|
|
330
|
+
|
|
331
|
+
return SinkLoggingStructured(
|
|
332
|
+
max_buffer_size=effective_config.max_buffer_size,
|
|
333
|
+
output_format=effective_config.output_format,
|
|
334
|
+
)
|
|
335
|
+
|
|
336
|
+
def get_or_create_logging_sink(
|
|
337
|
+
self,
|
|
338
|
+
config: ModelLoggingSinkConfig | None = None,
|
|
339
|
+
) -> SinkLoggingStructured:
|
|
340
|
+
"""Get existing or create new singleton logging sink.
|
|
341
|
+
|
|
342
|
+
Returns the cached singleton logging sink if one exists, otherwise
|
|
343
|
+
creates a new one with the provided configuration and caches it.
|
|
344
|
+
|
|
345
|
+
Thread Safety:
|
|
346
|
+
This method is thread-safe. Multiple concurrent calls will
|
|
347
|
+
receive the same singleton instance.
|
|
348
|
+
|
|
349
|
+
Note:
|
|
350
|
+
Configuration is only used on first call when the singleton is
|
|
351
|
+
created. Subsequent calls ignore the config parameter and return
|
|
352
|
+
the existing instance. To create a sink with different
|
|
353
|
+
configuration, use create_logging_sink() instead.
|
|
354
|
+
|
|
355
|
+
Args:
|
|
356
|
+
config: Optional configuration for sink creation. Only used if
|
|
357
|
+
no singleton exists yet.
|
|
358
|
+
|
|
359
|
+
Returns:
|
|
360
|
+
The singleton SinkLoggingStructured instance.
|
|
361
|
+
|
|
362
|
+
Example:
|
|
363
|
+
```python
|
|
364
|
+
# First call creates the singleton
|
|
365
|
+
sink1 = factory.get_or_create_logging_sink(
|
|
366
|
+
config=ModelLoggingSinkConfig(max_buffer_size=5000)
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
# Subsequent calls return the same instance
|
|
370
|
+
sink2 = factory.get_or_create_logging_sink()
|
|
371
|
+
assert sink1 is sink2
|
|
372
|
+
```
|
|
373
|
+
"""
|
|
374
|
+
with self._lock:
|
|
375
|
+
if self._logging_sink_instance is None:
|
|
376
|
+
self._logging_sink_instance = self.create_logging_sink(config=config)
|
|
377
|
+
_logger.debug("Created singleton SinkLoggingStructured")
|
|
378
|
+
elif config is not None:
|
|
379
|
+
_logger.debug(
|
|
380
|
+
"Returning existing singleton SinkLoggingStructured; "
|
|
381
|
+
"provided config ignored",
|
|
382
|
+
)
|
|
383
|
+
return self._logging_sink_instance
|
|
384
|
+
|
|
385
|
+
# =========================================================================
|
|
386
|
+
# HOOK CREATION
|
|
387
|
+
# =========================================================================
|
|
388
|
+
|
|
389
|
+
def create_hook(
|
|
390
|
+
self,
|
|
391
|
+
metrics_sink: ProtocolHotPathMetricsSink | None = None,
|
|
392
|
+
) -> HookObservability:
|
|
393
|
+
"""Create an observability hook with optional metrics sink.
|
|
394
|
+
|
|
395
|
+
Creates a HookObservability instance configured with an optional
|
|
396
|
+
metrics sink. The hook provides timing, context tracking, and
|
|
397
|
+
metrics emission for infrastructure operations.
|
|
398
|
+
|
|
399
|
+
Args:
|
|
400
|
+
metrics_sink: Optional metrics sink for emitting observability
|
|
401
|
+
data. If None, the hook operates in timing-only mode
|
|
402
|
+
(metrics emission is a no-op). Pass a SinkMetricsPrometheus
|
|
403
|
+
instance to enable full metrics collection.
|
|
404
|
+
|
|
405
|
+
Returns:
|
|
406
|
+
A new HookObservability instance.
|
|
407
|
+
|
|
408
|
+
Example:
|
|
409
|
+
```python
|
|
410
|
+
# Hook without metrics (timing only)
|
|
411
|
+
hook = factory.create_hook()
|
|
412
|
+
|
|
413
|
+
# Hook with metrics sink
|
|
414
|
+
metrics_sink = factory.get_or_create_metrics_sink()
|
|
415
|
+
hook = factory.create_hook(metrics_sink=metrics_sink)
|
|
416
|
+
|
|
417
|
+
# Usage
|
|
418
|
+
with hook.operation_context("handler.process"):
|
|
419
|
+
result = await handler.execute()
|
|
420
|
+
```
|
|
421
|
+
"""
|
|
422
|
+
_logger.debug(
|
|
423
|
+
"Creating HookObservability",
|
|
424
|
+
extra={"has_metrics_sink": metrics_sink is not None},
|
|
425
|
+
)
|
|
426
|
+
|
|
427
|
+
return HookObservability(metrics_sink=metrics_sink)
|
|
428
|
+
|
|
429
|
+
def create_hook_with_singleton_metrics(
|
|
430
|
+
self,
|
|
431
|
+
metrics_config: ModelMetricsSinkConfig | None = None,
|
|
432
|
+
metrics_policy: ModelMetricsPolicy | None = None,
|
|
433
|
+
) -> HookObservability:
|
|
434
|
+
"""Create an observability hook using the singleton metrics sink.
|
|
435
|
+
|
|
436
|
+
Convenience method that creates a hook wired to the singleton
|
|
437
|
+
metrics sink. If no singleton exists, one is created with the
|
|
438
|
+
provided configuration.
|
|
439
|
+
|
|
440
|
+
This is the recommended way to create hooks when you want all
|
|
441
|
+
components to share the same metrics endpoint.
|
|
442
|
+
|
|
443
|
+
Args:
|
|
444
|
+
metrics_config: Optional configuration for metrics sink creation.
|
|
445
|
+
Only used if no singleton metrics sink exists yet.
|
|
446
|
+
metrics_policy: Optional cardinality policy for metrics sink
|
|
447
|
+
creation. Only used if no singleton metrics sink exists yet.
|
|
448
|
+
|
|
449
|
+
Returns:
|
|
450
|
+
A new HookObservability instance configured with the singleton
|
|
451
|
+
metrics sink.
|
|
452
|
+
|
|
453
|
+
Example:
|
|
454
|
+
```python
|
|
455
|
+
# All hooks share the same metrics sink
|
|
456
|
+
hook1 = factory.create_hook_with_singleton_metrics()
|
|
457
|
+
hook2 = factory.create_hook_with_singleton_metrics()
|
|
458
|
+
# Both hooks emit to the same Prometheus metrics
|
|
459
|
+
```
|
|
460
|
+
"""
|
|
461
|
+
metrics_sink = self.get_or_create_metrics_sink(
|
|
462
|
+
config=metrics_config,
|
|
463
|
+
policy=metrics_policy,
|
|
464
|
+
)
|
|
465
|
+
return self.create_hook(metrics_sink=metrics_sink)
|
|
466
|
+
|
|
467
|
+
# =========================================================================
|
|
468
|
+
# MANAGEMENT METHODS
|
|
469
|
+
# =========================================================================
|
|
470
|
+
|
|
471
|
+
def clear_singletons(self) -> None:
|
|
472
|
+
"""Clear all cached singleton instances.
|
|
473
|
+
|
|
474
|
+
Removes references to cached singleton sinks, allowing them to be
|
|
475
|
+
garbage collected if no other references exist. Subsequent calls
|
|
476
|
+
to get_or_create_* methods will create new instances.
|
|
477
|
+
|
|
478
|
+
Use Cases:
|
|
479
|
+
- Testing: Reset factory state between tests
|
|
480
|
+
- Reconfiguration: Allow new singletons with different config
|
|
481
|
+
- Memory management: Release unused sink resources
|
|
482
|
+
|
|
483
|
+
Thread Safety:
|
|
484
|
+
This method is thread-safe.
|
|
485
|
+
|
|
486
|
+
Warning:
|
|
487
|
+
Existing references to the old singletons remain valid. Only
|
|
488
|
+
future get_or_create_* calls will create new instances.
|
|
489
|
+
|
|
490
|
+
Example:
|
|
491
|
+
```python
|
|
492
|
+
sink1 = factory.get_or_create_metrics_sink()
|
|
493
|
+
factory.clear_singletons()
|
|
494
|
+
sink2 = factory.get_or_create_metrics_sink()
|
|
495
|
+
assert sink1 is not sink2 # New instance
|
|
496
|
+
# sink1 still works but is no longer the singleton
|
|
497
|
+
```
|
|
498
|
+
"""
|
|
499
|
+
with self._lock:
|
|
500
|
+
self._metrics_sink_instance = None
|
|
501
|
+
self._logging_sink_instance = None
|
|
502
|
+
_logger.debug("Cleared all singleton instances")
|
|
503
|
+
|
|
504
|
+
def has_metrics_singleton(self) -> bool:
|
|
505
|
+
"""Check if a singleton metrics sink exists.
|
|
506
|
+
|
|
507
|
+
Returns:
|
|
508
|
+
True if a singleton metrics sink has been created, False otherwise.
|
|
509
|
+
"""
|
|
510
|
+
with self._lock:
|
|
511
|
+
return self._metrics_sink_instance is not None
|
|
512
|
+
|
|
513
|
+
def has_logging_singleton(self) -> bool:
|
|
514
|
+
"""Check if a singleton logging sink exists.
|
|
515
|
+
|
|
516
|
+
Returns:
|
|
517
|
+
True if a singleton logging sink has been created, False otherwise.
|
|
518
|
+
"""
|
|
519
|
+
with self._lock:
|
|
520
|
+
return self._logging_sink_instance is not None
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
__all__ = [
|
|
524
|
+
"FactoryObservabilitySink",
|
|
525
|
+
]
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Observability handlers for ONEX infrastructure.
|
|
4
|
+
|
|
5
|
+
This module provides handler implementations for the ONEX observability stack.
|
|
6
|
+
Handlers are responsible for managing the lifecycle of observability sinks
|
|
7
|
+
and providing contract-driven operation execution.
|
|
8
|
+
|
|
9
|
+
Architecture Principle: "Handlers own lifecycle, sinks own hot path"
|
|
10
|
+
- Handlers: Contract-driven lifecycle, buffer/flush management,
|
|
11
|
+
configuration, initialization/shutdown
|
|
12
|
+
- Sinks: Fast in-process emission, synchronous non-blocking operations
|
|
13
|
+
|
|
14
|
+
Available Handlers:
|
|
15
|
+
- HandlerLoggingStructured: EFFECT handler for structured logging
|
|
16
|
+
with buffer/flush management. Manages SinkLoggingStructured lifecycle.
|
|
17
|
+
- HandlerMetricsPrometheus: EFFECT handler exposing /metrics HTTP endpoint
|
|
18
|
+
for Prometheus scraping. Supports optional push to Pushgateway.
|
|
19
|
+
|
|
20
|
+
Handler Types:
|
|
21
|
+
All observability handlers are classified as:
|
|
22
|
+
- handler_type: INFRA_HANDLER (infrastructure protocol handlers)
|
|
23
|
+
- handler_category: EFFECT (side-effecting I/O operations)
|
|
24
|
+
|
|
25
|
+
Usage:
|
|
26
|
+
```python
|
|
27
|
+
from omnibase_infra.observability.handlers import (
|
|
28
|
+
HandlerLoggingStructured,
|
|
29
|
+
ModelLoggingHandlerConfig,
|
|
30
|
+
HandlerMetricsPrometheus,
|
|
31
|
+
ModelMetricsHandlerConfig,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
# Initialize logging handler
|
|
35
|
+
handler = HandlerLoggingStructured()
|
|
36
|
+
await handler.initialize({
|
|
37
|
+
"buffer_size": 1000,
|
|
38
|
+
"flush_interval_seconds": 5.0,
|
|
39
|
+
"output_format": "json",
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
# Emit log entries via envelope-based routing
|
|
43
|
+
await handler.execute({
|
|
44
|
+
"operation": "logging.emit",
|
|
45
|
+
"payload": {
|
|
46
|
+
"level": "INFO",
|
|
47
|
+
"message": "Processing started",
|
|
48
|
+
"context": {"request_id": "req_123"},
|
|
49
|
+
},
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
# Initialize metrics handler
|
|
53
|
+
metrics_handler = HandlerMetricsPrometheus()
|
|
54
|
+
await metrics_handler.initialize({
|
|
55
|
+
"host": "0.0.0.0",
|
|
56
|
+
"port": 9090,
|
|
57
|
+
"path": "/metrics",
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
# Metrics now available at http://localhost:9090/metrics
|
|
61
|
+
# Or retrieve programmatically:
|
|
62
|
+
result = await metrics_handler.execute({"operation": "metrics.scrape"})
|
|
63
|
+
print(result.result.payload.metrics_text)
|
|
64
|
+
|
|
65
|
+
# Graceful shutdown
|
|
66
|
+
await handler.shutdown()
|
|
67
|
+
await metrics_handler.shutdown()
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
See Also:
|
|
71
|
+
- omnibase_infra.observability.sinks: Sink implementations
|
|
72
|
+
- omnibase_infra.enums.EnumHandlerType: Handler type classification
|
|
73
|
+
- omnibase_infra.enums.EnumHandlerTypeCategory: Behavioral classification
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
from omnibase_infra.observability.handlers.handler_logging_structured import (
|
|
77
|
+
SUPPORTED_OPERATIONS as LOGGING_SUPPORTED_OPERATIONS,
|
|
78
|
+
)
|
|
79
|
+
from omnibase_infra.observability.handlers.handler_logging_structured import (
|
|
80
|
+
HandlerLoggingStructured,
|
|
81
|
+
)
|
|
82
|
+
from omnibase_infra.observability.handlers.handler_metrics_prometheus import (
|
|
83
|
+
HANDLER_ID_METRICS,
|
|
84
|
+
HandlerMetricsPrometheus,
|
|
85
|
+
)
|
|
86
|
+
from omnibase_infra.observability.handlers.handler_metrics_prometheus import (
|
|
87
|
+
SUPPORTED_OPERATIONS as METRICS_SUPPORTED_OPERATIONS,
|
|
88
|
+
)
|
|
89
|
+
from omnibase_infra.observability.handlers.model_logging_handler_config import (
|
|
90
|
+
ModelLoggingHandlerConfig,
|
|
91
|
+
)
|
|
92
|
+
from omnibase_infra.observability.handlers.model_logging_handler_response import (
|
|
93
|
+
ModelLoggingHandlerResponse,
|
|
94
|
+
)
|
|
95
|
+
from omnibase_infra.observability.handlers.model_metrics_handler_config import (
|
|
96
|
+
ModelMetricsHandlerConfig,
|
|
97
|
+
)
|
|
98
|
+
from omnibase_infra.observability.handlers.model_metrics_handler_payload import (
|
|
99
|
+
ModelMetricsHandlerPayload,
|
|
100
|
+
)
|
|
101
|
+
from omnibase_infra.observability.handlers.model_metrics_handler_response import (
|
|
102
|
+
ModelMetricsHandlerResponse,
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
__all__: list[str] = [
|
|
106
|
+
# Logging handler
|
|
107
|
+
"HandlerLoggingStructured",
|
|
108
|
+
"ModelLoggingHandlerConfig",
|
|
109
|
+
"ModelLoggingHandlerResponse",
|
|
110
|
+
"LOGGING_SUPPORTED_OPERATIONS",
|
|
111
|
+
# Metrics handler
|
|
112
|
+
"HandlerMetricsPrometheus",
|
|
113
|
+
"ModelMetricsHandlerConfig",
|
|
114
|
+
"ModelMetricsHandlerPayload",
|
|
115
|
+
"ModelMetricsHandlerResponse",
|
|
116
|
+
"HANDLER_ID_METRICS",
|
|
117
|
+
"METRICS_SUPPORTED_OPERATIONS",
|
|
118
|
+
]
|