From 8ad530bc61015fbb066f5ff7562ba607cce575a6 Mon Sep 17 00:00:00 2001 From: Untone Date: Thu, 28 Aug 2025 22:16:12 +0300 Subject: [PATCH] 0-followers-log --- CHANGELOG.md | 6 ++++++ cache/precache.py | 44 +++++++++++++++++++++++++++++++++++++++----- package.json | 2 +- pyproject.toml | 2 +- 4 files changed, 47 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 10235798..177a150f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,12 @@ - Прямой `git push dokku` вместо использования стороннего action - Более надежный и контролируемый процесс деплоя +### 🔍 Улучшено +- **Прекеш топиков**: Добавлен вывод списка топиков с 0 фолловерами + - После прекеша выводится список всех топиков без фолловеров по слагам + - Убраны избыточные логи из `precache_topics_followers` + - Более чистое и информативное логирование процесса кеширования + ## [0.9.13] - 2025-08-27 ### 🗑️ Удалено diff --git a/cache/precache.py b/cache/precache.py index d3864131..555f251c 100644 --- a/cache/precache.py +++ b/cache/precache.py @@ -1,6 +1,7 @@ import asyncio import traceback +import orjson from sqlalchemy import and_, func, join, select # Импорт Author, AuthorFollower отложен для избежания циклических импортов @@ -76,12 +77,9 @@ async def precache_topics_followers(topic_id: int, session) -> None: followers_payload = fast_json_dumps(list(topic_followers)) await redis.execute("SET", f"topic:followers:{topic_id}", followers_payload) - # Добавляем логирование для отладки - logger.debug(f"Precached {len(topic_followers)} followers for topic #{topic_id}") + # Логируем только если количество фолловеров равно 0 if len(topic_followers) == 0: - logger.warning(f"⚠️ Topic #{topic_id} has 0 followers - this might indicate a data issue") - elif len(topic_followers) == 1: - logger.info(f"ℹ️ Topic #{topic_id} has exactly 1 follower - checking if this is correct") + logger.debug(f"Topic #{topic_id} has 0 followers") except Exception as e: logger.error(f"Error precaching followers for topic #{topic_id}: {e}") @@ -202,6 +200,42 @@ async def precache_data() -> None: # logger.debug(f"Finished precaching followers and authors for topic id={topic_dict.get('id')}") logger.info(f"{len(topics)} topics and their followings precached") + # Выводим список топиков с 0 фолловерами + topics_with_zero_followers = [] + for topic in topics: + topic_dict = topic.dict() if hasattr(topic, "dict") else topic + topic_id = topic_dict.get("id") + topic_slug = topic_dict.get("slug", "unknown") + + # Пропускаем топики без ID + if not topic_id: + continue + + # Получаем количество фолловеров из кеша + followers_cache_key = f"topic:followers:{topic_id}" + followers_data = await redis.execute("GET", followers_cache_key) + + if followers_data: + followers_count = len(orjson.loads(followers_data)) + if followers_count == 0: + topics_with_zero_followers.append(topic_slug) + else: + # Если кеш не найден, проверяем БД + with local_session() as check_session: + followers_count_result = check_session.execute( + select(func.count(TopicFollower.follower)).where(TopicFollower.topic == topic_id) + ).scalar() + followers_count = followers_count_result or 0 + if followers_count == 0: + topics_with_zero_followers.append(topic_slug) + + if topics_with_zero_followers: + logger.info(f"📋 Топики с 0 фолловерами ({len(topics_with_zero_followers)}):") + for slug in sorted(topics_with_zero_followers): + logger.info(f" • {slug}") + else: + logger.info("✅ Все топики имеют фолловеров") + # authors authors = get_with_stat(select(Author)) # logger.info(f"{len(authors)} authors found in database") diff --git a/package.json b/package.json index 1b1d911c..576edba7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "publy-panel", - "version": "0.9.13", + "version": "0.9.14", "type": "module", "description": "Publy, a modern platform for collaborative text creation, offers a user-friendly interface for authors, editors, and readers, supporting real-time collaboration and structured feedback.", "scripts": { diff --git a/pyproject.toml b/pyproject.toml index bac2052e..f7362583 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "discours-core" -version = "0.9.13" +version = "0.9.14" description = "Core backend for Discours.io platform" authors = [ {name = "Tony Rewin", email = "tonyrewin@yandex.ru"}