locust 2.24.1.dev21__tar.gz → 2.24.2.dev3__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.
Files changed (349) hide show
  1. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/CHANGELOG.md +25 -0
  2. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/PKG-INFO +1 -1
  3. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/changelog.rst +5 -0
  4. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/_version.py +2 -2
  5. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/contrib/fasthttp.py +4 -1
  6. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_fasthttp.py +22 -0
  7. locust-2.24.1.dev21/locust/webui/dist/assets/index-fd3e763b.js → locust-2.24.2.dev3/locust/webui/dist/assets/index-941b6e82.js +1 -1
  8. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/dist/auth.html +1 -1
  9. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/dist/index.html +1 -1
  10. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/ExceptionsTable/ExceptionsTable.tsx +2 -2
  11. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust.egg-info/PKG-INFO +1 -1
  12. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust.egg-info/SOURCES.txt +1 -1
  13. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.coveragerc +0 -0
  14. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.dockerignore +0 -0
  15. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.git-blame-ignore-revs +0 -0
  16. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.gitattributes +0 -0
  17. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.github/CONTRIBUTING.md +0 -0
  18. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  19. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  20. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  21. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.github/workflows/stale.yml +0 -0
  22. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.github/workflows/tests.yml +0 -0
  23. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.gitignore +0 -0
  24. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.readthedocs.yaml +0 -0
  25. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.vscode/extensions.json +0 -0
  26. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.vscode/launch.json +0 -0
  27. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.vscode/launch_locust.json +0 -0
  28. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/.vscode/settings.json +0 -0
  29. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/Dockerfile +0 -0
  30. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/LICENSE +0 -0
  31. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/MANIFEST.in +0 -0
  32. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/Makefile +0 -0
  33. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/README +0 -0
  34. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/README.md +0 -0
  35. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/SECURITY.md +0 -0
  36. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/Vagrantfile +0 -0
  37. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/benchmarks/dispatch.py +0 -0
  38. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/_static/theme-overrides.css +0 -0
  39. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/api.rst +0 -0
  40. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/conf.py +0 -0
  41. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/configuration.rst +0 -0
  42. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/custom-load-shape.rst +0 -0
  43. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/developing-locust.rst +0 -0
  44. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/extending-locust.rst +0 -0
  45. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/further-reading.rst +0 -0
  46. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/history.rst +0 -0
  47. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/images/locust_workers.png +0 -0
  48. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/images/number_of_users.png +0 -0
  49. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/images/response_times.png +0 -0
  50. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/images/total_requests_per_second.png +0 -0
  51. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/images/userclass_picker_example.png +0 -0
  52. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/images/webui-running-statistics.png +0 -0
  53. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/images/webui-splash-screenshot.png +0 -0
  54. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/increase-performance.rst +0 -0
  55. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/index.rst +0 -0
  56. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/installation.rst +0 -0
  57. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/logging.rst +0 -0
  58. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/quickstart.rst +0 -0
  59. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/requirements.txt +0 -0
  60. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/retrieving-stats.rst +0 -0
  61. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/running-cloud-integration.rst +0 -0
  62. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/running-distributed.rst +0 -0
  63. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/running-in-debugger.rst +0 -0
  64. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/running-in-docker.rst +0 -0
  65. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/running-without-web-ui.rst +0 -0
  66. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/tasksets.rst +0 -0
  67. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/testing-other-systems.rst +0 -0
  68. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/use-as-lib.rst +0 -0
  69. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/what-is-locust.rst +0 -0
  70. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/docs/writing-a-locustfile.rst +0 -0
  71. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/add_command_line_argument.py +0 -0
  72. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/basic.py +0 -0
  73. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/browse_docs_sequence_test.py +0 -0
  74. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/browse_docs_test.py +0 -0
  75. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/custom_messages.py +0 -0
  76. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/custom_shape/double_wave.py +0 -0
  77. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/custom_shape/stages.py +0 -0
  78. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/custom_shape/staging_user_classes.py +0 -0
  79. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/custom_shape/step_load.py +0 -0
  80. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/custom_shape/wait_user_count.py +0 -0
  81. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/custom_wait_function.py +0 -0
  82. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/custom_xmlrpc_client/server.py +0 -0
  83. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/custom_xmlrpc_client/xmlrpc_locustfile.py +0 -0
  84. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/debugging.py +0 -0
  85. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/debugging_advanced.py +0 -0
  86. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/docker-compose/docker-compose.yml +0 -0
  87. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/dynamic_user_credentials.py +0 -0
  88. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/events.py +0 -0
  89. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/extend_modern_web_ui.py +0 -0
  90. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/extend_web_ui/extend.py +0 -0
  91. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/extend_web_ui/static/custom-stats-table.css +0 -0
  92. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/extend_web_ui/static/extend.js +0 -0
  93. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/extend_web_ui/templates/extend.html +0 -0
  94. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/fast_http_locust.py +0 -0
  95. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/grpc/grpc_user.py +0 -0
  96. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/grpc/hello.proto +0 -0
  97. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/grpc/hello_pb2.py +0 -0
  98. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/grpc/hello_pb2_grpc.py +0 -0
  99. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/grpc/hello_server.py +0 -0
  100. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/grpc/locustfile.py +0 -0
  101. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/locustfile.py +0 -0
  102. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/manual_stats_reporting.py +0 -0
  103. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/multiple_hosts.py +0 -0
  104. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/nested_inline_tasksets.py +0 -0
  105. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/rest.py +0 -0
  106. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/sdk_session_patching/session_patch_locustfile.py +0 -0
  107. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/semaphore_wait.py +0 -0
  108. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/stop_on_threshold.py +0 -0
  109. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/terraform/aws/README.md +0 -0
  110. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/terraform/aws/data_subnet.tf +0 -0
  111. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/terraform/aws/main.tf +0 -0
  112. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/terraform/aws/output.tf +0 -0
  113. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/terraform/aws/plan/basic.py +0 -0
  114. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/terraform/aws/provisioner.tf +0 -0
  115. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/terraform/aws/variables.tf +0 -0
  116. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/test_data_management.py +0 -0
  117. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/use_as_lib.py +0 -0
  118. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/vagrant/README.md +0 -0
  119. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/vagrant/supervisord.conf +0 -0
  120. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/web_ui_auth.py +0 -0
  121. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/examples/worker_index.py +0 -0
  122. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/generate_changelog.py +0 -0
  123. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/__init__.py +0 -0
  124. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/__main__.py +0 -0
  125. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/argument_parser.py +0 -0
  126. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/clients.py +0 -0
  127. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/contrib/__init__.py +0 -0
  128. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/debug.py +0 -0
  129. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/dispatch.py +0 -0
  130. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/env.py +0 -0
  131. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/event.py +0 -0
  132. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/exception.py +0 -0
  133. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/html.py +0 -0
  134. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/input_events.py +0 -0
  135. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/log.py +0 -0
  136. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/main.py +0 -0
  137. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/py.typed +0 -0
  138. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/rpc/__init__.py +0 -0
  139. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/rpc/protocol.py +0 -0
  140. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/rpc/zmqrpc.py +0 -0
  141. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/runners.py +0 -0
  142. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/shape.py +0 -0
  143. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/chart.js +0 -0
  144. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/css/application.css +0 -0
  145. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/css/application.css.map +0 -0
  146. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/css/tables.css +0 -0
  147. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/css/tables.css.map +0 -0
  148. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/echarts.common.min.js +0 -0
  149. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/img/favicon.ico +0 -0
  150. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/img/logo.png +0 -0
  151. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/img/ui-screenshot-charts.png +0 -0
  152. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/img/ui-screenshot-start-test.png +0 -0
  153. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/img/ui-screenshot-stats.png +0 -0
  154. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/img/ui-screenshot-workers.png +0 -0
  155. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/jquery-1.11.3.min.js +0 -0
  156. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/jquery.jqote2.min.js +0 -0
  157. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/jquery.tools.min.js +0 -0
  158. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/locust.js +0 -0
  159. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/sass/_base.sass +0 -0
  160. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/sass/_mixins.sass +0 -0
  161. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/sass/application.sass +0 -0
  162. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/sass/tables.sass +0 -0
  163. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/tasks.js +0 -0
  164. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/static/vintage.js +0 -0
  165. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/stats.py +0 -0
  166. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/templates/index.html +0 -0
  167. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/templates/report.html +0 -0
  168. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/templates/stats_data.html +0 -0
  169. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/__init__.py +0 -0
  170. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/fake_module1_for_env_test.py +0 -0
  171. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/fake_module2_for_env_test.py +0 -0
  172. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/mock_locustfile.py +0 -0
  173. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/mock_logging.py +0 -0
  174. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_debugging.py +0 -0
  175. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_dispatch.py +0 -0
  176. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_env.py +0 -0
  177. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_http.py +0 -0
  178. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_interruptable_task.py +0 -0
  179. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_load_locustfile.py +0 -0
  180. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_locust_class.py +0 -0
  181. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_log.py +0 -0
  182. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_main.py +0 -0
  183. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_old_wait_api.py +0 -0
  184. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_parser.py +0 -0
  185. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_runners.py +0 -0
  186. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_sequential_taskset.py +0 -0
  187. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_stats.py +0 -0
  188. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_tags.py +0 -0
  189. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_taskratio.py +0 -0
  190. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_users.py +0 -0
  191. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_util.py +0 -0
  192. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_wait_time.py +0 -0
  193. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_web.py +0 -0
  194. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/test_zmqrpc.py +0 -0
  195. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/testcases.py +0 -0
  196. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/test/util.py +0 -0
  197. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/user/__init__.py +0 -0
  198. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/user/inspectuser.py +0 -0
  199. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/user/sequential_taskset.py +0 -0
  200. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/user/task.py +0 -0
  201. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/user/users.py +0 -0
  202. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/user/wait_time.py +0 -0
  203. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/util/__init__.py +0 -0
  204. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/util/cache.py +0 -0
  205. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/util/deprecation.py +0 -0
  206. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/util/exception_handler.py +0 -0
  207. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/util/load_locustfile.py +0 -0
  208. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/util/rounding.py +0 -0
  209. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/util/timespan.py +0 -0
  210. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/web.py +0 -0
  211. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/.eslintrc +0 -0
  212. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/.gitignore +0 -0
  213. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/.prettierrc +0 -0
  214. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/auth.html +0 -0
  215. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/dev.html +0 -0
  216. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/dist/assets/favicon.ico +0 -0
  217. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/dist/assets/logo.png +0 -0
  218. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/dist/report.html +0 -0
  219. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/index.html +0 -0
  220. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/package.json +0 -0
  221. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/public/assets/favicon.ico +0 -0
  222. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/public/assets/logo.png +0 -0
  223. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/public/report.html +0 -0
  224. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/App.test.tsx +0 -0
  225. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/App.tsx +0 -0
  226. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/DataTable/DataTable.test.tsx +0 -0
  227. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/DataTable/DataTable.tsx +0 -0
  228. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/FailuresTable/FailuresTable.tsx +0 -0
  229. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/FallbackRender/FallbackRender.test.tsx +0 -0
  230. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/FallbackRender/FallbackRender.tsx +0 -0
  231. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Form/Form.tsx +0 -0
  232. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Form/Select.tsx +0 -0
  233. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Form/tests/Form.test.tsx +0 -0
  234. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Form/tests/Select.test.tsx +0 -0
  235. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Layout/Footer/About.tsx +0 -0
  236. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Layout/Footer/Footer.tsx +0 -0
  237. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Layout/Layout.tsx +0 -0
  238. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Layout/Navbar/DarkLightToggle.tsx +0 -0
  239. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Layout/Navbar/Navbar.tsx +0 -0
  240. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.test.tsx +0 -0
  241. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.tsx +0 -0
  242. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/LineChart/LineChart.test.tsx +0 -0
  243. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/LineChart/LineChart.tsx +0 -0
  244. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/LogViewer/LogViewer.tsx +0 -0
  245. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/LogViewer/tests/LogViewer.test.tsx +0 -0
  246. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/LogViewer/tests/useLogViewer.test.tsx +0 -0
  247. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/LogViewer/useLogViewer.ts +0 -0
  248. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Modal/Modal.tsx +0 -0
  249. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Reports/Reports.test.tsx +0 -0
  250. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Reports/Reports.tsx +0 -0
  251. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.test.tsx +0 -0
  252. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.tsx +0 -0
  253. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/StateButtons/EditButton.tsx +0 -0
  254. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/StateButtons/NewTestButton.tsx +0 -0
  255. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/StateButtons/ResetButton.tsx +0 -0
  256. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/StateButtons/StateButtons.tsx +0 -0
  257. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/StateButtons/StopButton.tsx +0 -0
  258. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/StateButtons/tests/ResetButton.test.tsx +0 -0
  259. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/StateButtons/tests/StateButtons.test.tsx +0 -0
  260. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/StateButtons/tests/StopButton.test.tsx +0 -0
  261. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/StatsTable/StatsTable.tsx +0 -0
  262. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/SwarmCharts/SwarmCharts.tsx +0 -0
  263. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/SwarmForm/SwarmCustomParameters.tsx +0 -0
  264. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/SwarmForm/SwarmEditForm.tsx +0 -0
  265. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/SwarmForm/SwarmForm.tsx +0 -0
  266. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/SwarmForm/SwarmUserClassPicker.tsx +0 -0
  267. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/SwarmForm/tests/SwarmCustomParameters.test.tsx +0 -0
  268. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/SwarmForm/tests/SwarmEditForm.test.tsx +0 -0
  269. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/SwarmForm/tests/SwarmForm.test.tsx +0 -0
  270. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/SwarmForm/tests/SwarmUserClassPicker.test.tsx +0 -0
  271. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/SwarmRatios/SwarmRatios.test.tsx +0 -0
  272. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/SwarmRatios/SwarmRatios.tsx +0 -0
  273. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Table/Table.test.tsx +0 -0
  274. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Table/Table.tsx +0 -0
  275. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Tabs/Tabs.constants.tsx +0 -0
  276. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Tabs/Tabs.test.tsx +0 -0
  277. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/Tabs/Tabs.tsx +0 -0
  278. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.test.tsx +0 -0
  279. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/ViewColumnSelector/ViewColumnSelector.tsx +0 -0
  280. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/components/WorkersTable/WorkersTable.tsx +0 -0
  281. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/constants/auth.ts +0 -0
  282. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/constants/swarm.ts +0 -0
  283. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/constants/theme.ts +0 -0
  284. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/global.d.ts +0 -0
  285. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/hooks/tests/useNotifications.test.tsx +0 -0
  286. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/hooks/tests/useSelecteViewColumns.test.tsx +0 -0
  287. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/hooks/tests/useSortByField.test.tsx +0 -0
  288. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/hooks/tests/useSwarmUi.test.tsx +0 -0
  289. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/hooks/useInterval.ts +0 -0
  290. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/hooks/useNotifications.ts +0 -0
  291. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/hooks/useSelectViewColumns.ts +0 -0
  292. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/hooks/useSortByField.ts +0 -0
  293. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/hooks/useSwarmUi.ts +0 -0
  294. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/index.tsx +0 -0
  295. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/pages/Auth.tsx +0 -0
  296. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/pages/Dashboard.tsx +0 -0
  297. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/pages/HtmlReport.tsx +0 -0
  298. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/pages/tests/Auth.test.tsx +0 -0
  299. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/pages/tests/Dashboard.test.tsx +0 -0
  300. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/pages/tests/HtmlReport.test.tsx +0 -0
  301. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/redux/api/swarm.ts +0 -0
  302. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/redux/hooks.ts +0 -0
  303. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/redux/slice/logViewer.slice.ts +0 -0
  304. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/redux/slice/notification.slice.ts +0 -0
  305. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/redux/slice/root.slice.ts +0 -0
  306. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/redux/slice/swarm.slice.ts +0 -0
  307. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/redux/slice/tests/ui.slice.test.ts +0 -0
  308. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/redux/slice/theme.slice.ts +0 -0
  309. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/redux/slice/ui.slice.ts +0 -0
  310. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/redux/slice/url.slice.ts +0 -0
  311. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/redux/store.ts +0 -0
  312. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/redux/utils.ts +0 -0
  313. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/styles/theme.ts +0 -0
  314. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/test/constants.ts +0 -0
  315. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/test/mocks/statsRequest.mock.ts +0 -0
  316. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/test/mocks/swarmState.mock.ts +0 -0
  317. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/test/setup.ts +0 -0
  318. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/test/testUtils.tsx +0 -0
  319. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/types/auth.types.ts +0 -0
  320. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/types/swarm.types.ts +0 -0
  321. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/types/tab.types.ts +0 -0
  322. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/types/table.types.ts +0 -0
  323. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/types/ui.types.ts +0 -0
  324. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/utils/number.ts +0 -0
  325. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/utils/object.ts +0 -0
  326. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/utils/string.ts +0 -0
  327. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/utils/tests/number.test.ts +0 -0
  328. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/utils/tests/object.test.ts +0 -0
  329. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/utils/tests/string.test.ts +0 -0
  330. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/utils/tests/url.test.ts +0 -0
  331. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/src/utils/url.ts +0 -0
  332. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/tsconfig.json +0 -0
  333. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/vite.config.ts +0 -0
  334. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/vitest.config.ts +0 -0
  335. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust/webui/yarn.lock +0 -0
  336. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust.egg-info/dependency_links.txt +0 -0
  337. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust.egg-info/entry_points.txt +0 -0
  338. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust.egg-info/not-zip-safe +0 -0
  339. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust.egg-info/requires.txt +0 -0
  340. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/locust.egg-info/top_level.txt +0 -0
  341. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/package.json +0 -0
  342. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/pyproject.toml +0 -0
  343. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/scripts/locustfile.py +0 -0
  344. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/scripts/run-disributed-headless.sh +0 -0
  345. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/scripts/run-disributed-web.sh +0 -0
  346. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/scripts/run-local-headless.sh +0 -0
  347. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/scripts/run-local-web.sh +0 -0
  348. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/setup.cfg +0 -0
  349. {locust-2.24.1.dev21 → locust-2.24.2.dev3}/tox.ini +0 -0
@@ -1,6 +1,31 @@
1
1
  # Detailed changelog
2
2
  The most important changes can also be found in [the documentation](https://docs.locust.io/en/latest/changelog.html).
3
3
 
4
+ ## [2.24.1](https://github.com/locustio/locust/tree/2.24.1) (2024-03-20)
5
+
6
+ [Full Changelog](https://github.com/locustio/locust/compare/2.24.0...2.24.1)
7
+
8
+ **Fixed bugs:**
9
+
10
+ - `'NoneType' object has no attribute 'get'` when `stream=True` in `FastHttpSession.request` [\#2640](https://github.com/locustio/locust/issues/2640)
11
+ - Locust --processes argument generating multiple html reports [\#2639](https://github.com/locustio/locust/issues/2639)
12
+ - cannot open dashboard and console error shows 'the server responded with a MIME type of "text/plain".' [\#2632](https://github.com/locustio/locust/issues/2632)
13
+ - extend web ui not working since 2.22.0 [\#2629](https://github.com/locustio/locust/issues/2629)
14
+ - Custom parameters incomplete display [\#2628](https://github.com/locustio/locust/issues/2628)
15
+
16
+ **Closed issues:**
17
+
18
+ - pyproject.toml support for locust configuration [\#2298](https://github.com/locustio/locust/issues/2298)
19
+
20
+ **Merged pull requests:**
21
+
22
+ - Do not call blocking `content` property and lazily load response [\#2643](https://github.com/locustio/locust/pull/2643) ([neiser](https://github.com/neiser))
23
+ - Dont throw an exception in FastHttpUser if a request is made with stream=True and the connection fails [\#2642](https://github.com/locustio/locust/pull/2642) ([cyberw](https://github.com/cyberw))
24
+ - \[Modern UI\] Modal Can Extend Beyond Screen Limits [\#2631](https://github.com/locustio/locust/pull/2631) ([andrewbaldwin44](https://github.com/andrewbaldwin44))
25
+ - chore: remove repetitive words [\#2625](https://github.com/locustio/locust/pull/2625) ([tgolang](https://github.com/tgolang))
26
+ - Add documentation about manually closing TCP/HTTP connections [\#2623](https://github.com/locustio/locust/pull/2623) ([DennisKrone](https://github.com/DennisKrone))
27
+ - Update ruff to 0.3.0 [\#2619](https://github.com/locustio/locust/pull/2619) ([cyberw](https://github.com/cyberw))
28
+
4
29
  ## [2.24.0](https://github.com/locustio/locust/tree/2.24.0) (2024-02-29)
5
30
 
6
31
  [Full Changelog](https://github.com/locustio/locust/compare/2.23.1...2.24.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: locust
3
- Version: 2.24.1.dev21
3
+ Version: 2.24.2.dev3
4
4
  Summary: Developer friendly load testing framework
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://github.com/locustio/locust
@@ -4,6 +4,11 @@ Changelog Highlights
4
4
 
5
5
  For full details of the Locust changelog, please see https://github.com/locustio/locust/blob/master/CHANGELOG.md
6
6
 
7
+ 2.24.1
8
+ ======
9
+ * Some documentation updates & minor fixes to UI
10
+ * Fixes to FastHttpUser content streaming (https://github.com/locustio/locust/pull/2642, https://github.com/locustio/locust/pull/2643)
11
+
7
12
  2.24.0
8
13
  ======
9
14
  * Pluggable dispatcher logic https://github.com/locustio/locust/pull/2606
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '2.24.1.dev21'
16
- __version_tuple__ = version_tuple = (2, 24, 1, 'dev21')
15
+ __version__ = version = '2.24.2.dev3'
16
+ __version_tuple__ = version_tuple = (2, 24, 2, 'dev3')
@@ -580,7 +580,10 @@ class ResponseContextManager(FastResponse):
580
580
  def __init__(self, response, environment, request_meta):
581
581
  # copy data from response to this object
582
582
  self.__dict__ = response.__dict__
583
- self._cached_content = response.content
583
+ try:
584
+ self._cached_content = response._cached_content
585
+ except AttributeError:
586
+ pass
584
587
  # store reference to locust Environment
585
588
  self._environment = environment
586
589
  self.request_meta = request_meta
@@ -71,6 +71,28 @@ class TestFastHttpSession(WebserverTestCase):
71
71
  # download the content of the streaming response (so we don't get an ugly exception in the log)
72
72
  _ = r.content
73
73
 
74
+ def test_streaming_response_catch_response(self):
75
+ """
76
+ Test a request to an endpoint that returns a streaming response, and uses catch_response
77
+ """
78
+ s = self.get_client()
79
+
80
+ with s.get("/streaming/30", stream=True, catch_response=True) as r:
81
+ # typical usage of r when stream=True is to read the stream as desired,
82
+ # with the possibility to "fail fast" when some things are read early on
83
+ response_content = str(r.stream.read())
84
+ r.failure("some error")
85
+
86
+ self.assertRegex(response_content, "streaming response")
87
+
88
+ stats = self.runner.stats.get("/streaming/30", "GET")
89
+ self.assertEqual(1, stats.num_requests)
90
+ self.assertEqual(1, stats.num_failures)
91
+
92
+ # verify that response time does NOT include whole download time, when using stream=True
93
+ self.assertGreaterEqual(stats.avg_response_time, 0)
94
+ self.assertLess(stats.avg_response_time, 250)
95
+
74
96
  def test_slow_redirect(self):
75
97
  s = self.get_client()
76
98
  url = "/redirect?url=/redirect&delay=0.5"
@@ -168,7 +168,7 @@ ${W.current.stack}
168
168
  `});++n<e.length;)n&&r.push({type:"text",value:`
169
169
  `}),r.push(e[n]);return t&&e.length>0&&r.push({type:"text",value:`
170
170
  `}),r}function tE(e){let t=0,r=e.charCodeAt(t);for(;r===9||r===32;)t++,r=e.charCodeAt(t);return e.slice(t)}function rE(e,t){const r=ive(e,t),n=r.one(e,void 0),i=qpe(r),a=Array.isArray(n)?{type:"root",children:n}:n||{type:"root",children:[]};return i&&a.children.push({type:"text",value:`
171
- `},i),a}function uve(e,t){return e&&"run"in e?async function(r,n){const i=rE(r,t);await e.run(i,n)}:function(r){return rE(r,t||e)}}function nE(e){if(e)throw e}var Ym=Object.prototype.hasOwnProperty,F6=Object.prototype.toString,iE=Object.defineProperty,aE=Object.getOwnPropertyDescriptor,oE=function(t){return typeof Array.isArray=="function"?Array.isArray(t):F6.call(t)==="[object Array]"},sE=function(t){if(!t||F6.call(t)!=="[object Object]")return!1;var r=Ym.call(t,"constructor"),n=t.constructor&&t.constructor.prototype&&Ym.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!r&&!n)return!1;var i;for(i in t);return typeof i>"u"||Ym.call(t,i)},lE=function(t,r){iE&&r.name==="__proto__"?iE(t,r.name,{enumerable:!0,configurable:!0,value:r.newValue,writable:!0}):t[r.name]=r.newValue},uE=function(t,r){if(r==="__proto__")if(Ym.call(t,r)){if(aE)return aE(t,r).value}else return;return t[r]},cve=function e(){var t,r,n,i,a,o,s=arguments[0],l=1,u=arguments.length,c=!1;for(typeof s=="boolean"&&(c=s,s=arguments[1]||{},l=2),(s==null||typeof s!="object"&&typeof s!="function")&&(s={});l<u;++l)if(t=arguments[l],t!=null)for(r in t)n=uE(s,r),i=uE(t,r),s!==i&&(c&&i&&(sE(i)||(a=oE(i)))?(a?(a=!1,o=n&&oE(n)?n:[]):o=n&&sE(n)?n:{},lE(s,{name:r,newValue:e(c,o,i)})):typeof i<"u"&&lE(s,{name:r,newValue:i}));return s};const lb=dv(cve);function oT(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function fve(){const e=[],t={run:r,use:n};return t;function r(...i){let a=-1;const o=i.pop();if(typeof o!="function")throw new TypeError("Expected function as last argument, not "+o);s(null,...i);function s(l,...u){const c=e[++a];let f=-1;if(l){o(l);return}for(;++f<i.length;)(u[f]===null||u[f]===void 0)&&(u[f]=i[f]);i=u,c?dve(c,s)(...u):o(null,...u)}}function n(i){if(typeof i!="function")throw new TypeError("Expected `middelware` to be a function, not "+i);return e.push(i),t}}function dve(e,t){let r;return n;function n(...o){const s=e.length>o.length;let l;s&&o.push(i);try{l=e.apply(this,o)}catch(u){const c=u;if(s&&r)throw c;return i(c)}s||(l instanceof Promise?l.then(a,i):l instanceof Error?i(l):a(l))}function i(o,...s){r||(r=!0,t(o,...s))}function a(o){i(null,o)}}const da={basename:hve,dirname:pve,extname:vve,join:gve,sep:"/"};function hve(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');Mv(e);let r=0,n=-1,i=e.length,a;if(t===void 0||t.length===0||t.length>e.length){for(;i--;)if(e.codePointAt(i)===47){if(a){r=i+1;break}}else n<0&&(a=!0,n=i+1);return n<0?"":e.slice(r,n)}if(t===e)return"";let o=-1,s=t.length-1;for(;i--;)if(e.codePointAt(i)===47){if(a){r=i+1;break}}else o<0&&(a=!0,o=i+1),s>-1&&(e.codePointAt(i)===t.codePointAt(s--)?s<0&&(n=i):(s=-1,n=o));return r===n?n=o:n<0&&(n=e.length),e.slice(r,n)}function pve(e){if(Mv(e),e.length===0)return".";let t=-1,r=e.length,n;for(;--r;)if(e.codePointAt(r)===47){if(n){t=r;break}}else n||(n=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function vve(e){Mv(e);let t=e.length,r=-1,n=0,i=-1,a=0,o;for(;t--;){const s=e.codePointAt(t);if(s===47){if(o){n=t+1;break}continue}r<0&&(o=!0,r=t+1),s===46?i<0?i=t:a!==1&&(a=1):i>-1&&(a=-1)}return i<0||r<0||a===0||a===1&&i===r-1&&i===n+1?"":e.slice(i,r)}function gve(...e){let t=-1,r;for(;++t<e.length;)Mv(e[t]),e[t]&&(r=r===void 0?e[t]:r+"/"+e[t]);return r===void 0?".":mve(r)}function mve(e){Mv(e);const t=e.codePointAt(0)===47;let r=yve(e,!t);return r.length===0&&!t&&(r="."),r.length>0&&e.codePointAt(e.length-1)===47&&(r+="/"),t?"/"+r:r}function yve(e,t){let r="",n=0,i=-1,a=0,o=-1,s,l;for(;++o<=e.length;){if(o<e.length)s=e.codePointAt(o);else{if(s===47)break;s=47}if(s===47){if(!(i===o-1||a===1))if(i!==o-1&&a===2){if(r.length<2||n!==2||r.codePointAt(r.length-1)!==46||r.codePointAt(r.length-2)!==46){if(r.length>2){if(l=r.lastIndexOf("/"),l!==r.length-1){l<0?(r="",n=0):(r=r.slice(0,l),n=r.length-1-r.lastIndexOf("/")),i=o,a=0;continue}}else if(r.length>0){r="",n=0,i=o,a=0;continue}}t&&(r=r.length>0?r+"/..":"..",n=2)}else r.length>0?r+="/"+e.slice(i+1,o):r=e.slice(i+1,o),n=o-i-1;i=o,a=0}else s===46&&a>-1?a++:a=-1}return r}function Mv(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const xve={cwd:Sve};function Sve(){return"/"}function sT(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function bve(e){if(typeof e=="string")e=new URL(e);else if(!sT(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return _ve(e)}function _ve(e){if(e.hostname!==""){const n=new TypeError('File URL host must be "localhost" or empty on darwin');throw n.code="ERR_INVALID_FILE_URL_HOST",n}const t=e.pathname;let r=-1;for(;++r<t.length;)if(t.codePointAt(r)===37&&t.codePointAt(r+1)===50){const n=t.codePointAt(r+2);if(n===70||n===102){const i=new TypeError("File URL path must not include encoded / characters");throw i.code="ERR_INVALID_FILE_URL_PATH",i}}return decodeURIComponent(t)}const ub=["history","path","basename","stem","extname","dirname"];class V6{constructor(t){let r;t?sT(t)?r={path:t}:typeof t=="string"||wve(t)?r={value:t}:r=t:r={},this.cwd=xve.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let n=-1;for(;++n<ub.length;){const a=ub[n];a in r&&r[a]!==void 0&&r[a]!==null&&(this[a]=a==="history"?[...r[a]]:r[a])}let i;for(i in r)ub.includes(i)||(this[i]=r[i])}get basename(){return typeof this.path=="string"?da.basename(this.path):void 0}set basename(t){fb(t,"basename"),cb(t,"basename"),this.path=da.join(this.dirname||"",t)}get dirname(){return typeof this.path=="string"?da.dirname(this.path):void 0}set dirname(t){cE(this.basename,"dirname"),this.path=da.join(t||"",this.basename)}get extname(){return typeof this.path=="string"?da.extname(this.path):void 0}set extname(t){if(cb(t,"extname"),cE(this.dirname,"extname"),t){if(t.codePointAt(0)!==46)throw new Error("`extname` must start with `.`");if(t.includes(".",1))throw new Error("`extname` cannot contain multiple dots")}this.path=da.join(this.dirname,this.stem+(t||""))}get path(){return this.history[this.history.length-1]}set path(t){sT(t)&&(t=bve(t)),fb(t,"path"),this.path!==t&&this.history.push(t)}get stem(){return typeof this.path=="string"?da.basename(this.path,this.extname):void 0}set stem(t){fb(t,"stem"),cb(t,"stem"),this.path=da.join(this.dirname||"",t+(this.extname||""))}fail(t,r,n){const i=this.message(t,r,n);throw i.fatal=!0,i}info(t,r,n){const i=this.message(t,r,n);return i.fatal=void 0,i}message(t,r,n){const i=new pn(t,r,n);return this.path&&(i.name=this.path+":"+i.name,i.file=this.path),i.fatal=!1,this.messages.push(i),i}toString(t){return this.value===void 0?"":typeof this.value=="string"?this.value:new TextDecoder(t||void 0).decode(this.value)}}function cb(e,t){if(e&&e.includes(da.sep))throw new Error("`"+t+"` cannot be a path: did not expect `"+da.sep+"`")}function fb(e,t){if(!e)throw new Error("`"+t+"` cannot be empty")}function cE(e,t){if(!e)throw new Error("Setting `"+t+"` requires `path` to be set too")}function wve(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const Cve=function(e){const n=this.constructor.prototype,i=n[e],a=function(){return i.apply(a,arguments)};Object.setPrototypeOf(a,n);const o=Object.getOwnPropertyNames(i);for(const s of o){const l=Object.getOwnPropertyDescriptor(i,s);l&&Object.defineProperty(a,s,l)}return a},Tve={}.hasOwnProperty;class sk extends Cve{constructor(){super("copy"),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=fve()}copy(){const t=new sk;let r=-1;for(;++r<this.attachers.length;){const n=this.attachers[r];t.use(...n)}return t.data(lb(!0,{},this.namespace)),t}data(t,r){return typeof t=="string"?arguments.length===2?(pb("data",this.frozen),this.namespace[t]=r,this):Tve.call(this.namespace,t)&&this.namespace[t]||void 0:t?(pb("data",this.frozen),this.namespace=t,this):this.namespace}freeze(){if(this.frozen)return this;const t=this;for(;++this.freezeIndex<this.attachers.length;){const[r,...n]=this.attachers[this.freezeIndex];if(n[0]===!1)continue;n[0]===!0&&(n[0]=void 0);const i=r.call(t,...n);typeof i=="function"&&this.transformers.use(i)}return this.frozen=!0,this.freezeIndex=Number.POSITIVE_INFINITY,this}parse(t){this.freeze();const r=Ag(t),n=this.parser||this.Parser;return db("parse",n),n(String(r),r)}process(t,r){const n=this;return this.freeze(),db("process",this.parser||this.Parser),hb("process",this.compiler||this.Compiler),r?i(void 0,r):new Promise(i);function i(a,o){const s=Ag(t),l=n.parse(s);n.run(l,s,function(c,f,d){if(c||!f||!d)return u(c);const h=f,p=n.stringify(h,d);kve(p)?d.value=p:d.result=p,u(c,d)});function u(c,f){c||!f?o(c):a?a(f):r(void 0,f)}}}processSync(t){let r=!1,n;return this.freeze(),db("processSync",this.parser||this.Parser),hb("processSync",this.compiler||this.Compiler),this.process(t,i),dE("processSync","process",r),n;function i(a,o){r=!0,nE(a),n=o}}run(t,r,n){fE(t),this.freeze();const i=this.transformers;return!n&&typeof r=="function"&&(n=r,r=void 0),n?a(void 0,n):new Promise(a);function a(o,s){const l=Ag(r);i.run(t,l,u);function u(c,f,d){const h=f||t;c?s(c):o?o(h):n(void 0,h,d)}}}runSync(t,r){let n=!1,i;return this.run(t,r,a),dE("runSync","run",n),i;function a(o,s){nE(o),i=s,n=!0}}stringify(t,r){this.freeze();const n=Ag(r),i=this.compiler||this.Compiler;return hb("stringify",i),fE(t),i(t,n)}use(t,...r){const n=this.attachers,i=this.namespace;if(pb("use",this.frozen),t!=null)if(typeof t=="function")l(t,r);else if(typeof t=="object")Array.isArray(t)?s(t):o(t);else throw new TypeError("Expected usable value, not `"+t+"`");return this;function a(u){if(typeof u=="function")l(u,[]);else if(typeof u=="object")if(Array.isArray(u)){const[c,...f]=u;l(c,f)}else o(u);else throw new TypeError("Expected usable value, not `"+u+"`")}function o(u){if(!("plugins"in u)&&!("settings"in u))throw new Error("Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither");s(u.plugins),u.settings&&(i.settings=lb(!0,i.settings,u.settings))}function s(u){let c=-1;if(u!=null)if(Array.isArray(u))for(;++c<u.length;){const f=u[c];a(f)}else throw new TypeError("Expected a list of plugins, not `"+u+"`")}function l(u,c){let f=-1,d=-1;for(;++f<n.length;)if(n[f][0]===u){d=f;break}if(d===-1)n.push([u,...c]);else if(c.length>0){let[h,...p]=c;const v=n[d][1];oT(v)&&oT(h)&&(h=lb(!0,v,h)),n[d]=[u,h,...p]}}}}const Ave=new sk().freeze();function db(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function hb(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function pb(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function fE(e){if(!oT(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function dE(e,t,r){if(!r)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function Ag(e){return Mve(e)?e:new V6(e)}function Mve(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function kve(e){return typeof e=="string"||Ive(e)}function Ive(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const hE={}.hasOwnProperty,Pve="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",pE=[],vE={allowDangerousHtml:!0},Dve=/^(https?|ircs?|mailto|xmpp)$/i,Rve=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function Lve(e){const t=e.allowedElements,r=e.allowElement,n=e.children||"",i=e.className,a=e.components,o=e.disallowedElements,s=e.rehypePlugins||pE,l=e.remarkPlugins||pE,u=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...vE}:vE,c=e.skipHtml,f=e.unwrapDisallowed,d=e.urlTransform||Eve,h=Ave().use(ppe).use(l).use(uve,u).use(s),p=new V6;typeof n=="string"&&(p.value=n);for(const y of Rve)Object.hasOwn(e,y.from)&&(""+y.from+(y.to?"use `"+y.to+"` instead":"remove it")+Pve+y.id,void 0);const v=h.parse(p);let g=h.runSync(v,p);return i&&(g={type:"element",tagName:"div",properties:{className:i},children:g.type==="root"?g.children:[g]}),$6(g,m),Zfe(g,{Fragment:D.Fragment,components:a,ignoreInvalidStyle:!0,jsx:D.jsx,jsxs:D.jsxs,passKeys:!0,passNode:!0});function m(y,x,S){if(y.type==="raw"&&S&&typeof x=="number")return c?S.children.splice(x,1):S.children[x]={type:"text",value:y.value},x;if(y.type==="element"){let _;for(_ in ab)if(hE.call(ab,_)&&hE.call(y.properties,_)){const b=y.properties[_],w=ab[_];(w===null||w.includes(y.tagName))&&(y.properties[_]=d(String(b||""),_,y))}}if(y.type==="element"){let _=t?!t.includes(y.tagName):o?o.includes(y.tagName):!1;if(!_&&r&&typeof x=="number"&&(_=!r(y,x,S)),_&&S&&typeof x=="number")return f&&y.children?S.children.splice(x,1,...y.children):S.children.splice(x,1),x}}}function Eve(e){return pde(e,Dve)}function Ove(e,t){const r=t?-1:1;return function(n,i){const a=n[e],o=i[e];return a<o?r*-1:a>o?r*1:0}}function Nve(e,{hasTotalRow:t=!1,defaultSortKey:r="name"}={hasTotalRow:!1,defaultSortKey:"name"}){const[n,i]=O.useState(e),[a,o]=O.useState(!1),s=O.useRef(),l=c=>{const d=(t?e.slice(0,-1):[...e]).sort(Ove(c,c===s.current&&!a));i(t?[...d,...e.slice(-1)]:d)},u=O.useCallback(c=>{s.current||(s.current=r);const f=c.target.getAttribute("data-sortkey");if(f===s.current)if(a){o(!1),s.current=void 0,l(r);return}else o(!0);else a&&o(!1);l(f),s.current=f},[s,e,a]);return O.useEffect(()=>{e.length&&l(s.current||r)},[e]),{onTableHeadClick:u,sortedRows:n,currentSortField:s.current}}const dh=(e,t=0)=>{const r=Math.pow(10,t);return Math.round(e*r)/r};function zve({content:e,formatter:t,round:r,markdown:n}){return t?t(e):r?dh(e,r):n?D.jsx(Lve,{skipHtml:!1,children:e}):e}function qf({rows:e,structure:t,hasTotalRow:r,defaultSortKey:n}){const{onTableHeadClick:i,sortedRows:a,currentSortField:o}=Nve(e,{hasTotalRow:r,defaultSortKey:n});return D.jsx(RG,{component:Wf,children:D.jsxs(PG,{children:[D.jsx(LG,{children:D.jsx(Qy,{children:t.map(({title:s,key:l})=>D.jsx(zl,{"data-sortkey":l,onClick:i,sx:{cursor:"pointer",color:o===l?"primary.main":"text.primary"},children:s},`table-head-${l}`))})}),D.jsx(DG,{children:a.map((s,l)=>D.jsx(Qy,{children:t.map(({key:u,...c},f)=>D.jsx(zl,{children:D.jsx(zve,{content:s[u],...c})},`table-row=${f}`))},`${s.name}-${l}`))})]})})}function Bve({rows:e,tableStructure:t}){return t?D.jsx(qf,{rows:e,structure:t}):null}const $ve=({swarm:{extendedTables:e},ui:{extendedStats:t},url:{query:r}})=>{const n=r&&r.tab&&e&&e.find(({key:a})=>a===r.tab),i=r&&r.tab&&t&&t.find(({key:a})=>a===r.tab);return{tableStructure:n?n.structure.map(({key:a,...o})=>({key:vV(a),...o})):null,rows:i?i.data:[]}},Fve=Ln($ve)(Bve),Vve=[{key:"count",title:"# occurrences"},{key:"msg",title:"Message"},{key:"traceback",title:"Traceback"}];function G6({exceptions:e}){return D.jsx(qf,{rows:e,structure:Vve})}const Gve=({ui:{exceptions:e}})=>({exceptions:e}),Hve=Ln(Gve)(G6),Wve=[{key:"occurrences",title:"# Failures"},{key:"method",title:"Method"},{key:"name",title:"Name"},{key:"error",title:"Message",markdown:!0}];function H6({errors:e}){return D.jsx(qf,{rows:e,structure:Wve})}const jve=({ui:{errors:e}})=>({errors:e}),Uve=Ln(jve)(H6);function qve(){const e=Ys(({logViewer:{logs:t}})=>t);return D.jsxs(it,{children:[D.jsx(qe,{component:"h2",variant:"h4",children:"Logs"}),D.jsx("ul",{children:e.map((t,r)=>D.jsx("li",{children:t},`log-${r}`))})]})}function Yve({extendedCsvFiles:e,statsHistoryEnabled:t}){const r=Ys(({theme:{isDarkMode:n}})=>n);return D.jsxs(yG,{sx:{display:"flex",flexDirection:"column"},children:[D.jsx(tc,{children:D.jsx(on,{href:"/stats/requests/csv",children:"Download requests CSV"})}),t&&D.jsx(tc,{children:D.jsx(on,{href:"/stats/requests_full_history/csv",children:"Download full request statistics history CSV"})}),D.jsx(tc,{children:D.jsx(on,{href:"/stats/failures/csv",children:"Download failures CSV"})}),D.jsx(tc,{children:D.jsx(on,{href:"/exceptions/csv",children:"Download exceptions CSV"})}),D.jsx(tc,{children:D.jsx(on,{href:`/stats/report?theme=${r?Si.DARK:Si.LIGHT}`,target:"_blank",children:"Download Report"})}),e&&e.map(({href:n,title:i},a)=>D.jsx(tc,{children:D.jsx(on,{href:n,children:i})},`extended-csv-${a}`))]})}const Xve=({swarm:{extendedCsvFiles:e,statsHistoryEnabled:t}})=>({extendedCsvFiles:e,statsHistoryEnabled:t}),Zve=Ln(Xve)(Yve);var lk={},Kve=Ou;Object.defineProperty(lk,"__esModule",{value:!0});var W6=lk.default=void 0,Qve=Kve(Nu()),Jve=D,ege=(0,Qve.default)((0,Jve.jsx)("path",{d:"M14.67 5v14H9.33V5h5.34zm1 14H21V5h-5.33v14zm-7.34 0V5H3v14h5.33z"}),"ViewColumn");W6=lk.default=ege;function tge({structure:e,selectedColumns:t,addColumn:r,removeColumn:n}){const[i,a]=O.useState(null);return D.jsxs(fG,{direction:"row",justifyContent:"end",my:2,spacing:1,children:[D.jsx(qa,{onClick:o=>a(o.currentTarget),variant:"outlined",children:D.jsx(W6,{})}),D.jsx(_G,{anchorEl:i,anchorOrigin:{vertical:"bottom",horizontal:"left"},onClose:()=>a(null),open:!!i,children:D.jsx(hG,{sx:{p:2},children:e.map(({key:o,title:s})=>D.jsx(dG,{control:D.jsx(Ise,{checked:t.includes(o),onChange:()=>{t.includes(o)?n(o):r(o)}}),label:s},o))})})]})}function rge(e){const[t,r]=O.useState(e.map(o=>o.key));return{selectedColumns:t,addColumn:o=>{r([...t,o])},removeColumn:o=>{r(t.filter(s=>s!==o))},filteredStructure:(o=>o.filter(s=>t.includes(s.key)))(e)}}const nge=Ra.percentilesToStatistics?Ra.percentilesToStatistics.map(e=>({title:`${e*100}%ile (ms)`,key:`responseTimePercentile${e}`})):[],gE=[{key:"method",title:"Type"},{key:"name",title:"Name"},{key:"numRequests",title:"# Requests"},{key:"numFailures",title:"# Fails"},{key:"medianResponseTime",title:"Median (ms)",round:2},...nge,{key:"avgResponseTime",title:"Average (ms)",round:2},{key:"minResponseTime",title:"Min (ms)"},{key:"maxResponseTime",title:"Max (ms)"},{key:"avgContentLength",title:"Average size (bytes)",round:2},{key:"currentRps",title:"Current RPS",round:2},{key:"currentFailPerSec",title:"Current Failures/s",round:2}];function j6({stats:e}){const{selectedColumns:t,addColumn:r,removeColumn:n,filteredStructure:i}=rge(gE);return D.jsxs(D.Fragment,{children:[D.jsx(tge,{addColumn:r,removeColumn:n,selectedColumns:t,structure:gE}),D.jsx(qf,{hasTotalRow:!0,rows:e,structure:i})]})}const ige=({ui:{stats:e}})=>({stats:e}),age=Ln(ige)(j6);/*! *****************************************************************************
171
+ `},i),a}function uve(e,t){return e&&"run"in e?async function(r,n){const i=rE(r,t);await e.run(i,n)}:function(r){return rE(r,t||e)}}function nE(e){if(e)throw e}var Ym=Object.prototype.hasOwnProperty,F6=Object.prototype.toString,iE=Object.defineProperty,aE=Object.getOwnPropertyDescriptor,oE=function(t){return typeof Array.isArray=="function"?Array.isArray(t):F6.call(t)==="[object Array]"},sE=function(t){if(!t||F6.call(t)!=="[object Object]")return!1;var r=Ym.call(t,"constructor"),n=t.constructor&&t.constructor.prototype&&Ym.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!r&&!n)return!1;var i;for(i in t);return typeof i>"u"||Ym.call(t,i)},lE=function(t,r){iE&&r.name==="__proto__"?iE(t,r.name,{enumerable:!0,configurable:!0,value:r.newValue,writable:!0}):t[r.name]=r.newValue},uE=function(t,r){if(r==="__proto__")if(Ym.call(t,r)){if(aE)return aE(t,r).value}else return;return t[r]},cve=function e(){var t,r,n,i,a,o,s=arguments[0],l=1,u=arguments.length,c=!1;for(typeof s=="boolean"&&(c=s,s=arguments[1]||{},l=2),(s==null||typeof s!="object"&&typeof s!="function")&&(s={});l<u;++l)if(t=arguments[l],t!=null)for(r in t)n=uE(s,r),i=uE(t,r),s!==i&&(c&&i&&(sE(i)||(a=oE(i)))?(a?(a=!1,o=n&&oE(n)?n:[]):o=n&&sE(n)?n:{},lE(s,{name:r,newValue:e(c,o,i)})):typeof i<"u"&&lE(s,{name:r,newValue:i}));return s};const lb=dv(cve);function oT(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function fve(){const e=[],t={run:r,use:n};return t;function r(...i){let a=-1;const o=i.pop();if(typeof o!="function")throw new TypeError("Expected function as last argument, not "+o);s(null,...i);function s(l,...u){const c=e[++a];let f=-1;if(l){o(l);return}for(;++f<i.length;)(u[f]===null||u[f]===void 0)&&(u[f]=i[f]);i=u,c?dve(c,s)(...u):o(null,...u)}}function n(i){if(typeof i!="function")throw new TypeError("Expected `middelware` to be a function, not "+i);return e.push(i),t}}function dve(e,t){let r;return n;function n(...o){const s=e.length>o.length;let l;s&&o.push(i);try{l=e.apply(this,o)}catch(u){const c=u;if(s&&r)throw c;return i(c)}s||(l instanceof Promise?l.then(a,i):l instanceof Error?i(l):a(l))}function i(o,...s){r||(r=!0,t(o,...s))}function a(o){i(null,o)}}const da={basename:hve,dirname:pve,extname:vve,join:gve,sep:"/"};function hve(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');Mv(e);let r=0,n=-1,i=e.length,a;if(t===void 0||t.length===0||t.length>e.length){for(;i--;)if(e.codePointAt(i)===47){if(a){r=i+1;break}}else n<0&&(a=!0,n=i+1);return n<0?"":e.slice(r,n)}if(t===e)return"";let o=-1,s=t.length-1;for(;i--;)if(e.codePointAt(i)===47){if(a){r=i+1;break}}else o<0&&(a=!0,o=i+1),s>-1&&(e.codePointAt(i)===t.codePointAt(s--)?s<0&&(n=i):(s=-1,n=o));return r===n?n=o:n<0&&(n=e.length),e.slice(r,n)}function pve(e){if(Mv(e),e.length===0)return".";let t=-1,r=e.length,n;for(;--r;)if(e.codePointAt(r)===47){if(n){t=r;break}}else n||(n=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function vve(e){Mv(e);let t=e.length,r=-1,n=0,i=-1,a=0,o;for(;t--;){const s=e.codePointAt(t);if(s===47){if(o){n=t+1;break}continue}r<0&&(o=!0,r=t+1),s===46?i<0?i=t:a!==1&&(a=1):i>-1&&(a=-1)}return i<0||r<0||a===0||a===1&&i===r-1&&i===n+1?"":e.slice(i,r)}function gve(...e){let t=-1,r;for(;++t<e.length;)Mv(e[t]),e[t]&&(r=r===void 0?e[t]:r+"/"+e[t]);return r===void 0?".":mve(r)}function mve(e){Mv(e);const t=e.codePointAt(0)===47;let r=yve(e,!t);return r.length===0&&!t&&(r="."),r.length>0&&e.codePointAt(e.length-1)===47&&(r+="/"),t?"/"+r:r}function yve(e,t){let r="",n=0,i=-1,a=0,o=-1,s,l;for(;++o<=e.length;){if(o<e.length)s=e.codePointAt(o);else{if(s===47)break;s=47}if(s===47){if(!(i===o-1||a===1))if(i!==o-1&&a===2){if(r.length<2||n!==2||r.codePointAt(r.length-1)!==46||r.codePointAt(r.length-2)!==46){if(r.length>2){if(l=r.lastIndexOf("/"),l!==r.length-1){l<0?(r="",n=0):(r=r.slice(0,l),n=r.length-1-r.lastIndexOf("/")),i=o,a=0;continue}}else if(r.length>0){r="",n=0,i=o,a=0;continue}}t&&(r=r.length>0?r+"/..":"..",n=2)}else r.length>0?r+="/"+e.slice(i+1,o):r=e.slice(i+1,o),n=o-i-1;i=o,a=0}else s===46&&a>-1?a++:a=-1}return r}function Mv(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const xve={cwd:Sve};function Sve(){return"/"}function sT(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function bve(e){if(typeof e=="string")e=new URL(e);else if(!sT(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return _ve(e)}function _ve(e){if(e.hostname!==""){const n=new TypeError('File URL host must be "localhost" or empty on darwin');throw n.code="ERR_INVALID_FILE_URL_HOST",n}const t=e.pathname;let r=-1;for(;++r<t.length;)if(t.codePointAt(r)===37&&t.codePointAt(r+1)===50){const n=t.codePointAt(r+2);if(n===70||n===102){const i=new TypeError("File URL path must not include encoded / characters");throw i.code="ERR_INVALID_FILE_URL_PATH",i}}return decodeURIComponent(t)}const ub=["history","path","basename","stem","extname","dirname"];class V6{constructor(t){let r;t?sT(t)?r={path:t}:typeof t=="string"||wve(t)?r={value:t}:r=t:r={},this.cwd=xve.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let n=-1;for(;++n<ub.length;){const a=ub[n];a in r&&r[a]!==void 0&&r[a]!==null&&(this[a]=a==="history"?[...r[a]]:r[a])}let i;for(i in r)ub.includes(i)||(this[i]=r[i])}get basename(){return typeof this.path=="string"?da.basename(this.path):void 0}set basename(t){fb(t,"basename"),cb(t,"basename"),this.path=da.join(this.dirname||"",t)}get dirname(){return typeof this.path=="string"?da.dirname(this.path):void 0}set dirname(t){cE(this.basename,"dirname"),this.path=da.join(t||"",this.basename)}get extname(){return typeof this.path=="string"?da.extname(this.path):void 0}set extname(t){if(cb(t,"extname"),cE(this.dirname,"extname"),t){if(t.codePointAt(0)!==46)throw new Error("`extname` must start with `.`");if(t.includes(".",1))throw new Error("`extname` cannot contain multiple dots")}this.path=da.join(this.dirname,this.stem+(t||""))}get path(){return this.history[this.history.length-1]}set path(t){sT(t)&&(t=bve(t)),fb(t,"path"),this.path!==t&&this.history.push(t)}get stem(){return typeof this.path=="string"?da.basename(this.path,this.extname):void 0}set stem(t){fb(t,"stem"),cb(t,"stem"),this.path=da.join(this.dirname||"",t+(this.extname||""))}fail(t,r,n){const i=this.message(t,r,n);throw i.fatal=!0,i}info(t,r,n){const i=this.message(t,r,n);return i.fatal=void 0,i}message(t,r,n){const i=new pn(t,r,n);return this.path&&(i.name=this.path+":"+i.name,i.file=this.path),i.fatal=!1,this.messages.push(i),i}toString(t){return this.value===void 0?"":typeof this.value=="string"?this.value:new TextDecoder(t||void 0).decode(this.value)}}function cb(e,t){if(e&&e.includes(da.sep))throw new Error("`"+t+"` cannot be a path: did not expect `"+da.sep+"`")}function fb(e,t){if(!e)throw new Error("`"+t+"` cannot be empty")}function cE(e,t){if(!e)throw new Error("Setting `"+t+"` requires `path` to be set too")}function wve(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const Cve=function(e){const n=this.constructor.prototype,i=n[e],a=function(){return i.apply(a,arguments)};Object.setPrototypeOf(a,n);const o=Object.getOwnPropertyNames(i);for(const s of o){const l=Object.getOwnPropertyDescriptor(i,s);l&&Object.defineProperty(a,s,l)}return a},Tve={}.hasOwnProperty;class sk extends Cve{constructor(){super("copy"),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=fve()}copy(){const t=new sk;let r=-1;for(;++r<this.attachers.length;){const n=this.attachers[r];t.use(...n)}return t.data(lb(!0,{},this.namespace)),t}data(t,r){return typeof t=="string"?arguments.length===2?(pb("data",this.frozen),this.namespace[t]=r,this):Tve.call(this.namespace,t)&&this.namespace[t]||void 0:t?(pb("data",this.frozen),this.namespace=t,this):this.namespace}freeze(){if(this.frozen)return this;const t=this;for(;++this.freezeIndex<this.attachers.length;){const[r,...n]=this.attachers[this.freezeIndex];if(n[0]===!1)continue;n[0]===!0&&(n[0]=void 0);const i=r.call(t,...n);typeof i=="function"&&this.transformers.use(i)}return this.frozen=!0,this.freezeIndex=Number.POSITIVE_INFINITY,this}parse(t){this.freeze();const r=Ag(t),n=this.parser||this.Parser;return db("parse",n),n(String(r),r)}process(t,r){const n=this;return this.freeze(),db("process",this.parser||this.Parser),hb("process",this.compiler||this.Compiler),r?i(void 0,r):new Promise(i);function i(a,o){const s=Ag(t),l=n.parse(s);n.run(l,s,function(c,f,d){if(c||!f||!d)return u(c);const h=f,p=n.stringify(h,d);kve(p)?d.value=p:d.result=p,u(c,d)});function u(c,f){c||!f?o(c):a?a(f):r(void 0,f)}}}processSync(t){let r=!1,n;return this.freeze(),db("processSync",this.parser||this.Parser),hb("processSync",this.compiler||this.Compiler),this.process(t,i),dE("processSync","process",r),n;function i(a,o){r=!0,nE(a),n=o}}run(t,r,n){fE(t),this.freeze();const i=this.transformers;return!n&&typeof r=="function"&&(n=r,r=void 0),n?a(void 0,n):new Promise(a);function a(o,s){const l=Ag(r);i.run(t,l,u);function u(c,f,d){const h=f||t;c?s(c):o?o(h):n(void 0,h,d)}}}runSync(t,r){let n=!1,i;return this.run(t,r,a),dE("runSync","run",n),i;function a(o,s){nE(o),i=s,n=!0}}stringify(t,r){this.freeze();const n=Ag(r),i=this.compiler||this.Compiler;return hb("stringify",i),fE(t),i(t,n)}use(t,...r){const n=this.attachers,i=this.namespace;if(pb("use",this.frozen),t!=null)if(typeof t=="function")l(t,r);else if(typeof t=="object")Array.isArray(t)?s(t):o(t);else throw new TypeError("Expected usable value, not `"+t+"`");return this;function a(u){if(typeof u=="function")l(u,[]);else if(typeof u=="object")if(Array.isArray(u)){const[c,...f]=u;l(c,f)}else o(u);else throw new TypeError("Expected usable value, not `"+u+"`")}function o(u){if(!("plugins"in u)&&!("settings"in u))throw new Error("Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither");s(u.plugins),u.settings&&(i.settings=lb(!0,i.settings,u.settings))}function s(u){let c=-1;if(u!=null)if(Array.isArray(u))for(;++c<u.length;){const f=u[c];a(f)}else throw new TypeError("Expected a list of plugins, not `"+u+"`")}function l(u,c){let f=-1,d=-1;for(;++f<n.length;)if(n[f][0]===u){d=f;break}if(d===-1)n.push([u,...c]);else if(c.length>0){let[h,...p]=c;const v=n[d][1];oT(v)&&oT(h)&&(h=lb(!0,v,h)),n[d]=[u,h,...p]}}}}const Ave=new sk().freeze();function db(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function hb(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function pb(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function fE(e){if(!oT(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function dE(e,t,r){if(!r)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function Ag(e){return Mve(e)?e:new V6(e)}function Mve(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function kve(e){return typeof e=="string"||Ive(e)}function Ive(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const hE={}.hasOwnProperty,Pve="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",pE=[],vE={allowDangerousHtml:!0},Dve=/^(https?|ircs?|mailto|xmpp)$/i,Rve=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function Lve(e){const t=e.allowedElements,r=e.allowElement,n=e.children||"",i=e.className,a=e.components,o=e.disallowedElements,s=e.rehypePlugins||pE,l=e.remarkPlugins||pE,u=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...vE}:vE,c=e.skipHtml,f=e.unwrapDisallowed,d=e.urlTransform||Eve,h=Ave().use(ppe).use(l).use(uve,u).use(s),p=new V6;typeof n=="string"&&(p.value=n);for(const y of Rve)Object.hasOwn(e,y.from)&&(""+y.from+(y.to?"use `"+y.to+"` instead":"remove it")+Pve+y.id,void 0);const v=h.parse(p);let g=h.runSync(v,p);return i&&(g={type:"element",tagName:"div",properties:{className:i},children:g.type==="root"?g.children:[g]}),$6(g,m),Zfe(g,{Fragment:D.Fragment,components:a,ignoreInvalidStyle:!0,jsx:D.jsx,jsxs:D.jsxs,passKeys:!0,passNode:!0});function m(y,x,S){if(y.type==="raw"&&S&&typeof x=="number")return c?S.children.splice(x,1):S.children[x]={type:"text",value:y.value},x;if(y.type==="element"){let _;for(_ in ab)if(hE.call(ab,_)&&hE.call(y.properties,_)){const b=y.properties[_],w=ab[_];(w===null||w.includes(y.tagName))&&(y.properties[_]=d(String(b||""),_,y))}}if(y.type==="element"){let _=t?!t.includes(y.tagName):o?o.includes(y.tagName):!1;if(!_&&r&&typeof x=="number"&&(_=!r(y,x,S)),_&&S&&typeof x=="number")return f&&y.children?S.children.splice(x,1,...y.children):S.children.splice(x,1),x}}}function Eve(e){return pde(e,Dve)}function Ove(e,t){const r=t?-1:1;return function(n,i){const a=n[e],o=i[e];return a<o?r*-1:a>o?r*1:0}}function Nve(e,{hasTotalRow:t=!1,defaultSortKey:r="name"}={hasTotalRow:!1,defaultSortKey:"name"}){const[n,i]=O.useState(e),[a,o]=O.useState(!1),s=O.useRef(),l=c=>{const d=(t?e.slice(0,-1):[...e]).sort(Ove(c,c===s.current&&!a));i(t?[...d,...e.slice(-1)]:d)},u=O.useCallback(c=>{s.current||(s.current=r);const f=c.target.getAttribute("data-sortkey");if(f===s.current)if(a){o(!1),s.current=void 0,l(r);return}else o(!0);else a&&o(!1);l(f),s.current=f},[s,e,a]);return O.useEffect(()=>{e.length&&l(s.current||r)},[e]),{onTableHeadClick:u,sortedRows:n,currentSortField:s.current}}const dh=(e,t=0)=>{const r=Math.pow(10,t);return Math.round(e*r)/r};function zve({content:e,formatter:t,round:r,markdown:n}){return t?t(e):r?dh(e,r):n?D.jsx(Lve,{skipHtml:!1,children:e}):e}function qf({rows:e,structure:t,hasTotalRow:r,defaultSortKey:n}){const{onTableHeadClick:i,sortedRows:a,currentSortField:o}=Nve(e,{hasTotalRow:r,defaultSortKey:n});return D.jsx(RG,{component:Wf,children:D.jsxs(PG,{children:[D.jsx(LG,{children:D.jsx(Qy,{children:t.map(({title:s,key:l})=>D.jsx(zl,{"data-sortkey":l,onClick:i,sx:{cursor:"pointer",color:o===l?"primary.main":"text.primary"},children:s},`table-head-${l}`))})}),D.jsx(DG,{children:a.map((s,l)=>D.jsx(Qy,{children:t.map(({key:u,...c},f)=>D.jsx(zl,{children:D.jsx(zve,{content:s[u],...c})},`table-row=${f}`))},`${s.name}-${l}`))})]})})}function Bve({rows:e,tableStructure:t}){return t?D.jsx(qf,{rows:e,structure:t}):null}const $ve=({swarm:{extendedTables:e},ui:{extendedStats:t},url:{query:r}})=>{const n=r&&r.tab&&e&&e.find(({key:a})=>a===r.tab),i=r&&r.tab&&t&&t.find(({key:a})=>a===r.tab);return{tableStructure:n?n.structure.map(({key:a,...o})=>({key:vV(a),...o})):null,rows:i?i.data:[]}},Fve=Ln($ve)(Bve),Vve=[{key:"count",title:"# occurrences"},{key:"msg",title:"Message",markdown:!0},{key:"traceback",title:"Traceback",markdown:!0}];function G6({exceptions:e}){return D.jsx(qf,{rows:e,structure:Vve})}const Gve=({ui:{exceptions:e}})=>({exceptions:e}),Hve=Ln(Gve)(G6),Wve=[{key:"occurrences",title:"# Failures"},{key:"method",title:"Method"},{key:"name",title:"Name"},{key:"error",title:"Message",markdown:!0}];function H6({errors:e}){return D.jsx(qf,{rows:e,structure:Wve})}const jve=({ui:{errors:e}})=>({errors:e}),Uve=Ln(jve)(H6);function qve(){const e=Ys(({logViewer:{logs:t}})=>t);return D.jsxs(it,{children:[D.jsx(qe,{component:"h2",variant:"h4",children:"Logs"}),D.jsx("ul",{children:e.map((t,r)=>D.jsx("li",{children:t},`log-${r}`))})]})}function Yve({extendedCsvFiles:e,statsHistoryEnabled:t}){const r=Ys(({theme:{isDarkMode:n}})=>n);return D.jsxs(yG,{sx:{display:"flex",flexDirection:"column"},children:[D.jsx(tc,{children:D.jsx(on,{href:"/stats/requests/csv",children:"Download requests CSV"})}),t&&D.jsx(tc,{children:D.jsx(on,{href:"/stats/requests_full_history/csv",children:"Download full request statistics history CSV"})}),D.jsx(tc,{children:D.jsx(on,{href:"/stats/failures/csv",children:"Download failures CSV"})}),D.jsx(tc,{children:D.jsx(on,{href:"/exceptions/csv",children:"Download exceptions CSV"})}),D.jsx(tc,{children:D.jsx(on,{href:`/stats/report?theme=${r?Si.DARK:Si.LIGHT}`,target:"_blank",children:"Download Report"})}),e&&e.map(({href:n,title:i},a)=>D.jsx(tc,{children:D.jsx(on,{href:n,children:i})},`extended-csv-${a}`))]})}const Xve=({swarm:{extendedCsvFiles:e,statsHistoryEnabled:t}})=>({extendedCsvFiles:e,statsHistoryEnabled:t}),Zve=Ln(Xve)(Yve);var lk={},Kve=Ou;Object.defineProperty(lk,"__esModule",{value:!0});var W6=lk.default=void 0,Qve=Kve(Nu()),Jve=D,ege=(0,Qve.default)((0,Jve.jsx)("path",{d:"M14.67 5v14H9.33V5h5.34zm1 14H21V5h-5.33v14zm-7.34 0V5H3v14h5.33z"}),"ViewColumn");W6=lk.default=ege;function tge({structure:e,selectedColumns:t,addColumn:r,removeColumn:n}){const[i,a]=O.useState(null);return D.jsxs(fG,{direction:"row",justifyContent:"end",my:2,spacing:1,children:[D.jsx(qa,{onClick:o=>a(o.currentTarget),variant:"outlined",children:D.jsx(W6,{})}),D.jsx(_G,{anchorEl:i,anchorOrigin:{vertical:"bottom",horizontal:"left"},onClose:()=>a(null),open:!!i,children:D.jsx(hG,{sx:{p:2},children:e.map(({key:o,title:s})=>D.jsx(dG,{control:D.jsx(Ise,{checked:t.includes(o),onChange:()=>{t.includes(o)?n(o):r(o)}}),label:s},o))})})]})}function rge(e){const[t,r]=O.useState(e.map(o=>o.key));return{selectedColumns:t,addColumn:o=>{r([...t,o])},removeColumn:o=>{r(t.filter(s=>s!==o))},filteredStructure:(o=>o.filter(s=>t.includes(s.key)))(e)}}const nge=Ra.percentilesToStatistics?Ra.percentilesToStatistics.map(e=>({title:`${e*100}%ile (ms)`,key:`responseTimePercentile${e}`})):[],gE=[{key:"method",title:"Type"},{key:"name",title:"Name"},{key:"numRequests",title:"# Requests"},{key:"numFailures",title:"# Fails"},{key:"medianResponseTime",title:"Median (ms)",round:2},...nge,{key:"avgResponseTime",title:"Average (ms)",round:2},{key:"minResponseTime",title:"Min (ms)"},{key:"maxResponseTime",title:"Max (ms)"},{key:"avgContentLength",title:"Average size (bytes)",round:2},{key:"currentRps",title:"Current RPS",round:2},{key:"currentFailPerSec",title:"Current Failures/s",round:2}];function j6({stats:e}){const{selectedColumns:t,addColumn:r,removeColumn:n,filteredStructure:i}=rge(gE);return D.jsxs(D.Fragment,{children:[D.jsx(tge,{addColumn:r,removeColumn:n,selectedColumns:t,structure:gE}),D.jsx(qf,{hasTotalRow:!0,rows:e,structure:i})]})}const ige=({ui:{stats:e}})=>({stats:e}),age=Ln(ige)(j6);/*! *****************************************************************************
172
172
  Copyright (c) Microsoft Corporation.
173
173
 
174
174
  Permission to use, copy, modify, and/or distribute this software for any
@@ -7,7 +7,7 @@
7
7
  <meta name="theme-color" content="#000000" />
8
8
 
9
9
  <title>Locust</title>
10
- <script type="module" crossorigin src="./assets/index-fd3e763b.js"></script>
10
+ <script type="module" crossorigin src="./assets/index-941b6e82.js"></script>
11
11
  </head>
12
12
  <body>
13
13
  <div id="root"></div>
@@ -7,7 +7,7 @@
7
7
  <meta name="theme-color" content="#000000" />
8
8
 
9
9
  <title>Locust</title>
10
- <script type="module" crossorigin src="./assets/index-fd3e763b.js"></script>
10
+ <script type="module" crossorigin src="./assets/index-941b6e82.js"></script>
11
11
  </head>
12
12
  <body>
13
13
  <div id="root"></div>
@@ -6,8 +6,8 @@ import { ISwarmException } from 'types/ui.types';
6
6
 
7
7
  const tableStructure = [
8
8
  { key: 'count', title: '# occurrences' },
9
- { key: 'msg', title: 'Message' },
10
- { key: 'traceback', title: 'Traceback' },
9
+ { key: 'msg', title: 'Message', markdown: true },
10
+ { key: 'traceback', title: 'Traceback', markdown: true },
11
11
  ];
12
12
 
13
13
  export function ExceptionsTable({ exceptions }: { exceptions: ISwarmException[] }) {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: locust
3
- Version: 2.24.1.dev21
3
+ Version: 2.24.2.dev3
4
4
  Summary: Developer friendly load testing framework
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://github.com/locustio/locust
@@ -226,7 +226,7 @@ locust/webui/dist/auth.html
226
226
  locust/webui/dist/index.html
227
227
  locust/webui/dist/report.html
228
228
  locust/webui/dist/assets/favicon.ico
229
- locust/webui/dist/assets/index-fd3e763b.js
229
+ locust/webui/dist/assets/index-941b6e82.js
230
230
  locust/webui/dist/assets/logo.png
231
231
  locust/webui/public/report.html
232
232
  locust/webui/public/assets/favicon.ico
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