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.
- {locust-2.18.1.dev10/locust.egg-info → locust-2.18.1.dev16}/PKG-INFO +1 -1
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/_version.py +2 -2
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/log.py +15 -5
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_web.py +15 -1
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/web.py +20 -0
- locust-2.18.1.dev16/locust/webui/dist/assets/index-b46361c2.js +236 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/dist/index.html +1 -1
- locust-2.18.1.dev16/locust/webui/src/components/LogViewer/LogViewer.tsx +23 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Tabs/Tabs.constants.tsx +6 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/api/swarm.ts +17 -3
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/types/ui.types.ts +4 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16/locust.egg-info}/PKG-INFO +1 -1
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust.egg-info/SOURCES.txt +2 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.coveragerc +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.dockerignore +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.git-blame-ignore-revs +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.gitattributes +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.github/CONTRIBUTING.md +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.github/workflows/stale.yml +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.github/workflows/tests.yml +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.gitignore +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.readthedocs.yaml +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.vscode/launch.json +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.vscode/launch_locust.json +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/.vscode/settings.json +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/CHANGELOG.md +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/Dockerfile +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/LICENSE +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/MANIFEST.in +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/Makefile +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/README +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/README.md +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/SECURITY.md +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/Vagrantfile +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/benchmarks/dispatch.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/_static/theme-overrides.css +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/api.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/changelog.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/conf.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/configuration.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/custom-load-shape.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/developing-locust.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/extending-locust.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/further-reading.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/history.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/images/modern-webui-splash-screenshot.png +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/images/number_of_users.png +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/images/response_times.png +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/images/total_requests_per_second.png +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/images/userclass_picker_example.png +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/images/webui-running-statistics.png +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/images/webui-splash-screenshot.png +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/increase-performance.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/index.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/installation.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/logging.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/quickstart.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/requirements.txt +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/retrieving-stats.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/running-cloud-integration.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/running-distributed.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/running-in-debugger.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/running-in-docker.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/running-without-web-ui.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/tasksets.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/testing-other-systems.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/use-as-lib.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/what-is-locust.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/docs/writing-a-locustfile.rst +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/add_command_line_argument.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/basic.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/browse_docs_sequence_test.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/browse_docs_test.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_messages.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_shape/double_wave.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_shape/stages.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_shape/staging_user_classes.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_shape/step_load.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_shape/wait_user_count.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_wait_function.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_xmlrpc_client/server.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/custom_xmlrpc_client/xmlrpc_locustfile.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/debugging.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/debugging_advanced.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/docker-compose/docker-compose.yml +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/dynamic_user_credentials.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/events.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/extend_modern_web_ui.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/extend_web_ui/extend.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/extend_web_ui/static/custom-stats-table.css +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/extend_web_ui/static/extend.js +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/extend_web_ui/templates/extend.html +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/fast_http_locust.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/grpc/grpc_user.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/grpc/hello.proto +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/grpc/hello_pb2.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/grpc/hello_pb2_grpc.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/grpc/hello_server.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/grpc/locustfile.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/locustfile.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/manual_stats_reporting.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/multiple_hosts.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/nested_inline_tasksets.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/rest.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/sdk_session_patching/session_patch_locustfile.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/semaphore_wait.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/stop_on_threshold.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/terraform/aws/README.md +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/terraform/aws/data_subnet.tf +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/terraform/aws/main.tf +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/terraform/aws/output.tf +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/terraform/aws/plan/basic.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/terraform/aws/provisioner.tf +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/terraform/aws/variables.tf +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/test_data_management.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/use_as_lib.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/vagrant/README.md +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/vagrant/supervisord.conf +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/examples/worker_index.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/generate_changelog.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/__init__.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/__main__.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/argument_parser.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/clients.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/contrib/__init__.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/contrib/fasthttp.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/debug.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/dispatch.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/env.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/event.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/exception.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/html.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/input_events.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/main.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/py.typed +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/rpc/__init__.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/rpc/protocol.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/rpc/zmqrpc.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/runners.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/shape.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/chart.js +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/css/application.css +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/css/application.css.map +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/css/tables.css +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/css/tables.css.map +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/echarts.common.min.js +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/img/favicon.ico +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/img/logo.png +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/img/ui-screenshot-charts.png +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/img/ui-screenshot-start-test.png +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/img/ui-screenshot-stats.png +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/img/ui-screenshot-workers.png +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/jquery-1.11.3.min.js +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/jquery.jqote2.min.js +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/jquery.tools.min.js +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/locust.js +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/sass/_base.sass +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/sass/_mixins.sass +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/sass/application.sass +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/sass/tables.sass +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/tasks.js +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/static/vintage.js +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/stats.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/templates/index.html +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/templates/report.html +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/templates/stats_data.html +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/__init__.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/fake_module1_for_env_test.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/fake_module2_for_env_test.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/mock_locustfile.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/mock_logging.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_debugging.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_dispatch.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_env.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_fasthttp.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_http.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_load_locustfile.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_locust_class.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_log.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_main.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_old_wait_api.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_parser.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_runners.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_sequential_taskset.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_stats.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_tags.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_taskratio.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_users.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_util.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_wait_time.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/test_zmqrpc.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/testcases.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/test/util.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/user/__init__.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/user/inspectuser.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/user/sequential_taskset.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/user/task.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/user/users.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/user/wait_time.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/util/__init__.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/util/cache.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/util/deprecation.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/util/exception_handler.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/util/load_locustfile.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/util/rounding.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/util/timespan.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/.eslintrc +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/.gitignore +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/.prettierrc +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/dev.html +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/dist/assets/favicon.ico +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/dist/assets/logo.png +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/dist/report.html +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/index.html +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/package.json +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/public/assets/favicon.ico +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/public/assets/logo.png +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/public/report.html +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/App.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/Report.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/DataTable/DataTable.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/ExceptionsTable/ExceptionsTable.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/FailuresTable/FailuresTable.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Form/Form.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Form/Select.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Layout/Footer/About.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Layout/Footer/Footer.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Layout/Layout.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Layout/Navbar/DarkLightToggle.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Layout/Navbar/Navbar.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Layout/Navbar/SwarmMonitor.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/LineChart/LineChart.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Modal/Modal.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Reports/Reports.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/ResponseTimeTable/ResponseTimeTable.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/StateButtons/EditButton.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/StateButtons/NewTestButton.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/StateButtons/ResetButton.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/StateButtons/StateButtons.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/StateButtons/StopButton.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/StatsTable/StatsTable.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/SwarmCharts/SwarmCharts.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/SwarmForm/SwarmCustomParmeters.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/SwarmForm/SwarmEditForm.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/SwarmForm/SwarmForm.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/SwarnRatios/SwarmRatios.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Table/Table.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/Tabs/Tabs.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/components/WorkersTable/WorkersTable.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/constants/swarm.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/global.d.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/hooks/useAsync.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/hooks/useInterval.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/hooks/useSwarmUi.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/index.tsx +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/hooks.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/slice/root.slice.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/slice/swarm.slice.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/slice/theme.slice.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/slice/ui.slice.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/slice/url.slice.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/store.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/redux/utils.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/styles/theme.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/types/swarm.types.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/types/tab.types.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/types/table.types.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/utils/number.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/utils/object.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/utils/string.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/src/utils/url.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/tsconfig.json +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/vite.config.ts +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust/webui/yarn.lock +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust.egg-info/dependency_links.txt +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust.egg-info/entry_points.txt +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust.egg-info/not-zip-safe +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust.egg-info/requires.txt +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/locust.egg-info/top_level.txt +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/package.json +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/pyproject.toml +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/scripts/locustfile.py +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/scripts/run-disributed-headless.sh +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/scripts/run-disributed-web.sh +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/scripts/run-local-headless.sh +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/scripts/run-local-web.sh +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/setup.cfg +0 -0
- {locust-2.18.1.dev10 → locust-2.18.1.dev16}/tox.ini +0 -0
@@ -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.
|
16
|
-
__version_tuple__ = version_tuple = (2, 18, 1, '
|
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)
|