mite 2.5.0__tar.gz → 2.5.2__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 (157) hide show
  1. {mite-2.5.0 → mite-2.5.2}/Dockerfile +1 -1
  2. {mite-2.5.0 → mite-2.5.2}/PKG-INFO +1 -1
  3. {mite-2.5.0 → mite-2.5.2}/docker_compose.yml +1 -1
  4. {mite-2.5.0 → mite-2.5.2}/mite/cli/test.py +14 -8
  5. {mite-2.5.0 → mite-2.5.2}/mite/runner.py +10 -2
  6. {mite-2.5.0 → mite-2.5.2}/mite.egg-info/PKG-INFO +1 -1
  7. {mite-2.5.0 → mite-2.5.2}/test-requirements.txt +2 -1
  8. {mite-2.5.0 → mite-2.5.2}/.dockerignore +0 -0
  9. {mite-2.5.0 → mite-2.5.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  10. {mite-2.5.0 → mite-2.5.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  11. {mite-2.5.0 → mite-2.5.2}/.github/pull_request_template.md +0 -0
  12. {mite-2.5.0 → mite-2.5.2}/.gitignore +0 -0
  13. {mite-2.5.0 → mite-2.5.2}/.isort.cfg +0 -0
  14. {mite-2.5.0 → mite-2.5.2}/.pre-commit-config.yaml +0 -0
  15. {mite-2.5.0 → mite-2.5.2}/.travis.yml +0 -0
  16. {mite-2.5.0 → mite-2.5.2}/CODE_OF_CONDUCT.md +0 -0
  17. {mite-2.5.0 → mite-2.5.2}/CONTRIBUTING.md +0 -0
  18. {mite-2.5.0 → mite-2.5.2}/DEV.md +0 -0
  19. {mite-2.5.0 → mite-2.5.2}/Dockerfile.perftest +0 -0
  20. {mite-2.5.0 → mite-2.5.2}/LICENSE +0 -0
  21. {mite-2.5.0 → mite-2.5.2}/MANIFEST.in +0 -0
  22. {mite-2.5.0 → mite-2.5.2}/README.md +0 -0
  23. {mite-2.5.0 → mite-2.5.2}/cd-scripts/cdBuild-1.sh +0 -0
  24. {mite-2.5.0 → mite-2.5.2}/cd-scripts/cdRelease.py +0 -0
  25. {mite-2.5.0 → mite-2.5.2}/cd-scripts/cdTagRelease.sh +0 -0
  26. {mite-2.5.0 → mite-2.5.2}/cd-scripts/runTests.sh +0 -0
  27. {mite-2.5.0 → mite-2.5.2}/cd.yml +0 -0
  28. {mite-2.5.0 → mite-2.5.2}/dev-requirements.txt +0 -0
  29. {mite-2.5.0 → mite-2.5.2}/docker_compose_monitoring.yml +0 -0
  30. {mite-2.5.0 → mite-2.5.2}/docs/Makefile +0 -0
  31. {mite-2.5.0 → mite-2.5.2}/docs/components.rst +0 -0
  32. {mite-2.5.0 → mite-2.5.2}/docs/conf.py +0 -0
  33. {mite-2.5.0 → mite-2.5.2}/docs/config.rst +0 -0
  34. {mite-2.5.0 → mite-2.5.2}/docs/design-deployment.rst +0 -0
  35. {mite-2.5.0 → mite-2.5.2}/docs/index.rst +0 -0
  36. {mite-2.5.0 → mite-2.5.2}/docs/journeys.rst +0 -0
  37. {mite-2.5.0 → mite-2.5.2}/docs/notes.txt +0 -0
  38. {mite-2.5.0 → mite-2.5.2}/docs/prometheus.rst +0 -0
  39. {mite-2.5.0 → mite-2.5.2}/docs/stats.rst +0 -0
  40. {mite-2.5.0 → mite-2.5.2}/docs/volume-model.rst +0 -0
  41. {mite-2.5.0 → mite-2.5.2}/grafana/Dockerfile +0 -0
  42. {mite-2.5.0 → mite-2.5.2}/grafana/config.ini +0 -0
  43. {mite-2.5.0 → mite-2.5.2}/grafana/provisioning/dashboards/dashboards.yml +0 -0
  44. {mite-2.5.0 → mite-2.5.2}/grafana/provisioning/dashboards/grafana_dashboard_template.json +0 -0
  45. {mite-2.5.0 → mite-2.5.2}/grafana/provisioning/dashboards/mite_docker.json +0 -0
  46. {mite-2.5.0 → mite-2.5.2}/grafana/provisioning/datasources/datasources.yml +0 -0
  47. {mite-2.5.0 → mite-2.5.2}/local/Makefile +0 -0
  48. {mite-2.5.0 → mite-2.5.2}/local/README.md +0 -0
  49. {mite-2.5.0 → mite-2.5.2}/local/demo.py +0 -0
  50. {mite-2.5.0 → mite-2.5.2}/local/run_mite.sh +0 -0
  51. {mite-2.5.0 → mite-2.5.2}/mite/__init__.py +0 -0
  52. {mite-2.5.0 → mite-2.5.2}/mite/__main__.py +0 -0
  53. {mite-2.5.0 → mite-2.5.2}/mite/cli/__init__.py +0 -0
  54. {mite-2.5.0 → mite-2.5.2}/mite/cli/cat.py +0 -0
  55. {mite-2.5.0 → mite-2.5.2}/mite/cli/collector.py +0 -0
  56. {mite-2.5.0 → mite-2.5.2}/mite/cli/common.py +0 -0
  57. {mite-2.5.0 → mite-2.5.2}/mite/cli/duplicator.py +0 -0
  58. {mite-2.5.0 → mite-2.5.2}/mite/cli/receiver.py +0 -0
  59. {mite-2.5.0 → mite-2.5.2}/mite/cli/stats.py +0 -0
  60. {mite-2.5.0 → mite-2.5.2}/mite/collector.py +0 -0
  61. {mite-2.5.0 → mite-2.5.2}/mite/config.py +0 -0
  62. {mite-2.5.0 → mite-2.5.2}/mite/context.py +0 -0
  63. {mite-2.5.0 → mite-2.5.2}/mite/controller.py +0 -0
  64. {mite-2.5.0 → mite-2.5.2}/mite/datapools.py +0 -0
  65. {mite-2.5.0 → mite-2.5.2}/mite/example.py +0 -0
  66. {mite-2.5.0 → mite-2.5.2}/mite/exceptions.py +0 -0
  67. {mite-2.5.0 → mite-2.5.2}/mite/har_to_mite.py +0 -0
  68. {mite-2.5.0 → mite-2.5.2}/mite/logoutput.py +0 -0
  69. {mite-2.5.0 → mite-2.5.2}/mite/nanomsg.py +0 -0
  70. {mite-2.5.0 → mite-2.5.2}/mite/recorder.py +0 -0
  71. {mite-2.5.0 → mite-2.5.2}/mite/s3datapools.py +0 -0
  72. {mite-2.5.0 → mite-2.5.2}/mite/scenario.py +0 -0
  73. {mite-2.5.0 → mite-2.5.2}/mite/stats.py +0 -0
  74. {mite-2.5.0 → mite-2.5.2}/mite/test.py +0 -0
  75. {mite-2.5.0 → mite-2.5.2}/mite/utils.py +0 -0
  76. {mite-2.5.0 → mite-2.5.2}/mite/volume_model.py +0 -0
  77. {mite-2.5.0 → mite-2.5.2}/mite/web/__init__.py +0 -0
  78. {mite-2.5.0 → mite-2.5.2}/mite/web/prometheus.py +0 -0
  79. {mite-2.5.0 → mite-2.5.2}/mite/zmq.py +0 -0
  80. {mite-2.5.0 → mite-2.5.2}/mite.egg-info/SOURCES.txt +0 -0
  81. {mite-2.5.0 → mite-2.5.2}/mite.egg-info/dependency_links.txt +0 -0
  82. {mite-2.5.0 → mite-2.5.2}/mite.egg-info/entry_points.txt +0 -0
  83. {mite-2.5.0 → mite-2.5.2}/mite.egg-info/requires.txt +0 -0
  84. {mite-2.5.0 → mite-2.5.2}/mite.egg-info/top_level.txt +0 -0
  85. {mite-2.5.0 → mite-2.5.2}/mite_amqp/__init__.py +0 -0
  86. {mite-2.5.0 → mite-2.5.2}/mite_browser/__init__.py +0 -0
  87. {mite-2.5.0 → mite-2.5.2}/mite_finagle/README.md +0 -0
  88. {mite-2.5.0 → mite-2.5.2}/mite_finagle/__init__.py +0 -0
  89. {mite-2.5.0 → mite-2.5.2}/mite_finagle/mux.py +0 -0
  90. {mite-2.5.0 → mite-2.5.2}/mite_finagle/stats.py +0 -0
  91. {mite-2.5.0 → mite-2.5.2}/mite_finagle/tests/__init__.py +0 -0
  92. {mite-2.5.0 → mite-2.5.2}/mite_finagle/tests/conftest.py +0 -0
  93. {mite-2.5.0 → mite-2.5.2}/mite_finagle/tests/foo_service/Foo-remote +0 -0
  94. {mite-2.5.0 → mite-2.5.2}/mite_finagle/tests/foo_service/Foo.py +0 -0
  95. {mite-2.5.0 → mite-2.5.2}/mite_finagle/tests/foo_service/__init__.py +0 -0
  96. {mite-2.5.0 → mite-2.5.2}/mite_finagle/tests/foo_service/constants.py +0 -0
  97. {mite-2.5.0 → mite-2.5.2}/mite_finagle/tests/foo_service/ttypes.py +0 -0
  98. {mite-2.5.0 → mite-2.5.2}/mite_finagle/tests/foo_service.thrift +0 -0
  99. {mite-2.5.0 → mite-2.5.2}/mite_finagle/tests/test_integration.py +0 -0
  100. {mite-2.5.0 → mite-2.5.2}/mite_finagle/tests/test_mux.py +0 -0
  101. {mite-2.5.0 → mite-2.5.2}/mite_finagle/tests/test_thrift.py +0 -0
  102. {mite-2.5.0 → mite-2.5.2}/mite_finagle/thrift.py +0 -0
  103. {mite-2.5.0 → mite-2.5.2}/mite_http/__init__.py +0 -0
  104. {mite-2.5.0 → mite-2.5.2}/mite_http/stats.py +0 -0
  105. {mite-2.5.0 → mite-2.5.2}/mite_kafka/__init__.py +0 -0
  106. {mite-2.5.0 → mite-2.5.2}/mite_kafka/mite_kafka_example.py +0 -0
  107. {mite-2.5.0 → mite-2.5.2}/mite_kafka/stats.py +0 -0
  108. {mite-2.5.0 → mite-2.5.2}/mite_selenium/__init__.py +0 -0
  109. {mite-2.5.0 → mite-2.5.2}/mite_selenium/stats.py +0 -0
  110. {mite-2.5.0 → mite-2.5.2}/mite_websocket/__init__.py +0 -0
  111. {mite-2.5.0 → mite-2.5.2}/prometheus/Dockerfile +0 -0
  112. {mite-2.5.0 → mite-2.5.2}/prometheus/prometheus_config_docker.yml +0 -0
  113. {mite-2.5.0 → mite-2.5.2}/prometheus/prometheus_config_template.yml +0 -0
  114. {mite-2.5.0 → mite-2.5.2}/pyproject.toml +0 -0
  115. {mite-2.5.0 → mite-2.5.2}/requirements.txt +0 -0
  116. {mite-2.5.0 → mite-2.5.2}/setup.cfg +0 -0
  117. {mite-2.5.0 → mite-2.5.2}/setup.py +0 -0
  118. {mite-2.5.0 → mite-2.5.2}/test/legacy.py +0 -0
  119. {mite-2.5.0 → mite-2.5.2}/test/mocks/mock_collector.py +0 -0
  120. {mite-2.5.0 → mite-2.5.2}/test/mocks/mock_context.py +0 -0
  121. {mite-2.5.0 → mite-2.5.2}/test/mocks/mock_direct_receiver.py +0 -0
  122. {mite-2.5.0 → mite-2.5.2}/test/mocks/mock_direct_runner_transport.py +0 -0
  123. {mite-2.5.0 → mite-2.5.2}/test/mocks/mock_recorder_msg_http.py +0 -0
  124. {mite-2.5.0 → mite-2.5.2}/test/mocks/mock_selenium.py +0 -0
  125. {mite-2.5.0 → mite-2.5.2}/test/mocks/mock_sender.py +0 -0
  126. {mite-2.5.0 → mite-2.5.2}/test/perf/.gitignore +0 -0
  127. {mite-2.5.0 → mite-2.5.2}/test/perf/http_server.py +0 -0
  128. {mite-2.5.0 → mite-2.5.2}/test/perf/http_server_aiohttp.py +0 -0
  129. {mite-2.5.0 → mite-2.5.2}/test/perf/mite_perftest.py +0 -0
  130. {mite-2.5.0 → mite-2.5.2}/test/perf/perftest.py +0 -0
  131. {mite-2.5.0 → mite-2.5.2}/test/perf/run-perftest.sh +0 -0
  132. {mite-2.5.0 → mite-2.5.2}/test/perf/test-requirements.txt +0 -0
  133. {mite-2.5.0 → mite-2.5.2}/test/test.har +0 -0
  134. {mite-2.5.0 → mite-2.5.2}/test/test_collector.py +0 -0
  135. {mite-2.5.0 → mite-2.5.2}/test/test_config.py +0 -0
  136. {mite-2.5.0 → mite-2.5.2}/test/test_context.py +0 -0
  137. {mite-2.5.0 → mite-2.5.2}/test/test_controller.py +0 -0
  138. {mite-2.5.0 → mite-2.5.2}/test/test_datapools.py +0 -0
  139. {mite-2.5.0 → mite-2.5.2}/test/test_har_to_mite.py +0 -0
  140. {mite-2.5.0 → mite-2.5.2}/test/test_logging.py +0 -0
  141. {mite-2.5.0 → mite-2.5.2}/test/test_mite_amqp.py +0 -0
  142. {mite-2.5.0 → mite-2.5.2}/test/test_mite_browser.py +0 -0
  143. {mite-2.5.0 → mite-2.5.2}/test/test_mite_http.py +0 -0
  144. {mite-2.5.0 → mite-2.5.2}/test/test_mite_kafka.py +0 -0
  145. {mite-2.5.0 → mite-2.5.2}/test/test_mite_utils.py +0 -0
  146. {mite-2.5.0 → mite-2.5.2}/test/test_mite_websockets.py +0 -0
  147. {mite-2.5.0 → mite-2.5.2}/test/test_prometheus_mite.py +0 -0
  148. {mite-2.5.0 → mite-2.5.2}/test/test_recorder.py +0 -0
  149. {mite-2.5.0 → mite-2.5.2}/test/test_runner.py +0 -0
  150. {mite-2.5.0 → mite-2.5.2}/test/test_runner_tracker.py +0 -0
  151. {mite-2.5.0 → mite-2.5.2}/test/test_scenario.py +0 -0
  152. {mite-2.5.0 → mite-2.5.2}/test/test_stats.py +0 -0
  153. {mite-2.5.0 → mite-2.5.2}/test/test_volume_model.py +0 -0
  154. {mite-2.5.0 → mite-2.5.2}/test/test_webdriver.py +0 -0
  155. {mite-2.5.0 → mite-2.5.2}/test/test_work_tracker.py +0 -0
  156. {mite-2.5.0 → mite-2.5.2}/test.har +0 -0
  157. {mite-2.5.0 → mite-2.5.2}/tox.ini +0 -0
@@ -2,7 +2,7 @@
2
2
  # this stops the requirement for rust be dragged in (causing much "fun" in so far as the image size bloats
3
3
  # to approx 2Gb!)
4
4
 
5
- FROM python:3.11-alpine3.16
5
+ FROM python:3.11.13-alpine3.22
6
6
 
7
7
  # py3-cryptography is added here as a means to get python cryptography onto the image (prebuilt) and without
8
8
  # need to install rust compiler
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mite
3
- Version: 2.5.0
3
+ Version: 2.5.2
4
4
  Summary: A Python Performance Testing Framework
5
5
  Home-page: https://github.com/sky-uk/mite/
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -1,6 +1,6 @@
1
1
  services:
2
2
  apiserver:
3
- image: python:3.11-alpine3.16
3
+ image: python:3.11-alpine3.19
4
4
  command: ["python", "-m", "http.server", "8000"]
5
5
  ports:
6
6
  - "8000:8000"
@@ -1,7 +1,6 @@
1
1
  import asyncio
2
2
  import gc
3
3
  import logging
4
- import sys
5
4
  import time
6
5
  import tracemalloc
7
6
 
@@ -159,10 +158,20 @@ def test_scenarios(test_name, opts, scenarios, config_manager):
159
158
 
160
159
  loop.run_until_complete(asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED))
161
160
 
162
- http_stats_output._scenarios_completed_time = time.time()
163
-
164
161
  # Run one last report before exiting
165
162
  controller.report(receiver.recieve)
163
+ # Close any open file handles and release resources after exiting the event loop
164
+ del receiver._raw_listeners
165
+ del receiver._listeners
166
+
167
+ # Check for exceptions inside the tasks
168
+ for task in tasks:
169
+ if task.done() and task.exception():
170
+ ex = task.exception()
171
+ tb = ex.__traceback__
172
+ raise ex.with_traceback(tb)
173
+
174
+ http_stats_output._scenarios_completed_time = time.time()
166
175
  has_error = False
167
176
 
168
177
  if int(opts.get("--max-errors-threshold")) < http_stats_output.error_total:
@@ -208,11 +217,8 @@ def test_scenarios(test_name, opts, scenarios, config_manager):
208
217
  f"Response time at {percentile}th percentile exceeded {threshold}ms: {time_unit_format(result)}"
209
218
  )
