[ВОЛК] загрузка всех событий по всем категориям и соответствующая кнопка
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
+21
-1
@@ -24,7 +24,7 @@ from tg_publish import publish_to_tg_all, publish_to_tg
|
||||
from db_update_shortname import ai_shortname_all, generate_ai_shortname
|
||||
from evtg_publish import tg_post_event_by_id, tg_post_all_events
|
||||
from zk_load import load_json_all
|
||||
from volk_load import load_categories
|
||||
from volk_load import load_categories, load_all_events
|
||||
|
||||
# Загружаем настройки из .env
|
||||
load_dotenv()
|
||||
@@ -1092,6 +1092,26 @@ def api_load_categories():
|
||||
log_event(error_msg)
|
||||
return jsonify({'success': False, 'error': error_msg}), 500
|
||||
|
||||
@bp.route('/api/run_volk_rescan', methods=['POST'])
|
||||
@login_required
|
||||
def api_run_volk_rescan():
|
||||
try:
|
||||
# Проверка режима работы
|
||||
workmode = os.getenv('WORKMODE', 'ZILANT')
|
||||
if workmode != 'VOLK':
|
||||
error_msg = "Рескан ВОЛК доступен только в режиме VOLK"
|
||||
log_event(error_msg)
|
||||
return jsonify({'success': False, 'error': error_msg}), 403
|
||||
|
||||
log_event("Запуск рескана ВОЛК...")
|
||||
load_all_events()
|
||||
log_event("Рескан ВОЛК выполнен успешно")
|
||||
return jsonify({'success': True})
|
||||
except Exception as e:
|
||||
error_msg = f"Ошибка при рескане ВОЛК: {str(e)}"
|
||||
log_event(error_msg)
|
||||
return jsonify({'success': False, 'error': error_msg}), 500
|
||||
|
||||
@bp.route('/api/publish_event/<int:event_id>', methods=['POST'])
|
||||
@login_required
|
||||
def api_publish_event(event_id):
|
||||
|
||||
@@ -557,6 +557,11 @@
|
||||
<!-- Вкладка событий -->
|
||||
<div class="tab-pane fade" id="events-tab-pane" role="tabpanel" aria-labelledby="events-tab" tabindex="0">
|
||||
<div class="top-action-buttons d-flex align-items-center">
|
||||
{% if g.workmode == 'VOLK' %}
|
||||
<button class="btn btn-primary me-2" id="volk-rescan-btn">
|
||||
<i class="fas fa-search me-1"></i> Рескан ВОЛК
|
||||
</button>
|
||||
{% endif %}
|
||||
<button class="btn btn-success" id="add-event-btn">
|
||||
<i class="fas fa-plus me-1"></i> Добавить событие
|
||||
</button>
|
||||
@@ -862,6 +867,12 @@
|
||||
}, 50);
|
||||
});
|
||||
// Новые обработчики для кнопок событий
|
||||
{% if g.workmode == 'VOLK' %}
|
||||
const volkRescanBtn = document.getElementById('volk-rescan-btn');
|
||||
if (volkRescanBtn) {
|
||||
volkRescanBtn.addEventListener('click', runVolkRescan);
|
||||
}
|
||||
{% endif %}
|
||||
{% if g.workmode == 'ZILANT' %}
|
||||
const zkRescanBtn = document.getElementById('zk-rescan-btn');
|
||||
if (zkRescanBtn) {
|
||||
@@ -962,6 +973,32 @@
|
||||
alert('Произошла ошибка при рескане Зилант-сервера');
|
||||
});
|
||||
}
|
||||
// Рескан ВОЛК
|
||||
function runVolkRescan() {
|
||||
showProcessingMessage("Рескан ВОЛК...");
|
||||
fetch(`${PREFIX}/api/run_volk_rescan`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Requested-With': 'XMLHttpRequest'
|
||||
}
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
hideProcessingMessage();
|
||||
if (data.success) {
|
||||
alert('Рескан ВОЛК выполнен успешно!');
|
||||
loadEvents();
|
||||
} else {
|
||||
alert('Ошибка рескана ВОЛК: ' + (data.error || 'неизвестная ошибка'));
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
hideProcessingMessage();
|
||||
console.error('Ошибка рескана ВОЛК:', error);
|
||||
alert('Произошла ошибка при рескане ВОЛК');
|
||||
});
|
||||
}
|
||||
// Функция для публикации всех событий
|
||||
function publishAllEvents() {
|
||||
const currentEventId = selectedEventId;
|
||||
|
||||
@@ -378,6 +378,64 @@ def load_events_by_category(category_id):
|
||||
cursor.close()
|
||||
connection.close()
|
||||
|
||||
def load_all_events():
|
||||
"""Экспортируемая функция для загрузки всех событий по всем категориям"""
|
||||
try:
|
||||
log_message("Начало загрузки всех событий по всем категориям")
|
||||
|
||||
# Подключение к базе данных
|
||||
connection = mysql.connector.connect(
|
||||
host=MDB_HOST,
|
||||
user=MDB_USER,
|
||||
password=MDB_PW,
|
||||
database=MDBASE
|
||||
)
|
||||
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
|
||||
# Получаем список всех категорий
|
||||
cursor.execute("SELECT ID FROM categories ORDER BY ID")
|
||||
categories = cursor.fetchall()
|
||||
|
||||
if not categories:
|
||||
log_message("В базе данных нет категорий для загрузки событий", "WARNING")
|
||||
cursor.close()
|
||||
connection.close()
|
||||
return
|
||||
|
||||
log_message(f"Найдено {len(categories)} категорий для обработки")
|
||||
|
||||
# Закрываем соединение перед вызовами load_events_by_category
|
||||
# (так как она создает свое соединение)
|
||||
cursor.close()
|
||||
connection.close()
|
||||
|
||||
# Загружаем события для каждой категории
|
||||
processed_count = 0
|
||||
for category in categories:
|
||||
category_id = category['ID']
|
||||
try:
|
||||
log_message(f"Обработка категории {category_id} ({processed_count + 1}/{len(categories)})")
|
||||
load_events_by_category(category_id)
|
||||
processed_count += 1
|
||||
except Exception as e:
|
||||
error_msg = f"Ошибка при загрузке событий для категории {category_id}: {e}"
|
||||
log_message(error_msg, "ERROR")
|
||||
print(error_msg)
|
||||
# Продолжаем обработку других категорий
|
||||
continue
|
||||
|
||||
log_message(f"Завершение загрузки всех событий. Обработано категорий: {processed_count}/{len(categories)}")
|
||||
|
||||
except Error as e:
|
||||
error_msg = f"Ошибка базы данных при загрузке всех событий: {e}"
|
||||
log_message(error_msg, "ERROR")
|
||||
print(error_msg)
|
||||
except Exception as e:
|
||||
error_msg = f"Общая ошибка при загрузке всех событий: {e}"
|
||||
log_message(error_msg, "ERROR")
|
||||
print(error_msg)
|
||||
|
||||
if __name__ == "__main__":
|
||||
load_categories()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user