quarchpy 2.2.7.dev1__py2.py3-none-any.whl → 2.2.8.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.
Files changed (211) hide show
  1. quarchpy/.idea/.name +1 -0
  2. quarchpy/.idea/inspectionProfiles/Project_Default.xml +39 -1
  3. quarchpy/.idea/misc.xml +2 -2
  4. quarchpy/.idea/quarchpy.iml +1 -1
  5. quarchpy/.idea/vcs.xml +6 -0
  6. quarchpy/.idea/workspace.xml +119 -21
  7. quarchpy/__pycache__/__init__.cpython-311.pyc +0 -0
  8. quarchpy/__pycache__/__init__.cpython-312.pyc +0 -0
  9. quarchpy/__pycache__/_version.cpython-311.pyc +0 -0
  10. quarchpy/__pycache__/_version.cpython-312.pyc +0 -0
  11. quarchpy/__pycache__/connection.cpython-311.pyc +0 -0
  12. quarchpy/__pycache__/connection.cpython-312.pyc +0 -0
  13. quarchpy/__pycache__/run.cpython-311.pyc +0 -0
  14. quarchpy/__pycache__/run.cpython-312.pyc +0 -0
  15. quarchpy/_version.py +1 -1
  16. quarchpy/config_files/__pycache__/__init__.cpython-311.pyc +0 -0
  17. quarchpy/config_files/__pycache__/__init__.cpython-312.pyc +0 -0
  18. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-311.pyc +0 -0
  19. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-312.pyc +0 -0
  20. quarchpy/connection_specific/QPS/win-amd64/InstallType.dat +1 -0
  21. quarchpy/connection_specific/QPS/win-amd64/qis/myFile.csv +50 -0
  22. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-311.pyc +0 -0
  23. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-312.pyc +0 -0
  24. quarchpy/connection_specific/__pycache__/__init__.cpython-311.pyc +0 -0
  25. quarchpy/connection_specific/__pycache__/__init__.cpython-312.pyc +0 -0
  26. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-311.pyc +0 -0
  27. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-312.pyc +0 -0
  28. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-311.pyc +0 -0
  29. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-312.pyc +0 -0
  30. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-311.pyc +0 -0
  31. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-312.pyc +0 -0
  32. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-311.pyc +0 -0
  33. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-312.pyc +0 -0
  34. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-311.pyc +0 -0
  35. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-312.pyc +0 -0
  36. quarchpy/connection_specific/__pycache__/connection_USB.cpython-311.pyc +0 -0
  37. quarchpy/connection_specific/__pycache__/connection_USB.cpython-312.pyc +0 -0
  38. quarchpy/connection_specific/__pycache__/mDNS.cpython-311.pyc +0 -0
  39. quarchpy/connection_specific/__pycache__/mDNS.cpython-312.pyc +0 -0
  40. quarchpy/connection_specific/connection_QIS.py +1 -0
  41. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-311.pyc +0 -0
  42. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-312.pyc +0 -0
  43. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-311.pyc +0 -0
  44. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-312.pyc +0 -0
  45. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-311.pyc +0 -0
  46. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-312.pyc +0 -0
  47. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-311.pyc +0 -0
  48. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-312.pyc +0 -0
  49. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-311.pyc +0 -0
  50. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-312.pyc +0 -0
  51. quarchpy/connection_specific/serial/__pycache__/win32.cpython-311.pyc +0 -0
  52. quarchpy/connection_specific/serial/__pycache__/win32.cpython-312.pyc +0 -0
  53. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-311.pyc +0 -0
  54. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-312.pyc +0 -0
  55. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-311.pyc +0 -0
  56. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-312.pyc +0 -0
  57. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-311.pyc +0 -0
  58. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-312.pyc +0 -0
  59. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-311.pyc +0 -0
  60. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-312.pyc +0 -0
  61. quarchpy/connection_specific/usb_libs/__pycache__/libusb1.cpython-312.pyc +0 -0
  62. quarchpy/connection_specific/usb_libs/__pycache__/usb1.cpython-312.pyc +0 -0
  63. quarchpy/debug/SystemTest.py +29 -14
  64. quarchpy/debug/__pycache__/SystemTest.cpython-311.pyc +0 -0
  65. quarchpy/debug/__pycache__/SystemTest.cpython-312.pyc +0 -0
  66. quarchpy/debug/__pycache__/__init__.cpython-311.pyc +0 -0
  67. quarchpy/debug/__pycache__/__init__.cpython-312.pyc +0 -0
  68. quarchpy/debug/__pycache__/module_debug.cpython-311.pyc +0 -0
  69. quarchpy/debug/__pycache__/module_debug.cpython-312.pyc +0 -0
  70. quarchpy/debug/__pycache__/simple_terminal.cpython-311.pyc +0 -0
  71. quarchpy/debug/__pycache__/simple_terminal.cpython-312.pyc +0 -0
  72. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-311.pyc +0 -0
  73. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-312.pyc +0 -0
  74. quarchpy/debug/__pycache__/versionCompare.cpython-311.pyc +0 -0
  75. quarchpy/debug/__pycache__/versionCompare.cpython-312.pyc +0 -0
  76. quarchpy/device/__pycache__/__init__.cpython-311.pyc +0 -0
  77. quarchpy/device/__pycache__/__init__.cpython-312.pyc +0 -0
  78. quarchpy/device/__pycache__/device.cpython-311.pyc +0 -0
  79. quarchpy/device/__pycache__/device.cpython-312.pyc +0 -0
  80. quarchpy/device/__pycache__/quarchArray.cpython-311.pyc +0 -0
  81. quarchpy/device/__pycache__/quarchArray.cpython-312.pyc +0 -0
  82. quarchpy/device/__pycache__/quarchPPM.cpython-311.pyc +0 -0
  83. quarchpy/device/__pycache__/quarchPPM.cpython-312.pyc +0 -0
  84. quarchpy/device/__pycache__/quarchQPS.cpython-311.pyc +0 -0
  85. quarchpy/device/__pycache__/quarchQPS.cpython-312.pyc +0 -0
  86. quarchpy/device/__pycache__/scanDevices.cpython-311.pyc +0 -0
  87. quarchpy/device/__pycache__/scanDevices.cpython-312.pyc +0 -0
  88. quarchpy/device/quarchQPS.py +1 -2
  89. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-311.pyc +0 -0
  90. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-312.pyc +0 -0
  91. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-311.pyc +0 -0
  92. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-312.pyc +0 -0
  93. quarchpy/disk_test/__pycache__/__init__.cpython-311.pyc +0 -0
  94. quarchpy/disk_test/__pycache__/__init__.cpython-312.pyc +0 -0
  95. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-311.pyc +0 -0
  96. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-312.pyc +0 -0
  97. quarchpy/docs/CHANGES.rst +4 -0
  98. quarchpy/docs/_build/doctrees/CHANGES.doctree +0 -0
  99. quarchpy/docs/_build/doctrees/environment.pickle +0 -0
  100. quarchpy/docs/_build/doctrees/source/changelog.doctree +0 -0
  101. quarchpy/docs/_build/doctrees/source/quarchpy.fio.doctree +0 -0
  102. quarchpy/docs/_build/html/CHANGES.html +145 -139
  103. quarchpy/docs/_build/html/_sources/CHANGES.rst.txt +7 -0
  104. quarchpy/docs/_build/html/genindex.html +8 -2
  105. quarchpy/docs/_build/html/index.html +71 -70
  106. quarchpy/docs/_build/html/objects.inv +0 -0
  107. quarchpy/docs/_build/html/searchindex.js +1 -1
  108. quarchpy/docs/_build/html/source/changelog.html +216 -209
  109. quarchpy/docs/_build/html/source/quarchpy.fio.html +64 -0
  110. quarchpy/docs/_build/html/source/quarchpy.html +3 -0
  111. quarchpy/fio/__pycache__/FIO_interface.cpython-311.pyc +0 -0
  112. quarchpy/fio/__pycache__/FIO_interface.cpython-312.pyc +0 -0
  113. quarchpy/fio/__pycache__/__init__.cpython-311.pyc +0 -0
  114. quarchpy/fio/__pycache__/__init__.cpython-312.pyc +0 -0
  115. quarchpy/iometer/__pycache__/__init__.cpython-311.pyc +0 -0
  116. quarchpy/iometer/__pycache__/__init__.cpython-312.pyc +0 -0
  117. quarchpy/iometer/__pycache__/gen_iometer_template.cpython-311.pyc +0 -0
  118. quarchpy/iometer/__pycache__/{gen_iometer_template.cpython-313.pyc → gen_iometer_template.cpython-312.pyc} +0 -0
  119. quarchpy/iometer/__pycache__/iometerFuncs.cpython-311.pyc +0 -0
  120. quarchpy/iometer/__pycache__/iometerFuncs.cpython-312.pyc +0 -0
  121. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-311.pyc +0 -0
  122. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-312.pyc +0 -0
  123. quarchpy/qis/__pycache__/__init__.cpython-311.pyc +0 -0
  124. quarchpy/qis/__pycache__/__init__.cpython-312.pyc +0 -0
  125. quarchpy/qis/__pycache__/qisFuncs.cpython-311.pyc +0 -0
  126. quarchpy/qis/__pycache__/qisFuncs.cpython-312.pyc +0 -0
  127. quarchpy/qis/qisFuncs.py +36 -39
  128. quarchpy/qps/__pycache__/__init__.cpython-311.pyc +0 -0
  129. quarchpy/qps/__pycache__/__init__.cpython-312.pyc +0 -0
  130. quarchpy/qps/__pycache__/qpsFuncs.cpython-311.pyc +0 -0
  131. quarchpy/qps/__pycache__/qpsFuncs.cpython-312.pyc +0 -0
  132. quarchpy/qps/qpsFuncs.py +7 -10
  133. quarchpy/user_interface/__pycache__/__init__.cpython-311.pyc +0 -0
  134. quarchpy/user_interface/__pycache__/__init__.cpython-312.pyc +0 -0
  135. quarchpy/user_interface/__pycache__/user_interface.cpython-311.pyc +0 -0
  136. quarchpy/user_interface/__pycache__/user_interface.cpython-312.pyc +0 -0
  137. quarchpy/utilities/__pycache__/TestCenter.cpython-311.pyc +0 -0
  138. quarchpy/utilities/__pycache__/TestCenter.cpython-312.pyc +0 -0
  139. quarchpy/utilities/__pycache__/TimeValue.cpython-311.pyc +0 -0
  140. quarchpy/utilities/__pycache__/TimeValue.cpython-312.pyc +0 -0
  141. quarchpy/utilities/__pycache__/Version.cpython-311.pyc +0 -0
  142. quarchpy/utilities/__pycache__/Version.cpython-312.pyc +0 -0
  143. quarchpy/utilities/__pycache__/__init__.cpython-311.pyc +0 -0
  144. quarchpy/utilities/__pycache__/__init__.cpython-312.pyc +0 -0
  145. {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dev1.dist-info}/METADATA +7 -12
  146. {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dev1.dist-info}/RECORD +148 -126
  147. {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dev1.dist-info}/WHEEL +1 -1
  148. quarchpy/.idea/.gitignore +0 -3
  149. quarchpy/_version.py.bak +0 -1
  150. quarchpy/config_files/__pycache__/__init__.cpython-313.pyc +0 -0
  151. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-313.pyc +0 -0
  152. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-313.pyc +0 -0
  153. quarchpy/connection_specific/__pycache__/__init__.cpython-313.pyc +0 -0
  154. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-313.pyc +0 -0
  155. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-313.pyc +0 -0
  156. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-313.pyc +0 -0
  157. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-313.pyc +0 -0
  158. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-313.pyc +0 -0
  159. quarchpy/connection_specific/__pycache__/connection_Telnet.cpython-313.pyc +0 -0
  160. quarchpy/connection_specific/__pycache__/connection_USB.cpython-313.pyc +0 -0
  161. quarchpy/connection_specific/__pycache__/mDNS.cpython-313.pyc +0 -0
  162. quarchpy/connection_specific/connection_QPS.py.bak +0 -242
  163. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-313.pyc +0 -0
  164. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-313.pyc +0 -0
  165. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-313.pyc +0 -0
  166. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-313.pyc +0 -0
  167. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-313.pyc +0 -0
  168. quarchpy/connection_specific/serial/__pycache__/win32.cpython-313.pyc +0 -0
  169. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-313.pyc +0 -0
  170. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-313.pyc +0 -0
  171. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-313.pyc +0 -0
  172. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-313.pyc +0 -0
  173. quarchpy/debug/__pycache__/SystemTest.cpython-313.pyc +0 -0
  174. quarchpy/debug/__pycache__/__init__.cpython-313.pyc +0 -0
  175. quarchpy/debug/__pycache__/module_debug.cpython-313.pyc +0 -0
  176. quarchpy/debug/__pycache__/simple_terminal.cpython-313.pyc +0 -0
  177. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-313.pyc +0 -0
  178. quarchpy/debug/__pycache__/versionCompare.cpython-313.pyc +0 -0
  179. quarchpy/device/__pycache__/__init__.cpython-313.pyc +0 -0
  180. quarchpy/device/__pycache__/device.cpython-313.pyc +0 -0
  181. quarchpy/device/__pycache__/quarchArray.cpython-313.pyc +0 -0
  182. quarchpy/device/__pycache__/quarchPPM.cpython-313.pyc +0 -0
  183. quarchpy/device/__pycache__/quarchQPS.cpython-313.pyc +0 -0
  184. quarchpy/device/__pycache__/scanDevices.cpython-313.pyc +0 -0
  185. quarchpy/device/quarchQPS.py.bak +0 -398
  186. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-313.pyc +0 -0
  187. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-313.pyc +0 -0
  188. quarchpy/disk_test/__pycache__/__init__.cpython-313.pyc +0 -0
  189. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-313.pyc +0 -0
  190. quarchpy/docs/CHANGES.rst.bak +0 -430
  191. quarchpy/docs/_build/html/.buildinfo.bak +0 -4
  192. quarchpy/docs/_build/html/_static/github-banner.svg +0 -5
  193. quarchpy/fio/FIO_interface.py.bak +0 -317
  194. quarchpy/fio/__pycache__/FIO_interface.cpython-313.pyc +0 -0
  195. quarchpy/fio/__pycache__/__init__.cpython-313.pyc +0 -0
  196. quarchpy/fio/__pycache__/fioDiskFinder.cpython-311.pyc +0 -0
  197. quarchpy/fio/__pycache__/fioDiskFinder.cpython-313.pyc +0 -0
  198. quarchpy/iometer/__pycache__/__init__.cpython-313.pyc +0 -0
  199. quarchpy/iometer/__pycache__/iometerFuncs.cpython-313.pyc +0 -0
  200. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-313.pyc +0 -0
  201. quarchpy/qis/__pycache__/__init__.cpython-313.pyc +0 -0
  202. quarchpy/qis/__pycache__/qisFuncs.cpython-313.pyc +0 -0
  203. quarchpy/qps/__pycache__/__init__.cpython-313.pyc +0 -0
  204. quarchpy/qps/__pycache__/qpsFuncs.cpython-313.pyc +0 -0
  205. quarchpy/user_interface/__pycache__/__init__.cpython-313.pyc +0 -0
  206. quarchpy/user_interface/__pycache__/user_interface.cpython-313.pyc +0 -0
  207. quarchpy/utilities/__pycache__/TestCenter.cpython-313.pyc +0 -0
  208. quarchpy/utilities/__pycache__/TimeValue.cpython-313.pyc +0 -0
  209. quarchpy/utilities/__pycache__/Version.cpython-313.pyc +0 -0
  210. quarchpy/utilities/__pycache__/__init__.cpython-313.pyc +0 -0
  211. {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dev1.dist-info}/top_level.txt +0 -0
@@ -1,317 +0,0 @@
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