omnibase_infra 0.3.1__py3-none-any.whl → 0.4.0__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 +1 -1
- omnibase_infra/enums/__init__.py +3 -0
- omnibase_infra/enums/enum_consumer_group_purpose.py +9 -0
- omnibase_infra/enums/enum_postgres_error_code.py +188 -0
- omnibase_infra/errors/__init__.py +4 -0
- omnibase_infra/errors/error_infra.py +60 -0
- omnibase_infra/handlers/__init__.py +3 -0
- omnibase_infra/handlers/handler_slack_webhook.py +426 -0
- omnibase_infra/handlers/models/__init__.py +14 -0
- omnibase_infra/handlers/models/enum_alert_severity.py +36 -0
- omnibase_infra/handlers/models/model_slack_alert.py +24 -0
- omnibase_infra/handlers/models/model_slack_alert_payload.py +77 -0
- omnibase_infra/handlers/models/model_slack_alert_result.py +73 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +29 -20
- omnibase_infra/mixins/__init__.py +14 -0
- omnibase_infra/mixins/mixin_node_introspection.py +42 -20
- omnibase_infra/mixins/mixin_postgres_error_response.py +314 -0
- omnibase_infra/mixins/mixin_postgres_op_executor.py +298 -0
- omnibase_infra/models/__init__.py +3 -0
- omnibase_infra/models/discovery/model_dependency_spec.py +1 -0
- omnibase_infra/models/discovery/model_discovered_capabilities.py +1 -1
- omnibase_infra/models/discovery/model_introspection_config.py +28 -1
- omnibase_infra/models/discovery/model_introspection_performance_metrics.py +1 -0
- omnibase_infra/models/discovery/model_introspection_task_config.py +1 -0
- omnibase_infra/{nodes/effects/models → models}/model_backend_result.py +22 -6
- omnibase_infra/models/projection/__init__.py +11 -0
- omnibase_infra/models/projection/model_contract_projection.py +170 -0
- omnibase_infra/models/projection/model_topic_projection.py +148 -0
- omnibase_infra/models/runtime/__init__.py +4 -0
- omnibase_infra/models/runtime/model_resolved_dependencies.py +116 -0
- omnibase_infra/nodes/contract_registry_reducer/__init__.py +5 -0
- omnibase_infra/nodes/contract_registry_reducer/contract.yaml +6 -5
- omnibase_infra/nodes/contract_registry_reducer/contract_registration_event_router.py +689 -0
- omnibase_infra/nodes/contract_registry_reducer/reducer.py +9 -26
- omnibase_infra/nodes/effects/__init__.py +1 -1
- omnibase_infra/nodes/effects/models/__init__.py +6 -4
- omnibase_infra/nodes/effects/models/model_registry_response.py +1 -1
- omnibase_infra/nodes/effects/protocol_consul_client.py +1 -1
- omnibase_infra/nodes/effects/protocol_postgres_adapter.py +1 -1
- omnibase_infra/nodes/effects/registry_effect.py +1 -1
- omnibase_infra/nodes/node_contract_persistence_effect/__init__.py +101 -0
- omnibase_infra/nodes/node_contract_persistence_effect/contract.yaml +490 -0
- omnibase_infra/nodes/node_contract_persistence_effect/handlers/__init__.py +74 -0
- omnibase_infra/nodes/node_contract_persistence_effect/handlers/handler_postgres_cleanup_topics.py +217 -0
- omnibase_infra/nodes/node_contract_persistence_effect/handlers/handler_postgres_contract_upsert.py +242 -0
- omnibase_infra/nodes/node_contract_persistence_effect/handlers/handler_postgres_deactivate.py +194 -0
- omnibase_infra/nodes/node_contract_persistence_effect/handlers/handler_postgres_heartbeat.py +243 -0
- omnibase_infra/nodes/node_contract_persistence_effect/handlers/handler_postgres_mark_stale.py +208 -0
- omnibase_infra/nodes/node_contract_persistence_effect/handlers/handler_postgres_topic_update.py +298 -0
- omnibase_infra/nodes/node_contract_persistence_effect/models/__init__.py +15 -0
- omnibase_infra/nodes/node_contract_persistence_effect/models/model_persistence_result.py +52 -0
- omnibase_infra/nodes/node_contract_persistence_effect/node.py +131 -0
- omnibase_infra/nodes/node_contract_persistence_effect/registry/__init__.py +27 -0
- omnibase_infra/nodes/node_contract_persistence_effect/registry/registry_infra_contract_persistence_effect.py +251 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_intent_payload.py +8 -12
- omnibase_infra/nodes/node_registry_effect/models/__init__.py +2 -2
- omnibase_infra/nodes/node_slack_alerter_effect/__init__.py +33 -0
- omnibase_infra/nodes/node_slack_alerter_effect/contract.yaml +291 -0
- omnibase_infra/nodes/node_slack_alerter_effect/node.py +106 -0
- omnibase_infra/projectors/__init__.py +6 -0
- omnibase_infra/projectors/projection_reader_contract.py +1301 -0
- omnibase_infra/runtime/__init__.py +12 -0
- omnibase_infra/runtime/baseline_subscriptions.py +13 -6
- omnibase_infra/runtime/contract_dependency_resolver.py +455 -0
- omnibase_infra/runtime/contract_registration_event_router.py +500 -0
- omnibase_infra/runtime/db/__init__.py +4 -0
- omnibase_infra/runtime/db/models/__init__.py +15 -10
- omnibase_infra/runtime/db/models/model_db_operation.py +40 -0
- omnibase_infra/runtime/db/models/model_db_param.py +24 -0
- omnibase_infra/runtime/db/models/model_db_repository_contract.py +40 -0
- omnibase_infra/runtime/db/models/model_db_return.py +26 -0
- omnibase_infra/runtime/db/models/model_db_safety_policy.py +32 -0
- omnibase_infra/runtime/emit_daemon/event_registry.py +34 -22
- omnibase_infra/runtime/event_bus_subcontract_wiring.py +63 -23
- omnibase_infra/runtime/intent_execution_router.py +430 -0
- omnibase_infra/runtime/models/__init__.py +6 -0
- omnibase_infra/runtime/models/model_contract_registry_config.py +41 -0
- omnibase_infra/runtime/models/model_intent_execution_summary.py +79 -0
- omnibase_infra/runtime/models/model_runtime_config.py +8 -0
- omnibase_infra/runtime/protocols/__init__.py +16 -0
- omnibase_infra/runtime/protocols/protocol_intent_executor.py +107 -0
- omnibase_infra/runtime/publisher_topic_scoped.py +16 -11
- omnibase_infra/runtime/registry_policy.py +29 -15
- omnibase_infra/runtime/request_response_wiring.py +793 -0
- omnibase_infra/runtime/service_kernel.py +295 -8
- omnibase_infra/runtime/service_runtime_host_process.py +149 -5
- omnibase_infra/runtime/util_version.py +5 -1
- omnibase_infra/schemas/schema_latency_baseline.sql +135 -0
- omnibase_infra/services/contract_publisher/config.py +4 -4
- omnibase_infra/services/contract_publisher/service.py +8 -5
- omnibase_infra/services/observability/injection_effectiveness/__init__.py +67 -0
- omnibase_infra/services/observability/injection_effectiveness/config.py +295 -0
- omnibase_infra/services/observability/injection_effectiveness/consumer.py +1461 -0
- omnibase_infra/services/observability/injection_effectiveness/models/__init__.py +32 -0
- omnibase_infra/services/observability/injection_effectiveness/models/model_agent_match.py +79 -0
- omnibase_infra/services/observability/injection_effectiveness/models/model_context_utilization.py +118 -0
- omnibase_infra/services/observability/injection_effectiveness/models/model_latency_breakdown.py +107 -0
- omnibase_infra/services/observability/injection_effectiveness/models/model_pattern_utilization.py +46 -0
- omnibase_infra/services/observability/injection_effectiveness/writer_postgres.py +596 -0
- omnibase_infra/services/registry_api/models/__init__.py +25 -0
- omnibase_infra/services/registry_api/models/model_contract_ref.py +44 -0
- omnibase_infra/services/registry_api/models/model_contract_view.py +81 -0
- omnibase_infra/services/registry_api/models/model_response_contracts.py +50 -0
- omnibase_infra/services/registry_api/models/model_response_topics.py +50 -0
- omnibase_infra/services/registry_api/models/model_topic_summary.py +57 -0
- omnibase_infra/services/registry_api/models/model_topic_view.py +63 -0
- omnibase_infra/services/registry_api/routes.py +205 -6
- omnibase_infra/services/registry_api/service.py +528 -1
- omnibase_infra/utils/__init__.py +7 -0
- omnibase_infra/utils/util_db_error_context.py +292 -0
- omnibase_infra/validation/infra_validators.py +3 -1
- omnibase_infra/validation/validation_exemptions.yaml +65 -0
- {omnibase_infra-0.3.1.dist-info → omnibase_infra-0.4.0.dist-info}/METADATA +3 -3
- {omnibase_infra-0.3.1.dist-info → omnibase_infra-0.4.0.dist-info}/RECORD +117 -58
- {omnibase_infra-0.3.1.dist-info → omnibase_infra-0.4.0.dist-info}/WHEEL +0 -0
- {omnibase_infra-0.3.1.dist-info → omnibase_infra-0.4.0.dist-info}/entry_points.txt +0 -0
- {omnibase_infra-0.3.1.dist-info → omnibase_infra-0.4.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Node Slack Alerter Effect - Declarative effect node for Slack alerting.
|
|
4
|
+
|
|
5
|
+
This node follows the ONEX declarative pattern:
|
|
6
|
+
- DECLARATIVE effect driven by contract.yaml
|
|
7
|
+
- Zero custom routing logic - all behavior from handler_routing
|
|
8
|
+
- Lightweight shell that delegates to handlers via container resolution
|
|
9
|
+
- Used for ONEX-compliant runtime execution via RuntimeHostProcess
|
|
10
|
+
- Pattern: "Contract-driven, handlers wired externally"
|
|
11
|
+
|
|
12
|
+
Extends NodeEffect from omnibase_core for infrastructure I/O operations.
|
|
13
|
+
All handler routing is 100% driven by contract.yaml, not Python code.
|
|
14
|
+
|
|
15
|
+
Handler Routing Pattern:
|
|
16
|
+
1. Receive alert request (input_model in contract)
|
|
17
|
+
2. Route to appropriate handler based on operation (handler_routing)
|
|
18
|
+
3. Execute infrastructure I/O via handler (Slack webhook)
|
|
19
|
+
4. Return structured response (output_model in contract)
|
|
20
|
+
|
|
21
|
+
Design Decisions:
|
|
22
|
+
- 100% Contract-Driven: All routing logic in YAML, not Python
|
|
23
|
+
- Zero Custom Routing: Base class handles handler dispatch via contract
|
|
24
|
+
- Declarative Handlers: handler_routing section defines dispatch rules
|
|
25
|
+
- Container DI: Handler dependencies resolved via container
|
|
26
|
+
|
|
27
|
+
Node Responsibilities:
|
|
28
|
+
- Define I/O model contract (ModelSlackAlert -> ModelSlackAlertResult)
|
|
29
|
+
- Delegate all execution to handlers via base class
|
|
30
|
+
- NO custom logic - pure declarative shell
|
|
31
|
+
|
|
32
|
+
The actual handler execution and routing is performed by:
|
|
33
|
+
- Direct handler invocation by callers
|
|
34
|
+
- Or orchestrator layer for workflow coordination
|
|
35
|
+
|
|
36
|
+
Handlers receive their dependencies directly via constructor injection:
|
|
37
|
+
- HandlerSlackWebhook(webhook_url, http_session)
|
|
38
|
+
|
|
39
|
+
Coroutine Safety:
|
|
40
|
+
This node is async-safe. Handler coordination is performed by the
|
|
41
|
+
caller or orchestrator layer, not by this effect node.
|
|
42
|
+
|
|
43
|
+
Related Modules:
|
|
44
|
+
- contract.yaml: Handler routing and I/O model definitions
|
|
45
|
+
- ../../handlers/handler_slack_webhook.py: Webhook handler implementation
|
|
46
|
+
- ../../handlers/models/model_slack_alert.py: Alert payload models
|
|
47
|
+
|
|
48
|
+
Related Tickets:
|
|
49
|
+
- OMN-1905: Add declarative Slack webhook handler to omnibase_infra
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
from __future__ import annotations
|
|
53
|
+
|
|
54
|
+
from omnibase_core.nodes.node_effect import NodeEffect
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class NodeSlackAlerterEffect(NodeEffect):
|
|
58
|
+
"""Declarative effect node for Slack webhook alerting.
|
|
59
|
+
|
|
60
|
+
This effect node is a lightweight shell that defines the I/O contract
|
|
61
|
+
for Slack alert operations. All routing and execution logic is driven
|
|
62
|
+
by contract.yaml - this class contains NO custom routing code.
|
|
63
|
+
|
|
64
|
+
Supported Operations (defined in contract.yaml handler_routing):
|
|
65
|
+
- send_alert: Send a formatted alert to Slack
|
|
66
|
+
- send_message: Send a plain text message to Slack
|
|
67
|
+
|
|
68
|
+
Dependency Injection:
|
|
69
|
+
The HandlerSlackWebhook is instantiated by callers with its
|
|
70
|
+
dependencies (webhook_url from env, optional http_session).
|
|
71
|
+
This node contains NO instance variables for the handler.
|
|
72
|
+
|
|
73
|
+
Example:
|
|
74
|
+
```python
|
|
75
|
+
from omnibase_core.models.container import ModelONEXContainer
|
|
76
|
+
from omnibase_infra.nodes.node_slack_alerter_effect import NodeSlackAlerterEffect
|
|
77
|
+
from omnibase_infra.handlers import HandlerSlackWebhook
|
|
78
|
+
from omnibase_infra.handlers.models import ModelSlackAlert, EnumAlertSeverity
|
|
79
|
+
|
|
80
|
+
# Create effect node via container
|
|
81
|
+
container = ModelONEXContainer()
|
|
82
|
+
effect = NodeSlackAlerterEffect(container)
|
|
83
|
+
|
|
84
|
+
# Handler receives dependencies directly via constructor
|
|
85
|
+
handler = HandlerSlackWebhook()
|
|
86
|
+
|
|
87
|
+
# Create and send alert
|
|
88
|
+
alert = ModelSlackAlert(
|
|
89
|
+
severity=EnumAlertSeverity.ERROR,
|
|
90
|
+
message="Circuit breaker opened",
|
|
91
|
+
title="Infrastructure Alert",
|
|
92
|
+
details={"service": "consul", "threshold": "5"},
|
|
93
|
+
)
|
|
94
|
+
result = await handler.handle(alert)
|
|
95
|
+
|
|
96
|
+
if result.success:
|
|
97
|
+
print(f"Alert delivered in {result.duration_ms}ms")
|
|
98
|
+
else:
|
|
99
|
+
print(f"Alert failed: {result.error}")
|
|
100
|
+
```
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
# Pure declarative shell - all behavior defined in contract.yaml
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
__all__ = ["NodeSlackAlerterEffect"]
|
|
@@ -8,15 +8,20 @@ outputs to storage (PostgreSQL) and by orchestrators to query current
|
|
|
8
8
|
entity state.
|
|
9
9
|
|
|
10
10
|
Exports:
|
|
11
|
+
ProjectionReaderContract: Contract/topic projection reader for Registry API
|
|
11
12
|
ProjectionReaderRegistration: Registration projection reader implementation
|
|
12
13
|
SnapshotPublisherRegistration: Registration snapshot publisher for Kafka
|
|
13
14
|
|
|
14
15
|
Related Tickets:
|
|
16
|
+
- OMN-1845: Create ProjectionReaderContract for contract/topic queries
|
|
15
17
|
- OMN-947 (F2): Snapshot Publishing
|
|
16
18
|
- OMN-944 (F1): Implement Registration Projection Schema
|
|
17
19
|
- OMN-940 (F0): Define Projector Execution Model
|
|
18
20
|
"""
|
|
19
21
|
|
|
22
|
+
from omnibase_infra.projectors.projection_reader_contract import (
|
|
23
|
+
ProjectionReaderContract,
|
|
24
|
+
)
|
|
20
25
|
from omnibase_infra.projectors.projection_reader_registration import (
|
|
21
26
|
ProjectionReaderRegistration,
|
|
22
27
|
)
|
|
@@ -25,6 +30,7 @@ from omnibase_infra.projectors.snapshot_publisher_registration import (
|
|
|
25
30
|
)
|
|
26
31
|
|
|
27
32
|
__all__ = [
|
|
33
|
+
"ProjectionReaderContract",
|
|
28
34
|
"ProjectionReaderRegistration",
|
|
29
35
|
"SnapshotPublisherRegistration",
|
|
30
36
|
]
|