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

This commit is contained in:
2026-01-10 14:45:57 +03:00
parent d908c28b5d
commit bccf3e7717
2 changed files with 97 additions and 10 deletions
+6
View File
@@ -1050,6 +1050,12 @@ def api_publish_post(post_id):
if isinstance(result, Exception):
raise result
# Проверяем, что публикация действительно успешна (результат True)
if result is not True:
error_msg = f"Публикация поста ID: {post_id} не удалась (результат: {result})"
log_event(error_msg)
return jsonify({'success': False, 'error': error_msg}), 500
log_event(f"Публикация поста ID: {post_id} выполнена успешно")
return jsonify({'success': True})
except Exception as e:
+91 -10
View File
@@ -7,6 +7,7 @@ import html
import json
import re
import httpx
import traceback
from datetime import datetime, timezone
from dotenv import load_dotenv
from formatter import get_event_text
@@ -205,7 +206,17 @@ async def publish_to_tg(vk_post_id):
'parse_mode': 'HTML',
'disable_notification': PUBLISH_SILENTLY
}
photo_response = await httpx_client.post(send_photo_url, json=photo_payload)
try:
photo_response = await httpx_client.post(send_photo_url, json=photo_payload)
except httpx.TimeoutException as e:
logger.error(f"ТАЙМАУТ при отправке фото для записи VK ID {vk_post_id}")
logger.error(f"Тип исключения: {type(e).__name__}")
logger.error(f"Сообщение об ошибке: {str(e)}")
logger.error(f"Полная информация об исключении: {repr(e)}")
if hasattr(e, 'request'):
logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}")
logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
raise # Пробрасываем таймаут наверх
if photo_response.status_code == 200:
photo_result = photo_response.json()
@@ -235,7 +246,12 @@ async def publish_to_tg(vk_post_id):
raise
except httpx.TimeoutException as e:
logger.error(f"ТАЙМАУТ при отправке изображения для записи VK ID {vk_post_id}")
logger.error(f"Детали таймаута: {type(e).__name__}: {e}")
logger.error(f"Тип исключения: {type(e).__name__}")
logger.error(f"Сообщение об ошибке: {str(e)}")
logger.error(f"Полная информация об исключении: {repr(e)}")
if hasattr(e, 'request'):
logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}")
logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
raise # Пробрасываем таймаут наверх
except Exception as e:
logger.warning(f"Не удалось отправить изображение для записи VK ID {vk_post_id}: {e}. Отправляем текстовое сообщение.")
@@ -246,7 +262,17 @@ async def publish_to_tg(vk_post_id):
'disable_notification': PUBLISH_SILENTLY,
'disable_web_page_preview': True
}
text_response = await httpx_client.post(send_message_url, json=text_payload)
try:
text_response = await httpx_client.post(send_message_url, json=text_payload)
except httpx.TimeoutException as timeout_e:
logger.error(f"ТАЙМАУТ при отправке текста (fallback) для записи VK ID {vk_post_id}")
logger.error(f"Тип исключения: {type(timeout_e).__name__}")
logger.error(f"Сообщение об ошибке: {str(timeout_e)}")
logger.error(f"Полная информация об исключении: {repr(timeout_e)}")
if hasattr(timeout_e, 'request'):
logger.error(f"Запрос, вызвавший таймаут: {timeout_e.request.method} {timeout_e.request.url if hasattr(timeout_e.request, 'url') else 'N/A'}")
logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
raise # Пробрасываем таймаут наверх
if text_response.status_code == 200:
text_result = text_response.json()
@@ -280,7 +306,17 @@ async def publish_to_tg(vk_post_id):
'disable_notification': PUBLISH_SILENTLY,
'disable_web_page_preview': True
}
text_response = await httpx_client.post(send_message_url, json=text_payload)
try:
text_response = await httpx_client.post(send_message_url, json=text_payload)
except httpx.TimeoutException as e:
logger.error(f"ТАЙМАУТ при отправке текста для записи VK ID {vk_post_id}")
logger.error(f"Тип исключения: {type(e).__name__}")
logger.error(f"Сообщение об ошибке: {str(e)}")
logger.error(f"Полная информация об исключении: {repr(e)}")
if hasattr(e, 'request'):
logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}")
logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
raise # Пробрасываем таймаут наверх
if text_response.status_code == 200:
text_result = text_response.json()
@@ -333,7 +369,14 @@ async def publish_to_tg(vk_post_id):
'caption': final_text,
'parse_mode': 'HTML'
}
edit_caption_response = await httpx_client.post(edit_caption_url, json=edit_caption_payload)
try:
edit_caption_response = await httpx_client.post(edit_caption_url, json=edit_caption_payload)
except httpx.TimeoutException as e:
logger.error(f"ТАЙМАУТ при редактировании подписи для записи VK ID {vk_post_id}")
logger.error(f"Детали таймаута: {type(e).__name__}: {e}")
if hasattr(e, 'request'):
logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}")
raise # Пробрасываем таймаут наверх
if edit_caption_response.status_code == 200:
edit_result = edit_caption_response.json()
@@ -359,7 +402,12 @@ async def publish_to_tg(vk_post_id):
raise
except httpx.TimeoutException as e:
logger.error(f"ТАЙМАУТ при редактировании подписи для записи VK ID {vk_post_id}")
logger.error(f"Детали таймаута: {type(e).__name__}: {e}")
logger.error(f"Тип исключения: {type(e).__name__}")
logger.error(f"Сообщение об ошибке: {str(e)}")
logger.error(f"Полная информация об исключении: {repr(e)}")
if hasattr(e, 'request'):
logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}")
logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
raise # Пробрасываем таймаут наверх
except Exception as e:
logger.warning(f"Не удалось отредактировать подпись для записи VK ID {vk_post_id}: {e}. Пробуем отредактировать текстовое сообщение.")
@@ -370,7 +418,17 @@ async def publish_to_tg(vk_post_id):
'parse_mode': 'HTML',
'disable_web_page_preview': True
}
edit_text_response = await httpx_client.post(edit_text_url, json=edit_text_payload)
try:
edit_text_response = await httpx_client.post(edit_text_url, json=edit_text_payload)
except httpx.TimeoutException as timeout_e:
logger.error(f"ТАЙМАУТ при редактировании текста (fallback) для записи VK ID {vk_post_id}")
logger.error(f"Тип исключения: {type(timeout_e).__name__}")
logger.error(f"Сообщение об ошибке: {str(timeout_e)}")
logger.error(f"Полная информация об исключении: {repr(timeout_e)}")
if hasattr(timeout_e, 'request'):
logger.error(f"Запрос, вызвавший таймаут: {timeout_e.request.method} {timeout_e.request.url if hasattr(timeout_e.request, 'url') else 'N/A'}")
logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
raise # Пробрасываем таймаут наверх
if edit_text_response.status_code == 200:
edit_result = edit_text_response.json()
@@ -400,7 +458,17 @@ async def publish_to_tg(vk_post_id):
'parse_mode': 'HTML',
'disable_web_page_preview': True
}
edit_text_response = await httpx_client.post(edit_text_url, json=edit_text_payload)
try:
edit_text_response = await httpx_client.post(edit_text_url, json=edit_text_payload)
except httpx.TimeoutException as e:
logger.error(f"ТАЙМАУТ при редактировании текста для записи VK ID {vk_post_id}")
logger.error(f"Тип исключения: {type(e).__name__}")
logger.error(f"Сообщение об ошибке: {str(e)}")
logger.error(f"Полная информация об исключении: {repr(e)}")
if hasattr(e, 'request'):
logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}")
logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
raise # Пробрасываем таймаут наверх
if edit_text_response.status_code == 200:
edit_result = edit_text_response.json()
@@ -451,7 +519,17 @@ async def publish_to_tg(vk_post_id):
else:
poll_payload['close_date'] = post['poll_end_date']
poll_response = await httpx_client.post(send_poll_url, json=poll_payload)
try:
poll_response = await httpx_client.post(send_poll_url, json=poll_payload)
except httpx.TimeoutException as e:
logger.error(f"ТАЙМАУТ при отправке опроса для записи VK ID {vk_post_id}")
logger.error(f"Тип исключения: {type(e).__name__}")
logger.error(f"Сообщение об ошибке: {str(e)}")
logger.error(f"Полная информация об исключении: {repr(e)}")
if hasattr(e, 'request'):
logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}")
logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
raise # Пробрасываем таймаут наверх
if poll_response.status_code == 200:
poll_result = poll_response.json()
@@ -516,9 +594,12 @@ async def publish_to_tg(vk_post_id):
raise
except httpx.TimeoutException as e:
logger.error(f"ТАЙМАУТ при публикации записи VK ID {vk_post_id}")
logger.error(f"Детали таймаута: {type(e).__name__}: {e}")
logger.error(f"Тип исключения: {type(e).__name__}")
logger.error(f"Сообщение об ошибке: {str(e)}")
logger.error(f"Полная информация об исключении: {repr(e)}")
if hasattr(e, 'request'):
logger.error(f"Запрос, вызвавший таймаут: {e.request.method} {e.request.url if hasattr(e.request, 'url') else 'N/A'}")
logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
# Убеждаемся, что БД не обновляется при таймауте
return False
except Exception as e: