quarchpy 2.2.4__py2.py3-none-any.whl → 2.2.6__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.
Files changed (289) hide show
  1. quarchpy/_version.py +1 -1
  2. quarchpy/_version.py.bak +1 -0
  3. quarchpy/config_files/__pycache__/__init__.cpython-311.pyc +0 -0
  4. quarchpy/config_files/__pycache__/__init__.cpython-313.pyc +0 -0
  5. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-311.pyc +0 -0
  6. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-313.pyc +0 -0
  7. quarchpy/connection_specific/QPS/win-amd64/app.jar +0 -0
  8. quarchpy/connection_specific/QPS/win-amd64/qis/README.txt +2 -2
  9. quarchpy/connection_specific/QPS/win-amd64/qis/help.txt +2 -2
  10. quarchpy/connection_specific/QPS/win-amd64/qis/qis.jar +0 -0
  11. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/{CInterface-2.2.jar → CInterface-2.3.jar} +0 -0
  12. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/QuarchCommon-2.0.jar +0 -0
  13. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/TorridonCommon-1.0.jar +0 -0
  14. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/jmdns-3.6.0.jar +0 -0
  15. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/usb4java-1.3.1.jar +0 -0
  16. quarchpy/connection_specific/QPS/win-amd64/qps-command-reference.html +331 -0
  17. quarchpy/connection_specific/QPS/win-amd64/qps_lib/JFXUtilities-1.0.jar +0 -0
  18. quarchpy/connection_specific/QPS/win-amd64/qps_lib/QuarchCommon-2.0.jar +0 -0
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. quarchpy/connection_specific/QPS/win-amd64/resources/profiles/3_PHASE_PAM_AC_DEFAULT.rcf +2 -2
  40. quarchpy/connection_specific/QPS/win-amd64/resources/profiles/3_PHASE_PAM_AC_FULL.rcf +5 -56
  41. quarchpy/connection_specific/QPS/win-amd64/resources/profiles/PAM_EXAMPLE_CONFIG.rcf +1 -1
  42. quarchpy/connection_specific/QPS/win-amd64/scriptCommands.txt +59 -3
  43. quarchpy/connection_specific/QPS/win-amd64/whats-new.txt +12 -20
  44. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-313.pyc +0 -0
  45. quarchpy/connection_specific/__pycache__/__init__.cpython-313.pyc +0 -0
  46. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-313.pyc +0 -0
  47. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-313.pyc +0 -0
  48. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-313.pyc +0 -0
  49. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-313.pyc +0 -0
  50. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-313.pyc +0 -0
  51. quarchpy/connection_specific/__pycache__/connection_Telnet.cpython-313.pyc +0 -0
  52. quarchpy/connection_specific/__pycache__/connection_USB.cpython-313.pyc +0 -0
  53. quarchpy/connection_specific/__pycache__/mDNS.cpython-313.pyc +0 -0
  54. quarchpy/connection_specific/connection_QPS.py +11 -7
  55. quarchpy/connection_specific/connection_QPS.py.bak +242 -0
  56. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-313.pyc +0 -0
  57. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-313.pyc +0 -0
  58. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-313.pyc +0 -0
  59. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-313.pyc +0 -0
  60. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-313.pyc +0 -0
  61. quarchpy/connection_specific/serial/__pycache__/win32.cpython-313.pyc +0 -0
  62. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-313.pyc +0 -0
  63. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-313.pyc +0 -0
  64. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-313.pyc +0 -0
  65. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-313.pyc +0 -0
  66. quarchpy/debug/__pycache__/SystemTest.cpython-311.pyc +0 -0
  67. quarchpy/debug/__pycache__/SystemTest.cpython-313.pyc +0 -0
  68. quarchpy/debug/__pycache__/__init__.cpython-311.pyc +0 -0
  69. quarchpy/debug/__pycache__/__init__.cpython-313.pyc +0 -0
  70. quarchpy/debug/__pycache__/module_debug.cpython-311.pyc +0 -0
  71. quarchpy/debug/__pycache__/module_debug.cpython-313.pyc +0 -0
  72. quarchpy/debug/__pycache__/simple_terminal.cpython-311.pyc +0 -0
  73. quarchpy/debug/__pycache__/simple_terminal.cpython-313.pyc +0 -0
  74. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-311.pyc +0 -0
  75. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-313.pyc +0 -0
  76. quarchpy/debug/__pycache__/versionCompare.cpython-311.pyc +0 -0
  77. quarchpy/debug/__pycache__/versionCompare.cpython-313.pyc +0 -0
  78. quarchpy/device/__pycache__/__init__.cpython-311.pyc +0 -0
  79. quarchpy/device/__pycache__/__init__.cpython-313.pyc +0 -0
  80. quarchpy/device/__pycache__/device.cpython-311.pyc +0 -0
  81. quarchpy/device/__pycache__/device.cpython-313.pyc +0 -0
  82. quarchpy/device/__pycache__/quarchArray.cpython-311.pyc +0 -0
  83. quarchpy/device/__pycache__/quarchArray.cpython-313.pyc +0 -0
  84. quarchpy/device/__pycache__/quarchPPM.cpython-311.pyc +0 -0
  85. quarchpy/device/__pycache__/quarchPPM.cpython-313.pyc +0 -0
  86. quarchpy/device/__pycache__/quarchQPS.cpython-311.pyc +0 -0
  87. quarchpy/device/__pycache__/quarchQPS.cpython-313.pyc +0 -0
  88. quarchpy/device/__pycache__/scanDevices.cpython-311.pyc +0 -0
  89. quarchpy/device/__pycache__/scanDevices.cpython-313.pyc +0 -0
  90. quarchpy/device/quarchQPS.py.bak +398 -0
  91. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-311.pyc +0 -0
  92. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-313.pyc +0 -0
  93. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-311.pyc +0 -0
  94. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-313.pyc +0 -0
  95. quarchpy/disk_test/__pycache__/__init__.cpython-311.pyc +0 -0
  96. quarchpy/disk_test/__pycache__/__init__.cpython-313.pyc +0 -0
  97. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-311.pyc +0 -0
  98. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-313.pyc +0 -0
  99. quarchpy/docs/CHANGES.rst +15 -1
  100. quarchpy/docs/CHANGES.rst.bak +430 -0
  101. quarchpy/docs/_build/doctrees/CHANGES.doctree +0 -0
  102. quarchpy/docs/_build/doctrees/environment.pickle +0 -0
  103. quarchpy/docs/_build/doctrees/index.doctree +0 -0
  104. quarchpy/docs/_build/doctrees/readme.doctree +0 -0
  105. quarchpy/docs/_build/doctrees/source/changelog.doctree +0 -0
  106. quarchpy/docs/_build/doctrees/source/licenses.doctree +0 -0
  107. quarchpy/docs/_build/doctrees/source/modules.doctree +0 -0
  108. quarchpy/docs/_build/doctrees/source/quarchpy.calibration.doctree +0 -0
  109. quarchpy/docs/_build/doctrees/source/quarchpy.config_files.doctree +0 -0
  110. quarchpy/docs/_build/doctrees/source/quarchpy.connection_specific.doctree +0 -0
  111. quarchpy/docs/_build/doctrees/source/quarchpy.debug.doctree +0 -0
  112. quarchpy/docs/_build/doctrees/source/quarchpy.device.doctree +0 -0
  113. quarchpy/docs/_build/doctrees/source/quarchpy.disk_test.doctree +0 -0
  114. quarchpy/docs/_build/doctrees/source/quarchpy.doctree +0 -0
  115. quarchpy/docs/_build/doctrees/source/quarchpy.fio.doctree +0 -0
  116. quarchpy/docs/_build/doctrees/source/quarchpy.iometer.doctree +0 -0
  117. quarchpy/docs/_build/doctrees/source/quarchpy.qis.doctree +0 -0
  118. quarchpy/docs/_build/doctrees/source/quarchpy.qps.doctree +0 -0
  119. quarchpy/docs/_build/doctrees/source/quarchpy.user_interface.doctree +0 -0
  120. quarchpy/docs/_build/doctrees/source/quarchpy.utilities.doctree +0 -0
  121. quarchpy/docs/_build/doctrees/source/readme.doctree +0 -0
  122. quarchpy/docs/_build/html/.buildinfo +2 -2
  123. quarchpy/docs/_build/html/.buildinfo.bak +4 -0
  124. quarchpy/docs/_build/html/CHANGES.html +176 -150
  125. quarchpy/docs/_build/html/_sources/CHANGES.rst.txt +14 -0
  126. quarchpy/docs/_build/html/_static/alabaster.css +47 -87
  127. quarchpy/docs/_build/html/_static/basic.css +3 -14
  128. quarchpy/docs/_build/html/_static/doctools.js +0 -7
  129. quarchpy/docs/_build/html/_static/github-banner.svg +5 -0
  130. quarchpy/docs/_build/html/_static/language_data.js +1 -8
  131. quarchpy/docs/_build/html/_static/pygments.css +2 -1
  132. quarchpy/docs/_build/html/_static/searchtools.js +129 -71
  133. quarchpy/docs/_build/html/genindex.html +22 -55
  134. quarchpy/docs/_build/html/index.html +90 -85
  135. quarchpy/docs/_build/html/objects.inv +0 -0
  136. quarchpy/docs/_build/html/py-modindex.html +20 -29
  137. quarchpy/docs/_build/html/readme.html +20 -19
  138. quarchpy/docs/_build/html/search.html +14 -14
  139. quarchpy/docs/_build/html/searchindex.js +1 -1
  140. quarchpy/docs/_build/html/source/changelog.html +246 -216
  141. quarchpy/docs/_build/html/source/licenses.html +20 -19
  142. quarchpy/docs/_build/html/source/modules.html +22 -21
  143. quarchpy/docs/_build/html/source/quarchpy.calibration.html +20 -19
  144. quarchpy/docs/_build/html/source/quarchpy.config_files.html +20 -19
  145. quarchpy/docs/_build/html/source/quarchpy.connection_specific.html +22 -37
  146. quarchpy/docs/_build/html/source/quarchpy.debug.html +20 -19
  147. quarchpy/docs/_build/html/source/quarchpy.device.html +21 -20
  148. quarchpy/docs/_build/html/source/quarchpy.disk_test.html +20 -19
  149. quarchpy/docs/_build/html/source/quarchpy.fio.html +22 -47
  150. quarchpy/docs/_build/html/source/quarchpy.html +22 -37
  151. quarchpy/docs/_build/html/source/quarchpy.iometer.html +26 -25
  152. quarchpy/docs/_build/html/source/quarchpy.qis.html +20 -19
  153. quarchpy/docs/_build/html/source/quarchpy.qps.html +20 -19
  154. quarchpy/docs/_build/html/source/quarchpy.user_interface.html +20 -19
  155. quarchpy/docs/_build/html/source/quarchpy.utilities.html +20 -19
  156. quarchpy/docs/_build/html/source/readme.html +20 -19
  157. quarchpy/fio/FIO_interface.py.bak +317 -0
  158. quarchpy/fio/__pycache__/FIO_interface.cpython-311.pyc +0 -0
  159. quarchpy/fio/__pycache__/FIO_interface.cpython-313.pyc +0 -0
  160. quarchpy/fio/__pycache__/__init__.cpython-311.pyc +0 -0
  161. quarchpy/fio/__pycache__/__init__.cpython-313.pyc +0 -0
  162. quarchpy/fio/__pycache__/fioDiskFinder.cpython-311.pyc +0 -0
  163. quarchpy/fio/__pycache__/fioDiskFinder.cpython-313.pyc +0 -0
  164. quarchpy/iometer/__pycache__/__init__.cpython-311.pyc +0 -0
  165. quarchpy/iometer/__pycache__/__init__.cpython-313.pyc +0 -0
  166. quarchpy/iometer/__pycache__/gen_iometer_template.cpython-311.pyc +0 -0
  167. quarchpy/iometer/__pycache__/{gen_iometer_template.cpython-312.pyc → gen_iometer_template.cpython-313.pyc} +0 -0
  168. quarchpy/iometer/__pycache__/iometerFuncs.cpython-311.pyc +0 -0
  169. quarchpy/iometer/__pycache__/iometerFuncs.cpython-313.pyc +0 -0
  170. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-311.pyc +0 -0
  171. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-313.pyc +0 -0
  172. quarchpy/qis/__pycache__/__init__.cpython-311.pyc +0 -0
  173. quarchpy/qis/__pycache__/__init__.cpython-313.pyc +0 -0
  174. quarchpy/qis/__pycache__/qisFuncs.cpython-311.pyc +0 -0
  175. quarchpy/qis/__pycache__/qisFuncs.cpython-313.pyc +0 -0
  176. quarchpy/qps/__pycache__/__init__.cpython-311.pyc +0 -0
  177. quarchpy/qps/__pycache__/__init__.cpython-313.pyc +0 -0
  178. quarchpy/qps/__pycache__/qpsFuncs.cpython-311.pyc +0 -0
  179. quarchpy/qps/__pycache__/qpsFuncs.cpython-313.pyc +0 -0
  180. quarchpy/user_interface/__pycache__/__init__.cpython-311.pyc +0 -0
  181. quarchpy/user_interface/__pycache__/__init__.cpython-313.pyc +0 -0
  182. quarchpy/user_interface/__pycache__/user_interface.cpython-311.pyc +0 -0
  183. quarchpy/user_interface/__pycache__/user_interface.cpython-313.pyc +0 -0
  184. quarchpy/utilities/__pycache__/TestCenter.cpython-311.pyc +0 -0
  185. quarchpy/utilities/__pycache__/TestCenter.cpython-313.pyc +0 -0
  186. quarchpy/utilities/__pycache__/TimeValue.cpython-311.pyc +0 -0
  187. quarchpy/utilities/__pycache__/TimeValue.cpython-313.pyc +0 -0
  188. quarchpy/utilities/__pycache__/Version.cpython-311.pyc +0 -0
  189. quarchpy/utilities/__pycache__/Version.cpython-313.pyc +0 -0
  190. quarchpy/utilities/__pycache__/__init__.cpython-311.pyc +0 -0
  191. quarchpy/utilities/__pycache__/__init__.cpython-313.pyc +0 -0
  192. {quarchpy-2.2.4.dist-info → quarchpy-2.2.6.dist-info}/METADATA +27 -4
  193. {quarchpy-2.2.4.dist-info → quarchpy-2.2.6.dist-info}/RECORD +195 -224
  194. {quarchpy-2.2.4.dist-info → quarchpy-2.2.6.dist-info}/WHEEL +1 -1
  195. quarchpy/.idea/.name +0 -1
  196. quarchpy/.idea/inspectionProfiles/Project_Default.xml +0 -50
  197. quarchpy/.idea/inspectionProfiles/profiles_settings.xml +0 -6
  198. quarchpy/.idea/misc.xml +0 -7
  199. quarchpy/.idea/modules.xml +0 -8
  200. quarchpy/.idea/quarchpy.iml +0 -12
  201. quarchpy/.idea/vcs.xml +0 -6
  202. quarchpy/.idea/workspace.xml +0 -161
  203. quarchpy/__pycache__/__init__.cpython-311.pyc +0 -0
  204. quarchpy/__pycache__/__init__.cpython-312.pyc +0 -0
  205. quarchpy/__pycache__/_version.cpython-311.pyc +0 -0
  206. quarchpy/__pycache__/_version.cpython-312.pyc +0 -0
  207. quarchpy/__pycache__/connection.cpython-311.pyc +0 -0
  208. quarchpy/__pycache__/connection.cpython-312.pyc +0 -0
  209. quarchpy/__pycache__/run.cpython-312.pyc +0 -0
  210. quarchpy/config_files/__pycache__/__init__.cpython-312.pyc +0 -0
  211. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-312.pyc +0 -0
  212. quarchpy/connection_specific/QPS/win-amd64/InstallType.dat +0 -1
  213. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/jmdns-3.5.9.jar +0 -0
  214. quarchpy/connection_specific/QPS/win-amd64/qps_lib/qis-1.45.jar +0 -0
  215. quarchpy/connection_specific/QPS/win-amd64/qps_lib/qis-1.46.jar +0 -0
  216. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-311.pyc +0 -0
  217. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-312.pyc +0 -0
  218. quarchpy/connection_specific/__pycache__/__init__.cpython-311.pyc +0 -0
  219. quarchpy/connection_specific/__pycache__/__init__.cpython-312.pyc +0 -0
  220. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-311.pyc +0 -0
  221. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-312.pyc +0 -0
  222. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-311.pyc +0 -0
  223. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-312.pyc +0 -0
  224. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-311.pyc +0 -0
  225. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-312.pyc +0 -0
  226. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-311.pyc +0 -0
  227. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-312.pyc +0 -0
  228. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-311.pyc +0 -0
  229. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-312.pyc +0 -0
  230. quarchpy/connection_specific/__pycache__/connection_USB.cpython-311.pyc +0 -0
  231. quarchpy/connection_specific/__pycache__/connection_USB.cpython-312.pyc +0 -0
  232. quarchpy/connection_specific/__pycache__/mDNS.cpython-311.pyc +0 -0
  233. quarchpy/connection_specific/__pycache__/mDNS.cpython-312.pyc +0 -0
  234. quarchpy/connection_specific/connection_QIS.py.bak +0 -1749
  235. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-311.pyc +0 -0
  236. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-312.pyc +0 -0
  237. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-311.pyc +0 -0
  238. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-312.pyc +0 -0
  239. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-311.pyc +0 -0
  240. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-312.pyc +0 -0
  241. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-311.pyc +0 -0
  242. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-312.pyc +0 -0
  243. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-311.pyc +0 -0
  244. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-312.pyc +0 -0
  245. quarchpy/connection_specific/serial/__pycache__/win32.cpython-311.pyc +0 -0
  246. quarchpy/connection_specific/serial/__pycache__/win32.cpython-312.pyc +0 -0
  247. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-311.pyc +0 -0
  248. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-312.pyc +0 -0
  249. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-311.pyc +0 -0
  250. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-312.pyc +0 -0
  251. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-311.pyc +0 -0
  252. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-312.pyc +0 -0
  253. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-311.pyc +0 -0
  254. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-312.pyc +0 -0
  255. quarchpy/connection_specific/usb_libs/__pycache__/libusb1.cpython-312.pyc +0 -0
  256. quarchpy/connection_specific/usb_libs/__pycache__/usb1.cpython-312.pyc +0 -0
  257. quarchpy/debug/__pycache__/SystemTest.cpython-312.pyc +0 -0
  258. quarchpy/debug/__pycache__/__init__.cpython-312.pyc +0 -0
  259. quarchpy/debug/__pycache__/module_debug.cpython-312.pyc +0 -0
  260. quarchpy/debug/__pycache__/simple_terminal.cpython-312.pyc +0 -0
  261. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-312.pyc +0 -0
  262. quarchpy/debug/__pycache__/versionCompare.cpython-312.pyc +0 -0
  263. quarchpy/device/__pycache__/__init__.cpython-312.pyc +0 -0
  264. quarchpy/device/__pycache__/device.cpython-312.pyc +0 -0
  265. quarchpy/device/__pycache__/quarchArray.cpython-312.pyc +0 -0
  266. quarchpy/device/__pycache__/quarchPPM.cpython-312.pyc +0 -0
  267. quarchpy/device/__pycache__/quarchQPS.cpython-312.pyc +0 -0
  268. quarchpy/device/__pycache__/scanDevices.cpython-312.pyc +0 -0
  269. quarchpy/device/quarchPPM.py.bak +0 -67
  270. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-312.pyc +0 -0
  271. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-312.pyc +0 -0
  272. quarchpy/disk_test/__pycache__/__init__.cpython-312.pyc +0 -0
  273. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-312.pyc +0 -0
  274. quarchpy/fio/__pycache__/FIO_interface.cpython-312.pyc +0 -0
  275. quarchpy/fio/__pycache__/__init__.cpython-312.pyc +0 -0
  276. quarchpy/iometer/__pycache__/__init__.cpython-312.pyc +0 -0
  277. quarchpy/iometer/__pycache__/iometerFuncs.cpython-312.pyc +0 -0
  278. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-312.pyc +0 -0
  279. quarchpy/qis/__pycache__/__init__.cpython-312.pyc +0 -0
  280. quarchpy/qis/__pycache__/qisFuncs.cpython-312.pyc +0 -0
  281. quarchpy/qps/__pycache__/__init__.cpython-312.pyc +0 -0
  282. quarchpy/qps/__pycache__/qpsFuncs.cpython-312.pyc +0 -0
  283. quarchpy/user_interface/__pycache__/__init__.cpython-312.pyc +0 -0
  284. quarchpy/user_interface/__pycache__/user_interface.cpython-312.pyc +0 -0
  285. quarchpy/utilities/__pycache__/TestCenter.cpython-312.pyc +0 -0
  286. quarchpy/utilities/__pycache__/TimeValue.cpython-312.pyc +0 -0
  287. quarchpy/utilities/__pycache__/Version.cpython-312.pyc +0 -0
  288. quarchpy/utilities/__pycache__/__init__.cpython-312.pyc +0 -0
  289. {quarchpy-2.2.4.dist-info → quarchpy-2.2.6.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 &#8212; quarchpy documentation</title>
9
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b3523f8e" />
10
- <link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=039e1c02" />
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=888ff710"></script>
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="main navigation">
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
- <h3>Navigation</h3>
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
- &copy;2020, Quarch Technology Ltd.
172
+ &#169;2020, Quarch Technology Ltd.
172
173
 
173
174
  |
174
- Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a>
175
- &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
175
+ Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
176
+ &amp; <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 &#8212; quarchpy documentation</title>
9
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b3523f8e" />
10
- <link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=039e1c02" />
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=888ff710"></script>
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="main navigation">
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
- <h3>Navigation</h3>
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
- &copy;2020, Quarch Technology Ltd.
264
+ &#169;2020, Quarch Technology Ltd.
264
265
 
265
266
  |
266
- Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a>
267
- &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
267
+ Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
268
+ &amp; <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 &#8212; quarchpy documentation</title>
9
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b3523f8e" />
10
- <link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=039e1c02" />
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=888ff710"></script>
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="main navigation">
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
- <h3>Navigation</h3>
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
- &copy;2020, Quarch Technology Ltd.
197
+ &#169;2020, Quarch Technology Ltd.
197
198
 
198
199
  |
199
- Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a>
200
- &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
200
+ Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
201
+ &amp; <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 &#8212; quarchpy documentation</title>
9
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b3523f8e" />
10
- <link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=039e1c02" />
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=888ff710"></script>
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="main navigation">
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
- <h3>Navigation</h3>
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
- &copy;2020, Quarch Technology Ltd.
133
+ &#169;2020, Quarch Technology Ltd.
133
134
 
134
135
  |
135
- Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a>
136
- &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
136
+ Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
137
+ &amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
137
138
 
138
139
  |
139
140
  <a href="../_sources/source/readme.rst.txt"
@@ -0,0 +1,317 @@
1
+ import os
2
+ import time
3
+ import json
4
+ from datetime import datetime
5
+ import subprocess
6
+
7
+ all_outputs={"terse_version_3":"0",
8
+ "fio_version":"1",
9
+ "jobname":"2",
10
+ "groupid":"3",
11
+ "error":"4",
12
+ "read_kb":"5",
13
+ "read_bandwidth":"6",
14
+ "read_iops":"7",
15
+ "read_runtime_ms":"8",
16
+ "read_slat_min":"9",
17
+ "read_slat_max":"10",
18
+ "read_slat_mean":"11",
19
+ "read_slat_dev":"12",
20
+ "read_clat_min":"13",
21
+ "read_clat_max":"14",
22
+ "read_clat_mean":"15",
23
+ "read_clat_dev":"16",
24
+ "read_clat_pct01":"17",
25
+ "read_clat_pct02":"18",
26
+ "read_clat_pct03":"19",
27
+ "read_clat_pct04":"20",
28
+ "read_clat_pct05":"21",
29
+ "read_clat_pct06":"22",
30
+ "read_clat_pct07":"23",
31
+ "read_clat_pct08":"24",
32
+ "read_clat_pct09":"25",
33
+ "read_clat_pct10":"26",
34
+ "read_clat_pct11":"27",
35
+ "read_clat_pct12":"28",
36
+ "read_clat_pct13":"29",
37
+ "read_clat_pct14":"30",
38
+ "read_clat_pct15":"31",
39
+ "read_clat_pct16":"32",
40
+ "read_clat_pct17":"33",
41
+ "read_clat_pct18":"34",
42
+ "read_clat_pct19":"35",
43
+ "read_clat_pct20":"36",
44
+ "read_tlat_min":"37",
45
+ "read_lat_max":"38",
46
+ "read_lat_mean":"39",
47
+ "read_lat_dev":"40",
48
+ "read_bw_min":"41",
49
+ "read_bw_max":"42",
50
+ "read_bw_agg_pct":"43",
51
+ "read_bw_mean":"44",
52
+ "read_bw_dev":"45",
53
+ "write_kb":"46",
54
+ "write_bandwidth":"47",
55
+ "write_iops":"48",
56
+ "write_runtime_ms":"49",
57
+ "write_slat_min":"50",
58
+ "write_slat_max":"51",
59
+ "write_slat_mean":"52",
60
+ "write_slat_dev":"53",
61
+ "write_clat_min":"54",
62
+ "write_clat_max":"55",
63
+ "write_clat_mean":"56",
64
+ "write_clat_dev":"57",
65
+ "write_clat_pct01":"58",
66
+ "write_clat_pct02":"59",
67
+ "write_clat_pct03":"60",
68
+ "write_clat_pct04":"61",
69
+ "write_clat_pct05":"62",
70
+ "write_clat_pct06":"63",
71
+ "write_clat_pct07":"64",
72
+ "write_clat_pct08":"65",
73
+ "write_clat_pct09":"66",
74
+ "write_clat_pct10":"67",
75
+ "write_clat_pct11":"68",
76
+ "write_clat_pct12":"69",
77
+ "write_clat_pct13":"70",
78
+ "write_clat_pct14":"71",
79
+ "write_clat_pct15":"72",
80
+ "write_clat_pct16":"73",
81
+ "write_clat_pct17":"74",
82
+ "write_clat_pct18":"75",
83
+ "write_clat_pct19":"76",
84
+ "write_clat_pct20":"77",
85
+ "write_tlat_min":"78",
86
+ "write_lat_max":"79",
87
+ "write_lat_mean":"80",
88
+ "write_lat_dev":"81",
89
+ "write_bw_min":"82",
90
+ "write_bw_max":"83",
91
+ "write_bw_agg_pct":"84",
92
+ "write_bw_mean":"85",
93
+ "write_bw_dev":"86",
94
+ "cpu_user":"87",
95
+ "cpu_sys":"88",
96
+ "cpu_csw":"89",
97
+ "cpu_mjf":"90",
98
+ "cpu_minf":"91",
99
+ "iodepth_1":"92",
100
+ "iodepth_2":"93",
101
+ "iodepth_4":"94",
102
+ "iodepth_8":"95",
103
+ "iodepth_16":"96",
104
+ "iodepth_32":"97",
105
+ "iodepth_64":"98",
106
+ "lat_2us":"99",
107
+ "lat_4us":"100",
108
+ "lat_10us":"101",
109
+ "lat_20us":"102",
110
+ "lat_50us":"103",
111
+ "lat_100us":"104",
112
+ "lat_250us":"105",
113
+ "lat_500us":"106",
114
+ "lat_750us":"107",
115
+ "lat_1000us":"108",
116
+ "lat_2ms":"109",
117
+ "lat_4ms":"110",
118
+ "lat_10ms":"111",
119
+ "lat_20ms":"112",
120
+ "lat_50ms":"113",
121
+ "lat_100ms":"114",
122
+ "lat_250ms":"115",
123
+ "lat_500ms":"116",
124
+ "lat_750ms":"117",
125
+ "lat_1000ms":"118",
126
+ "lat_2000ms":"119",
127
+ "lat_over_2000ms":"120",
128
+ "disk_name":"121",
129
+ "disk_read_iops":"122",
130
+ "disk_write_iops":"123",
131
+ "disk_read_merges":"124",
132
+ "disk_write_merges":"125",
133
+ "disk_read_ticks":"126",
134
+ "write_ticks":"127",
135
+ "disk_queue_time":"128",
136
+ "disk_util":"129"}
137
+
138
+ out_data = {}
139
+
140
+ def follow(thefile, p):
141
+ thefile.seek(0,2)
142
+ #flag for exiting the loop
143
+ processCompleted = False
144
+
145
+ while processCompleted == False:
146
+ line = thefile.readline()
147
+
148
+ #only exists if process is finished and no more data from file
149
+ if p.poll() is not None and not line:
150
+ #yield a specific string we can identify
151
+ yield ("quarch_end_Process")
152
+ processCompleted = True
153
+
154
+ if not line:
155
+ time.sleep(0.1)
156
+ continue
157
+ yield line
158
+
159
+
160
+ def return_data(output_file, p, fioCallbacks, myStream, user_data, arguments):
161
+
162
+ isThreaded = True
163
+ #checking to see if the first line of file needs to be skipped = Windows only
164
+ if os.name == "nt":
165
+ isThreaded = False
166
+ for i in arguments:
167
+ #only needs to be skipped if the "thread" argument has not been issued
168
+ if (str(i.lower()) == "thread"):
169
+ isThreaded = True
170
+
171
+ info_out = {}
172
+ logfile = open(output_file,"r")
173
+ loglines = follow(logfile, p)
174
+
175
+ #variables for parsing json
176
+ iterator = 0
177
+ jobCount = 0
178
+ jsonLines = ""
179
+ openBracketCount = 0
180
+ closeBracketCount = 0
181
+ # Init the job end time to the current start time
182
+ jobEndTime = int(round(time.time() * 1000))
183
+
184
+ for line in loglines:
185
+
186
+
187
+ if (isThreaded == False):
188
+ #skip the very first line -- (title line) --
189
+ if iterator == 0:
190
+ iterator = iterator + 1
191
+ #marking threaded as true for remainder of read > Efficiency
192
+ isThreaded = True
193
+ continue
194
+
195
+ #add to iterator - not needed, may be useful later
196
+ iterator = iterator + 1
197
+
198
+ #concat strings
199
+ jsonLines += line
200
+
201
+ #finding brackets withing json
202
+ if '{' in line:
203
+ openBracketCount = openBracketCount + 1
204
+ if '}' in line:
205
+ closeBracketCount = closeBracketCount + 1
206
+
207
+ #an equal amount of brackets denotes the end of a json object
208
+ if openBracketCount == closeBracketCount and openBracketCount != 0:
209
+ try:
210
+ #format into a json parsable string
211
+ TempJsonObject = jsonLines[ 0 : jsonLines.rindex('}') + 1 ]
212
+
213
+ #parse json
214
+ jsonobject = json.loads(TempJsonObject)
215
+
216
+ #checking for first job
217
+ if (jobCount == 0):
218
+ #getting start time of job
219
+ startTime = (jsonobject['timestamp_ms'] - jsonobject['jobs'][0]['read']['runtime'])
220
+ comment = str(arguments).replace(",","\n").replace("}","").replace("{","")
221
+ jobName = str(jsonobject['jobs'][0]['jobname'])
222
+ #adding start annotation
223
+ fioCallbacks["TEST_START"](myStream, str(startTime), jobName, comment)
224
+
225
+ #pass specific data
226
+ readDataValue = jsonobject['jobs'][0]['read']['iops']
227
+ writeDataValue = jsonobject['jobs'][0]['write']['iops']
228
+ blockSize=jsonobject['global options']['bs']
229
+ #converted to ditionary - easy script use
230
+ dataValues = {"read_iops" : readDataValue, "write_iops" : writeDataValue, "block_size":blockSize}
231
+ jobEndTime = str(jsonobject['timestamp_ms'])
232
+ fioCallbacks["TEST_RESULT"](myStream, jobEndTime, dataValues)
233
+
234
+ #jsonLines variable is now all characters after last job + any new that come in
235
+ jsonLines = jsonLines[jsonLines.rindex('}') + 1 : ]
236
+
237
+ #add 1 to the job count
238
+ jobCount += 1
239
+
240
+ except:
241
+ #exception caused by not being able to find substring -- Last json object --
242
+ pass
243
+
244
+
245
+
246
+ #looks for end of process and the specific string we return indicating end of file
247
+ if p.poll() is not None:
248
+ if line == "quarch_end_Process":
249
+ time.sleep(0.1)
250
+ #callback to end test -- adds 1 milli second so this time is always after the last data point --
251
+ fioCallbacks["TEST_END"](myStream, str(int(jobEndTime) + 1))
252
+ #CLOSE FILE ON FINISH
253
+ logfile.close()
254
+ return
255
+
256
+ def start_fio(output_file, mode, options, fileName=""):
257
+
258
+ if mode == "cli":
259
+ command = command + " > pipe"
260
+
261
+ #command line to be sent -- output is in json format --
262
+ if mode == "file":
263
+ command = "fio " + fileName + " --log_unix_epoch=1 --output-format=json --output="+ output_file + " --status-interval=1 --eta=never"
264
+
265
+ if mode == "arg":
266
+ command = "fio --log_unix_epoch=1 --output-format=json"
267
+
268
+ for i in options:
269
+ if (options[i] == ""):
270
+ command = command + " --" + i
271
+ else:
272
+ command = command + " --" + i + "=" + options[i]
273
+ command = command + " > pipe"
274
+
275
+ #removes the output file if it already exists.
276
+ if os.path.exists(output_file):
277
+ os.remove(output_file)
278
+
279
+ if os.path.exists("pipe"):
280
+ os.remove("pipe")
281
+
282
+ print(command)
283
+ p = subprocess.Popen(command, shell=True)
284
+
285
+ while not os.path.exists(output_file):
286
+ time.sleep(0.1)
287
+
288
+ return p
289
+
290
+ def runFIO(myStream, mode, fioCallbacks, user_data, arguments="", file_name=""):
291
+
292
+ try:
293
+ xrange
294
+ except NameError:
295
+ xrange = range
296
+
297
+ for i in xrange(0,len(arguments)):
298
+
299
+ try:
300
+ arguments_ori = arguments[i]
301
+ except:
302
+ arguments_ori = arguments
303
+
304
+ output_file = arguments_ori["output"]
305
+ if (file_name != ""):
306
+ #allows filename with spaces
307
+ file_name = "\"" + file_name + "\""
308
+
309
+ p = start_fio(output_file, mode, arguments_ori, file_name)
310
+
311
+ return_data(output_file, p, fioCallbacks, myStream, user_data, arguments_ori)
312
+
313
+ if os.path.exists("pipe"):
314
+ os.remove("pipe")
315
+
316
+ if isinstance(arguments, dict):
317
+ break