quarchpy 2.2.5__py2.py3-none-any.whl → 2.2.7.dev1__py2.py3-none-any.whl
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.
- quarchpy/.idea/misc.xml +4 -1
- quarchpy/.idea/modules.xml +0 -1
- quarchpy/.idea/quarchpy.iml +1 -2
- quarchpy/.idea/workspace.xml +28 -72
- quarchpy/_version.py +1 -1
- quarchpy/config_files/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/config_files/__pycache__/quarch_config_parser.cpython-313.pyc +0 -0
- quarchpy/connection_specific/QPS/win-amd64/app.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/README.txt +2 -2
- quarchpy/connection_specific/QPS/win-amd64/qis/help.txt +2 -2
- quarchpy/connection_specific/QPS/win-amd64/qis/qis.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/{CInterface-2.2.jar → CInterface-2.3.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/QuarchCommon-2.0.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/TorridonCommon-1.0.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/jmdns-3.6.0.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/usb4java-1.3.1.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps-command-reference.html +331 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/JFXUtilities-1.0.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/QuarchCommon-2.0.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-base-21.0.4-linux.jar → javafx-base-21.0.5-linux.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-controls-21.0.4-linux.jar → javafx-controls-21.0.5-linux.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-fxml-21.0.4-linux.jar → javafx-fxml-21.0.5-linux.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-graphics-21.0.4-linux.jar → javafx-graphics-21.0.5-linux.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-swing-21.0.4-linux.jar → javafx-swing-21.0.5-linux.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-base-21.0.4-mac-aarch64.jar → javafx-base-21.0.5-mac-aarch64.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-controls-21.0.4-mac-aarch64.jar → javafx-controls-21.0.5-mac-aarch64.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-fxml-21.0.4-mac-aarch64.jar → javafx-fxml-21.0.5-mac-aarch64.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-graphics-21.0.4-mac-aarch64.jar → javafx-graphics-21.0.5-mac-aarch64.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-swing-21.0.4-mac-aarch64.jar → javafx-swing-21.0.5-mac-aarch64.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-base-21.0.4-mac.jar → javafx-base-21.0.5-mac.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-controls-21.0.4-mac.jar → javafx-controls-21.0.5-mac.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-fxml-21.0.4-mac.jar → javafx-fxml-21.0.5-mac.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-graphics-21.0.4-mac.jar → javafx-graphics-21.0.5-mac.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-swing-21.0.4-mac.jar → javafx-swing-21.0.5-mac.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-base-21.0.4-win.jar → javafx-base-21.0.5-win.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-controls-21.0.4-win.jar → javafx-controls-21.0.5-win.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-fxml-21.0.4-win.jar → javafx-fxml-21.0.5-win.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-graphics-21.0.4-win.jar → javafx-graphics-21.0.5-win.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-swing-21.0.4-win.jar → javafx-swing-21.0.5-win.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/scriptCommands.txt +59 -3
- quarchpy/connection_specific/QPS/win-amd64/whats-new.txt +12 -20
- quarchpy/connection_specific/__pycache__/StreamChannels.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_QIS.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_QPS.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_ReST.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_Serial.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_TCP.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_Telnet.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_USB.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/mDNS.cpython-313.pyc +0 -0
- quarchpy/connection_specific/connection_QPS.py +7 -3
- quarchpy/connection_specific/connection_QPS.py.bak +242 -0
- quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/__pycache__/win32.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-313.pyc +0 -0
- quarchpy/debug/__pycache__/SystemTest.cpython-313.pyc +0 -0
- quarchpy/debug/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/debug/__pycache__/module_debug.cpython-313.pyc +0 -0
- quarchpy/debug/__pycache__/simple_terminal.cpython-313.pyc +0 -0
- quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-313.pyc +0 -0
- quarchpy/debug/__pycache__/versionCompare.cpython-313.pyc +0 -0
- quarchpy/device/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/device/__pycache__/device.cpython-313.pyc +0 -0
- quarchpy/device/__pycache__/quarchArray.cpython-313.pyc +0 -0
- quarchpy/device/__pycache__/quarchPPM.cpython-313.pyc +0 -0
- quarchpy/device/__pycache__/quarchQPS.cpython-313.pyc +0 -0
- quarchpy/device/__pycache__/scanDevices.cpython-313.pyc +0 -0
- quarchpy/device/quarchPPM.py +1 -1
- quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-313.pyc +0 -0
- quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-313.pyc +0 -0
- quarchpy/disk_test/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-313.pyc +0 -0
- quarchpy/docs/CHANGES.rst +17 -0
- quarchpy/docs/_build/doctrees/CHANGES.doctree +0 -0
- quarchpy/docs/_build/doctrees/environment.pickle +0 -0
- quarchpy/docs/_build/doctrees/index.doctree +0 -0
- quarchpy/docs/_build/doctrees/readme.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/changelog.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/licenses.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/modules.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.calibration.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.config_files.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.connection_specific.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.debug.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.device.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.disk_test.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.fio.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.iometer.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.qis.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.qps.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.user_interface.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.utilities.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/readme.doctree +0 -0
- quarchpy/docs/_build/html/.buildinfo +2 -2
- quarchpy/docs/_build/html/.buildinfo.bak +4 -0
- quarchpy/docs/_build/html/CHANGES.html +176 -150
- quarchpy/docs/_build/html/_sources/CHANGES.rst.txt +14 -0
- quarchpy/docs/_build/html/_static/alabaster.css +47 -87
- quarchpy/docs/_build/html/_static/basic.css +3 -14
- quarchpy/docs/_build/html/_static/doctools.js +0 -7
- quarchpy/docs/_build/html/_static/github-banner.svg +5 -0
- quarchpy/docs/_build/html/_static/language_data.js +1 -8
- quarchpy/docs/_build/html/_static/pygments.css +2 -1
- quarchpy/docs/_build/html/_static/searchtools.js +129 -71
- quarchpy/docs/_build/html/genindex.html +22 -55
- quarchpy/docs/_build/html/index.html +90 -85
- quarchpy/docs/_build/html/objects.inv +0 -0
- quarchpy/docs/_build/html/py-modindex.html +20 -29
- quarchpy/docs/_build/html/readme.html +20 -19
- quarchpy/docs/_build/html/search.html +14 -14
- quarchpy/docs/_build/html/searchindex.js +1 -1
- quarchpy/docs/_build/html/source/changelog.html +246 -216
- quarchpy/docs/_build/html/source/licenses.html +20 -19
- quarchpy/docs/_build/html/source/modules.html +22 -21
- quarchpy/docs/_build/html/source/quarchpy.calibration.html +20 -19
- quarchpy/docs/_build/html/source/quarchpy.config_files.html +20 -19
- quarchpy/docs/_build/html/source/quarchpy.connection_specific.html +22 -37
- quarchpy/docs/_build/html/source/quarchpy.debug.html +20 -19
- quarchpy/docs/_build/html/source/quarchpy.device.html +21 -20
- quarchpy/docs/_build/html/source/quarchpy.disk_test.html +20 -19
- quarchpy/docs/_build/html/source/quarchpy.fio.html +22 -47
- quarchpy/docs/_build/html/source/quarchpy.html +22 -37
- quarchpy/docs/_build/html/source/quarchpy.iometer.html +26 -25
- quarchpy/docs/_build/html/source/quarchpy.qis.html +20 -19
- quarchpy/docs/_build/html/source/quarchpy.qps.html +20 -19
- quarchpy/docs/_build/html/source/quarchpy.user_interface.html +20 -19
- quarchpy/docs/_build/html/source/quarchpy.utilities.html +20 -19
- quarchpy/docs/_build/html/source/readme.html +20 -19
- quarchpy/fio/FIO_interface.py +255 -1
- quarchpy/fio/FIO_interface.py.bak +317 -0
- quarchpy/fio/__pycache__/FIO_interface.cpython-313.pyc +0 -0
- quarchpy/fio/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/fio/__pycache__/fioDiskFinder.cpython-313.pyc +0 -0
- quarchpy/iometer/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/iometer/__pycache__/gen_iometer_template.cpython-313.pyc +0 -0
- quarchpy/iometer/__pycache__/iometerFuncs.cpython-313.pyc +0 -0
- quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-313.pyc +0 -0
- quarchpy/qis/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/qis/__pycache__/qisFuncs.cpython-313.pyc +0 -0
- quarchpy/qps/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/qps/__pycache__/qpsFuncs.cpython-313.pyc +0 -0
- quarchpy/qps/qpsFuncs.py +1 -1
- quarchpy/user_interface/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/user_interface/__pycache__/user_interface.cpython-313.pyc +0 -0
- quarchpy/utilities/__pycache__/TestCenter.cpython-313.pyc +0 -0
- quarchpy/utilities/__pycache__/TimeValue.cpython-313.pyc +0 -0
- quarchpy/utilities/__pycache__/Version.cpython-313.pyc +0 -0
- quarchpy/utilities/__pycache__/__init__.cpython-313.pyc +0 -0
- {quarchpy-2.2.5.dist-info → quarchpy-2.2.7.dev1.dist-info}/METADATA +29 -3
- {quarchpy-2.2.5.dist-info → quarchpy-2.2.7.dev1.dist-info}/RECORD +161 -104
- {quarchpy-2.2.5.dist-info → quarchpy-2.2.7.dev1.dist-info}/WHEEL +1 -1
- quarchpy/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/__pycache__/_version.cpython-311.pyc +0 -0
- quarchpy/__pycache__/connection.cpython-311.pyc +0 -0
- quarchpy/__pycache__/run.cpython-311.pyc +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/jmdns-3.5.9.jar +0 -0
- {quarchpy-2.2.5.dist-info → quarchpy-2.2.7.dev1.dist-info}/top_level.txt +0 -0
@@ -6,10 +6,11 @@
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
7
7
|
|
8
8
|
<title>quarchpy.qps package — quarchpy documentation</title>
|
9
|
-
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=
|
10
|
-
<link rel="stylesheet" type="text/css" href="../_static/
|
9
|
+
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
|
10
|
+
<link rel="stylesheet" type="text/css" href="../_static/basic.css?v=686e5160" />
|
11
|
+
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=27fed22d" />
|
11
12
|
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
|
12
|
-
<script src="../_static/doctools.js?v=
|
13
|
+
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
13
14
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
14
15
|
<link rel="index" title="Index" href="../genindex.html" />
|
15
16
|
<link rel="search" title="Search" href="../search.html" />
|
@@ -18,8 +19,9 @@
|
|
18
19
|
|
19
20
|
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
|
20
21
|
|
22
|
+
|
23
|
+
|
21
24
|
|
22
|
-
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
|
23
25
|
|
24
26
|
</head><body>
|
25
27
|
|
@@ -109,7 +111,7 @@
|
|
109
111
|
|
110
112
|
</div>
|
111
113
|
</div>
|
112
|
-
<div class="sphinxsidebar" role="navigation" aria-label="
|
114
|
+
<div class="sphinxsidebar" role="navigation" aria-label="Main">
|
113
115
|
<div class="sphinxsidebarwrapper">
|
114
116
|
<h1 class="logo"><a href="../index.html">quarchpy</a></h1>
|
115
117
|
|
@@ -120,7 +122,16 @@
|
|
120
122
|
|
121
123
|
|
122
124
|
|
123
|
-
|
125
|
+
|
126
|
+
<search id="searchbox" style="display: none" role="search">
|
127
|
+
<div class="searchformwrapper">
|
128
|
+
<form class="search" action="../search.html" method="get">
|
129
|
+
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
|
130
|
+
<input type="submit" value="Go" />
|
131
|
+
</form>
|
132
|
+
</div>
|
133
|
+
</search>
|
134
|
+
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
|
124
135
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
125
136
|
<ul class="current">
|
126
137
|
<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog (Quarchpy)</a></li>
|
@@ -145,16 +156,6 @@
|
|
145
156
|
</ul></li>
|
146
157
|
</ul>
|
147
158
|
</div>
|
148
|
-
<div id="searchbox" style="display: none" role="search">
|
149
|
-
<h3 id="searchlabel">Quick search</h3>
|
150
|
-
<div class="searchformwrapper">
|
151
|
-
<form class="search" action="../search.html" method="get">
|
152
|
-
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
153
|
-
<input type="submit" value="Go" />
|
154
|
-
</form>
|
155
|
-
</div>
|
156
|
-
</div>
|
157
|
-
<script>document.getElementById('searchbox').style.display = "block"</script>
|
158
159
|
|
159
160
|
|
160
161
|
|
@@ -168,11 +169,11 @@
|
|
168
169
|
<div class="clearer"></div>
|
169
170
|
</div>
|
170
171
|
<div class="footer">
|
171
|
-
|
172
|
+
©2020, Quarch Technology Ltd.
|
172
173
|
|
173
174
|
|
|
174
|
-
Powered by <a href="
|
175
|
-
& <a href="https://
|
175
|
+
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
|
176
|
+
& <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
176
177
|
|
177
178
|
|
|
178
179
|
<a href="../_sources/source/quarchpy.qps.rst.txt"
|
@@ -6,10 +6,11 @@
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
7
7
|
|
8
8
|
<title>quarchpy.user_interface package — quarchpy documentation</title>
|
9
|
-
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=
|
10
|
-
<link rel="stylesheet" type="text/css" href="../_static/
|
9
|
+
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
|
10
|
+
<link rel="stylesheet" type="text/css" href="../_static/basic.css?v=686e5160" />
|
11
|
+
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=27fed22d" />
|
11
12
|
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
|
12
|
-
<script src="../_static/doctools.js?v=
|
13
|
+
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
13
14
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
14
15
|
<link rel="index" title="Index" href="../genindex.html" />
|
15
16
|
<link rel="search" title="Search" href="../search.html" />
|
@@ -18,8 +19,9 @@
|
|
18
19
|
|
19
20
|
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
|
20
21
|
|
22
|
+
|
23
|
+
|
21
24
|
|
22
|
-
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
|
23
25
|
|
24
26
|
</head><body>
|
25
27
|
|
@@ -201,7 +203,7 @@ interaction. The UI can be the terminal or TestCenter</p>
|
|
201
203
|
|
202
204
|
</div>
|
203
205
|
</div>
|
204
|
-
<div class="sphinxsidebar" role="navigation" aria-label="
|
206
|
+
<div class="sphinxsidebar" role="navigation" aria-label="Main">
|
205
207
|
<div class="sphinxsidebarwrapper">
|
206
208
|
<h1 class="logo"><a href="../index.html">quarchpy</a></h1>
|
207
209
|
|
@@ -212,7 +214,16 @@ interaction. The UI can be the terminal or TestCenter</p>
|
|
212
214
|
|
213
215
|
|
214
216
|
|
215
|
-
|
217
|
+
|
218
|
+
<search id="searchbox" style="display: none" role="search">
|
219
|
+
<div class="searchformwrapper">
|
220
|
+
<form class="search" action="../search.html" method="get">
|
221
|
+
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
|
222
|
+
<input type="submit" value="Go" />
|
223
|
+
</form>
|
224
|
+
</div>
|
225
|
+
</search>
|
226
|
+
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
|
216
227
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
217
228
|
<ul class="current">
|
218
229
|
<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog (Quarchpy)</a></li>
|
@@ -237,16 +248,6 @@ interaction. The UI can be the terminal or TestCenter</p>
|
|
237
248
|
</ul></li>
|
238
249
|
</ul>
|
239
250
|
</div>
|
240
|
-
<div id="searchbox" style="display: none" role="search">
|
241
|
-
<h3 id="searchlabel">Quick search</h3>
|
242
|
-
<div class="searchformwrapper">
|
243
|
-
<form class="search" action="../search.html" method="get">
|
244
|
-
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
245
|
-
<input type="submit" value="Go" />
|
246
|
-
</form>
|
247
|
-
</div>
|
248
|
-
</div>
|
249
|
-
<script>document.getElementById('searchbox').style.display = "block"</script>
|
250
251
|
|
251
252
|
|
252
253
|
|
@@ -260,11 +261,11 @@ interaction. The UI can be the terminal or TestCenter</p>
|
|
260
261
|
<div class="clearer"></div>
|
261
262
|
</div>
|
262
263
|
<div class="footer">
|
263
|
-
|
264
|
+
©2020, Quarch Technology Ltd.
|
264
265
|
|
265
266
|
|
|
266
|
-
Powered by <a href="
|
267
|
-
& <a href="https://
|
267
|
+
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
|
268
|
+
& <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
268
269
|
|
269
270
|
|
|
270
271
|
<a href="../_sources/source/quarchpy.user_interface.rst.txt"
|
@@ -6,10 +6,11 @@
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
7
7
|
|
8
8
|
<title>quarchpy.utilities package — quarchpy documentation</title>
|
9
|
-
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=
|
10
|
-
<link rel="stylesheet" type="text/css" href="../_static/
|
9
|
+
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
|
10
|
+
<link rel="stylesheet" type="text/css" href="../_static/basic.css?v=686e5160" />
|
11
|
+
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=27fed22d" />
|
11
12
|
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
|
12
|
-
<script src="../_static/doctools.js?v=
|
13
|
+
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
13
14
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
14
15
|
<link rel="index" title="Index" href="../genindex.html" />
|
15
16
|
<link rel="search" title="Search" href="../search.html" />
|
@@ -18,8 +19,9 @@
|
|
18
19
|
|
19
20
|
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
|
20
21
|
|
22
|
+
|
23
|
+
|
21
24
|
|
22
|
-
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
|
23
25
|
|
24
26
|
</head><body>
|
25
27
|
|
@@ -134,7 +136,7 @@ on the reporting of the results.</p>
|
|
134
136
|
|
135
137
|
</div>
|
136
138
|
</div>
|
137
|
-
<div class="sphinxsidebar" role="navigation" aria-label="
|
139
|
+
<div class="sphinxsidebar" role="navigation" aria-label="Main">
|
138
140
|
<div class="sphinxsidebarwrapper">
|
139
141
|
<h1 class="logo"><a href="../index.html">quarchpy</a></h1>
|
140
142
|
|
@@ -145,7 +147,16 @@ on the reporting of the results.</p>
|
|
145
147
|
|
146
148
|
|
147
149
|
|
148
|
-
|
150
|
+
|
151
|
+
<search id="searchbox" style="display: none" role="search">
|
152
|
+
<div class="searchformwrapper">
|
153
|
+
<form class="search" action="../search.html" method="get">
|
154
|
+
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
|
155
|
+
<input type="submit" value="Go" />
|
156
|
+
</form>
|
157
|
+
</div>
|
158
|
+
</search>
|
159
|
+
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
|
149
160
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
150
161
|
<ul class="current">
|
151
162
|
<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog (Quarchpy)</a></li>
|
@@ -170,16 +181,6 @@ on the reporting of the results.</p>
|
|
170
181
|
</ul></li>
|
171
182
|
</ul>
|
172
183
|
</div>
|
173
|
-
<div id="searchbox" style="display: none" role="search">
|
174
|
-
<h3 id="searchlabel">Quick search</h3>
|
175
|
-
<div class="searchformwrapper">
|
176
|
-
<form class="search" action="../search.html" method="get">
|
177
|
-
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
178
|
-
<input type="submit" value="Go" />
|
179
|
-
</form>
|
180
|
-
</div>
|
181
|
-
</div>
|
182
|
-
<script>document.getElementById('searchbox').style.display = "block"</script>
|
183
184
|
|
184
185
|
|
185
186
|
|
@@ -193,11 +194,11 @@ on the reporting of the results.</p>
|
|
193
194
|
<div class="clearer"></div>
|
194
195
|
</div>
|
195
196
|
<div class="footer">
|
196
|
-
|
197
|
+
©2020, Quarch Technology Ltd.
|
197
198
|
|
198
199
|
|
|
199
|
-
Powered by <a href="
|
200
|
-
& <a href="https://
|
200
|
+
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
|
201
|
+
& <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
201
202
|
|
202
203
|
|
|
203
204
|
<a href="../_sources/source/quarchpy.utilities.rst.txt"
|
@@ -6,10 +6,11 @@
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
7
7
|
|
8
8
|
<title>Quarchpy - Readme — quarchpy documentation</title>
|
9
|
-
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=
|
10
|
-
<link rel="stylesheet" type="text/css" href="../_static/
|
9
|
+
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
|
10
|
+
<link rel="stylesheet" type="text/css" href="../_static/basic.css?v=686e5160" />
|
11
|
+
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=27fed22d" />
|
11
12
|
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
|
12
|
-
<script src="../_static/doctools.js?v=
|
13
|
+
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
13
14
|
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
14
15
|
<link rel="index" title="Index" href="../genindex.html" />
|
15
16
|
<link rel="search" title="Search" href="../search.html" />
|
@@ -18,8 +19,9 @@
|
|
18
19
|
|
19
20
|
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
|
20
21
|
|
22
|
+
|
23
|
+
|
21
24
|
|
22
|
-
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
|
23
25
|
|
24
26
|
</head><body>
|
25
27
|
|
@@ -71,7 +73,7 @@
|
|
71
73
|
|
72
74
|
</div>
|
73
75
|
</div>
|
74
|
-
<div class="sphinxsidebar" role="navigation" aria-label="
|
76
|
+
<div class="sphinxsidebar" role="navigation" aria-label="Main">
|
75
77
|
<div class="sphinxsidebarwrapper">
|
76
78
|
<h1 class="logo"><a href="../index.html">quarchpy</a></h1>
|
77
79
|
|
@@ -82,7 +84,16 @@
|
|
82
84
|
|
83
85
|
|
84
86
|
|
85
|
-
|
87
|
+
|
88
|
+
<search id="searchbox" style="display: none" role="search">
|
89
|
+
<div class="searchformwrapper">
|
90
|
+
<form class="search" action="../search.html" method="get">
|
91
|
+
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
|
92
|
+
<input type="submit" value="Go" />
|
93
|
+
</form>
|
94
|
+
</div>
|
95
|
+
</search>
|
96
|
+
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
|
86
97
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
87
98
|
<ul class="current">
|
88
99
|
<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog (Quarchpy)</a></li>
|
@@ -106,16 +117,6 @@
|
|
106
117
|
</ul></li>
|
107
118
|
</ul>
|
108
119
|
</div>
|
109
|
-
<div id="searchbox" style="display: none" role="search">
|
110
|
-
<h3 id="searchlabel">Quick search</h3>
|
111
|
-
<div class="searchformwrapper">
|
112
|
-
<form class="search" action="../search.html" method="get">
|
113
|
-
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
114
|
-
<input type="submit" value="Go" />
|
115
|
-
</form>
|
116
|
-
</div>
|
117
|
-
</div>
|
118
|
-
<script>document.getElementById('searchbox').style.display = "block"</script>
|
119
120
|
|
120
121
|
|
121
122
|
|
@@ -129,11 +130,11 @@
|
|
129
130
|
<div class="clearer"></div>
|
130
131
|
</div>
|
131
132
|
<div class="footer">
|
132
|
-
|
133
|
+
©2020, Quarch Technology Ltd.
|
133
134
|
|
134
135
|
|
|
135
|
-
Powered by <a href="
|
136
|
-
& <a href="https://
|
136
|
+
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
|
137
|
+
& <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
137
138
|
|
138
139
|
|
|
139
140
|
<a href="../_sources/source/readme.rst.txt"
|
quarchpy/fio/FIO_interface.py
CHANGED
@@ -3,6 +3,12 @@ import time
|
|
3
3
|
import json
|
4
4
|
from datetime import datetime
|
5
5
|
import subprocess
|
6
|
+
import json
|
7
|
+
import csv
|
8
|
+
import logging
|
9
|
+
import time
|
10
|
+
import os
|
11
|
+
from bisect import bisect_left
|
6
12
|
|
7
13
|
all_outputs={"terse_version_3":"0",
|
8
14
|
"fio_version":"1",
|
@@ -313,4 +319,252 @@ def runFIO(myStream, mode, fioCallbacks, user_data, arguments="", file_name=""):
|
|
313
319
|
os.remove("pipe")
|
314
320
|
|
315
321
|
if isinstance(arguments, dict):
|
316
|
-
break
|
322
|
+
break
|
323
|
+
|
324
|
+
|
325
|
+
|
326
|
+
### FIO postprocessing for QIS ###
|
327
|
+
|
328
|
+
|
329
|
+
def merge_fio_qis_stream(qis_stream_file, fio_output_file, unix_stream_start_time, output_file=None, rounding_option="round"):
|
330
|
+
"""
|
331
|
+
Merge FIO and QIS data into a single CSV file.
|
332
|
+
|
333
|
+
For each FIO entry:
|
334
|
+
- If timestamps match, append FIO data to the corresponding QIS row.
|
335
|
+
- If no match, handle based on `rounding_option`:
|
336
|
+
- "round": Find the nearest QIS time and add FIO data to that row.
|
337
|
+
- "insert": Add a new row with blank QIS data and only FIO data.
|
338
|
+
|
339
|
+
Parameters:
|
340
|
+
qis_stream_file (str): Path to the QIS CSV file (converted to Unix time).
|
341
|
+
fio_output_file (str): Path to the FIO output file (in JSON format).
|
342
|
+
unix_stream_start_time (str): Starting Unix timestamp for the QIS stream.
|
343
|
+
output_file (str, optional): Output file path for the merged CSV. If not provided, the file is saved
|
344
|
+
with "_merged" appended to the QIS file name.
|
345
|
+
rounding_option (str): Determines how to handle mismatched times ("round" or "insert").
|
346
|
+
|
347
|
+
Returns:
|
348
|
+
str: Path to the merged CSV file.
|
349
|
+
"""
|
350
|
+
# Convert QIS timestamps to Unix time
|
351
|
+
qis_converted_file = convert_qis_stream_to_unix_time(qis_stream_file, unix_stream_start_time)
|
352
|
+
|
353
|
+
# Parse QIS data
|
354
|
+
qis_data = []
|
355
|
+
with open(qis_converted_file, 'r') as qis_file:
|
356
|
+
reader = csv.reader(qis_file)
|
357
|
+
qis_headers = next(reader) #read header row
|
358
|
+
if qis_headers[-1]=="": qis_headers=qis_headers[:-1]
|
359
|
+
for row in reader:
|
360
|
+
qis_data.append(row)
|
361
|
+
|
362
|
+
# Parse FIO data
|
363
|
+
fio_data = fio_json_to_csv (fio_output_file)
|
364
|
+
|
365
|
+
# Extend QIS headers with FIO headers
|
366
|
+
fio_headers = ["block_size", "job_name", "read_iops", "write_iops"]
|
367
|
+
merged_headers = qis_headers + fio_headers
|
368
|
+
|
369
|
+
# Extract QIS times into a separate list for binary search
|
370
|
+
qis_times = [int(row[0]) for row in qis_data] # Assuming the first column is the timestamp
|
371
|
+
|
372
|
+
# Prepare merged data
|
373
|
+
merged_data = qis_data.copy()
|
374
|
+
for row in merged_data:
|
375
|
+
row.extend([""] * len(fio_headers))
|
376
|
+
|
377
|
+
# Merge FIO and QIS data
|
378
|
+
for fio_entry in fio_data:
|
379
|
+
fio_time = fio_entry["timestamp_us"]
|
380
|
+
|
381
|
+
# Binary search to find the closest QIS time
|
382
|
+
idx = bisect_left(qis_times, fio_time)
|
383
|
+
exact_match = None
|
384
|
+
if idx < len(qis_times) and qis_times[idx] == fio_time:
|
385
|
+
# Exact match found
|
386
|
+
exact_match = idx
|
387
|
+
elif idx > 0 and (idx == len(qis_times) or abs(qis_times[idx - 1] - fio_time) < abs(qis_times[idx] - fio_time)):
|
388
|
+
exact_match = idx - 1
|
389
|
+
|
390
|
+
if exact_match is not None and qis_times[exact_match] == fio_time:
|
391
|
+
# Append FIO data to the matching QIS row
|
392
|
+
qis_data[exact_match].extend([fio_entry.get(header, "") for header in fio_headers])
|
393
|
+
else:
|
394
|
+
# Log the two QIS times between which the FIO timestamp falls
|
395
|
+
lower_bound = qis_times[idx - 1] if idx > 0 else None
|
396
|
+
upper_bound = qis_times[idx] if idx < len(qis_times) else None
|
397
|
+
logging.debug(f"FIO timestamp {fio_time} falls between QIS times {lower_bound} and {upper_bound} at array position {idx - 1} and {idx}")
|
398
|
+
|
399
|
+
if rounding_option == "round":
|
400
|
+
# Find the nearest QIS time to the FIO time
|
401
|
+
nearest_idx = idx - 1 if idx > 0 and (idx == len(qis_times) or abs(qis_times[idx - 1] - fio_time) < abs(
|
402
|
+
qis_times[idx] - fio_time)) else idx
|
403
|
+
merged_data[nearest_idx] = merged_data[nearest_idx][:-4]
|
404
|
+
merged_data[nearest_idx].extend([fio_entry.get(header, "") for header in fio_headers])
|
405
|
+
elif rounding_option == "insert":
|
406
|
+
# Add a new row with blank QIS data and only FIO data at the end
|
407
|
+
blank_qis_data = [""] * len(qis_headers)
|
408
|
+
blank_qis_data[0]=fio_time
|
409
|
+
new_row = blank_qis_data + [fio_entry.get(header, "") for header in fio_headers]
|
410
|
+
merged_data.insert(idx, new_row)
|
411
|
+
|
412
|
+
# Write the merged data to a new file
|
413
|
+
if output_file is None:
|
414
|
+
output_file = qis_stream_file.replace(".csv", f"_merged_{rounding_option}.csv")
|
415
|
+
with open(output_file, 'w', newline='') as output_file_out:
|
416
|
+
writer = csv.writer(output_file_out)
|
417
|
+
writer.writerow(merged_headers)
|
418
|
+
writer.writerows(merged_data)
|
419
|
+
|
420
|
+
logging.debug(f"Merged data written to {output_file}")
|
421
|
+
os.remove(qis_converted_file) # remove the intermidiary file
|
422
|
+
return output_file
|
423
|
+
|
424
|
+
def convert_qis_stream_to_unix_time(qis_stream_file, unix_stream_start_time):
|
425
|
+
"""
|
426
|
+
Converts a QIS stream CSV file to Unix time by adding the unixStreamStartTime to the first column
|
427
|
+
in each row, taking into account the time units provided in both the CSV header and the start time.
|
428
|
+
|
429
|
+
Parameters:
|
430
|
+
qis_stream_file (str): The path to the QIS stream CSV file.
|
431
|
+
unix_stream_start_time (str): The starting Unix time with units (e.g., "1737374310S", "1737374310000mS").
|
432
|
+
|
433
|
+
Returns:
|
434
|
+
str: Path to the converted CSV file.
|
435
|
+
"""
|
436
|
+
# Extract the numeric value and unit from unixStreamStartTime
|
437
|
+
import re
|
438
|
+
match = re.match(r"(\d+)([a-zA-Z]+)", unix_stream_start_time)
|
439
|
+
if not match:
|
440
|
+
logging.warning("Invalid unix_stream_start_time format. Use format like '1737374310S' or '1737374310000mS'.")
|
441
|
+
return
|
442
|
+
|
443
|
+
unix_start_value = int(match.group(1))
|
444
|
+
unix_start_unit = match.group(2).lower() # Normalize to lowercase
|
445
|
+
|
446
|
+
# Unit multipliers
|
447
|
+
unit_multipliers = {'s': 1, 'ms': 1e-3, 'us': 1e-6, 'ns': 1e-9}
|
448
|
+
if unix_start_unit not in unit_multipliers:
|
449
|
+
raise ValueError(f"Unsupported time unit: {unix_start_unit}")
|
450
|
+
|
451
|
+
unix_start_in_seconds = unix_start_value * unit_multipliers[unix_start_unit]
|
452
|
+
|
453
|
+
# Determine the output file name
|
454
|
+
output_file = qis_stream_file.replace('.csv', '_converted.csv')
|
455
|
+
|
456
|
+
try:
|
457
|
+
with open(qis_stream_file, 'r') as infile, open(output_file, 'w', newline='') as outfile:
|
458
|
+
reader = csv.reader(infile)
|
459
|
+
writer = csv.writer(outfile)
|
460
|
+
|
461
|
+
# Read the header to determine the time column unit
|
462
|
+
header = next(reader)
|
463
|
+
writer.writerow(header) # Write the header to the output file
|
464
|
+
|
465
|
+
# Identify the time unit in the header (e.g., "Time uS")
|
466
|
+
time_unit = None
|
467
|
+
for col in header:
|
468
|
+
if "time" in col.lower():
|
469
|
+
time_unit_match = re.search(r"time\s+([a-zA-Z]+)", col, re.IGNORECASE)
|
470
|
+
if time_unit_match:
|
471
|
+
time_unit = time_unit_match.group(1).lower()
|
472
|
+
break
|
473
|
+
|
474
|
+
if not time_unit or time_unit not in unit_multipliers:
|
475
|
+
logging.warning(f"Unsupported or missing time unit in the header: {time_unit}")
|
476
|
+
return
|
477
|
+
|
478
|
+
# Convert time units in the CSV to seconds
|
479
|
+
time_unit_multiplier = unit_multipliers[time_unit]
|
480
|
+
|
481
|
+
# Process each row and update the first column
|
482
|
+
for row in reader:
|
483
|
+
if row and row[0].isdigit(): # Ensure the first cell is numeric
|
484
|
+
elapsed_time_in_seconds = int(row[0]) * time_unit_multiplier
|
485
|
+
new_time_in_seconds = elapsed_time_in_seconds + unix_start_in_seconds
|
486
|
+
# Convert back to the original unit for consistency
|
487
|
+
row[0] = str(int(new_time_in_seconds / time_unit_multiplier))
|
488
|
+
writer.writerow(row)
|
489
|
+
|
490
|
+
logging.debug(f"File successfully converted and saved as: {output_file}")
|
491
|
+
return output_file
|
492
|
+
|
493
|
+
except FileNotFoundError:
|
494
|
+
logging.error(f"Error: File '{qis_stream_file}' not found.")
|
495
|
+
except Exception as e:
|
496
|
+
logging.error(f"An error occurred: {e}")
|
497
|
+
#1737376756
|
498
|
+
#convertQISStreamToUnixTime("Stream1.csv", "1737376756S")
|
499
|
+
|
500
|
+
|
501
|
+
|
502
|
+
def fio_json_to_csv(output_file):
|
503
|
+
retVal=[]
|
504
|
+
isThreaded = True
|
505
|
+
#checking to see if the first line of file needs to be skipped = Windows only
|
506
|
+
if os.name == "nt":
|
507
|
+
isThreaded = False
|
508
|
+
logfile = open(output_file,"r")
|
509
|
+
#variables for parsing json
|
510
|
+
iterator = 0
|
511
|
+
jobCount = 0
|
512
|
+
jsonLines = ""
|
513
|
+
openBracketCount = 0
|
514
|
+
closeBracketCount = 0
|
515
|
+
# Init the job end time to the current start time
|
516
|
+
jobEndTime = int(round(time.time() * 1000))
|
517
|
+
for line in logfile:
|
518
|
+
if (isThreaded == False):
|
519
|
+
# skip the very first line -- (title line) --
|
520
|
+
if iterator == 0:
|
521
|
+
iterator = iterator + 1
|
522
|
+
# marking threaded as true for remainder of read > Efficiency
|
523
|
+
isThreaded = True
|
524
|
+
continue
|
525
|
+
# add to iterator - not needed, may be useful later
|
526
|
+
iterator = iterator + 1
|
527
|
+
# concat strings
|
528
|
+
jsonLines += line
|
529
|
+
# finding brackets withing json
|
530
|
+
if '{' in line:
|
531
|
+
openBracketCount = openBracketCount + 1
|
532
|
+
if '}' in line:
|
533
|
+
closeBracketCount = closeBracketCount + 1
|
534
|
+
# an equal amount of brackets denotes the end of a json object
|
535
|
+
if openBracketCount == closeBracketCount and openBracketCount != 0:
|
536
|
+
try:
|
537
|
+
# format into a json parsable string
|
538
|
+
TempJsonObject = jsonLines[0: jsonLines.rindex('}') + 1]
|
539
|
+
# parse json
|
540
|
+
jsonobject = json.loads(TempJsonObject)
|
541
|
+
# checking for first job
|
542
|
+
if (jobCount == 0):
|
543
|
+
# getting start time of job
|
544
|
+
startTime = (jsonobject['timestamp_ms'] - jsonobject['jobs'][0]['read']['runtime'])
|
545
|
+
#comment = str(arguments).replace(",", "\n").replace("}", "").replace("{", "")
|
546
|
+
jobName = str(jsonobject['jobs'][0]['jobname'])
|
547
|
+
# adding start annotation
|
548
|
+
#fioCallbacks["TEST_START"](myStream, str(startTime), jobName, comment)
|
549
|
+
logging.debug(f"first job name: {jobName} start time {startTime} ")
|
550
|
+
# pass specific data
|
551
|
+
readDataValue = jsonobject['jobs'][0]['read']['iops']
|
552
|
+
writeDataValue = jsonobject['jobs'][0]['write']['iops']
|
553
|
+
blockSize = jsonobject['global options']['bs']
|
554
|
+
# converted to ditionary - easy script use
|
555
|
+
dataValues = {"read_iops": readDataValue, "write_iops": writeDataValue, "block_size": blockSize}
|
556
|
+
jobEndTime = str(jsonobject['timestamp_ms'])
|
557
|
+
dataValues['timestamp_us']=int(jobEndTime)*1000
|
558
|
+
dataValues['job_name'] = jobName
|
559
|
+
logging.debug(str(dataValues))
|
560
|
+
|
561
|
+
retVal.append(dataValues)
|
562
|
+
# jsonLines variable is now all characters after last job + any new that come in
|
563
|
+
jsonLines = jsonLines[jsonLines.rindex('}') + 1:]
|
564
|
+
# add 1 to the job count
|
565
|
+
jobCount += 1
|
566
|
+
except Exception as e:
|
567
|
+
# exception caused by not being able to find substring -- Last json object --
|
568
|
+
logging.warning("Exception Caught\n"+ str(e))
|
569
|
+
pass
|
570
|
+
return retVal
|