79 lines
2.3 KiB
Python
79 lines
2.3 KiB
Python
import sys
|
|
import os
|
|
import time
|
|
from pathlib import Path
|
|
|
|
# Add project root to sys.path
|
|
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
|
if project_root not in sys.path:
|
|
sys.path.append(project_root)
|
|
|
|
from src.performance_monitor import get_monitor
|
|
from src.aggregate import build_file_items
|
|
from src.dag_engine import TrackDAG
|
|
from src.models import Ticket
|
|
|
|
def run_aggregation_profile():
|
|
monitor = get_monitor()
|
|
base_dir = Path(project_root)
|
|
# Get 30 python files for profiling
|
|
files = [str(p.relative_to(base_dir)) for p in base_dir.glob("src/*.py")][:30]
|
|
with monitor.scope("aggregation"):
|
|
build_file_items(base_dir, files)
|
|
|
|
def run_dag_profile():
|
|
monitor = get_monitor()
|
|
tickets = []
|
|
# Create 60 tickets with multiple dependencies to simulate complexity
|
|
for i in range(60):
|
|
deps = []
|
|
if i > 0: deps.append(f"ticket_{i-1}")
|
|
if i > 5: deps.append(f"ticket_{i-5}")
|
|
if i > 10: deps.append(f"ticket_{i-10}")
|
|
tickets.append(Ticket(
|
|
id=f"ticket_{i}",
|
|
description=f"Ticket {i}",
|
|
depends_on=deps
|
|
))
|
|
dag = TrackDAG(tickets)
|
|
with monitor.scope("dag_operations"):
|
|
# Run operations 50 times per profile call
|
|
for _ in range(50):
|
|
dag.topological_sort()
|
|
dag.has_cycle()
|
|
|
|
def print_metrics():
|
|
monitor = get_monitor()
|
|
metrics = monitor.get_metrics()
|
|
print(f"{'Component':<30} | {'Avg (ms)':<12} | {'Count':<8} | {'Max (ms)':<12} | {'Min (ms)':<12}")
|
|
print("-" * 85)
|
|
# Collect all base component names
|
|
components = set()
|
|
for key in metrics.keys():
|
|
if key.startswith("time_") and key.endswith("_ms") and not key.endswith("_avg"):
|
|
components.add(key[5:-3])
|
|
|
|
for comp in sorted(list(components)):
|
|
avg = metrics.get(f"time_{comp}_ms_avg", 0.0)
|
|
count = int(metrics.get(f"count_{comp}", 0))
|
|
max_val = metrics.get(f"max_{comp}_ms", 0.0)
|
|
min_val = metrics.get(f"min_{comp}_ms", 0.0)
|
|
print(f"{comp:<30} | {avg:<12.4f} | {count:<8} | {max_val:<12.4f} | {min_val:<12.4f}")
|
|
|
|
def main():
|
|
monitor = get_monitor()
|
|
monitor.enabled = True
|
|
print("Starting Profiling Baseline...")
|
|
print("Running aggregation profile (5 iterations)...")
|
|
for _ in range(5):
|
|
run_aggregation_profile()
|
|
print("Running DAG profile (5 iterations)...")
|
|
for _ in range(5):
|
|
run_dag_profile()
|
|
print("\nBaseline Performance Metrics:")
|
|
print_metrics()
|
|
monitor.stop()
|
|
|
|
if __name__ == "__main__":
|
|
main()
|