[ВОЛК] загрузка всех событий по всем категориям и соответствующая кнопка
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 db_update_shortname import ai_shortname_all, generate_ai_shortname
|
||||||
from evtg_publish import tg_post_event_by_id, tg_post_all_events
|
from evtg_publish import tg_post_event_by_id, tg_post_all_events
|
||||||
from zk_load import load_json_all
|
from zk_load import load_json_all
|
||||||
from volk_load import load_categories
|
from volk_load import load_categories, load_all_events
|
||||||
|
|
||||||
# Загружаем настройки из .env
|
# Загружаем настройки из .env
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
@@ -1092,6 +1092,26 @@ def api_load_categories():
|
|||||||
log_event(error_msg)
|
log_event(error_msg)
|
||||||
return jsonify({'success': False, 'error': error_msg}), 500
|
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'])
|
@bp.route('/api/publish_event/<int:event_id>', methods=['POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def api_publish_event(event_id):
|
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="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">
|
<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">
|
<button class="btn btn-success" id="add-event-btn">
|
||||||
<i class="fas fa-plus me-1"></i> Добавить событие
|
<i class="fas fa-plus me-1"></i> Добавить событие
|
||||||
</button>
|
</button>
|
||||||
@@ -862,6 +867,12 @@
|
|||||||
}, 50);
|
}, 50);
|
||||||
});
|
});
|
||||||
// Новые обработчики для кнопок событий
|
// Новые обработчики для кнопок событий
|
||||||
|
{% if g.workmode == 'VOLK' %}
|
||||||
|
const volkRescanBtn = document.getElementById('volk-rescan-btn');
|
||||||
|
if (volkRescanBtn) {
|
||||||
|
volkRescanBtn.addEventListener('click', runVolkRescan);
|
||||||
|
}
|
||||||
|
{% endif %}
|
||||||
{% if g.workmode == 'ZILANT' %}
|
{% if g.workmode == 'ZILANT' %}
|
||||||
const zkRescanBtn = document.getElementById('zk-rescan-btn');
|
const zkRescanBtn = document.getElementById('zk-rescan-btn');
|
||||||
if (zkRescanBtn) {
|
if (zkRescanBtn) {
|
||||||
@@ -962,6 +973,32 @@
|
|||||||
alert('Произошла ошибка при рескане Зилант-сервера');
|
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() {
|
function publishAllEvents() {
|
||||||
const currentEventId = selectedEventId;
|
const currentEventId = selectedEventId;
|
||||||
|
|||||||
@@ -378,6 +378,64 @@ def load_events_by_category(category_id):
|
|||||||
cursor.close()
|
cursor.close()
|
||||||
connection.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__":
|
if __name__ == "__main__":
|
||||||
load_categories()
|
load_categories()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user