locust 2.18.1.dev10__tar.gz → 2.18.1.dev16__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.

Potentially problematic release.


This version of locust might be problematic. Click here for more details.

Files changed (291) hide show
  1. {locust-2.18.1.dev10/locust.egg-info → locust-2.18.1.dev16}/PKG-INFO +1 -1
  2. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/_version.py +2 -2
  3. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/log.py +15 -5
  4. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_web.py +15 -1
  5. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/web.py +20 -0
  6. locust-2.18.1.dev16/locust/webui/dist/assets/index-b46361c2.js +236 -0
  7. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/dist/index.html +1 -1
  8. locust-2.18.1.dev16/locust/webui/src/components/LogViewer/LogViewer.tsx +23 -0
  9. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Tabs/Tabs.constants.tsx +6 -0
  10. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/api/swarm.ts +17 -3
  11. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/types/ui.types.ts +4 -0
  12. {locust-2.18.1.dev10 → locust-2.18.1.dev16/locust.egg-info}/PKG-INFO +1 -1
  13. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust.egg-info/SOURCES.txt +2 -0
  14. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.coveragerc +0 -0
  15. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.dockerignore +0 -0
  16. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.git-blame-ignore-revs +0 -0
  17. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.gitattributes +0 -0
  18. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.github/CONTRIBUTING.md +0 -0
  19. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  20. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  21. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  22. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.github/workflows/stale.yml +0 -0
  23. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.github/workflows/tests.yml +0 -0
  24. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.gitignore +0 -0
  25. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.readthedocs.yaml +0 -0
  26. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.vscode/launch.json +0 -0
  27. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.vscode/launch_locust.json +0 -0
  28. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.vscode/settings.json +0 -0
  29. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/CHANGELOG.md +0 -0
  30. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/Dockerfile +0 -0
  31. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/LICENSE +0 -0
  32. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/MANIFEST.in +0 -0
  33. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/Makefile +0 -0
  34. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/README +0 -0
  35. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/README.md +0 -0
  36. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/SECURITY.md +0 -0
  37. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/Vagrantfile +0 -0
  38. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/benchmarks/dispatch.py +0 -0
  39. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/_static/theme-overrides.css +0 -0
  40. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/api.rst +0 -0
  41. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/changelog.rst +0 -0
  42. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/conf.py +0 -0
  43. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/configuration.rst +0 -0
  44. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/custom-load-shape.rst +0 -0
  45. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/developing-locust.rst +0 -0
  46. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/extending-locust.rst +0 -0
  47. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/further-reading.rst +0 -0
  48. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/history.rst +0 -0
  49. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/images/modern-webui-splash-screenshot.png +0 -0
  50. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/images/number_of_users.png +0 -0
  51. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/images/response_times.png +0 -0
  52. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/images/total_requests_per_second.png +0 -0
  53. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/images/userclass_picker_example.png +0 -0
  54. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/images/webui-running-statistics.png +0 -0
  55. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/images/webui-splash-screenshot.png +0 -0
  56. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/increase-performance.rst +0 -0
  57. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/index.rst +0 -0
  58. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/installation.rst +0 -0
  59. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/logging.rst +0 -0
  60. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/quickstart.rst +0 -0
  61. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/requirements.txt +0 -0
  62. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/retrieving-stats.rst +0 -0
  63. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/running-cloud-integration.rst +0 -0
  64. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/running-distributed.rst +0 -0
  65. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/running-in-debugger.rst +0 -0
  66. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/running-in-docker.rst +0 -0
  67. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/running-without-web-ui.rst +0 -0
  68. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/tasksets.rst +0 -0
  69. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/testing-other-systems.rst +0 -0
  70. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/use-as-lib.rst +0 -0
  71. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/what-is-locust.rst +0 -0
  72. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/writing-a-locustfile.rst +0 -0
  73. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/add_command_line_argument.py +0 -0
  74. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/basic.py +0 -0
  75. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/browse_docs_sequence_test.py +0 -0
  76. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/browse_docs_test.py +0 -0
  77. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_messages.py +0 -0
  78. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_shape/double_wave.py +0 -0
  79. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_shape/stages.py +0 -0
  80. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_shape/staging_user_classes.py +0 -0
  81. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_shape/step_load.py +0 -0
  82. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_shape/wait_user_count.py +0 -0
  83. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_wait_function.py +0 -0
  84. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_xmlrpc_client/server.py +0 -0
  85. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_xmlrpc_client/xmlrpc_locustfile.py +0 -0
  86. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/debugging.py +0 -0
  87. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/debugging_advanced.py +0 -0
  88. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/docker-compose/docker-compose.yml +0 -0
  89. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/dynamic_user_credentials.py +0 -0
  90. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/events.py +0 -0
  91. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/extend_modern_web_ui.py +0 -0
  92. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/extend_web_ui/extend.py +0 -0
  93. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/extend_web_ui/static/custom-stats-table.css +0 -0
  94. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/extend_web_ui/static/extend.js +0 -0
  95. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/extend_web_ui/templates/extend.html +0 -0
  96. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/fast_http_locust.py +0 -0
  97. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/grpc/grpc_user.py +0 -0
  98. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/grpc/hello.proto +0 -0
  99. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/grpc/hello_pb2.py +0 -0
  100. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/grpc/hello_pb2_grpc.py +0 -0
  101. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/grpc/hello_server.py +0 -0
  102. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/grpc/locustfile.py +0 -0
  103. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/locustfile.py +0 -0
  104. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/manual_stats_reporting.py +0 -0
  105. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/multiple_hosts.py +0 -0
  106. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/nested_inline_tasksets.py +0 -0
  107. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/rest.py +0 -0
  108. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/sdk_session_patching/session_patch_locustfile.py +0 -0
  109. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/semaphore_wait.py +0 -0
  110. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/stop_on_threshold.py +0 -0
  111. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/terraform/aws/README.md +0 -0
  112. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/terraform/aws/data_subnet.tf +0 -0
  113. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/terraform/aws/main.tf +0 -0
  114. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/terraform/aws/output.tf +0 -0
  115. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/terraform/aws/plan/basic.py +0 -0
  116. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/terraform/aws/provisioner.tf +0 -0
  117. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/terraform/aws/variables.tf +0 -0
  118. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/test_data_management.py +0 -0
  119. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/use_as_lib.py +0 -0
  120. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/vagrant/README.md +0 -0
  121. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/vagrant/supervisord.conf +0 -0
  122. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/worker_index.py +0 -0
  123. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/generate_changelog.py +0 -0
  124. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/__init__.py +0 -0
  125. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/__main__.py +0 -0
  126. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/argument_parser.py +0 -0
  127. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/clients.py +0 -0
  128. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/contrib/__init__.py +0 -0
  129. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/contrib/fasthttp.py +0 -0
  130. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/debug.py +0 -0
  131. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/dispatch.py +0 -0
  132. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/env.py +0 -0
  133. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/event.py +0 -0
  134. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/exception.py +0 -0
  135. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/html.py +0 -0
  136. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/input_events.py +0 -0
  137. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/main.py +0 -0
  138. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/py.typed +0 -0
  139. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/rpc/__init__.py +0 -0
  140. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/rpc/protocol.py +0 -0
  141. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/rpc/zmqrpc.py +0 -0
  142. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/runners.py +0 -0
  143. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/shape.py +0 -0
  144. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/chart.js +0 -0
  145. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/css/application.css +0 -0
  146. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/css/application.css.map +0 -0
  147. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/css/tables.css +0 -0
  148. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/css/tables.css.map +0 -0
  149. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/echarts.common.min.js +0 -0
  150. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/img/favicon.ico +0 -0
  151. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/img/logo.png +0 -0
  152. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/img/ui-screenshot-charts.png +0 -0
  153. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/img/ui-screenshot-start-test.png +0 -0
  154. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/img/ui-screenshot-stats.png +0 -0
  155. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/img/ui-screenshot-workers.png +0 -0
  156. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/jquery-1.11.3.min.js +0 -0
  157. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/jquery.jqote2.min.js +0 -0
  158. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/jquery.tools.min.js +0 -0
  159. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/locust.js +0 -0
  160. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/sass/_base.sass +0 -0
  161. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/sass/_mixins.sass +0 -0
  162. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/sass/application.sass +0 -0
  163. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/sass/tables.sass +0 -0
  164. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/tasks.js +0 -0
  165. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/vintage.js +0 -0
  166. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/stats.py +0 -0
  167. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/templates/index.html +0 -0
  168. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/templates/report.html +0 -0
  169. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/templates/stats_data.html +0 -0
  170. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/__init__.py +0 -0
  171. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/fake_module1_for_env_test.py +0 -0
  172. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/fake_module2_for_env_test.py +0 -0
  173. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/mock_locustfile.py +0 -0
  174. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/mock_logging.py +0 -0
  175. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_debugging.py +0 -0
  176. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_dispatch.py +0 -0
  177. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_env.py +0 -0
  178. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_fasthttp.py +0 -0
  179. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_http.py +0 -0
  180. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_load_locustfile.py +0 -0
  181. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_locust_class.py +0 -0
  182. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_log.py +0 -0
  183. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_main.py +0 -0
  184. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_old_wait_api.py +0 -0
  185. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_parser.py +0 -0
  186. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_runners.py +0 -0
  187. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_sequential_taskset.py +0 -0
  188. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_stats.py +0 -0
  189. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_tags.py +0 -0
  190. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_taskratio.py +0 -0
  191. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_users.py +0 -0
  192. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_util.py +0 -0
  193. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_wait_time.py +0 -0
  194. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_zmqrpc.py +0 -0
  195. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/testcases.py +0 -0
  196. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/util.py +0 -0
  197. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/user/__init__.py +0 -0
  198. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/user/inspectuser.py +0 -0
  199. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/user/sequential_taskset.py +0 -0
  200. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/user/task.py +0 -0
  201. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/user/users.py +0 -0
  202. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/user/wait_time.py +0 -0
  203. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/util/__init__.py +0 -0
  204. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/util/cache.py +0 -0
  205. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/util/deprecation.py +0 -0
  206. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/util/exception_handler.py +0 -0
  207. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/util/load_locustfile.py +0 -0
  208. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/util/rounding.py +0 -0
  209. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/util/timespan.py +0 -0
  210. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/.eslintrc +0 -0
  211. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/.gitignore +0 -0
  212. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/.prettierrc +0 -0
  213. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/dev.html +0 -0
  214. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/dist/assets/favicon.ico +0 -0
  215. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/dist/assets/logo.png +0 -0
  216. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/dist/report.html +0 -0
  217. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/index.html +0 -0
  218. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/package.json +0 -0
  219. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/public/assets/favicon.ico +0 -0
  220. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/public/assets/logo.png +0 -0
  221. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/public/report.html +0 -0
  222. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/App.tsx +0 -0
  223. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/Report.tsx +0 -0
  224. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/DataTable/DataTable.tsx +0 -0
  225. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/ExceptionsTable/ExceptionsTable.tsx +0 -0
  226. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/FailuresTable/FailuresTable.tsx +0 -0
  227. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Form/Form.tsx +0 -0
  228. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Form/Select.tsx +0 -0
  229. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Layout/Footer/About.tsx +0 -0
  230. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Layout/Footer/Footer.tsx +0 -0
  231. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Layout/Layout.tsx +0 -0
  232. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Layout/Navbar/DarkLightToggle.tsx +0 -0
  233. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Layout/Navbar/Navbar.tsx +0 -0
  234. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.tsx +0 -0
  235. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/LineChart/LineChart.tsx +0 -0
  236. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Modal/Modal.tsx +0 -0
  237. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Reports/Reports.tsx +0 -0
  238. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.tsx +0 -0
  239. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/StateButtons/EditButton.tsx +0 -0
  240. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/StateButtons/NewTestButton.tsx +0 -0
  241. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/StateButtons/ResetButton.tsx +0 -0
  242. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/StateButtons/StateButtons.tsx +0 -0
  243. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/StateButtons/StopButton.tsx +0 -0
  244. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/StatsTable/StatsTable.tsx +0 -0
  245. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/SwarmCharts/SwarmCharts.tsx +0 -0
  246. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/SwarmForm/SwarmCustomParmeters.tsx +0 -0
  247. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/SwarmForm/SwarmEditForm.tsx +0 -0
  248. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/SwarmForm/SwarmForm.tsx +0 -0
  249. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/SwarnRatios/SwarmRatios.tsx +0 -0
  250. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Table/Table.tsx +0 -0
  251. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Tabs/Tabs.tsx +0 -0
  252. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/WorkersTable/WorkersTable.tsx +0 -0
  253. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/constants/swarm.tsx +0 -0
  254. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/global.d.ts +0 -0
  255. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/hooks/useAsync.ts +0 -0
  256. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/hooks/useInterval.ts +0 -0
  257. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/hooks/useSwarmUi.ts +0 -0
  258. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/index.tsx +0 -0
  259. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/hooks.ts +0 -0
  260. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/slice/root.slice.ts +0 -0
  261. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/slice/swarm.slice.ts +0 -0
  262. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/slice/theme.slice.ts +0 -0
  263. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/slice/ui.slice.ts +0 -0
  264. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/slice/url.slice.ts +0 -0
  265. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/store.ts +0 -0
  266. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/utils.ts +0 -0
  267. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/styles/theme.ts +0 -0
  268. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/types/swarm.types.ts +0 -0
  269. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/types/tab.types.ts +0 -0
  270. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/types/table.types.ts +0 -0
  271. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/utils/number.ts +0 -0
  272. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/utils/object.ts +0 -0
  273. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/utils/string.ts +0 -0
  274. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/utils/url.ts +0 -0
  275. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/tsconfig.json +0 -0
  276. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/vite.config.ts +0 -0
  277. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/yarn.lock +0 -0
  278. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust.egg-info/dependency_links.txt +0 -0
  279. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust.egg-info/entry_points.txt +0 -0
  280. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust.egg-info/not-zip-safe +0 -0
  281. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust.egg-info/requires.txt +0 -0
  282. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust.egg-info/top_level.txt +0 -0
  283. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/package.json +0 -0
  284. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/pyproject.toml +0 -0
  285. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/scripts/locustfile.py +0 -0
  286. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/scripts/run-disributed-headless.sh +0 -0
  287. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/scripts/run-disributed-web.sh +0 -0
  288. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/scripts/run-local-headless.sh +0 -0
  289. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/scripts/run-local-web.sh +0 -0
  290. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/setup.cfg +0 -0
  291. {locust-2.18.1.dev10 → locust-2.18.1.dev16}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: locust
