locust 2.42.7.dev7__tar.gz → 2.42.7.dev9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/PKG-INFO +1 -1
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/_version.py +2 -2
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/stats.py +40 -30
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/.gitignore +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/LICENSE +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/README.md +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/hatch_build.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/__init__.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/__main__.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/argument_parser.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/clients.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/__init__.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/dns.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/fasthttp.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/milvus.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/mongodb.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/mqtt.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/oai.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/postgres.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/contrib/socketio.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/debug.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/dispatch.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/env.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/event.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/exception.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/html.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/input_events.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/log.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/main.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/opentelemetry.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/py.typed +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/rpc/__init__.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/rpc/protocol.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/rpc/zmqrpc.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/runners.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/shape.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/user/__init__.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/user/inspectuser.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/user/markov_taskset.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/user/sequential_taskset.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/user/task.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/user/users.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/user/wait_time.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/__init__.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/cache.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/date.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/deprecation.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/directory.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/exception_handler.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/load_locustfile.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/rounding.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/timespan.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/util/url.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/web.py +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/favicon-dark.png +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/favicon-light.png +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/graphs-dark.png +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/graphs-light.png +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/index-Mvj-aOsx.js +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/terminal.gif +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/testruns-dark.png +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/assets/testruns-light.png +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/auth.html +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/index.html +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/locust/webui/dist/report.html +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/pyproject.toml +0 -0
- {locust-2.42.7.dev7 → locust-2.42.7.dev9}/pytest_locust/plugin.py +0 -0
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '2.42.7.
|
|
32
|
-
__version_tuple__ = version_tuple = (2, 42, 7, '
|
|
31
|
+
__version__ = version = '2.42.7.dev9'
|
|
32
|
+
__version_tuple__ = version_tuple = (2, 42, 7, 'dev9')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -23,13 +23,14 @@ from .util.rounding import proper_round
|
|
|
23
23
|
if TYPE_CHECKING:
|
|
24
24
|
from collections.abc import Callable, Iterable
|
|
25
25
|
from types import FrameType
|
|
26
|
-
from typing import Any
|
|
26
|
+
from typing import Any
|
|
27
27
|
|
|
28
28
|
from .env import Environment
|
|
29
29
|
from .event import Events
|
|
30
30
|
from .runners import Runner
|
|
31
31
|
|
|
32
32
|
console_logger = logging.getLogger("locust.stats_logger")
|
|
33
|
+
logger = logging.getLogger(__name__)
|
|
33
34
|
|
|
34
35
|
"""Space in table for request name. Auto shrink it if terminal is small (<160 characters)"""
|
|
35
36
|
try:
|
|
@@ -894,9 +895,12 @@ def get_error_report_summary(stats) -> list[str]:
|
|
|
894
895
|
|
|
895
896
|
def stats_printer(stats: RequestStats) -> Callable[[], None]:
|
|
896
897
|
def stats_printer_func() -> None:
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
898
|
+
try:
|
|
899
|
+
while True:
|
|
900
|
+
print_stats(stats)
|
|
901
|
+
gevent.sleep(CONSOLE_STATS_INTERVAL_SEC)
|
|
902
|
+
except KeyboardInterrupt as e:
|
|
903
|
+
logger.debug(e, exc_info=True)
|
|
900
904
|
|
|
901
905
|
return stats_printer_func
|
|
902
906
|
|
|
@@ -929,14 +933,17 @@ def update_stats_history(runner: Runner, timestamp: str | None = None) -> None:
|
|
|
929
933
|
|
|
930
934
|
def stats_history(runner: Runner) -> None:
|
|
931
935
|
"""Save current stats info to history for charts of report."""
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
936
|
+
try:
|
|
937
|
+
while True:
|
|
938
|
+
if not runner.stats.total.use_response_times_cache:
|
|
939
|
+
break
|
|
935
940
|
|
|
936
|
-
|
|
937
|
-
|
|
941
|
+
if runner.state != "ready" and runner.state != "stopped":
|
|
942
|
+
update_stats_history(runner)
|
|
938
943
|
|
|
939
|
-
|
|
944
|
+
gevent.sleep(HISTORY_STATS_INTERVAL_SEC)
|
|
945
|
+
except KeyboardInterrupt as e:
|
|
946
|
+
logger.debug(e, exc_info=True)
|
|
940
947
|
|
|
941
948
|
|
|
942
949
|
class StatsCSV:
|
|
@@ -1087,7 +1094,7 @@ class StatsCSVFileWriter(StatsCSV):
|
|
|
1087
1094
|
def __call__(self) -> None:
|
|
1088
1095
|
self.stats_writer()
|
|
1089
1096
|
|
|
1090
|
-
def stats_writer(self) ->
|
|
1097
|
+
def stats_writer(self) -> None:
|
|
1091
1098
|
"""Writes all the csv files for the locust run."""
|
|
1092
1099
|
|
|
1093
1100
|
# Write header row for all files and save position for non-append files
|
|
@@ -1104,31 +1111,34 @@ class StatsCSVFileWriter(StatsCSV):
|
|
|
1104
1111
|
|
|
1105
1112
|
# Continuously write date rows for all files
|
|
1106
1113
|
last_flush_time: float = 0.0
|
|
1107
|
-
|
|
1108
|
-
|
|
1114
|
+
try:
|
|
1115
|
+
while True:
|
|
1116
|
+
now = time.time()
|
|
1109
1117
|
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1118
|
+
self.requests_csv_filehandle.seek(requests_csv_data_start)
|
|
1119
|
+
self._requests_data_rows(self.requests_csv_writer)
|
|
1120
|
+
self.requests_csv_filehandle.truncate()
|
|
1113
1121
|
|
|
1114
|
-
|
|
1122
|
+
self._stats_history_data_rows(self.stats_history_csv_writer, now)
|
|
1115
1123
|
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1124
|
+
self.failures_csv_filehandle.seek(self.failures_csv_data_start)
|
|
1125
|
+
self._failures_data_rows(self.failures_csv_writer)
|
|
1126
|
+
self.failures_csv_filehandle.truncate()
|
|
1119
1127
|
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1128
|
+
self.exceptions_csv_filehandle.seek(self.exceptions_csv_data_start)
|
|
1129
|
+
self._exceptions_data_rows(self.exceptions_csv_writer)
|
|
1130
|
+
self.exceptions_csv_filehandle.truncate()
|
|
1123
1131
|
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1132
|
+
if now - last_flush_time > CSV_STATS_FLUSH_INTERVAL_SEC:
|
|
1133
|
+
self.requests_flush()
|
|
1134
|
+
self.stats_history_flush()
|
|
1135
|
+
self.failures_flush()
|
|
1136
|
+
self.exceptions_flush()
|
|
1137
|
+
last_flush_time = now
|
|
1130
1138
|
|
|
1131
|
-
|
|
1139
|
+
gevent.sleep(CSV_STATS_INTERVAL_SEC)
|
|
1140
|
+
except KeyboardInterrupt as e:
|
|
1141
|
+
logger.debug(e, exc_info=True)
|
|
1132
1142
|
|
|
1133
1143
|
def _stats_history_data_rows(self, csv_writer: CSVWriter, now: float) -> None:
|
|
1134
1144
|
"""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|