Skip to content

Commit

Permalink
Merge pull request #2709 from andrewbaldwin44/bugfix/2706
Browse files Browse the repository at this point in the history
Update Stats History on HTML Report
  • Loading branch information
cyberw committed May 11, 2024
2 parents 8fd6901 + 96d3ab5 commit 12e4f57
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 18 deletions.
3 changes: 2 additions & 1 deletion locust/html.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

from . import stats as stats_module
from .runners import STATE_STOPPED, STATE_STOPPING, MasterRunner
from .stats import sort_stats
from .stats import sort_stats, update_stats_history
from .user.inspectuser import get_ratio

PERCENTILES_FOR_HTML_REPORT = [0.50, 0.6, 0.7, 0.8, 0.9, 0.95, 0.99, 1.0]
Expand Down Expand Up @@ -54,6 +54,7 @@ def get_html_report(
{**exc, "nodes": ", ".join(exc["nodes"])} for exc in environment.runner.exceptions.values()
]

update_stats_history(environment.runner)
history = stats.history

static_js = []
Expand Down
38 changes: 21 additions & 17 deletions locust/stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -907,28 +907,32 @@ def sort_stats(stats: dict[Any, S]) -> list[S]:
return [stats[key] for key in sorted(stats.keys())]


def update_stats_history(runner: Runner) -> None:
stats = runner.stats
current_response_time_percentiles = {
f"response_time_percentile_{percentile}": stats.total.get_current_response_time_percentile(percentile) or 0
for percentile in PERCENTILES_TO_CHART
}

r = {
**current_response_time_percentiles,
"time": datetime.datetime.now(tz=datetime.timezone.utc).strftime("%H:%M:%S"),
"current_rps": stats.total.current_rps or 0,
"current_fail_per_sec": stats.total.current_fail_per_sec or 0,
"total_avg_response_time": stats.total.avg_response_time,
"user_count": runner.user_count or 0,
}
stats.history.append(r)


def stats_history(runner: Runner) -> None:
"""Save current stats info to history for charts of report."""
while True:
stats = runner.stats
if not stats.total.use_response_times_cache:
if not runner.stats.total.use_response_times_cache:
break
if runner.state != "stopped":
current_response_time_percentiles = {
f"response_time_percentile_{percentile}": stats.total.get_current_response_time_percentile(percentile)
or 0
for percentile in PERCENTILES_TO_CHART
}

r = {
**current_response_time_percentiles,
"time": datetime.datetime.now(tz=datetime.timezone.utc).strftime("%H:%M:%S"),
"current_rps": stats.total.current_rps or 0,
"current_fail_per_sec": stats.total.current_fail_per_sec or 0,
"total_avg_response_time": stats.total.avg_response_time,
"user_count": runner.user_count or 0,
}
stats.history.append(r)
update_stats_history(runner)

gevent.sleep(HISTORY_STATS_INTERVAL_SEC)


Expand Down

0 comments on commit 12e4f57

Please sign in to comment.