added delays

This commit is contained in:
2026-04-05 11:56:16 +03:00
parent 3b15cd5037
commit 4e357e52f8
3 changed files with 76 additions and 5 deletions

View File

@@ -0,0 +1,67 @@
import json
import pika
import os
from dotenv import load_dotenv
load_dotenv()
# --- КОНФИГУРАЦИЯ ---
RABBITMQ_URL = os.getenv("RABBITMQ_URL", "amqp://guest:guest@localhost/")
EXCHANGE_NAME = os.environ.get("RABBITMQ_EXCHANGE", "vstu_schedule")
# Параметры фейкового события
FACULTET = "fevt"
IS_NEW = False
# Формируем структуру состояния (state), которую ожидает консьюмер
mock_state = {
"excel": {
"url": "https://www.vstu.ru/upload/raspisanie/z/ОН_ФЭВТ_TEST.xls",
"sha1hash": "test_hash_8a7b6c5d4e3f2a1",
"last_changed": "2026-04-05 10:00:00",
"uniqpath": "vstu.ru/rasp?dep=fevt/TEST.xls",
# Важно: этот файл должен реально существовать на сервере fazziclay.com/api/v1/.../parsed/
# Иначе Летописец не сможет скачать JSON
"json_represent": "он_фэвт_2 курс.json",
"facultet": FACULTET
},
"sheets": {},
"actual_at": 1774475864
}
mock_payload = {
"type": "excel_file_parsed_not_same",
"is_new": IS_NEW,
"state": mock_state
}
def send_test_event():
try:
print(f"[*] Connecting to RabbitMQ: {RABBITMQ_URL}")
connection = pika.BlockingConnection(pika.URLParameters(RABBITMQ_URL))
channel = connection.channel()
# Гарантируем, что обменник существует
channel.exchange_declare(exchange=EXCHANGE_NAME, exchange_type='topic', durable=True)
routing_key = f"parser.excel_parsed.{FACULTET}"
print(f"[*] Publishing mock event to '{routing_key}'...")
channel.basic_publish(
exchange=EXCHANGE_NAME,
routing_key=routing_key,
properties=pika.BasicProperties(
content_type="application/json",
delivery_mode=2 # Persistent
),
body=json.dumps(mock_payload, ensure_ascii=False).encode('utf-8')
)
print("[+] Test event published successfully!")
connection.close()
except Exception as e:
print(f"[!] Failed to publish test event: {e}")
if __name__ == "__main__":
send_test_event()

View File

@@ -18,7 +18,7 @@ def sibling_clear_to_date(s: str):
return s.lower().replace("(последнее изменение:", "").replace(")", "").strip()
# Парсит ссылки на эксель .xls & .xlsx файлы и выдаёт их
def parse_links(facultets):
def parse_links(facultets, DEBUG_NO_LINKS_DELAY=False):
session = requests.Session()
session.headers = CaseInsensitiveDict(
{
@@ -58,9 +58,11 @@ def parse_links(facultets):
}
print("Found in vstu.ru: ", record)
EXCEL_LINKS.append(record)
st = random.randint(1, 10)/10
print(f"sleep {st}s")
time.sleep(st)
if not DEBUG_NO_LINKS_DELAY:
st = random.randint(1, 10)/10
print(f"sleep {st}s")
time.sleep(st)
return sorted(EXCEL_LINKS, key=lambda x: x['url'])

View File

@@ -26,6 +26,7 @@ EXCHANGE_NAME = os.environ.get("RABBITMQ_EXCHANGE", "vstu_schedule")
INFINITY_LOOP = os.environ.get("INFINITY_LOOP", "no").lower() in ['yes', "true"]
parser.LOGGING = LOGGING = os.environ.get("PARSER_LOGGING", "no").lower() in ['yes', "true"]
try:
connection = pika.BlockingConnection(pika.URLParameters(RABBITMQ_URL))
channel = connection.channel()
@@ -48,6 +49,7 @@ PARSED_DIR = "parsed"
DEBUG_ONE_FAC = None #'fevt'
DEBUG_NO_SAVE_STATES = False
DEBUG_NO_LINKS_DELAY = True
def parse_sheets(download_place):
to_return = {}
@@ -168,7 +170,7 @@ def run_session():
print("main(); parse links starting...")
EXCEL_LINKS = links_parser.parse_links(FACULTETS if DEBUG_ONE_FAC is None else [DEBUG_ONE_FAC])
EXCEL_LINKS = links_parser.parse_links(FACULTETS if DEBUG_ONE_FAC is None else [DEBUG_ONE_FAC], DEBUG_NO_LINKS_DELAY=DEBUG_NO_LINKS_DELAY)
if len(EXCEL_LINKS) < 5 and not DEBUG_ONE_FAC:
raise Exception("Safety exception: excel links count < 5; maybe in vstu.ru tech works")