3
- Version: 2.18.1.dev10
3
+ Version: 2.18.1.dev16
4
4
  Summary: Developer friendly load testing framework
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://locust.io/
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '2.18.1.dev10'
16
- __version_tuple__ = version_tuple = (2, 18, 1, 'dev10')
15
+ __version__ = version = '2.18.1.dev16'
16
+ __version_tuple__ = version_tuple = (2, 18, 1, 'dev16')
@@ -9,6 +9,15 @@ HOSTNAME = socket.gethostname()
9
9
  unhandled_greenlet_exception = False
10
10
 
11
11
 
12
+ class LogReader(logging.Handler):
13
+ def __init__(self):
14
+ super().__init__()
15
+ self.logs = []
16
+
17
+ def emit(self, record):
18
+ self.logs.append(self.format(record))
19
+
20
+
12
21
  def setup_logging(loglevel, logfile=None):
13
22
  loglevel = loglevel.upper()
14
23
 
@@ -32,21 +41,22 @@ def setup_logging(loglevel, logfile=None):
32
41
  "class": "logging.StreamHandler",
33
42
  "formatter": "plain",
34
43
  },
44
+ "log_reader": {"class": "locust.log.LogReader", "formatter": "default"},
35
45
  },
36
46
  "loggers": {
37
47
  "locust": {
38
- "handlers": ["console"],
48
+ "handlers": ["console", "log_reader"],
39
49
  "level": loglevel,
40
50
  "propagate": False,
41
51
  },
42
52
  "locust.stats_logger": {
43
- "handlers": ["console_plain"],
53
+ "handlers": ["console_plain", "log_reader"],
44
54
  "level": "INFO",
45
55
  "propagate": False,
46
56
  },
47
57
  },
