Skip to content

Commit 76d2269

Browse files
authored
Version panel service status fix (#621)
* show accurate status for cache_type Signed-off-by: Keval Mahajan <[email protected]> * minor cleanup Signed-off-by: Keval Mahajan <[email protected]> * linting Signed-off-by: Keval Mahajan <[email protected]> * linting Signed-off-by: Keval Mahajan <[email protected]> * flake8 issue Signed-off-by: Keval Mahajan <[email protected]> --------- Signed-off-by: Keval Mahajan <[email protected]>
1 parent 2bb005f commit 76d2269

File tree

2 files changed

+69
-47
lines changed

2 files changed

+69
-47
lines changed

mcpgateway/templates/version_info_partial.html

Lines changed: 57 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -179,65 +179,80 @@ <h3 class="text-lg font-medium mb-4 dark:text-gray-200 flex items-center">
179179
</span>
180180
</div>
181181
</div>
182-
183182
<!-- Redis Status -->
184183
<div
185-
class="border rounded-lg p-4 {% if payload.redis.available %}border-green-200 bg-green-50 dark:border-green-700 dark:bg-green-900/20{% else %}border-red-200 bg-red-50 dark:border-red-700 dark:bg-red-900/20{% endif %}"
184+
class="border rounded-lg p-4
185+
{% if payload.settings.cache_type == 'redis' and payload.redis.reachable %}
186+
border-green-200 bg-green-50 dark:border-green-700 dark:bg-green-900/20
187+
{% elif payload.settings.cache_type == 'redis' and not payload.redis.reachable %}
188+
border-red-200 bg-red-50 dark:border-red-700 dark:bg-red-900/20
189+
{% else %}
190+
border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-900/20
191+
{% endif %}"
186192
>
187193
<div class="flex items-center justify-between">
188194
<div>
189-
<h4
190-
class="font-medium {% if payload.redis.available %}text-green-800 dark:text-green-300{% else %}text-red-800 dark:text-red-300{% endif %}"
191-
>
192-
Redis
195+
<h4 class="font-medium
196+
{% if payload.settings.cache_type == 'redis' and payload.redis.reachable %}
197+
text-green-800 dark:text-green-300
198+
{% elif payload.settings.cache_type == 'redis' and not payload.redis.reachable %}
199+
text-red-800 dark:text-red-300
200+
{% else %}
201+
text-gray-800 dark:text-gray-300
202+
{% endif %}">
203+
Cache
193204
</h4>
194-
<p
195-
class="text-sm {% if payload.redis.available %}text-green-600 dark:text-green-400{% else %}text-red-600 dark:text-red-400{% endif %}"
196-
>
197-
Cache Service
205+
<p class="text-sm
206+
{% if payload.settings.cache_type == 'redis' and payload.redis.reachable %}
207+
text-green-600 dark:text-green-400
208+
{% elif payload.settings.cache_type == 'redis' and not payload.redis.reachable %}
209+
text-red-600 dark:text-red-400
210+
{% else %}
211+
text-gray-600 dark:text-gray-400
212+
{% endif %}">
213+
{{ payload.settings.cache_type | capitalize }} Cache
198214
</p>
199215
</div>
200216
<div class="flex items-center">
201-
{% if payload.redis.available %}
202-
<svg
203-
class="h-8 w-8 text-green-500"
204-
fill="none"
205-
stroke="currentColor"
206-
viewBox="0 0 24 24"
207-
>
208-
<path
209-
stroke-linecap="round"
210-
stroke-linejoin="round"
211-
stroke-width="2"
212-
d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
213-
></path>
214-
</svg>
217+
{% if payload.settings.cache_type == 'redis' and payload.redis.reachable %}
218+
<svg class="h-8 w-8 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
219+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
220+
d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/>
221+
</svg>
222+
{% elif payload.settings.cache_type == 'redis' and not payload.redis.reachable %}
223+
<svg class="h-8 w-8 text-red-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
224+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
225+
d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"/>
226+
</svg>
215227
{% else %}
216-
<svg
217-
class="h-8 w-8 text-red-500"
218-
fill="none"
219-
stroke="currentColor"
220-
viewBox="0 0 24 24"
221-
>
222-
<path
223-
stroke-linecap="round"
224-
stroke-linejoin="round"
225-
stroke-width="2"
226-
d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"
227-
></path>
228-
</svg>
228+
<svg class="h-8 w-8 text-gray-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
229+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
230+
d="M12 9v2m0 4h.01M12 4a8 8 0 100 16 8 8 0 000-16z"/>
231+
</svg>
229232
{% endif %}
230233
</div>
231234
</div>
235+
232236
<div class="mt-2">
233-
<span
234-
class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium {% if payload.redis.available %}bg-green-100 text-green-800 dark:bg-green-800 dark:text-green-200{% else %}bg-red-100 text-red-800 dark:bg-red-800 dark:text-red-200{% endif %}"
235-
>
236-
{% if payload.redis.available %}✅ Available{% else %}❌ Not
237-
Available{% endif %}
237+
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium
238+
{% if payload.settings.cache_type == 'redis' and payload.redis.reachable %}
239+
bg-green-100 text-green-800 dark:bg-green-800 dark:text-green-200
240+
{% elif payload.settings.cache_type == 'redis' and not payload.redis.reachable %}
241+
bg-red-100 text-red-800 dark:bg-red-800 dark:text-red-200
242+
{% else %}
243+
bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-200
244+
{% endif %}">
245+
{% if payload.settings.cache_type == 'redis' and payload.redis.reachable %}
246+
✅ Connected
247+
{% elif payload.settings.cache_type == 'redis' and not payload.redis.reachable %}
248+
❌ Connection Failed
249+
{% else %}
250+
⚙️ Redis Not Configured
251+
{% endif %}
238252
</span>
239253
</div>
240254
</div>
255+
241256
</div>
242257
</div>
243258

mcpgateway/version.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
from __future__ import annotations
4040

4141
# Standard
42+
import asyncio
4243
from datetime import datetime, timezone
4344
import json
4445
import os
@@ -764,7 +765,7 @@ async def version_endpoint(
764765
>>> # Test with Redis available
765766
>>> async def test_with_redis():
766767
... mock_redis = AsyncMock()
767-
... mock_redis.ping = AsyncMock()
768+
... mock_redis.ping = AsyncMock(return_value=True)
768769
... mock_redis.info = AsyncMock(return_value={"redis_version": "7.0.5"})
769770
...
770771
... with patch('mcpgateway.version.REDIS_AVAILABLE', True):
@@ -792,11 +793,17 @@ async def version_endpoint(
792793
if REDIS_AVAILABLE and settings.cache_type.lower() == "redis" and settings.redis_url:
793794
try:
794795
client = aioredis.Redis.from_url(settings.redis_url)
795-
await client.ping()
796-
info = await client.info()
797-
redis_version = info.get("redis_version")
798-
redis_ok = True
796+
797+
response = await asyncio.wait_for(client.ping(), timeout=3.0)
798+
if response is True:
799+
redis_ok = True
800+
info = await asyncio.wait_for(client.info(), timeout=3.0)
801+
redis_version = info.get("redis_version", "unknown")
802+
else:
803+
redis_ok = False
804+
redis_version = "Ping failed"
799805
except Exception as exc:
806+
redis_ok = False
800807
redis_version = str(exc)
801808

802809
payload = _build_payload(redis_version, redis_ok)

0 commit comments

Comments
 (0)