mite 2.4.6__tar.gz → 2.4.7__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.4.6 → mite-2.4.7}/PKG-INFO +3 -1
  2. mite-2.4.7/mite/s3datapools.py +107 -0
  3. {mite-2.4.6 → mite-2.4.7}/mite.egg-info/PKG-INFO +3 -1
  4. {mite-2.4.6 → mite-2.4.7}/mite.egg-info/SOURCES.txt +1 -0
  5. {mite-2.4.6 → mite-2.4.7}/mite.egg-info/requires.txt +3 -0
  6. {mite-2.4.6 → mite-2.4.7}/setup.cfg +2 -0
  7. {mite-2.4.6 → mite-2.4.7}/.dockerignore +0 -0
  8. {mite-2.4.6 → mite-2.4.7}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  9. {mite-2.4.6 → mite-2.4.7}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  10. {mite-2.4.6 → mite-2.4.7}/.github/pull_request_template.md +0 -0
  11. {mite-2.4.6 → mite-2.4.7}/.gitignore +0 -0
  12. {mite-2.4.6 → mite-2.4.7}/.isort.cfg +0 -0
  13. {mite-2.4.6 → mite-2.4.7}/.pre-commit-config.yaml +0 -0
  14. {mite-2.4.6 → mite-2.4.7}/.travis.yml +0 -0
  15. {mite-2.4.6 → mite-2.4.7}/CODE_OF_CONDUCT.md +0 -0
  16. {mite-2.4.6 → mite-2.4.7}/CONTRIBUTING.md +0 -0
  17. {mite-2.4.6 → mite-2.4.7}/DEV.md +0 -0
  18. {mite-2.4.6 → mite-2.4.7}/Dockerfile +0 -0
  19. {mite-2.4.6 → mite-2.4.7}/Dockerfile.perftest +0 -0
  20. {mite-2.4.6 → mite-2.4.7}/LICENSE +0 -0
  21. {mite-2.4.6 → mite-2.4.7}/MANIFEST.in +0 -0
  22. {mite-2.4.6 → mite-2.4.7}/README.md +0 -0
  23. {mite-2.4.6 → mite-2.4.7}/cd-scripts/cdBuild-1.sh +0 -0
  24. {mite-2.4.6 → mite-2.4.7}/cd-scripts/cdRelease.py +0 -0
  25. {mite-2.4.6 → mite-2.4.7}/cd-scripts/cdTagRelease.sh +0 -0
  26. {mite-2.4.6 → mite-2.4.7}/cd-scripts/runTests.sh +0 -0
  27. {mite-2.4.6 → mite-2.4.7}/cd.yml +0 -0
  28. {mite-2.4.6 → mite-2.4.7}/dev-requirements.txt +0 -0
  29. {mite-2.4.6 → mite-2.4.7}/docker_compose.yml +0 -0
  30. {mite-2.4.6 → mite-2.4.7}/docker_compose_monitoring.yml +0 -0
  31. {mite-2.4.6 → mite-2.4.7}/docs/Makefile +0 -0
  32. {mite-2.4.6 → mite-2.4.7}/docs/components.rst +0 -0
  33. {mite-2.4.6 → mite-2.4.7}/docs/conf.py +0 -0
  34. {mite-2.4.6 → mite-2.4.7}/docs/config.rst +0 -0
  35. {mite-2.4.6 → mite-2.4.7}/docs/design-deployment.rst +0 -0
  36. {mite-2.4.6 → mite-2.4.7}/docs/index.rst +0 -0
  37. {mite-2.4.6 → mite-2.4.7}/docs/journeys.rst +0 -0
  38. {mite-2.4.6 → mite-2.4.7}/docs/notes.txt +0 -0
  39. {mite-2.4.6 → mite-2.4.7}/docs/prometheus.rst +0 -0
  40. {mite-2.4.6 → mite-2.4.7}/docs/stats.rst +0 -0
  41. {mite-2.4.6 → mite-2.4.7}/docs/volume-model.rst +0 -0
  42. {mite-2.4.6 → mite-2.4.7}/grafana/Dockerfile +0 -0
  43. {mite-2.4.6 → mite-2.4.7}/grafana/config.ini +0 -0
  44. {mite-2.4.6 → mite-2.4.7}/grafana/provisioning/dashboards/dashboards.yml +0 -0
  45. {mite-2.4.6 → mite-2.4.7}/grafana/provisioning/dashboards/grafana_dashboard_template.json +0 -0
  46. {mite-2.4.6 → mite-2.4.7}/grafana/provisioning/dashboards/mite_docker.json +0 -0
  47. {mite-2.4.6 → mite-2.4.7}/grafana/provisioning/datasources/datasources.yml +0 -0
  48. {mite-2.4.6 → mite-2.4.7}/local/Makefile +0 -0
  49. {mite-2.4.6 → mite-2.4.7}/local/README.md +0 -0
  50. {mite-2.4.6 → mite-2.4.7}/local/demo.py +0 -0
  51. {mite-2.4.6 → mite-2.4.7}/local/run_mite.sh +0 -0
  52. {mite-2.4.6 → mite-2.4.7}/mite/__init__.py +0 -0
  53. {mite-2.4.6 → mite-2.4.7}/mite/__main__.py +0 -0
  54. {mite-2.4.6 → mite-2.4.7}/mite/cli/__init__.py +0 -0
  55. {mite-2.4.6 → mite-2.4.7}/mite/cli/cat.py +0 -0
  56. {mite-2.4.6 → mite-2.4.7}/mite/cli/collector.py +0 -0
  57. {mite-2.4.6 → mite-2.4.7}/mite/cli/common.py +0 -0
  58. {mite-2.4.6 → mite-2.4.7}/mite/cli/duplicator.py +0 -0
  59. {mite-2.4.6 → mite-2.4.7}/mite/cli/receiver.py +0 -0
  60. {mite-2.4.6 → mite-2.4.7}/mite/cli/stats.py +0 -0
  61. {mite-2.4.6 → mite-2.4.7}/mite/cli/test.py +0 -0
  62. {mite-2.4.6 → mite-2.4.7}/mite/collector.py +0 -0
  63. {mite-2.4.6 → mite-2.4.7}/mite/config.py +0 -0
  64. {mite-2.4.6 → mite-2.4.7}/mite/context.py +0 -0
  65. {mite-2.4.6 → mite-2.4.7}/mite/controller.py +0 -0
  66. {mite-2.4.6 → mite-2.4.7}/mite/datapools.py +0 -0
  67. {mite-2.4.6 → mite-2.4.7}/mite/example.py +0 -0
  68. {mite-2.4.6 → mite-2.4.7}/mite/exceptions.py +0 -0
  69. {mite-2.4.6 → mite-2.4.7}/mite/har_to_mite.py +0 -0
  70. {mite-2.4.6 → mite-2.4.7}/mite/logoutput.py +0 -0
  71. {mite-2.4.6 → mite-2.4.7}/mite/nanomsg.py +0 -0
  72. {mite-2.4.6 → mite-2.4.7}/mite/recorder.py +0 -0
  73. {mite-2.4.6 → mite-2.4.7}/mite/runner.py +0 -0
  74. {mite-2.4.6 → mite-2.4.7}/mite/scenario.py +0 -0
  75. {mite-2.4.6 → mite-2.4.7}/mite/stats.py +0 -0
  76. {mite-2.4.6 → mite-2.4.7}/mite/test.py +0 -0
  77. {mite-2.4.6 → mite-2.4.7}/mite/utils.py +0 -0
  78. {mite-2.4.6 → mite-2.4.7}/mite/volume_model.py +0 -0
  79. {mite-2.4.6 → mite-2.4.7}/mite/web/__init__.py +0 -0
  80. {mite-2.4.6 → mite-2.4.7}/mite/web/prometheus.py +0 -0
  81. {mite-2.4.6 → mite-2.4.7}/mite/zmq.py +0 -0
  82. {mite-2.4.6 → mite-2.4.7}/mite.egg-info/dependency_links.txt +0 -0
  83. {mite-2.4.6 → mite-2.4.7}/mite.egg-info/entry_points.txt +0 -0
  84. {mite-2.4.6 → mite-2.4.7}/mite.egg-info/top_level.txt +0 -0
  85. {mite-2.4.6 → mite-2.4.7}/mite_amqp/__init__.py +0 -0
  86. {mite-2.4.6 → mite-2.4.7}/mite_browser/__init__.py +0 -0
  87. {mite-2.4.6 → mite-2.4.7}/mite_finagle/README.md +0 -0
  88. {mite-2.4.6 → mite-2.4.7}/mite_finagle/__init__.py +0 -0
  89. {mite-2.4.6 → mite-2.4.7}/mite_finagle/mux.py +0 -0
  90. {mite-2.4.6 → mite-2.4.7}/mite_finagle/stats.py +0 -0
  91. {mite-2.4.6 → mite-2.4.7}/mite_finagle/tests/__init__.py +0 -0
  92. {mite-2.4.6 → mite-2.4.7}/mite_finagle/tests/conftest.py +0 -0
  93. {mite-2.4.6 → mite-2.4.7}/mite_finagle/tests/foo_service/Foo-remote +0 -0
  94. {mite-2.4.6 → mite-2.4.7}/mite_finagle/tests/foo_service/Foo.py +0 -0
  95. {mite-2.4.6 → mite-2.4.7}/mite_finagle/tests/foo_service/__init__.py +0 -0
  96. {mite-2.4.6 → mite-2.4.7}/mite_finagle/tests/foo_service/constants.py +0 -0
  97. {mite-2.4.6 → mite-2.4.7}/mite_finagle/tests/foo_service/ttypes.py +0 -0
  98. {mite-2.4.6 → mite-2.4.7}/mite_finagle/tests/foo_service.thrift +0 -0
  99. {mite-2.4.6 → mite-2.4.7}/mite_finagle/tests/test_integration.py +0 -0
  100. {mite-2.4.6 → mite-2.4.7}/mite_finagle/tests/test_mux.py +0 -0
  101. {mite-2.4.6 → mite-2.4.7}/mite_finagle/tests/test_thrift.py +0 -0
  102. {mite-2.4.6 → mite-2.4.7}/mite_finagle/thrift.py +0 -0
  103. {mite-2.4.6 → mite-2.4.7}/mite_http/__init__.py +0 -0
  104. {mite-2.4.6 → mite-2.4.7}/mite_http/stats.py +0 -0
  105. {mite-2.4.6 → mite-2.4.7}/mite_kafka/__init__.py +0 -0
  106. {mite-2.4.6 → mite-2.4.7}/mite_kafka/mite_kafka_example.py +0 -0
  107. {mite-2.4.6 → mite-2.4.7}/mite_kafka/stats.py +0 -0
  108. {mite-2.4.6 → mite-2.4.7}/mite_selenium/__init__.py +0 -0
  109. {mite-2.4.6 → mite-2.4.7}/mite_selenium/stats.py +0 -0
  110. {mite-2.4.6 → mite-2.4.7}/mite_websocket/__init__.py +0 -0
  111. {mite-2.4.6 → mite-2.4.7}/prometheus/Dockerfile +0 -0
  112. {mite-2.4.6 → mite-2.4.7}/prometheus/prometheus_config_docker.yml +0 -0
  113. {mite-2.4.6 → mite-2.4.7}/prometheus/prometheus_config_template.yml +0 -0
  114. {mite-2.4.6 → mite-2.4.7}/pyproject.toml +0 -0
  115. {mite-2.4.6 → mite-2.4.7}/requirements.txt +0 -0
  116. {mite-2.4.6 → mite-2.4.7}/setup.py +0 -0
  117. {mite-2.4.6 → mite-2.4.7}/test/legacy.py +0 -0
  118. {mite-2.4.6 → mite-2.4.7}/test/mocks/mock_collector.py +0 -0
  119. {mite-2.4.6 → mite-2.4.7}/test/mocks/mock_context.py +0 -0
  120. {mite-2.4.6 → mite-2.4.7}/test/mocks/mock_direct_receiver.py +0 -0
  121. {mite-2.4.6 → mite-2.4.7}/test/mocks/mock_direct_runner_transport.py +0 -0
  122. {mite-2.4.6 → mite-2.4.7}/test/mocks/mock_recorder_msg_http.py +0 -0
  123. {mite-2.4.6 → mite-2.4.7}/test/mocks/mock_selenium.py +0 -0
  124. {mite-2.4.6 → mite-2.4.7}/test/mocks/mock_sender.py +0 -0
  125. {mite-2.4.6 → mite-2.4.7}/test/perf/.gitignore +0 -0
  126. {mite-2.4.6 → mite-2.4.7}/test/perf/http_server.py +0 -0
  127. {mite-2.4.6 → mite-2.4.7}/test/perf/http_server_aiohttp.py +0 -0
  128. {mite-2.4.6 → mite-2.4.7}/test/perf/mite_perftest.py +0 -0
  129. {mite-2.4.6 → mite-2.4.7}/test/perf/perftest.py +0 -0
  130. {mite-2.4.6 → mite-2.4.7}/test/perf/run-perftest.sh +0 -0
  131. {mite-2.4.6 → mite-2.4.7}/test/perf/test-requirements.txt +0 -0
  132. {mite-2.4.6 → mite-2.4.7}/test/test.har +0 -0
  133. {mite-2.4.6 → mite-2.4.7}/test/test_collector.py +0 -0
  134. {mite-2.4.6 → mite-2.4.7}/test/test_config.py +0 -0
  135. {mite-2.4.6 → mite-2.4.7}/test/test_context.py +0 -0
  136. {mite-2.4.6 → mite-2.4.7}/test/test_controller.py +0 -0
  137. {mite-2.4.6 → mite-2.4.7}/test/test_datapools.py +0 -0
  138. {mite-2.4.6 → mite-2.4.7}/test/test_har_to_mite.py +0 -0
  139. {mite-2.4.6 → mite-2.4.7}/test/test_logging.py +0 -0
  140. {mite-2.4.6 → mite-2.4.7}/test/test_mite_amqp.py +0 -0
  141. {mite-2.4.6 → mite-2.4.7}/test/test_mite_browser.py +0 -0
  142. {mite-2.4.6 → mite-2.4.7}/test/test_mite_http.py +0 -0
  143. {mite-2.4.6 → mite-2.4.7}/test/test_mite_kafka.py +0 -0
  144. {mite-2.4.6 → mite-2.4.7}/test/test_mite_utils.py +0 -0
  145. {mite-2.4.6 → mite-2.4.7}/test/test_mite_websockets.py +0 -0
  146. {mite-2.4.6 → mite-2.4.7}/test/test_prometheus_mite.py +0 -0
  147. {mite-2.4.6 → mite-2.4.7}/test/test_recorder.py +0 -0
  148. {mite-2.4.6 → mite-2.4.7}/test/test_runner.py +0 -0
  149. {mite-2.4.6 → mite-2.4.7}/test/test_runner_tracker.py +0 -0
  150. {mite-2.4.6 → mite-2.4.7}/test/test_scenario.py +0 -0
  151. {mite-2.4.6 → mite-2.4.7}/test/test_stats.py +0 -0
  152. {mite-2.4.6 → mite-2.4.7}/test/test_volume_model.py +0 -0
  153. {mite-2.4.6 → mite-2.4.7}/test/test_webdriver.py +0 -0
  154. {mite-2.4.6 → mite-2.4.7}/test/test_work_tracker.py +0 -0
  155. {mite-2.4.6 → mite-2.4.7}/test-requirements.txt +0 -0
  156. {mite-2.4.6 → mite-2.4.7}/test.har +0 -0
  157. {mite-2.4.6 → mite-2.4.7}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mite