48
58
  "root": {
49
- "handlers": ["console"],
59
+ "handlers": ["console", "log_reader"],
50
60
  "level": loglevel,
51
61
  },
52
62
  }
@@ -58,8 +68,8 @@ def setup_logging(loglevel, logfile=None):
58
68
  "filename": logfile,
59
69
  "formatter": "default",
60
70
  }
61
- LOGGING_CONFIG["loggers"]["locust"]["handlers"] = ["file"]
62
- LOGGING_CONFIG["root"]["handlers"] = ["file"]
71
+ LOGGING_CONFIG["loggers"]["locust"]["handlers"] = ["file", "log_reader"]
72
+ LOGGING_CONFIG["root"]["handlers"] = ["file", "log_reader"]
63
73
 
64
74
  logging.config.dictConfig(LOGGING_CONFIG)
65
75
 
@@ -5,13 +5,13 @@ import os
5
5
  import re
6
6
  import textwrap
7
7
  import traceback
8
+ import logging
8
9
  from io import StringIO
9
10
  from tempfile import NamedTemporaryFile, TemporaryDirectory
10
11
 
11
12
  import gevent
12
13
  import requests
13
14
  from pyquery import PyQuery as pq
14
-
15
15
  import locust
16
16
  from locust import constant, LoadTestShape
