Conversation
KonstantinKondratenko
left a comment
There was a problem hiding this comment.
Нужно исправить, после исправлений запустить на qemu под risc-v, приоверить, что работает
|
|
||
| def check(): | ||
| parser = argparse.ArgumentParser( | ||
| description="Генератор трафика с контролем RPS и таймаутами", |
There was a problem hiding this comment.
давайте на английском языке писать
|
|
||
| if args.quantity <= 0: | ||
| print("Ошибка: количество запросов должно быть положительным числом") | ||
| sys.exit(1) | ||
| if args.rps <= 0: | ||
| print("Ошибка: RPS должно быть положительным числом, используем значение по умолчанию 10") | ||
| args.rps = 10 | ||
| if args.timeout <= 0: | ||
| print("Ошибка: таймаут должен быть положительным числом, используем значение по умолчанию 5") | ||
| args.timeout = 5 | ||
| if args.max_concurrent <= 0: | ||
| print("Ошибка: количество одновременно выполеняемых задач должно быть положительным числом, используем значение по умолчанию 50") | ||
| args.max_concurrent = 50 |
There was a problem hiding this comment.
аналогично про язык
| process = await asyncio.create_subprocess_exec('./generate_traf.sh', '1',\ | ||
| site, stdout=asyncio.subprocess.DEVNULL, stderr=asyncio.subprocess.DEVNULL) | ||
| await asyncio.wait_for(process.communicate(), timeout=timeout) |
There was a problem hiding this comment.
почему не использовать request -- зачем именно bash скрипты отдельный и subprocess
| await process.wait() | ||
| return site, 1 | ||
|
|
||
| def log(quantity, rps, timeout, max_concurrent, results): |
There was a problem hiding this comment.
для логов есть модуль logging -- лучше использовать его, а не писать с нуля
| Асинхронный генератор трафика для тестирования сетевых подключений. Запускает заданное количество запросов к случайным сайтам из списка с контролем RPS (requests per second), таймаутами и ограничением параллельных задач. Результаты сохраняются в JSON-лог. | ||
|
|
||
|
|
||
| generate_traf.py -- основной скрипт на Python |
There was a problem hiding this comment.
нет такого скрипта
| if args.quantity <= 0: | ||
| print("Ошибка: количество запросов должно быть положительным числом") | ||
| sys.exit(1) | ||
| if args.rps <= 0: | ||
| print("Ошибка: RPS должно быть положительным числом, используем значение по умолчанию 10") | ||
| args.rps = 10 | ||
| if args.timeout <= 0: | ||
| print("Ошибка: таймаут должен быть положительным числом, используем значение по умолчанию 5") | ||
| args.timeout = 5 | ||
| if args.max_concurrent <= 0: | ||
| print("Ошибка: количество одновременно выполеняемых задач должно быть положительным числом, используем значение по умолчанию 50") |
There was a problem hiding this comment.
странная логика -- почему некорректный quantity приводит к sys.exit, а все остальное нет?
Давайте одной придерживаться логики
| except asyncio.TimeoutError: | ||
| process.kill() | ||
| await process.wait() | ||
| return site, 1 |
There was a problem hiding this comment.
магисческие числа -- плохо, они тут не очевидны, сделайте какой-нибудь enum, чтобы было понятно что это за абстрактные +-1 0 и тд
| "--quantity", "-q", | ||
| type=int, | ||
| default=10, | ||
| help="Количество запросов (обязательный параметр)" |
There was a problem hiding this comment.
почему вы пишете, что параметр обязательный, при этом у него default=10?
| import json | ||
|
|
||
|
|
||
| def check(): |
There was a problem hiding this comment.
плохой нейминг -- у вас функция по сути парсер аргументов и чтение файла, почему она называется check?
check_one и check по логике названия должны быть примрено одинаковые, а на деле разные
|
|
||
| tasks = [] | ||
| for _ in range(quantity): | ||
| site = random.choice(sites) | ||
| async def task_wrapper(): | ||
| async with semaphore: | ||
| return await check_one(site, timeout) | ||
|
|
||
| task = asyncio.create_task(task_wrapper()) | ||
| tasks.append(task) | ||
|
|
||
| await asyncio.sleep(delay) | ||
|
|
||
| results = await asyncio.gather(*tasks, return_exceptions=True) | ||
|
|
There was a problem hiding this comment.
У вас тут замыкание, при запуске с параметрами
python3 generate_rand_traf.py --quantity 10 --rps 10 --max_concurrent 1 --timeout 10 запросы будут на два адреса -- на 1 случайные и (quantity-1) один и тот же
No description provided.