36 lines
1.0 KiB
Plaintext
36 lines
1.0 KiB
Plaintext
"""获取当前用户总数和并发用户数(近5分钟有活跃记录的用户)"""
|
||
from datetime import datetime, timedelta
|
||
|
||
ns = params_kw.copy()
|
||
db = DBPools()
|
||
|
||
# 总用户数
|
||
sql_users = "SELECT COUNT(*) as total_users FROM users"
|
||
|
||
# 并发用户数:近5分钟内在llmusage中有记录的不同用户
|
||
now = datetime.now()
|
||
five_min_ago = (now - timedelta(minutes=5)).strftime('%Y-%m-%d %H:%M:%S')
|
||
today = now.strftime('%Y-%m-%d')
|
||
|
||
sql_concurrent = """
|
||
SELECT COUNT(DISTINCT userid) as concurrent_users
|
||
FROM llmusage
|
||
WHERE use_date = ${today}$
|
||
AND use_time >= ${five_min_ago}$
|
||
"""
|
||
|
||
async with db.sqlorContext('sage') as sor:
|
||
user_recs = await sor.sqlExe(sql_users, {})
|
||
total_users = int(user_recs[0].get('total_users', 0)) if user_recs else 0
|
||
|
||
conc_recs = await sor.sqlExe(sql_concurrent, {
|
||
'today': today,
|
||
'five_min_ago': five_min_ago
|
||
})
|
||
concurrent_users = int(conc_recs[0].get('concurrent_users', 0)) if conc_recs else 0
|
||
|
||
return {
|
||
'total_users': total_users,
|
||
'concurrent_users': concurrent_users
|
||
}
|