Files
backend/check_hot_articles.py
T

53 lines
2.1 KiB
Python
Raw Normal View History

import asyncio
from sqlalchemy import text
from sqlalchemy.ext.asyncio import create_async_engine
DATABASE_URL = 'postgresql+asyncpg://scilit:scilit_prod_2026@postgres:5432/scilit'
async def main():
engine = create_async_engine(DATABASE_URL)
async with engine.connect() as conn:
# Check cited_by_count distribution
r = await conn.execute(text("""
SELECT
CASE
WHEN cited_by_count IS NULL OR cited_by_count = 0 THEN '0 or NULL'
WHEN cited_by_count BETWEEN 1 AND 5 THEN '1-5'
WHEN cited_by_count BETWEEN 6 AND 20 THEN '6-20'
WHEN cited_by_count BETWEEN 21 AND 100 THEN '21-100'
ELSE '100+'
END as bucket,
COUNT(*) as cnt,
MAX(cited_by_count) as max_in_bucket
FROM global_literature
GROUP BY bucket
ORDER BY MIN(COALESCE(cited_by_count, 0))
"""))
print('=== Cited by count distribution ===')
for row in r:
print(f' {row.bucket}: {row.cnt}')
# Latest citation update time
r = await conn.execute(text("""
SELECT MAX(updated_at) as last_update, COUNT(*) as total_with_citations
FROM global_literature WHERE cited_by_count IS NOT NULL AND cited_by_count > 0
"""))
for row in r:
print(f'\nLast citation update: {row.last_update}')
print(f'Articles with citations: {row.total_with_citations}')
# Check what refresh_hot_articles_cache filters by
r = await conn.execute(text("""
SELECT cited_by_count, pub_date, pmid FROM global_literature
WHERE cited_by_count IS NOT NULL AND cited_by_count > 0
AND pub_date >= CURRENT_DATE - INTERVAL '365 days'
ORDER BY cited_by_count DESC LIMIT 10
"""))
print('\nTop cited articles in last year:')
for row in r:
print(f' PMID={row.pmid} cited={row.cited_by_count} pub_date={row.pub_date}')
await engine.dispose()
asyncio.run(main())