17
17
  from locust.argument_parser import get_parser, parse_options
@@ -21,6 +21,7 @@ from locust.runners import Runner
21
21
  from locust import stats
22
22
  from locust.stats import StatsCSVFileWriter
23
23
  from locust.web import WebUI
24
+ from locust.log import LogReader
24
25
 
25
26
  from .mock_locustfile import mock_locustfile
26
27
  from .testcases import LocustTestCase
@@ -1013,6 +1014,19 @@ class TestWebUI(LocustTestCase, _HeaderCheckMixin):
1013
1014
  self.assertIn("Script: <span>locust.py</span>", str(d))
1014
1015
  self.assertIn("Target Host: <span>http://localhost</span>", str(d))
1015
1016
 
1017
+ def test_logs(self):
1018
+ log_handler = LogReader()
1019
+ log_handler.name = "log_reader"
1020
+ log_handler.setLevel(logging.INFO)
1021
+ logger = logging.getLogger("root")
1022
+ logger.addHandler(log_handler)
1023
+ log_line = "some log info"
1024
+ logger.info(log_line)
1025
+
1026
+ response = requests.get("http://127.0.0.1:%i/logs" % self.web_port)
1027
+
1028
+ self.assertIn(log_line, response.json().get("logs"))
1029
+
1016
1030
 
