[ВОЛК] снятие проверки времени изменений для ВОЛК; удаление лишних отладочных выводов в ВОЛК загрузчике
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2025-12-21 14:55:02 +03:00
parent e095fc35bc
commit d89b4efcba
2 changed files with 55 additions and 34 deletions
+54 -26
View File
@@ -25,6 +25,7 @@ DESC_PREFIX = os.getenv('DESC_PREFIX')
PZK_PREFIX = os.getenv('PZK_PREFIX') PZK_PREFIX = os.getenv('PZK_PREFIX')
LOG_FILE = os.getenv('LOG_FILE', 'evtg_publisher.log') LOG_FILE = os.getenv('LOG_FILE', 'evtg_publisher.log')
EVENT_POST_DELAY = int(os.getenv('EVENT_POST_DELAY', 0)) # Задержка в минутах EVENT_POST_DELAY = int(os.getenv('EVENT_POST_DELAY', 0)) # Задержка в минутах
WORKMODE = os.getenv('WORKMODE', 'ZILANT') # Режим работы: ZILANT или VOLK
# Параметры длины сообщений # Параметры длины сообщений
MAX_CAPTION_LENGTH = int(os.getenv('MAX_CAPTION_LENGTH', 1000)) MAX_CAPTION_LENGTH = int(os.getenv('MAX_CAPTION_LENGTH', 1000))
@@ -230,23 +231,39 @@ async def tg_post_event_by_id(id_event):
cursorclass=pymysql.cursors.DictCursor cursorclass=pymysql.cursors.DictCursor
) )
# Вычисляем время, до которого должно быть изменено событие для публикации # Проверка времени изменения только в режиме ZILANT
modified_before = datetime.now(timezone.utc) - timedelta(minutes=EVENT_POST_DELAY)
with conn.cursor() as cursor: with conn.cursor() as cursor:
cursor.execute(""" if WORKMODE == "ZILANT":
SELECT id_event, number, tags, unit_name, name, about, about_social_picture, tg_message_id # Вычисляем время, до которого должно быть изменено событие для публикации
FROM events modified_before = datetime.now(timezone.utc) - timedelta(minutes=EVENT_POST_DELAY)
WHERE id_event = %s
AND marked_to_publication = True cursor.execute("""
AND is_posted_tg = False SELECT id_event, number, tags, unit_name, name, about, about_social_picture, tg_message_id
AND modified <= %s FROM events
""", (id_event, modified_before)) WHERE id_event = %s
event = cursor.fetchone() AND marked_to_publication = True
AND is_posted_tg = False
AND modified <= %s
""", (id_event, modified_before))
event = cursor.fetchone()
if not event: if not event:
logger.info(f"Событие ID {id_event} не найдено, уже опубликовано или изменено менее чем {EVENT_POST_DELAY} минут назад") logger.info(f"Событие ID {id_event} не найдено, уже опубликовано или изменено менее чем {EVENT_POST_DELAY} минут назад")
return return
else:
# В режиме VOLK проверка времени не выполняется
cursor.execute("""
SELECT id_event, number, tags, unit_name, name, about, about_social_picture, tg_message_id
FROM events
WHERE id_event = %s
AND marked_to_publication = True
AND is_posted_tg = False
""", (id_event,))
event = cursor.fetchone()
if not event:
logger.info(f"Событие ID {id_event} не найдено или уже опубликовано")
return
old_message_id = event.get('tg_message_id') # Сохраняем старый ID сообщения old_message_id = event.get('tg_message_id') # Сохраняем старый ID сообщения
bot = Bot(token=BOT_TOKEN) bot = Bot(token=BOT_TOKEN)
@@ -299,18 +316,29 @@ async def tg_post_all_events():
cursorclass=pymysql.cursors.DictCursor cursorclass=pymysql.cursors.DictCursor
) )
# Вычисляем время, до которого должно быть изменено событие для публикации
modified_before = datetime.now(timezone.utc) - timedelta(minutes=EVENT_POST_DELAY)
with conn.cursor() as cursor: with conn.cursor() as cursor:
cursor.execute(""" # Проверка времени изменения только в режиме ZILANT
SELECT id_event if WORKMODE == "ZILANT":
FROM events # Вычисляем время, до которого должно быть изменено событие для публикации
WHERE marked_to_publication = True modified_before = datetime.now(timezone.utc) - timedelta(minutes=EVENT_POST_DELAY)
AND is_posted_tg = False
AND modified <= %s cursor.execute("""
LIMIT 5 SELECT id_event
""", (modified_before,)) FROM events
WHERE marked_to_publication = True
AND is_posted_tg = False
AND modified <= %s
LIMIT 5
""", (modified_before,))
else:
# В режиме VOLK проверка времени не выполняется
cursor.execute("""
SELECT id_event
FROM events
WHERE marked_to_publication = True
AND is_posted_tg = False
LIMIT 5
""")
events = cursor.fetchall() events = cursor.fetchall()
event_count = 0 event_count = 0
+1 -8
View File
@@ -172,18 +172,14 @@ def load_categories():
try: try:
desc_url = VOLK_CATEGORY_DESC_PREFIX + category_id desc_url = VOLK_CATEGORY_DESC_PREFIX + category_id
log_message(f"Запрос описания для категории {category_id} из {desc_url}") log_message(f"Запрос описания для категории {category_id} из {desc_url}")
log_message("отладочное сообщение для проверки вывода в лог-файл")
desc_response = None desc_response = None
try: try:
# Добавляем таймаут для избежания зависаний (30 секунд) # Добавляем таймаут для избежания зависаний (30 секунд)
from urllib.request import Request from urllib.request import Request
req = Request(desc_url, headers={'User-Agent': 'Mozilla/5.0 (Telefaust)'}) req = Request(desc_url, headers={'User-Agent': 'Mozilla/5.0 (Telefaust)'})
log_message(f"request response = {req}", "DEBUG") log_message(f"request response = {req}", "DEBUG")
safe_log_direct("run urlopen", "DEBUG")
response = urlopen(req, timeout=30) response = urlopen(req, timeout=30)
safe_log_direct("done urlopen", "ERROR")
log_message("urlopen успешно выполнен")
except (URLError, HTTPError, OSError, socket.gaierror, socket.timeout, ConnectionError) as e: except (URLError, HTTPError, OSError, socket.gaierror, socket.timeout, ConnectionError) as e:
# Используем безопасное логирование для критических ошибок # Используем безопасное логирование для критических ошибок
safe_log_direct("ПЕРЕХВАЧЕНА СЕТЕВАЯ ОШИБКА urlopen", "ERROR") safe_log_direct("ПЕРЕХВАЧЕНА СЕТЕВАЯ ОШИБКА urlopen", "ERROR")
@@ -225,10 +221,8 @@ def load_categories():
with response: with response:
# Явно указываем кодировку UTF-8 при декодировании # Явно указываем кодировку UTF-8 при декодировании
raw_data = response.read() raw_data = response.read()
log_message("raw data read")
try: try:
decoded_data = raw_data.decode('utf-8') decoded_data = raw_data.decode('utf-8')
log_message("data decoded")
except UnicodeDecodeError as e: except UnicodeDecodeError as e:
error_msg = f"Ошибка декодирования ответа для категории {category_id}: {e}. Попытка декодирования как latin-1." error_msg = f"Ошибка декодирования ответа для категории {category_id}: {e}. Попытка декодирования как latin-1."
log_message(error_msg, "WARNING") log_message(error_msg, "WARNING")
@@ -236,7 +230,6 @@ def load_categories():
try: try:
desc_response = json.loads(decoded_data) desc_response = json.loads(decoded_data)
log_message("json loaded")
except json.JSONDecodeError as e: except json.JSONDecodeError as e:
error_msg = f"Ошибка парсинга JSON для категории {category_id}: {e}. Первые 500 символов ответа: {decoded_data[:500]}" error_msg = f"Ошибка парсинга JSON для категории {category_id}: {e}. Первые 500 символов ответа: {decoded_data[:500]}"
log_message(error_msg, "ERROR") log_message(error_msg, "ERROR")