omnibase_infra 0.2.1__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/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +261 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +138 -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 +123 -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_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 +101 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -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_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 +156 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +92 -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 +102 -0
- omnibase_infra/errors/error_infra.py +608 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +112 -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 +86 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +743 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1658 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +184 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +765 -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 +725 -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/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +75 -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 +787 -0
- omnibase_infra/handlers/handler_db.py +1039 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +1154 -0
- omnibase_infra/handlers/handler_http.py +920 -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 +748 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +422 -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 +42 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +337 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +277 -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 +915 -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 +747 -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 +99 -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/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +655 -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 +2465 -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 +136 -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 +311 -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 +147 -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_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 +37 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +80 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +185 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -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/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 +590 -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 +59 -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_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +179 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +175 -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 +40 -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 +280 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +120 -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 +48 -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 +208 -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 +99 -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/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +172 -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/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 +475 -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 +609 -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 +525 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +392 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +742 -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 +225 -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 +109 -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 +194 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +682 -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 +416 -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 +214 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +32 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +76 -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 +1137 -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 +435 -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 +99 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -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 +296 -0
- omnibase_infra/runtime/binding_config_resolver.py +2706 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/contract_handler_discovery.py +582 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +42 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -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/handler_contract_source.py +669 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2029 -0
- omnibase_infra/runtime/handler_registry.py +321 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +378 -0
- omnibase_infra/runtime/mixins/__init__.py +17 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +757 -0
- omnibase_infra/runtime/models/__init__.py +192 -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_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 +228 -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_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_scheduler_config.py +624 -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_shutdown_batch_result.py +75 -0
- omnibase_infra/runtime/models/model_shutdown_config.py +94 -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 +1102 -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 +27 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -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 +444 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1502 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2110 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1573 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +1805 -0
- omnibase_infra/runtime/service_runtime_host_process.py +2260 -0
- omnibase_infra/runtime/util_container_wiring.py +1123 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +566 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/services/__init__.py +68 -0
- omnibase_infra/services/corpus_capture.py +678 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +897 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +682 -0
- omnibase_infra/services/service_timeout_scanner.py +390 -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/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 +21 -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 +89 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_datetime.py +372 -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_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -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 +1486 -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 +1710 -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 +410 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.1.dist-info/METADATA +197 -0
- omnibase_infra-0.2.1.dist-info/RECORD +675 -0
- omnibase_infra-0.2.1.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.1.dist-info/entry_points.txt +4 -0
- omnibase_infra-0.2.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Configuration model for the structured logging handler.
|
|
4
|
+
|
|
5
|
+
This module defines the configuration model for HandlerLoggingStructured,
|
|
6
|
+
specifying buffer size, flush intervals, output format, and drop policy.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
>>> from omnibase_infra.observability.handlers import ModelLoggingHandlerConfig
|
|
10
|
+
>>>
|
|
11
|
+
>>> # Default configuration
|
|
12
|
+
>>> config = ModelLoggingHandlerConfig()
|
|
13
|
+
>>>
|
|
14
|
+
>>> # Custom configuration
|
|
15
|
+
>>> config = ModelLoggingHandlerConfig(
|
|
16
|
+
... buffer_size=500,
|
|
17
|
+
... flush_interval_seconds=10.0,
|
|
18
|
+
... output_format="console",
|
|
19
|
+
... )
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
from typing import Literal
|
|
25
|
+
|
|
26
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ModelLoggingHandlerConfig(BaseModel):
|
|
30
|
+
"""Configuration model for the structured logging handler.
|
|
31
|
+
|
|
32
|
+
Attributes:
|
|
33
|
+
buffer_size: Maximum number of log entries to buffer before auto-flush
|
|
34
|
+
or drop policy kicks in. Default: 1000.
|
|
35
|
+
flush_interval_seconds: Interval between periodic background flushes.
|
|
36
|
+
Set to 0 to disable periodic flush. Default: 5.0.
|
|
37
|
+
output_format: Output format for log entries. Either "json" for
|
|
38
|
+
machine-readable JSON or "console" for human-readable colored output.
|
|
39
|
+
Default: "json".
|
|
40
|
+
drop_policy: Policy for handling buffer overflow. Currently only
|
|
41
|
+
"drop_oldest" is supported, which removes the oldest entries when
|
|
42
|
+
buffer is full (preserves recent logs). Default: "drop_oldest".
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
model_config = ConfigDict(frozen=True, extra="forbid", validate_assignment=True)
|
|
46
|
+
|
|
47
|
+
buffer_size: int = Field(
|
|
48
|
+
default=1000,
|
|
49
|
+
ge=1,
|
|
50
|
+
le=100000,
|
|
51
|
+
description="Maximum buffer size before drop policy applies",
|
|
52
|
+
)
|
|
53
|
+
flush_interval_seconds: float = Field(
|
|
54
|
+
default=5.0,
|
|
55
|
+
ge=0.0,
|
|
56
|
+
le=3600.0,
|
|
57
|
+
description="Periodic flush interval (0 to disable)",
|
|
58
|
+
)
|
|
59
|
+
output_format: Literal["json", "console"] = Field(
|
|
60
|
+
default="json",
|
|
61
|
+
description="Output format for log entries",
|
|
62
|
+
)
|
|
63
|
+
drop_policy: Literal["drop_oldest"] = Field(
|
|
64
|
+
default="drop_oldest",
|
|
65
|
+
description="Buffer overflow handling policy (only drop_oldest supported)",
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
__all__: list[str] = [
|
|
70
|
+
"ModelLoggingHandlerConfig",
|
|
71
|
+
]
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Response model for the structured logging handler.
|
|
4
|
+
|
|
5
|
+
This module defines the response model for HandlerLoggingStructured operations,
|
|
6
|
+
containing operation status, buffer metrics, and correlation tracking.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
>>> from omnibase_infra.observability.handlers import ModelLoggingHandlerResponse
|
|
10
|
+
>>> from omnibase_infra.enums import EnumResponseStatus
|
|
11
|
+
>>> from uuid import uuid4
|
|
12
|
+
>>>
|
|
13
|
+
>>> response = ModelLoggingHandlerResponse(
|
|
14
|
+
... status=EnumResponseStatus.SUCCESS,
|
|
15
|
+
... operation="logging.emit",
|
|
16
|
+
... message="Log entry buffered",
|
|
17
|
+
... correlation_id=uuid4(),
|
|
18
|
+
... buffer_size=42,
|
|
19
|
+
... drop_count=0,
|
|
20
|
+
... )
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from __future__ import annotations
|
|
24
|
+
|
|
25
|
+
from typing import Self
|
|
26
|
+
from uuid import UUID
|
|
27
|
+
|
|
28
|
+
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
|
29
|
+
|
|
30
|
+
from omnibase_infra.enums import EnumResponseStatus
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class ModelLoggingHandlerResponse(BaseModel):
|
|
34
|
+
"""Response model for logging handler operations.
|
|
35
|
+
|
|
36
|
+
Attributes:
|
|
37
|
+
status: Operation status (SUCCESS or ERROR).
|
|
38
|
+
operation: The operation that was executed.
|
|
39
|
+
message: Human-readable status message.
|
|
40
|
+
correlation_id: Correlation ID for request tracing.
|
|
41
|
+
buffer_size: Current number of entries in buffer (after operation).
|
|
42
|
+
drop_count: Total number of entries dropped since handler init.
|
|
43
|
+
error_message: Error description if status is ERROR.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
model_config = ConfigDict(frozen=True, extra="forbid")
|
|
47
|
+
|
|
48
|
+
status: EnumResponseStatus
|
|
49
|
+
operation: str
|
|
50
|
+
message: str
|
|
51
|
+
correlation_id: UUID
|
|
52
|
+
buffer_size: int = Field(default=0, ge=0, description="Current buffer size")
|
|
53
|
+
drop_count: int = Field(default=0, ge=0, description="Total dropped entries")
|
|
54
|
+
error_message: str | None = Field(
|
|
55
|
+
default=None,
|
|
56
|
+
description="Error description if status is ERROR",
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
@model_validator(mode="after")
|
|
60
|
+
def _validate_error_message_required_on_error(self) -> Self:
|
|
61
|
+
"""Validate that error_message is provided when status is ERROR.
|
|
62
|
+
|
|
63
|
+
This validator ensures API consumers always receive a meaningful error
|
|
64
|
+
description when an operation fails.
|
|
65
|
+
|
|
66
|
+
Raises:
|
|
67
|
+
ValueError: If status is ERROR but error_message is None or empty.
|
|
68
|
+
"""
|
|
69
|
+
if self.status == EnumResponseStatus.ERROR:
|
|
70
|
+
if not self.error_message:
|
|
71
|
+
raise ValueError("error_message is required when status is ERROR")
|
|
72
|
+
return self
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
__all__: list[str] = [
|
|
76
|
+
"ModelLoggingHandlerResponse",
|
|
77
|
+
]
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Configuration model for the Prometheus metrics handler.
|
|
4
|
+
|
|
5
|
+
This module defines the configuration schema for HandlerMetricsPrometheus,
|
|
6
|
+
including HTTP server settings and optional push gateway configuration.
|
|
7
|
+
|
|
8
|
+
Security Notes:
|
|
9
|
+
- DEFAULT BIND ADDRESS IS LOCALHOST (127.0.0.1) for security
|
|
10
|
+
- To expose externally, explicitly set host="0.0.0.0" AND deploy behind
|
|
11
|
+
a reverse proxy with authentication, TLS, and rate limiting
|
|
12
|
+
- See HandlerMetricsPrometheus docstring for full security model
|
|
13
|
+
|
|
14
|
+
Configuration Options:
|
|
15
|
+
- host: Bind address for the metrics HTTP server (default: "127.0.0.1")
|
|
16
|
+
- port: Port number for the metrics endpoint (default: 9090)
|
|
17
|
+
- path: URL path for the metrics endpoint (default: "/metrics")
|
|
18
|
+
- push_gateway_url: Optional URL for Prometheus Pushgateway (for short-lived jobs)
|
|
19
|
+
- enable_server: Whether to start the HTTP server (default: True)
|
|
20
|
+
- max_request_size_bytes: Maximum allowed request body size (default: 1MB)
|
|
21
|
+
- request_timeout_seconds: Timeout for request processing (default: 30.0s)
|
|
22
|
+
|
|
23
|
+
Usage:
|
|
24
|
+
>>> from omnibase_infra.observability.handlers import ModelMetricsHandlerConfig
|
|
25
|
+
>>>
|
|
26
|
+
>>> # Default configuration (localhost only - secure)
|
|
27
|
+
>>> config = ModelMetricsHandlerConfig()
|
|
28
|
+
>>> assert config.host == "127.0.0.1" # Secure default
|
|
29
|
+
>>>
|
|
30
|
+
>>> # Expose on all interfaces (REQUIRES reverse proxy protection)
|
|
31
|
+
>>> config = ModelMetricsHandlerConfig(
|
|
32
|
+
... host="0.0.0.0", # WARNING: Only use with reverse proxy
|
|
33
|
+
... port=9091,
|
|
34
|
+
... path="/custom_metrics",
|
|
35
|
+
... )
|
|
36
|
+
>>>
|
|
37
|
+
>>> # Push mode configuration (for short-lived jobs)
|
|
38
|
+
>>> config = ModelMetricsHandlerConfig(
|
|
39
|
+
... enable_server=False,
|
|
40
|
+
... push_gateway_url="http://pushgateway:9091",
|
|
41
|
+
... )
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
from __future__ import annotations
|
|
45
|
+
|
|
46
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class ModelMetricsHandlerConfig(BaseModel):
|
|
50
|
+
"""Configuration model for Prometheus metrics handler.
|
|
51
|
+
|
|
52
|
+
This model defines the configuration for the HTTP metrics endpoint
|
|
53
|
+
and optional push gateway integration.
|
|
54
|
+
|
|
55
|
+
Security:
|
|
56
|
+
The default bind address is "127.0.0.1" (localhost only) for security.
|
|
57
|
+
This prevents accidental exposure of metrics to untrusted networks.
|
|
58
|
+
|
|
59
|
+
To expose metrics externally, you MUST:
|
|
60
|
+
1. Explicitly set host="0.0.0.0" in configuration
|
|
61
|
+
2. Deploy behind a reverse proxy (nginx/traefik/envoy) with:
|
|
62
|
+
- TLS termination (HTTPS)
|
|
63
|
+
- IP allowlisting for Prometheus scrapers
|
|
64
|
+
- Rate limiting
|
|
65
|
+
- Authentication (mTLS or bearer tokens recommended)
|
|
66
|
+
|
|
67
|
+
Attributes:
|
|
68
|
+
host: Bind address for the HTTP server. Default: "127.0.0.1" (localhost).
|
|
69
|
+
Use "0.0.0.0" ONLY with reverse proxy protection.
|
|
70
|
+
port: TCP port number for the metrics endpoint. Standard Prometheus
|
|
71
|
+
exporters typically use ports in the 9xxx range. Default: 9090.
|
|
72
|
+
path: URL path where metrics are exposed. Must start with "/".
|
|
73
|
+
Default: "/metrics".
|
|
74
|
+
push_gateway_url: Optional URL for Prometheus Pushgateway. When set,
|
|
75
|
+
metrics can be pushed instead of scraped. Useful for short-lived
|
|
76
|
+
batch jobs that may not live long enough to be scraped.
|
|
77
|
+
Format: "http://host:port" or "https://host:port".
|
|
78
|
+
enable_server: Whether to start the HTTP server for metric scraping.
|
|
79
|
+
Set to False when using push mode only. Default: True.
|
|
80
|
+
job_name: Job name for Pushgateway metrics. Only used when pushing
|
|
81
|
+
to Pushgateway. Default: "onex_metrics".
|
|
82
|
+
push_interval_seconds: Interval between metric pushes to Pushgateway.
|
|
83
|
+
Only used when push_gateway_url is set. Default: 10.0.
|
|
84
|
+
shutdown_timeout_seconds: Maximum time to wait for graceful server
|
|
85
|
+
shutdown. Default: 5.0.
|
|
86
|
+
max_request_size_bytes: Maximum allowed request body size in bytes.
|
|
87
|
+
Requests exceeding this limit are rejected with 413 status.
|
|
88
|
+
Default: 1MB (1048576 bytes).
|
|
89
|
+
request_timeout_seconds: Timeout for processing individual requests.
|
|
90
|
+
Requests exceeding this timeout are terminated with 503 status.
|
|
91
|
+
Default: 30.0 seconds.
|
|
92
|
+
|
|
93
|
+
Example:
|
|
94
|
+
>>> # Secure default (localhost only)
|
|
95
|
+
>>> config = ModelMetricsHandlerConfig()
|
|
96
|
+
>>> assert config.host == "127.0.0.1"
|
|
97
|
+
>>> assert config.max_request_size_bytes == 1048576
|
|
98
|
+
>>>
|
|
99
|
+
>>> # External exposure (REQUIRES reverse proxy)
|
|
100
|
+
>>> config = ModelMetricsHandlerConfig(
|
|
101
|
+
... host="0.0.0.0", # WARNING: Use only with reverse proxy
|
|
102
|
+
... port=9090,
|
|
103
|
+
... path="/metrics",
|
|
104
|
+
... )
|
|
105
|
+
"""
|
|
106
|
+
|
|
107
|
+
host: str = Field(
|
|
108
|
+
default="127.0.0.1",
|
|
109
|
+
description=(
|
|
110
|
+
"Bind address for the HTTP metrics server. "
|
|
111
|
+
"Default is localhost (127.0.0.1) for security. "
|
|
112
|
+
"Use 0.0.0.0 only with reverse proxy protection."
|
|
113
|
+
),
|
|
114
|
+
)
|
|
115
|
+
port: int = Field(
|
|
116
|
+
default=9090,
|
|
117
|
+
ge=1,
|
|
118
|
+
le=65535,
|
|
119
|
+
description="Port number for the metrics endpoint",
|
|
120
|
+
)
|
|
121
|
+
path: str = Field(
|
|
122
|
+
default="/metrics",
|
|
123
|
+
pattern=r"^/.*",
|
|
124
|
+
description="URL path for the metrics endpoint",
|
|
125
|
+
)
|
|
126
|
+
push_gateway_url: str | None = Field(
|
|
127
|
+
default=None,
|
|
128
|
+
description="Optional URL for Prometheus Pushgateway",
|
|
129
|
+
)
|
|
130
|
+
enable_server: bool = Field(
|
|
131
|
+
default=True,
|
|
132
|
+
description="Whether to start the HTTP server for metric scraping",
|
|
133
|
+
)
|
|
134
|
+
job_name: str = Field(
|
|
135
|
+
default="onex_metrics",
|
|
136
|
+
description="Job name for Pushgateway metrics",
|
|
137
|
+
)
|
|
138
|
+
push_interval_seconds: float = Field(
|
|
139
|
+
default=10.0,
|
|
140
|
+
gt=0.0,
|
|
141
|
+
description="Interval between metric pushes to Pushgateway",
|
|
142
|
+
)
|
|
143
|
+
shutdown_timeout_seconds: float = Field(
|
|
144
|
+
default=5.0,
|
|
145
|
+
gt=0.0,
|
|
146
|
+
description="Maximum time to wait for graceful server shutdown",
|
|
147
|
+
)
|
|
148
|
+
max_request_size_bytes: int = Field(
|
|
149
|
+
default=1048576, # 1MB
|
|
150
|
+
ge=1024, # Minimum 1KB
|
|
151
|
+
le=104857600, # Maximum 100MB
|
|
152
|
+
description=(
|
|
153
|
+
"Maximum allowed request body size in bytes. "
|
|
154
|
+
"Requests exceeding this limit are rejected with 413 status. "
|
|
155
|
+
"Default: 1MB (1048576 bytes)."
|
|
156
|
+
),
|
|
157
|
+
)
|
|
158
|
+
request_timeout_seconds: float = Field(
|
|
159
|
+
default=30.0,
|
|
160
|
+
gt=0.0,
|
|
161
|
+
le=300.0, # Maximum 5 minutes
|
|
162
|
+
description=(
|
|
163
|
+
"Timeout for processing individual HTTP requests. "
|
|
164
|
+
"Requests exceeding this timeout are terminated with 503 status. "
|
|
165
|
+
"Default: 30.0 seconds."
|
|
166
|
+
),
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
model_config = ConfigDict(frozen=True, extra="forbid")
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
__all__: list[str] = ["ModelMetricsHandlerConfig"]
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Payload model for the Prometheus metrics handler.
|
|
4
|
+
|
|
5
|
+
This module defines the payload schema for HandlerMetricsPrometheus operations,
|
|
6
|
+
containing operation-specific data for metrics scrape and push operations.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
>>> from omnibase_infra.observability.handlers import ModelMetricsHandlerPayload
|
|
10
|
+
>>>
|
|
11
|
+
>>> # Scrape response payload
|
|
12
|
+
>>> scrape_payload = ModelMetricsHandlerPayload(
|
|
13
|
+
... operation_type="metrics.scrape",
|
|
14
|
+
... metrics_text="# HELP up Scrape status\\nup 1",
|
|
15
|
+
... content_type="text/plain; version=0.0.4; charset=utf-8",
|
|
16
|
+
... )
|
|
17
|
+
>>>
|
|
18
|
+
>>> # Push response payload
|
|
19
|
+
>>> push_payload = ModelMetricsHandlerPayload(
|
|
20
|
+
... operation_type="metrics.push",
|
|
21
|
+
... pushed_at="2025-01-17T12:00:00Z",
|
|
22
|
+
... push_gateway_url="http://pushgateway:9091",
|
|
23
|
+
... job_name="onex_metrics",
|
|
24
|
+
... )
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
from __future__ import annotations
|
|
28
|
+
|
|
29
|
+
from typing import Literal, Self
|
|
30
|
+
|
|
31
|
+
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class ModelMetricsHandlerPayload(BaseModel):
|
|
35
|
+
"""Payload model for metrics handler operations.
|
|
36
|
+
|
|
37
|
+
Contains the operation-specific data returned by the metrics handler.
|
|
38
|
+
The structure varies based on operation_type.
|
|
39
|
+
|
|
40
|
+
Attributes:
|
|
41
|
+
operation_type: Type of operation performed. Either "metrics.scrape"
|
|
42
|
+
for metric retrieval or "metrics.push" for Pushgateway operations.
|
|
43
|
+
metrics_text: Prometheus metrics in text format. Only populated for
|
|
44
|
+
scrape operations. Contains the raw metric exposition format.
|
|
45
|
+
content_type: MIME content type for the metrics response. Standard
|
|
46
|
+
Prometheus format is "text/plain; version=0.0.4; charset=utf-8".
|
|
47
|
+
pushed_at: ISO timestamp when metrics were pushed to Pushgateway.
|
|
48
|
+
Only populated for push operations.
|
|
49
|
+
push_gateway_url: URL of the Pushgateway that received the metrics.
|
|
50
|
+
Only populated for push operations.
|
|
51
|
+
job_name: Job name used when pushing to Pushgateway.
|
|
52
|
+
Only populated for push operations.
|
|
53
|
+
|
|
54
|
+
Example:
|
|
55
|
+
>>> # Scrape response payload
|
|
56
|
+
>>> scrape_payload = ModelMetricsHandlerPayload(
|
|
57
|
+
... operation_type="metrics.scrape",
|
|
58
|
+
... metrics_text="# HELP up Scrape status\\nup 1",
|
|
59
|
+
... content_type="text/plain; version=0.0.4; charset=utf-8",
|
|
60
|
+
... )
|
|
61
|
+
>>>
|
|
62
|
+
>>> # Push response payload
|
|
63
|
+
>>> push_payload = ModelMetricsHandlerPayload(
|
|
64
|
+
... operation_type="metrics.push",
|
|
65
|
+
... pushed_at="2025-01-17T12:00:00Z",
|
|
66
|
+
... push_gateway_url="http://pushgateway:9091",
|
|
67
|
+
... job_name="onex_metrics",
|
|
68
|
+
... )
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
operation_type: Literal["metrics.scrape", "metrics.push"] = Field(
|
|
72
|
+
description="Type of metrics operation performed",
|
|
73
|
+
)
|
|
74
|
+
metrics_text: str | None = Field(
|
|
75
|
+
default=None,
|
|
76
|
+
description="Prometheus metrics in text exposition format",
|
|
77
|
+
)
|
|
78
|
+
content_type: str | None = Field(
|
|
79
|
+
default=None,
|
|
80
|
+
description="MIME content type for the metrics response",
|
|
81
|
+
)
|
|
82
|
+
pushed_at: str | None = Field(
|
|
83
|
+
default=None,
|
|
84
|
+
description="ISO timestamp when metrics were pushed",
|
|
85
|
+
)
|
|
86
|
+
push_gateway_url: str | None = Field(
|
|
87
|
+
default=None,
|
|
88
|
+
description="URL of the Pushgateway that received metrics",
|
|
89
|
+
)
|
|
90
|
+
job_name: str | None = Field(
|
|
91
|
+
default=None,
|
|
92
|
+
description="Job name used for Pushgateway push",
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
model_config = ConfigDict(frozen=True, extra="forbid")
|
|
96
|
+
|
|
97
|
+
@model_validator(mode="after")
|
|
98
|
+
def _validate_required_fields_by_operation(self) -> Self:
|
|
99
|
+
"""Validate that required fields are present based on operation_type.
|
|
100
|
+
|
|
101
|
+
For metrics.scrape operations, metrics_text and content_type are required.
|
|
102
|
+
For metrics.push operations, pushed_at, push_gateway_url, and job_name
|
|
103
|
+
are required.
|
|
104
|
+
|
|
105
|
+
Raises:
|
|
106
|
+
ValueError: If required fields for the operation type are missing.
|
|
107
|
+
"""
|
|
108
|
+
if self.operation_type == "metrics.scrape":
|
|
109
|
+
missing = []
|
|
110
|
+
if self.metrics_text is None:
|
|
111
|
+
missing.append("metrics_text")
|
|
112
|
+
if self.content_type is None:
|
|
113
|
+
missing.append("content_type")
|
|
114
|
+
if missing:
|
|
115
|
+
raise ValueError(
|
|
116
|
+
f"metrics.scrape operation requires: {', '.join(missing)}"
|
|
117
|
+
)
|
|
118
|
+
elif self.operation_type == "metrics.push":
|
|
119
|
+
missing = []
|
|
120
|
+
if self.pushed_at is None:
|
|
121
|
+
missing.append("pushed_at")
|
|
122
|
+
if self.push_gateway_url is None:
|
|
123
|
+
missing.append("push_gateway_url")
|
|
124
|
+
if self.job_name is None:
|
|
125
|
+
missing.append("job_name")
|
|
126
|
+
if missing:
|
|
127
|
+
raise ValueError(
|
|
128
|
+
f"metrics.push operation requires: {', '.join(missing)}"
|
|
129
|
+
)
|
|
130
|
+
return self
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
__all__: list[str] = [
|
|
134
|
+
"ModelMetricsHandlerPayload",
|
|
135
|
+
]
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Response model for the Prometheus metrics handler.
|
|
4
|
+
|
|
5
|
+
This module defines the response schema for HandlerMetricsPrometheus operations,
|
|
6
|
+
wrapping the operation payload with status and correlation tracking information.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
>>> from omnibase_infra.observability.handlers import (
|
|
10
|
+
... ModelMetricsHandlerResponse,
|
|
11
|
+
... ModelMetricsHandlerPayload,
|
|
12
|
+
... )
|
|
13
|
+
>>> from omnibase_infra.enums import EnumResponseStatus
|
|
14
|
+
>>> from uuid import uuid4
|
|
15
|
+
>>>
|
|
16
|
+
>>> payload = ModelMetricsHandlerPayload(
|
|
17
|
+
... metrics_text="# HELP http_requests_total Total HTTP requests",
|
|
18
|
+
... content_type="text/plain; version=0.0.4; charset=utf-8",
|
|
19
|
+
... operation_type="metrics.scrape",
|
|
20
|
+
... )
|
|
21
|
+
>>> response = ModelMetricsHandlerResponse(
|
|
22
|
+
... status=EnumResponseStatus.SUCCESS,
|
|
23
|
+
... payload=payload,
|
|
24
|
+
... correlation_id=uuid4(),
|
|
25
|
+
... )
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
from __future__ import annotations
|
|
29
|
+
|
|
30
|
+
from typing import Self
|
|
31
|
+
from uuid import UUID
|
|
32
|
+
|
|
33
|
+
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
|
34
|
+
|
|
35
|
+
from omnibase_infra.enums import EnumResponseStatus
|
|
36
|
+
from omnibase_infra.observability.handlers.model_metrics_handler_payload import (
|
|
37
|
+
ModelMetricsHandlerPayload,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class ModelMetricsHandlerResponse(BaseModel):
|
|
42
|
+
"""Response model for Prometheus metrics handler operations.
|
|
43
|
+
|
|
44
|
+
This is the canonical response type for all HandlerMetricsPrometheus
|
|
45
|
+
operations. It wraps the operation payload with status and correlation
|
|
46
|
+
tracking information.
|
|
47
|
+
|
|
48
|
+
Attributes:
|
|
49
|
+
status: Operation status indicating success or failure.
|
|
50
|
+
payload: Operation-specific response data.
|
|
51
|
+
correlation_id: Correlation ID for distributed tracing.
|
|
52
|
+
error_message: Error description if status is ERROR.
|
|
53
|
+
|
|
54
|
+
Example:
|
|
55
|
+
>>> from uuid import uuid4
|
|
56
|
+
>>> response = ModelMetricsHandlerResponse(
|
|
57
|
+
... status=EnumResponseStatus.SUCCESS,
|
|
58
|
+
... payload=ModelMetricsHandlerPayload(
|
|
59
|
+
... operation_type="metrics.scrape",
|
|
60
|
+
... metrics_text="# HELP up Scrape status",
|
|
61
|
+
... content_type="text/plain; version=0.0.4; charset=utf-8",
|
|
62
|
+
... ),
|
|
63
|
+
... correlation_id=uuid4(),
|
|
64
|
+
... )
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
status: EnumResponseStatus = Field(
|
|
68
|
+
description="Operation status (success or error)",
|
|
69
|
+
)
|
|
70
|
+
payload: ModelMetricsHandlerPayload = Field(
|
|
71
|
+
description="Operation-specific response payload",
|
|
72
|
+
)
|
|
73
|
+
correlation_id: UUID = Field(
|
|
74
|
+
description="Correlation ID for distributed tracing",
|
|
75
|
+
)
|
|
76
|
+
error_message: str | None = Field(
|
|
77
|
+
default=None,
|
|
78
|
+
description="Error description if status is ERROR",
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
model_config = ConfigDict(frozen=True, extra="forbid")
|
|
82
|
+
|
|
83
|
+
@model_validator(mode="after")
|
|
84
|
+
def _validate_error_message_required_on_error(self) -> Self:
|
|
85
|
+
"""Validate that error_message is provided when status is ERROR.
|
|
86
|
+
|
|
87
|
+
This validator ensures API consumers always receive a meaningful error
|
|
88
|
+
description when an operation fails.
|
|
89
|
+
|
|
90
|
+
Raises:
|
|
91
|
+
ValueError: If status is ERROR but error_message is None or empty.
|
|
92
|
+
"""
|
|
93
|
+
if self.status == EnumResponseStatus.ERROR:
|
|
94
|
+
if not self.error_message:
|
|
95
|
+
raise ValueError("error_message is required when status is ERROR")
|
|
96
|
+
return self
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
__all__: list[str] = [
|
|
100
|
+
"ModelMetricsHandlerResponse",
|
|
101
|
+
]
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Pipeline hooks for cross-cutting observability concerns.
|
|
4
|
+
|
|
5
|
+
This module provides hooks that can be integrated into infrastructure pipelines
|
|
6
|
+
to enable observability instrumentation without modifying the core business logic.
|
|
7
|
+
|
|
8
|
+
Key Components:
|
|
9
|
+
- HookObservability: Pipeline hook for timing, metrics, and context tracking
|
|
10
|
+
- get_global_hook(): Thread-safe access to a global singleton hook
|
|
11
|
+
- configure_global_hook(): Configure the global singleton on first use
|
|
12
|
+
- clear_global_hook(): Reset the singleton for reconfiguration or testing
|
|
13
|
+
- has_global_hook(): Check if a singleton exists
|
|
14
|
+
|
|
15
|
+
Design Philosophy:
|
|
16
|
+
Hooks use contextvars for all per-operation state to ensure concurrency
|
|
17
|
+
safety in async code. This is a CRITICAL design decision - using instance
|
|
18
|
+
variables for timing state would cause race conditions when multiple
|
|
19
|
+
concurrent operations use the same hook instance.
|
|
20
|
+
|
|
21
|
+
The module also provides optional singleton support via get_global_hook()
|
|
22
|
+
for applications that need a shared observability hook across components.
|
|
23
|
+
The singleton is thread-safe and logs a warning when configuration is
|
|
24
|
+
ignored for an existing instance.
|
|
25
|
+
|
|
26
|
+
Usage Example:
|
|
27
|
+
```python
|
|
28
|
+
from omnibase_infra.observability.hooks import HookObservability
|
|
29
|
+
from omnibase_spi.protocols.observability import ProtocolHotPathMetricsSink
|
|
30
|
+
|
|
31
|
+
# Create hook with optional metrics sink
|
|
32
|
+
sink: ProtocolHotPathMetricsSink = get_metrics_sink()
|
|
33
|
+
hook = HookObservability(metrics_sink=sink)
|
|
34
|
+
|
|
35
|
+
# Use context manager for automatic timing
|
|
36
|
+
with hook.operation_context("handler.process", correlation_id="abc-123"):
|
|
37
|
+
result = await handler.execute(payload)
|
|
38
|
+
|
|
39
|
+
# Or use manual timing for more control
|
|
40
|
+
hook.before_operation("db.query", correlation_id="abc-123")
|
|
41
|
+
try:
|
|
42
|
+
result = await db.execute(query)
|
|
43
|
+
hook.record_success()
|
|
44
|
+
except Exception as e:
|
|
45
|
+
hook.record_failure(type(e).__name__)
|
|
46
|
+
raise
|
|
47
|
+
finally:
|
|
48
|
+
duration_ms = hook.after_operation()
|
|
49
|
+
|
|
50
|
+
# Or use the global singleton
|
|
51
|
+
from omnibase_infra.observability.hooks import get_global_hook
|
|
52
|
+
hook = get_global_hook(metrics_sink=sink) # Returns singleton
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
See Also:
|
|
56
|
+
- ProtocolHotPathMetricsSink: Metrics collection protocol
|
|
57
|
+
- correlation.py: Correlation ID management (same contextvar pattern)
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
from omnibase_infra.observability.hooks.hook_observability import (
|
|
61
|
+
HookObservability,
|
|
62
|
+
clear_global_hook,
|
|
63
|
+
configure_global_hook,
|
|
64
|
+
get_global_hook,
|
|
65
|
+
has_global_hook,
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
__all__ = [
|
|
69
|
+
"HookObservability",
|
|
70
|
+
"get_global_hook",
|
|
71
|
+
"configure_global_hook",
|
|
72
|
+
"clear_global_hook",
|
|
73
|
+
"has_global_hook",
|
|
74
|
+
]
|