3
- Version: 2.4.6
3
+ Version: 2.4.7
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
@@ -29,6 +29,8 @@ Provides-Extra: kafka
29
29
  Requires-Dist: aiokafka; extra == "kafka"
30
30
  Provides-Extra: finagle
31
31
  Requires-Dist: thrift; extra == "finagle"
32
+ Provides-Extra: s3datapools
33
+ Requires-Dist: boto3; extra == "s3datapools"
32
34
  Provides-Extra: selenium
33
35
  Requires-Dist: selenium; extra == "selenium"
34
36
  Provides-Extra: selenium-wire
@@ -0,0 +1,107 @@
1
+ import logging
2
+ from collections import deque
3
+
4
+ import boto3
5
+
6
+ from mite.datapools import DataPoolExhausted, DataPoolItem
7
+
8
+ logger = logging.getLogger(__name__)
9
+
10
+
11
+ class S3IterableDataPool:
12
+ def __init__(
13
+ self,
14
+ bucket_name,
15
+ prefix="",
16
+ access_key_id=None,
17
+ secret_access_key=None,
18
+ preload_minimum=None,
19
+ ):
20
+ self.s3_client = boto3.client(
21
+ "s3",
22
+ aws_access_key_id=access_key_id,
23
+ aws_secret_access_key=secret_access_key,
24
+ )
25
+ self.bucket_name = bucket_name
26
+ self.prefix = prefix
27
+ self.list_obj_kwargs = {"Bucket": self.bucket_name, "Prefix": self.prefix}
28
+ self._data = []
29
+ self.item_index = 0
30
+ self.populating = False
31
+ self.exhausted = False
32
+
33
+ if preload_minimum:
34
+ while len(self._data) < preload_minimum and not self.exhausted:
35
+ self.populate()
36
+ else:
37
+ while not self.exhausted:
38
+ self.populate()
39
+
40
+ def populate(self):
41
+ response = self.s3_client.list_objects_v2(**self.list_obj_kwargs)
42
+
43
+ for obj in response["Contents"]:
44
+ self._data.append((self.item_index, obj["Key"]))
45
+ self.item_index += 1
46
+
47
+ if response.get("IsTruncated"):
48
+ self.list_obj_kwargs.update(
49
+ {"ContinuationToken": response["NextContinuationToken"]}
50
+ )
51
+ else:
52
+ self.exhausted = True
53
+
54
+ async def checkout(self, config):
55
+ if not self.exhausted and not self.populating:
56
+ self.populating = True
57
+ self.populate()
58
+ self.populating = False
59
+
60
+ try:
61
+ item_id, file_key = self._data.pop(0)
62
+ file_obj = self.s3_client.get_object(Bucket=self.bucket_name, Key=file_key)
63
+ file_content = file_obj["Body"].read().decode("utf-8")
64
+ data = (file_key, file_content)
65
+
66
+ except IndexError as e:
67
+ raise DataPoolExhausted() from e
68
+ return DataPoolItem(item_id, data)
69
+
70
+ async def checkin(self, item_id):
71
+ pass
72
+
73
+
74
+ class S3RecyclableIterableDataPool(S3IterableDataPool):
75
+ def __init__(self, *args, **kwargs):
76
+ super().__init__(*args, **kwargs)
77
+
78
+ self._available = deque(range(len(self._data)))
79
+
80
+ async def checkout(self, config):
81
+ if not self.exhausted and not self.populating:
82
+ self.populating = True
83
+ starting_id = self.item_index
84
+ self.populate()
85
+ self._available.extend(range(starting_id, self.item_index))
86
+ self.populating = False
87
+
88
+ if self._available:
89
+ item_id = self._available.popleft()
90
+
91
+ file_key = self._data[item_id][1]
92
+ file_obj = self.s3_client.get_object(Bucket=self.bucket_name, Key=file_key)
93
+ file_content = file_obj["Body"].read().decode("utf-8")
94
+ data = (file_key, file_content)
95
+
96
+ return DataPoolItem(item_id, data)
97
+ else:
98
+ raise Exception("Recyclable iterable datapool was emptied!")
99
+
100
+ async def checkin(self, item_id):
101
+ if self._available is None:
102
+ logger.error(
103
+ f"{repr(self)}: checkin called for {item_id} before the datapool "
104
+ "was initialized! Maybe a stale runner is hanging around"
105
+ )
106
+ return
107
+ self._available.append(item_id)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mite
3
- Version: 2.4.6
3
+ Version: 2.4.7
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
@@ -29,6 +29,8 @@ Provides-Extra: kafka
29
29
  Requires-Dist: aiokafka; extra == "kafka"
30
30
  Provides-Extra: finagle
31
31
  Requires-Dist: thrift; extra == "finagle"
32
+ Provides-Extra: s3datapools
33
+ Requires-Dist: boto3; extra == "s3datapools"
32
34
  Provides-Extra: selenium
33
35
  Requires-Dist: selenium; extra == "selenium"
34
36
  Provides-Extra: selenium-wire
@@ -64,6 +64,7 @@ mite/logoutput.py
64
64
  mite/nanomsg.py
65
65
  mite/recorder.py
66
66
  mite/runner.py
67
+ mite/s3datapools.py
67
68
  mite/scenario.py
68
69
  mite/stats.py
69
70
  mite/test.py
@@ -19,6 +19,9 @@ thrift
19
19
  [kafka]
20
20
  aiokafka
21
21
 
22
+ [s3datapools]
23
+ boto3
24
+
22
25
  [selenium]
23
26
  selenium
24
27
 
@@ -37,6 +37,8 @@ kafka =
37
37
  aiokafka
38
38
  finagle =
39
39
  thrift
40
+ s3datapools =
41
+ boto3
40
42
  selenium =
41
43
  selenium
42
44
  selenium_wire = selenium-wire==4.6.5
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
File without changes