1017
1031
  class TestWebUIAuth(LocustTestCase):
1018
1032
  def setUp(self):
@@ -136,6 +136,12 @@ class WebUI:
136
136
  if not delayed_start:
137
137
  self.start()
138
138
 
139
+ @app.errorhandler(Exception)
140
+ def handle_exception(error):
141
+ error_message = str(error)
142
+ logger.log(logging.CRITICAL, error_message)
143
+ return make_response(error_message, 500)
144
+
139
145
  @app.route("/assets/<path:path>")
140
146
  def send_assets(path):
141
147
  webui_build_path = self.webui_build_path
@@ -478,6 +484,20 @@ class WebUI:
478
484
  }
479
485
  return task_data
480
486
 
487
+ @app.route("/logs")
488
+ @self.auth_required_if_enabled
489
+ def logs():
490
+ log_reader_handler = [
491
+ handler for handler in logging.getLogger("root").handlers if handler.name == "log_reader"
492
+ ]
493
+
494
+ if log_reader_handler:
495
+ logs = log_reader_handler[0].logs
496
+ else:
497
+ logs = []
498
+
499
+ return jsonify({"logs": logs})
500
+
481
501
  def start(self):
482
502
  self.greenlet = gevent.spawn(self.start_server)
483
503
  self.greenlet.link_exception(greenlet_exception_handler)