mcp-mesh 0.7.19__py3-none-any.whl → 0.7.21__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.
- _mcp_mesh/__init__.py +1 -1
- _mcp_mesh/pipeline/api_heartbeat/api_fast_heartbeat_check.py +1 -1
- _mcp_mesh/pipeline/api_heartbeat/api_health_check.py +3 -3
- _mcp_mesh/pipeline/api_heartbeat/api_heartbeat_orchestrator.py +10 -14
- _mcp_mesh/pipeline/api_heartbeat/api_heartbeat_pipeline.py +1 -1
- _mcp_mesh/pipeline/api_heartbeat/api_registry_connection.py +4 -4
- {mcp_mesh-0.7.19.dist-info → mcp_mesh-0.7.21.dist-info}/METADATA +1 -1
- {mcp_mesh-0.7.19.dist-info → mcp_mesh-0.7.21.dist-info}/RECORD +10 -10
- {mcp_mesh-0.7.19.dist-info → mcp_mesh-0.7.21.dist-info}/WHEEL +0 -0
- {mcp_mesh-0.7.19.dist-info → mcp_mesh-0.7.21.dist-info}/licenses/LICENSE +0 -0
_mcp_mesh/__init__.py
CHANGED
|
@@ -73,7 +73,7 @@ class APIFastHeartbeatStep(PipelineStep):
|
|
|
73
73
|
|
|
74
74
|
# Log status and action with API-specific messaging
|
|
75
75
|
if status == FastHeartbeatStatus.NO_CHANGES:
|
|
76
|
-
self.logger.
|
|
76
|
+
self.logger.trace(
|
|
77
77
|
f"✅ API fast heartbeat: No changes detected for service '{service_id}'"
|
|
78
78
|
)
|
|
79
79
|
elif status == FastHeartbeatStatus.TOPOLOGY_CHANGED:
|
|
@@ -38,7 +38,7 @@ class APIHealthCheckStep(PipelineStep):
|
|
|
38
38
|
Returns:
|
|
39
39
|
PipelineResult with health_status in context
|
|
40
40
|
"""
|
|
41
|
-
self.logger.
|
|
41
|
+
self.logger.trace("🏥 Checking FastAPI application health status")
|
|
42
42
|
|
|
43
43
|
try:
|
|
44
44
|
# Get FastAPI app from context
|
|
@@ -66,7 +66,7 @@ class APIHealthCheckStep(PipelineStep):
|
|
|
66
66
|
routes_with_mesh = self._count_mesh_routes(fastapi_app)
|
|
67
67
|
total_routes = len(getattr(fastapi_app, "routes", []))
|
|
68
68
|
|
|
69
|
-
self.logger.
|
|
69
|
+
self.logger.trace(
|
|
70
70
|
f"🔍 FastAPI app health: {app_title} v{app_version}, "
|
|
71
71
|
f"{routes_with_mesh}/{total_routes} routes with mesh injection"
|
|
72
72
|
)
|
|
@@ -91,7 +91,7 @@ class APIHealthCheckStep(PipelineStep):
|
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
self.logger.
|
|
94
|
+
self.logger.trace(
|
|
95
95
|
f"🏥 API health check passed: {app_title} v{app_version} "
|
|
96
96
|
f"({routes_with_mesh} mesh routes)"
|
|
97
97
|
)
|
|
@@ -58,19 +58,19 @@ class APIHeartbeatOrchestrator:
|
|
|
58
58
|
self._log_api_heartbeat_request(heartbeat_context, self._heartbeat_count)
|
|
59
59
|
|
|
60
60
|
# Execute API heartbeat pipeline with timeout protection
|
|
61
|
-
self.logger.
|
|
61
|
+
self.logger.trace(f"💓 Executing API heartbeat #{self._heartbeat_count} for service '{service_id}'")
|
|
62
62
|
|
|
63
63
|
# Add timeout to prevent hanging heartbeats (30 seconds max)
|
|
64
64
|
import asyncio
|
|
65
65
|
|
|
66
66
|
try:
|
|
67
|
-
self.logger.
|
|
67
|
+
self.logger.trace("Starting API heartbeat pipeline execution")
|
|
68
68
|
result = await asyncio.wait_for(
|
|
69
69
|
self.pipeline.execute_api_heartbeat_cycle(heartbeat_context),
|
|
70
70
|
timeout=30.0,
|
|
71
71
|
)
|
|
72
72
|
if result.is_success():
|
|
73
|
-
self.logger.
|
|
73
|
+
self.logger.trace("✅ API heartbeat pipeline completed successfully")
|
|
74
74
|
else:
|
|
75
75
|
self.logger.error(f"❌ API heartbeat pipeline failed: {result.message}")
|
|
76
76
|
except TimeoutError:
|
|
@@ -120,10 +120,6 @@ class APIHeartbeatOrchestrator:
|
|
|
120
120
|
|
|
121
121
|
# Get API service metadata from startup context
|
|
122
122
|
api_service_metadata = startup_context.get("api_service_metadata", {})
|
|
123
|
-
self.logger.debug(f"🔍 Startup context has api_service_metadata: {len(api_service_metadata) > 0}")
|
|
124
|
-
if api_service_metadata:
|
|
125
|
-
capabilities = api_service_metadata.get("capabilities", [])
|
|
126
|
-
self.logger.debug(f"🔍 API service has {len(capabilities)} route capabilities")
|
|
127
123
|
|
|
128
124
|
# Build heartbeat-specific context
|
|
129
125
|
heartbeat_context = {
|
|
@@ -182,7 +178,7 @@ class APIHeartbeatOrchestrator:
|
|
|
182
178
|
}
|
|
183
179
|
|
|
184
180
|
# Log heartbeat details
|
|
185
|
-
self.logger.
|
|
181
|
+
self.logger.trace(
|
|
186
182
|
f"🔍 API Heartbeat #{heartbeat_count} for '{service_id}': "
|
|
187
183
|
f"app={app_info}, display={display_config}"
|
|
188
184
|
)
|
|
@@ -197,29 +193,29 @@ class APIHeartbeatOrchestrator:
|
|
|
197
193
|
heartbeat_response = result.context.get("heartbeat_response")
|
|
198
194
|
heartbeat_success = result.context.get("heartbeat_success", False)
|
|
199
195
|
|
|
200
|
-
self.logger.
|
|
196
|
+
self.logger.trace(f"API heartbeat result - success: {heartbeat_success}")
|
|
201
197
|
|
|
202
198
|
# Check if heartbeat was skipped due to optimization
|
|
203
199
|
heartbeat_skipped = result.context.get("heartbeat_skipped", False)
|
|
204
200
|
skip_reason = result.context.get("skip_reason")
|
|
205
201
|
|
|
206
202
|
if heartbeat_success and heartbeat_response:
|
|
207
|
-
# Log response details for
|
|
203
|
+
# Log response details for tracing
|
|
208
204
|
try:
|
|
209
205
|
response_json = json.dumps(
|
|
210
206
|
heartbeat_response, indent=2, default=str
|
|
211
207
|
)
|
|
212
|
-
self.logger.
|
|
208
|
+
self.logger.trace(
|
|
213
209
|
f"🔍 API heartbeat response #{heartbeat_count}:\n{response_json}"
|
|
214
210
|
)
|
|
215
211
|
except Exception as e:
|
|
216
|
-
self.logger.
|
|
212
|
+
self.logger.trace(
|
|
217
213
|
f"🔍 API heartbeat response #{heartbeat_count}: {heartbeat_response} "
|
|
218
214
|
f"(json serialization failed: {e})"
|
|
219
215
|
)
|
|
220
216
|
|
|
221
|
-
self.logger.
|
|
222
|
-
f"
|
|
217
|
+
self.logger.debug(
|
|
218
|
+
f"🚀 API heartbeat #{heartbeat_count} sent for service '{service_id}'"
|
|
223
219
|
)
|
|
224
220
|
return True
|
|
225
221
|
elif heartbeat_success and heartbeat_skipped:
|
|
@@ -208,7 +208,7 @@ class APIHeartbeatPipeline(MeshPipeline):
|
|
|
208
208
|
# NO_CHANGES - skip for optimization
|
|
209
209
|
should_execute_remaining = False
|
|
210
210
|
reason = "optimization (no changes detected)"
|
|
211
|
-
self.logger.
|
|
211
|
+
self.logger.trace(
|
|
212
212
|
f"🚀 API heartbeat: Skipping remaining steps for optimization: {reason}"
|
|
213
213
|
)
|
|
214
214
|
elif FastHeartbeatStatusUtil.should_skip_for_resilience(
|
|
@@ -39,14 +39,14 @@ class APIRegistryConnectionStep(PipelineStep):
|
|
|
39
39
|
Returns:
|
|
40
40
|
PipelineResult with registry_wrapper in context
|
|
41
41
|
"""
|
|
42
|
-
self.logger.
|
|
42
|
+
self.logger.trace("🔗 Preparing API registry connection for heartbeat")
|
|
43
43
|
|
|
44
44
|
try:
|
|
45
45
|
# Check if registry_wrapper already exists in context
|
|
46
46
|
registry_wrapper = context.get("registry_wrapper")
|
|
47
47
|
|
|
48
48
|
if registry_wrapper is not None:
|
|
49
|
-
self.logger.
|
|
49
|
+
self.logger.trace("✅ Registry wrapper already available in context")
|
|
50
50
|
return PipelineResult(
|
|
51
51
|
message="Registry connection already established",
|
|
52
52
|
context={"registry_wrapper": registry_wrapper}
|
|
@@ -69,7 +69,7 @@ class APIRegistryConnectionStep(PipelineStep):
|
|
|
69
69
|
rule=ValidationRule.URL_RULE,
|
|
70
70
|
)
|
|
71
71
|
|
|
72
|
-
self.logger.
|
|
72
|
+
self.logger.trace(f"🔍 Using registry URL: {registry_url}")
|
|
73
73
|
|
|
74
74
|
# Create registry client wrapper
|
|
75
75
|
from ...generated.mcp_mesh_registry_client.api_client import ApiClient
|
|
@@ -80,7 +80,7 @@ class APIRegistryConnectionStep(PipelineStep):
|
|
|
80
80
|
api_client = ApiClient(configuration=config)
|
|
81
81
|
registry_wrapper = RegistryClientWrapper(api_client)
|
|
82
82
|
|
|
83
|
-
self.logger.
|
|
83
|
+
self.logger.trace(f"🔗 API registry connection prepared: {registry_url}")
|
|
84
84
|
|
|
85
85
|
return PipelineResult(
|
|
86
86
|
message=f"Registry connection prepared for {registry_url}",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcp-mesh
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.21
|
|
4
4
|
Summary: Kubernetes-native platform for distributed MCP applications
|
|
5
5
|
Project-URL: Homepage, https://github.com/dhyansraj/mcp-mesh
|
|
6
6
|
Project-URL: Documentation, https://github.com/dhyansraj/mcp-mesh/tree/main/docs
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
_mcp_mesh/__init__.py,sha256=
|
|
1
|
+
_mcp_mesh/__init__.py,sha256=4sv0w2W5E7Y8YqZrimL8ck05K7OrF2W6gqu9-DuQm40,2720
|
|
2
2
|
_mcp_mesh/reload.py,sha256=IqZeS7lsFw7bwOzDPE0LJLPkY5nR68BKc8C4srSCX1o,6239
|
|
3
3
|
_mcp_mesh/reload_runner.py,sha256=SgQKzzO2yHfSUBq8s3SpAnovWA0rveimVNaxeLCEo_0,1310
|
|
4
4
|
_mcp_mesh/engine/__init__.py,sha256=U_6Kw3vA_3RiNK0Oln5c5C7WvA9lSONV22wWzfxYHNw,2975
|
|
@@ -81,13 +81,13 @@ _mcp_mesh/generated/mcp_mesh_registry_client/models/trace_event.py,sha256=zceJuF
|
|
|
81
81
|
_mcp_mesh/pipeline/__init__.py,sha256=9Aplh4m1z-rYTQys0JQLYlq9wTPdI72eSOhUPqcnvpA,1557
|
|
82
82
|
_mcp_mesh/pipeline/api_heartbeat/__init__.py,sha256=IXTLoQLAPqQEWZ8VMWc5W_cQJkDv95rlVGXyXoQDjHk,473
|
|
83
83
|
_mcp_mesh/pipeline/api_heartbeat/api_dependency_resolution.py,sha256=LDeLvN2U2MgYK3HLEUIhG5FUC2FyrGUs7SueF7gcfAA,20027
|
|
84
|
-
_mcp_mesh/pipeline/api_heartbeat/api_fast_heartbeat_check.py,sha256=
|
|
85
|
-
_mcp_mesh/pipeline/api_heartbeat/api_health_check.py,sha256=
|
|
86
|
-
_mcp_mesh/pipeline/api_heartbeat/api_heartbeat_orchestrator.py,sha256=
|
|
87
|
-
_mcp_mesh/pipeline/api_heartbeat/api_heartbeat_pipeline.py,sha256=
|
|
84
|
+
_mcp_mesh/pipeline/api_heartbeat/api_fast_heartbeat_check.py,sha256=XfMbqtZOdk7oAtbE6DI5EaqFpHZrwYm9re8ixobrrV0,4823
|
|
85
|
+
_mcp_mesh/pipeline/api_heartbeat/api_health_check.py,sha256=6mKK0RQK9rm4NgEa9EFC6TvXNSQJaK5pMsPI_byy66c,5124
|
|
86
|
+
_mcp_mesh/pipeline/api_heartbeat/api_heartbeat_orchestrator.py,sha256=aM55Pr915O056M-zeJIr4vcr74EikCplLj7qAcDTSyo,10046
|
|
87
|
+
_mcp_mesh/pipeline/api_heartbeat/api_heartbeat_pipeline.py,sha256=4xi9mxyk29T71QFX1bFQWCns1dVvqEtOC5A5fJsBZm4,13481
|
|
88
88
|
_mcp_mesh/pipeline/api_heartbeat/api_heartbeat_send.py,sha256=vszesutlAFXv9B4XXFutEMEBBhN54hF8eztTtDudLaI,15785
|
|
89
89
|
_mcp_mesh/pipeline/api_heartbeat/api_lifespan_integration.py,sha256=WBo2crcaGfxi8Q46TU-i5OMhAv0sQKz7Z9jps-GLkvM,5183
|
|
90
|
-
_mcp_mesh/pipeline/api_heartbeat/api_registry_connection.py,sha256=
|
|
90
|
+
_mcp_mesh/pipeline/api_heartbeat/api_registry_connection.py,sha256=gX1y1DfCLjWu8uQ2X5KMxyuznjOTgZLGMM1jMh7g6w0,3840
|
|
91
91
|
_mcp_mesh/pipeline/api_startup/__init__.py,sha256=eivolkSKot2bJTWP2BV8-RKRT1Zm7SGQYuEUiTxusOQ,577
|
|
92
92
|
_mcp_mesh/pipeline/api_startup/api_pipeline.py,sha256=w4m7LP7qnpLxYYWy4moa_8inAWFT0jWy9i7G9WGWOCM,2546
|
|
93
93
|
_mcp_mesh/pipeline/api_startup/api_server_setup.py,sha256=Qy0wbXyIWIQYA7CjiGVZwn0nWCKK85ZzFTRI2JDA9Aw,15099
|
|
@@ -146,7 +146,7 @@ mesh/__init__.py,sha256=Va5XRBWgejQurad7Maz3E-zPY7vu431B2_4sAdCu1zk,3868
|
|
|
146
146
|
mesh/decorators.py,sha256=sFTLngsIo_2uBb-Fvuh9K1S8e2Kzq_70eWT4Z2FA83E,59730
|
|
147
147
|
mesh/helpers.py,sha256=1Y7V6aQvpV8BKfEeeKfjwPJ5g9FjMCzSNifs3se1jkA,12935
|
|
148
148
|
mesh/types.py,sha256=n0MxrBYZJ84xyQWGf_X2ZbVWSAaIcEBkRV7qaCmX6Ac,17008
|
|
149
|
-
mcp_mesh-0.7.
|
|
150
|
-
mcp_mesh-0.7.
|
|
151
|
-
mcp_mesh-0.7.
|
|
152
|
-
mcp_mesh-0.7.
|
|
149
|
+
mcp_mesh-0.7.21.dist-info/METADATA,sha256=PgipqbPXQnKN06fCXrMjGRgTEE9230P61DAXJbinX_4,5006
|
|
150
|
+
mcp_mesh-0.7.21.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
151
|
+
mcp_mesh-0.7.21.dist-info/licenses/LICENSE,sha256=_EBQHRQThv9FPOLc5eFOUdeeRO0mYwChC7cx60dM1tM,1078
|
|
152
|
+
mcp_mesh-0.7.21.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|