210
219
 
211
- # Ensure any open files get closed
212
- del receiver._raw_listeners
213
- del receiver._listeners
214
-
215
- sys.exit(int(has_error))
220
+ if has_error:
221
+ raise Exception("Mite test failed")
216
222
 
217
223
 
218
224
  def human_readable_bytes(size):
@@ -102,12 +102,20 @@ class Runner:
102
102
  done, pending = await asyncio.wait(
103
103
  (sleep1, sleep2, run), return_when=asyncio.FIRST_COMPLETED
104
104
  )
105
+
106
+ # Interrupt sleeps as we are done waiting
107
+ sleep1.cancel()
108
+ sleep2.cancel()
109
+
105
110
  if run not in done:
106
111
  logger.error(
107
112
  "Runner.run finished waiting on tasks, but the run loop wasn't complete!"
108
113
  )
109
- sleep1.cancel()
110
- sleep2.cancel()
114
+ # if run is in done, check if it is because of an exception
115
+ elif run.exception():
116
+ ex = run.exception()
117
+ tb = ex.__traceback__
118
+ raise ex.with_traceback(tb)
111
119
 
112
120
  async def _run(self):
113
121
  context_id_gen = count(1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mite
3
- Version: 2.5.0
3
+ Version: 2.5.2
4
4
  Summary: A Python Performance Testing Framework
5
5
  Home-page: https://github.com/sky-uk/mite/
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -14,4 +14,5 @@ pytest-httpbin
14
14
  pytest-httpserver
15
15
  sanic
16
16
  werkzeug==3.1.3
17
- uvloop~=0.19.0
17
+ uvloop~=0.19.0
18
+ setuptools>=78.1.1 # not directly required, pinned by Snyk to avoid a vulnerability
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes