mite 2.4.3__tar.gz → 2.4.4__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.
- {mite-2.4.3 → mite-2.4.4}/PKG-INFO +1 -1
- {mite-2.4.3 → mite-2.4.4}/mite/__main__.py +1 -0
- {mite-2.4.3 → mite-2.4.4}/mite/cli/test.py +69 -15
- {mite-2.4.3 → mite-2.4.4}/mite/config.py +2 -2
- {mite-2.4.3 → mite-2.4.4}/mite/logoutput.py +16 -4
- {mite-2.4.3 → mite-2.4.4}/mite.egg-info/PKG-INFO +1 -1
- {mite-2.4.3 → mite-2.4.4}/test-requirements.txt +1 -1
- {mite-2.4.3 → mite-2.4.4}/.dockerignore +0 -0
- {mite-2.4.3 → mite-2.4.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mite-2.4.3 → mite-2.4.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mite-2.4.3 → mite-2.4.4}/.github/pull_request_template.md +0 -0
- {mite-2.4.3 → mite-2.4.4}/.gitignore +0 -0
- {mite-2.4.3 → mite-2.4.4}/.isort.cfg +0 -0
- {mite-2.4.3 → mite-2.4.4}/.pre-commit-config.yaml +0 -0
- {mite-2.4.3 → mite-2.4.4}/.travis.yml +0 -0
- {mite-2.4.3 → mite-2.4.4}/CODE_OF_CONDUCT.md +0 -0
- {mite-2.4.3 → mite-2.4.4}/CONTRIBUTING.md +0 -0
- {mite-2.4.3 → mite-2.4.4}/DEV.md +0 -0
- {mite-2.4.3 → mite-2.4.4}/Dockerfile +0 -0
- {mite-2.4.3 → mite-2.4.4}/Dockerfile.perftest +0 -0
- {mite-2.4.3 → mite-2.4.4}/LICENSE +0 -0
- {mite-2.4.3 → mite-2.4.4}/MANIFEST.in +0 -0
- {mite-2.4.3 → mite-2.4.4}/README.md +0 -0
- {mite-2.4.3 → mite-2.4.4}/cd-scripts/cdBuild-1.sh +0 -0
- {mite-2.4.3 → mite-2.4.4}/cd-scripts/cdRelease.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/cd-scripts/cdTagRelease.sh +0 -0
- {mite-2.4.3 → mite-2.4.4}/cd-scripts/runTests.sh +0 -0
- {mite-2.4.3 → mite-2.4.4}/cd.yml +0 -0
- {mite-2.4.3 → mite-2.4.4}/dev-requirements.txt +0 -0
- {mite-2.4.3 → mite-2.4.4}/docker_compose.yml +0 -0
- {mite-2.4.3 → mite-2.4.4}/docker_compose_monitoring.yml +0 -0
- {mite-2.4.3 → mite-2.4.4}/docs/Makefile +0 -0
- {mite-2.4.3 → mite-2.4.4}/docs/components.rst +0 -0
- {mite-2.4.3 → mite-2.4.4}/docs/conf.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/docs/config.rst +0 -0
- {mite-2.4.3 → mite-2.4.4}/docs/design-deployment.rst +0 -0
- {mite-2.4.3 → mite-2.4.4}/docs/index.rst +0 -0
- {mite-2.4.3 → mite-2.4.4}/docs/journeys.rst +0 -0
- {mite-2.4.3 → mite-2.4.4}/docs/notes.txt +0 -0
- {mite-2.4.3 → mite-2.4.4}/docs/prometheus.rst +0 -0
- {mite-2.4.3 → mite-2.4.4}/docs/stats.rst +0 -0
- {mite-2.4.3 → mite-2.4.4}/docs/volume-model.rst +0 -0
- {mite-2.4.3 → mite-2.4.4}/grafana/Dockerfile +0 -0
- {mite-2.4.3 → mite-2.4.4}/grafana/config.ini +0 -0
- {mite-2.4.3 → mite-2.4.4}/grafana/provisioning/dashboards/dashboards.yml +0 -0
- {mite-2.4.3 → mite-2.4.4}/grafana/provisioning/dashboards/grafana_dashboard_template.json +0 -0
- {mite-2.4.3 → mite-2.4.4}/grafana/provisioning/dashboards/mite_docker.json +0 -0
- {mite-2.4.3 → mite-2.4.4}/grafana/provisioning/datasources/datasources.yml +0 -0
- {mite-2.4.3 → mite-2.4.4}/local/Makefile +0 -0
- {mite-2.4.3 → mite-2.4.4}/local/README.md +0 -0
- {mite-2.4.3 → mite-2.4.4}/local/demo.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/local/run_mite.sh +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/__init__.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/cli/__init__.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/cli/cat.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/cli/collector.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/cli/common.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/cli/duplicator.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/cli/receiver.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/cli/stats.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/collector.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/context.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/controller.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/datapools.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/example.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/exceptions.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/har_to_mite.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/nanomsg.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/recorder.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/runner.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/scenario.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/stats.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/test.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/utils.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/volume_model.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/web/__init__.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/web/prometheus.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite/zmq.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite.egg-info/SOURCES.txt +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite.egg-info/dependency_links.txt +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite.egg-info/entry_points.txt +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite.egg-info/requires.txt +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite.egg-info/top_level.txt +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_amqp/__init__.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_browser/__init__.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/README.md +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/__init__.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/mux.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/stats.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/tests/__init__.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/tests/conftest.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/tests/foo_service/Foo-remote +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/tests/foo_service/Foo.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/tests/foo_service/__init__.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/tests/foo_service/constants.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/tests/foo_service/ttypes.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/tests/foo_service.thrift +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/tests/test_integration.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/tests/test_mux.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/tests/test_thrift.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_finagle/thrift.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_http/__init__.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_http/stats.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_kafka/__init__.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_kafka/mite_kafka_example.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_kafka/stats.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_selenium/__init__.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_selenium/stats.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/mite_websocket/__init__.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/prometheus/Dockerfile +0 -0
- {mite-2.4.3 → mite-2.4.4}/prometheus/prometheus_config_docker.yml +0 -0
- {mite-2.4.3 → mite-2.4.4}/prometheus/prometheus_config_template.yml +0 -0
- {mite-2.4.3 → mite-2.4.4}/pyproject.toml +0 -0
- {mite-2.4.3 → mite-2.4.4}/requirements.txt +0 -0
- {mite-2.4.3 → mite-2.4.4}/setup.cfg +0 -0
- {mite-2.4.3 → mite-2.4.4}/setup.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/legacy.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/mocks/mock_collector.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/mocks/mock_context.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/mocks/mock_direct_receiver.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/mocks/mock_direct_runner_transport.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/mocks/mock_recorder_msg_http.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/mocks/mock_selenium.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/mocks/mock_sender.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/perf/.gitignore +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/perf/http_server.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/perf/http_server_aiohttp.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/perf/mite_perftest.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/perf/perftest.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/perf/run-perftest.sh +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/perf/test-requirements.txt +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test.har +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_collector.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_config.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_context.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_controller.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_datapools.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_har_to_mite.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_logging.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_mite_amqp.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_mite_browser.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_mite_http.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_mite_kafka.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_mite_utils.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_mite_websockets.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_prometheus_mite.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_recorder.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_runner.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_runner_tracker.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_scenario.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_stats.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_volume_model.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_webdriver.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test/test_work_tracker.py +0 -0
- {mite-2.4.3 → mite-2.4.4}/test.har +0 -0
- {mite-2.4.3 → mite-2.4.4}/tox.ini +0 -0
|
@@ -97,6 +97,7 @@ Options:
|
|
|
97
97
|
--mean-response-time-threshold=THRESHOLD Set the mean response time accepted before setting exit status to 1 [default: 0]
|
|
98
98
|
--standard-deviation-response-time-threshold=THRESHOLD Set the response time standard deviation accepted before setting exit status to 1 [default: 0]
|
|
99
99
|
--standard-deviation-req-sec-threshold=THRESHOLD Set the request per second standard deviation accepted before setting exit status to 1 [default: 0]
|
|
100
|
+
--benchmark-percentiles=NEW_VALUE Percentiles(int):threshold(int in milliseconds) pairs separated by commas [default: 50:0,90:0,98:0,99:0]
|
|
100
101
|
"""
|
|
101
102
|
import asyncio
|
|
102
103
|
import logging
|
|
@@ -128,6 +128,10 @@ async def controller_report(controller, receiver):
|
|
|
128
128
|
controller.report(receiver.recieve)
|
|
129
129
|
|
|
130
130
|
|
|
131
|
+
def time_unit_format(number):
|
|
132
|
+
return f"{number * 1000:.2f}ms" if number < 1 else f"{number:.3f}s"
|
|
133
|
+
|
|
134
|
+
|
|
131
135
|
def test_scenarios(test_name, opts, scenarios, config_manager):
|
|
132
136
|
scenario_manager = _create_scenario_manager(opts)
|
|
133
137
|
for journey_spec, datapool, volumemodel in scenarios:
|
|
@@ -191,6 +195,16 @@ def test_scenarios(test_name, opts, scenarios, config_manager):
|
|
|
191
195
|
|
|
192
196
|
if opts.get("--report"):
|
|
193
197
|
benchmark_report(http_stats_output)
|
|
198
|
+
for (
|
|
199
|
+
percentile,
|
|
200
|
+
threshold,
|
|
201
|
+
result,
|
|
202
|
+
) in http_stats_output.percentiles_list_resp_time_store:
|
|
203
|
+
if threshold != 0 and result * 1000 >= threshold:
|
|
204
|
+
has_error = True
|
|
205
|
+
logging.error(
|
|
206
|
+
f"Response time at {percentile}th percentile exceeded {threshold}ms: {time_unit_format(result)}"
|
|
207
|
+
)
|
|
194
208
|
|
|
195
209
|
# Ensure any open files get closed
|
|
196
210
|
del receiver._raw_listeners
|
|
@@ -207,25 +221,62 @@ def human_readable_bytes(size):
|
|
|
207
221
|
return size, "PB"
|
|
208
222
|
|
|
209
223
|
|
|
224
|
+
def colorise_result(result, threshold):
|
|
225
|
+
formatted_result = time_unit_format(result)
|
|
226
|
+
if threshold != 0:
|
|
227
|
+
result_ms = result * 1000
|
|
228
|
+
if result_ms >= threshold:
|
|
229
|
+
return f"\033[91m{formatted_result}\033[0m" # red
|
|
230
|
+
else:
|
|
231
|
+
return f"\033[92m{formatted_result}\033[0m" # green
|
|
232
|
+
return formatted_result
|
|
233
|
+
|
|
234
|
+
|
|
210
235
|
def benchmark_report(http_stats_output):
|
|
211
|
-
|
|
212
|
-
table.field_names = ["Metric", "Avg", "Min", "Max", "Std Dev", "+/- Std Dev"]
|
|
213
|
-
number_format = (
|
|
214
|
-
lambda number: f"{number / 1000:.2f}K" if number >= 1000 else f"{number:.2f}"
|
|
215
|
-
)
|
|
236
|
+
perctile_thresh_results_list = http_stats_output.percentiles_list_resp_time_store
|
|
216
237
|
|
|
217
|
-
|
|
238
|
+
percentiles_headers = [
|
|
239
|
+
f"{int(percentile[0])} %tile" for percentile in perctile_thresh_results_list
|
|
240
|
+
]
|
|
241
|
+
standard_headers = ["", "Avg", "Min", "Max", "Std Dev", "+/- Std Dev"]
|
|
242
|
+
|
|
243
|
+
latency_table = PrettyTable()
|
|
244
|
+
latency_table.field_names = standard_headers + percentiles_headers
|
|
245
|
+
|
|
246
|
+
latency_table.add_row(
|
|
218
247
|
[
|
|
219
248
|
"Latency",
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
249
|
+
time_unit_format(http_stats_output.mean_resp_time),
|
|
250
|
+
time_unit_format(http_stats_output._resp_time_min),
|
|
251
|
+
time_unit_format(http_stats_output._resp_time_max),
|
|
252
|
+
time_unit_format(http_stats_output.resp_time_standard_deviation),
|
|
224
253
|
f"{http_stats_output.resp_time_within_standard_deviation:.2f}%",
|
|
225
|
-
|
|
254
|
+
*[
|
|
255
|
+
colorise_result(result, threshold)
|
|
256
|
+
for _, threshold, result in perctile_thresh_results_list
|
|
257
|
+
],
|
|
258
|
+
],
|
|
259
|
+
divider=True,
|
|
226
260
|
)
|
|
227
261
|
|
|
228
|
-
|
|
262
|
+
if any(threshold[1] != 0 for threshold in perctile_thresh_results_list):
|
|
263
|
+
latency_table.add_row(
|
|
264
|
+
[
|
|
265
|
+
"Test Thresholds",
|
|
266
|
+
*["-" for _ in range(len(standard_headers) - 1)],
|
|
267
|
+
*[
|
|
268
|
+
f"{threshold[1]}ms" if threshold[1] != 0 else "-"
|
|
269
|
+
for threshold in perctile_thresh_results_list
|
|
270
|
+
],
|
|
271
|
+
],
|
|
272
|
+
)
|
|
273
|
+
|
|
274
|
+
requests_table = PrettyTable()
|
|
275
|
+
requests_table.field_names = standard_headers
|
|
276
|
+
number_format = (
|
|
277
|
+
lambda number: f"{number / 1000:.2f}K" if number >= 1000 else f"{number:.2f}"
|
|
278
|
+
)
|
|
279
|
+
requests_table.add_row(
|
|
229
280
|
[
|
|
230
281
|
"Req/Sec",
|
|
231
282
|
number_format(http_stats_output.req_sec_mean),
|
|
@@ -236,11 +287,14 @@ def benchmark_report(http_stats_output):
|
|
|
236
287
|
]
|
|
237
288
|
)
|
|
238
289
|
|
|
239
|
-
table.align["Metric"] = "l"
|
|
240
290
|
data_transfer, data_unit = human_readable_bytes(http_stats_output._data_transferred)
|
|
241
|
-
print(
|
|
291
|
+
print("\n" + "=" * 20 + " MITE Benchmark Report " + "=" * 20, end="\n\n")
|
|
292
|
+
print(latency_table, end="\n\n")
|
|
293
|
+
print(requests_table, end="\n\n")
|
|
294
|
+
print("=" * 27 + " Summary " + "=" * 27)
|
|
242
295
|
print(
|
|
243
|
-
f"{http_stats_output._req_total} requests in {http_stats_output._scenarios_completed_time - http_stats_output._init_time:.2f}s, {data_transfer:.2f} {data_unit} data transferred"
|
|
296
|
+
f"{http_stats_output._req_total} requests in {http_stats_output._scenarios_completed_time - http_stats_output._init_time:.2f}s, {data_transfer:.2f} {data_unit} data transferred",
|
|
297
|
+
end="\n\n",
|
|
244
298
|
)
|
|
245
299
|
|
|
246
300
|
|
|
@@ -46,10 +46,10 @@ def default_config_loader():
|
|
|
46
46
|
for name, value in os.environ.items():
|
|
47
47
|
if name.startswith("MITE_CONF_"):
|
|
48
48
|
key_name = name[10:]
|
|
49
|
-
logger.
|
|
49
|
+
logger.debug(f'Setting config "{key_name}" from environment variable')
|
|
50
50
|
result[key_name] = value
|
|
51
51
|
if name.startswith("MITE_EVAL_CONF_"):
|
|
52
52
|
key_name = name[15:]
|
|
53
|
-
logger.
|
|
53
|
+
logger.debug(f'Setting config "{key_name}" by eval\'ing environment variable')
|
|
54
54
|
result[key_name] = eval(value)
|
|
55
55
|
return result
|
|
@@ -64,6 +64,7 @@ class GenericStatsOutput:
|
|
|
64
64
|
self._data_transferred = 0
|
|
65
65
|
self._standard_deviation = 0
|
|
66
66
|
self._error_journeys = defaultdict(int)
|
|
67
|
+
self._benchmark_percentiles = opts.get("--benchmark-percentiles")
|
|
67
68
|
|
|
68
69
|
def _pct(self, percentile):
|
|
69
70
|
"""Percentile calculation with linear interpolation.
|
|
@@ -157,6 +158,17 @@ class GenericStatsOutput:
|
|
|
157
158
|
journey_name = message.get("journey")
|
|
158
159
|
self._error_journeys[journey_name] += 1
|
|
159
160
|
|
|
161
|
+
@property
|
|
162
|
+
def percentiles_list_resp_time_store(self):
|
|
163
|
+
percentiles = self._benchmark_percentiles.split(",")
|
|
164
|
+
percentiles_thresholds_list = [
|
|
165
|
+
(int(p.split(":")[0]), int(p.split(":")[1])) for p in percentiles
|
|
166
|
+
]
|
|
167
|
+
if not self._resp_time_store:
|
|
168
|
+
return []
|
|
169
|
+
quantiles = statistics.quantiles(self._resp_time_store, n=100)
|
|
170
|
+
return [(p[0], p[1], quantiles[p[0] - 1]) for p in percentiles_thresholds_list]
|
|
171
|
+
|
|
160
172
|
@property
|
|
161
173
|
def mean_resp_time(self):
|
|
162
174
|
if not self._resp_time_store:
|
|
@@ -165,15 +177,15 @@ class GenericStatsOutput:
|
|
|
165
177
|
|
|
166
178
|
@property
|
|
167
179
|
def max_resp_time_recent(self):
|
|
168
|
-
if not self.
|
|
180
|
+
if not self._resp_time_store:
|
|
169
181
|
return 0
|
|
170
|
-
return max(self.
|
|
182
|
+
return max(self._resp_time_store)
|
|
171
183
|
|
|
172
184
|
@property
|
|
173
185
|
def min_resp_time_recent(self):
|
|
174
|
-
if not self.
|
|
186
|
+
if not self._resp_time_store:
|
|
175
187
|
return 0
|
|
176
|
-
return min(self.
|
|
188
|
+
return min(self._resp_time_store)
|
|
177
189
|
|
|
178
190
|
@property
|
|
179
191
|
def req_sec_mean(self):
|
|
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
|
{mite-2.4.3 → mite-2.4.4}/DEV.md
RENAMED
|
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
|
{mite-2.4.3 → mite-2.4.4}/cd.yml
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|