directly return number of active users from backend for usage display

This commit is contained in:
Jan Kessler 2025-06-25 14:22:18 +02:00
parent b6e2b2e514
commit be3d6f1b2a
No known key found for this signature in database
GPG Key ID: FCF0DCB4ADFC53E7
3 changed files with 31 additions and 26 deletions

View File

@ -58,7 +58,7 @@ from open_webui.socket.main import (
app as socket_app,
periodic_usage_pool_cleanup,
get_models_in_use,
get_active_user_ids,
get_active_users_count,
)
from open_webui.routers import (
audio,
@ -1663,7 +1663,7 @@ async def get_current_usage(user=Depends(get_verified_user)):
This is an experimental endpoint and subject to change.
"""
try:
return {"model_ids": get_models_in_use(), "user_ids": get_active_user_ids()}
return {"model_ids": get_models_in_use(), "users_count": get_active_users_count()}
except Exception as e:
log.error(f"Error getting usage statistics: {e}")
raise HTTPException(status_code=500, detail="Internal Server Error")

View File

@ -152,6 +152,11 @@ def get_models_in_use():
return models_in_use
def get_active_users_count():
"""Get the number of active users."""
return len(USER_POOL)
def get_active_user_ids():
"""Get the list of active user IDs."""
return list(USER_POOL.keys())

View File

@ -206,40 +206,40 @@
</button>
{#if usage}
{#if usage?.user_ids?.length > 0}
<hr class=" border-gray-100 dark:border-gray-800 my-1 p-0" />
<hr class=" border-gray-100 dark:border-gray-800 my-1 p-0" />
<Tooltip
content={usage?.model_ids && usage?.model_ids.length > 0
? `${$i18n.t('Running')}: ${usage.model_ids.join(', ')} ✨`
: ''}
<Tooltip
content={usage?.model_ids && usage?.model_ids.length > 0
? `${$i18n.t('Running')}: ${usage.model_ids.join(', ')} ✨`
: ''}
>
<div
class="flex rounded-md py-1 px-3 text-xs gap-2.5 items-center"
on:mouseenter={() => {
getUsageInfo();
}}
>
<div
class="flex rounded-md py-1 px-3 text-xs gap-2.5 items-center"
on:mouseenter={() => {
getUsageInfo();
}}
>
<div class=" flex items-center">
<span class="relative flex size-2">
<span
class="animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 opacity-75"
/>
<span class="relative inline-flex rounded-full size-2 bg-green-500" />
</span>
</div>
<div class=" flex items-center">
<span class="relative flex size-2">
<span
class="animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 opacity-75"
/>
<span class="relative inline-flex rounded-full size-2 bg-green-500" />
</span>
</div>
{#if usage?.users_count}
<div class=" ">
<span class="">
{$i18n.t('Active Users')}:
</span>
<span class=" font-semibold">
{usage?.user_ids?.length}
{usage?.users_count}
</span>
</div>
</div>
</Tooltip>
{/if}
{/if}
</div>
</Tooltip>
{/if}
<!-- <DropdownMenu.Item class="flex items-center py-1.5 px-3 text-sm ">