Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 3 additions & 10 deletions src/python_response_time/core/logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,6 @@

from loguru import logger

log_format = (
"<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
"<level>{level: <8}</level> | "
"<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - "
"<level>{message}</level>"
)


def setup_logger(level: str = "INFO"):
"""Configure and return a Loguru logger instance.
Expand All @@ -27,7 +20,7 @@ def setup_logger(level: str = "INFO"):
if level.upper() == "SILENT":
logger.add(
"app.log",
format=log_format,
serialize=True,
level="ERROR",
rotation="1 MB",
retention="10 days",
Expand All @@ -36,15 +29,15 @@ def setup_logger(level: str = "INFO"):
else:
logger.add(
sys.stdout,
format=log_format,
serialize=True,
level=level,
backtrace=True,
diagnose=True,
enqueue=True,
)
logger.add(
"app.log",
format=log_format,
serialize=True,
level=level,
rotation="1 MB",
retention="10 days",
Expand Down
35 changes: 17 additions & 18 deletions src/python_response_time/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,47 +3,46 @@
import time

import requests
from loguru import logger
from rich.console import Console

from python_response_time.core import app_settings, setup_logger

setup_logger(app_settings.LOG_LEVEL)
console = Console()


def run_app():
"""Run a simple HTTP benchmark against the configured target URL."""
logger.info(f"Target URL: {app_settings.TARGET_URL}")
logger.info(f"Number of Requests: {app_settings.NUM_REQUESTS}")
logger.info(f"Concurrency: {app_settings.CONCURRENCY}")
logger.info(f"Timeout: {app_settings.TIMEOUT} seconds")
logger.info(f"Request Delay: {app_settings.REQUEST_DELAY} seconds")
logger.info(f"SSL Verify: {app_settings.VERIFY_SSL}")
"""Run HTTP benchmark and display results via Rich."""
logger = setup_logger(app_settings.LOG_LEVEL)
console.print("[bold cyan]HTTP Benchmark Starting...[/bold cyan]")
console.print(f"Target: {app_settings.TARGET_URL}")
console.print(f"Requests: {app_settings.NUM_REQUESTS}")
console.print(f"Concurrency: {app_settings.CONCURRENCY}")
console.print(f"Timeout: {app_settings.TIMEOUT}s")
console.print(f"Delay: {app_settings.REQUEST_DELAY}s")
console.print(f"SSL Verify: {app_settings.VERIFY_SSL}\n")

session = requests.Session()

logger.info("Starting HTTP benchmark...")
console.print("[bold green]Running benchmark...[/bold green]\n")

for i in range(app_settings.NUM_REQUESTS):
start_time = time.time()

start_time = time.perf_counter()
try:
response = session.get(
str(app_settings.TARGET_URL),
timeout=app_settings.TIMEOUT,
verify=app_settings.VERIFY_SSL,
)
response.raise_for_status()

elapsed_time_ms = (time.time() - start_time) * 1000
elapsed_ms = (time.perf_counter() - start_time) * 1000
logger.info(
f"Request {i + 1}: {response.status_code} - {elapsed_time_ms:.2f} ms"
f"Request {i + 1}: {response.status_code} in {elapsed_ms:.2f} ms"
)

except requests.exceptions.SSLError as e:
logger.error(f"Request {i + 1} SSL error: {e}")
console.print(f"[red]Request {i + 1} SSL error: {e}[/red]")

except requests.RequestException as e:
logger.error(f"Request {i + 1} failed: {e}")
console.print(f"[red]Request {i + 1} failed: {e}[/red]")

finally:
if app_settings.REQUEST_DELAY > 0:
Expand Down
Loading