amd-node-scraper 1.1.4__tar.gz → 1.1.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (449) hide show
  1. amd_node_scraper-1.1.6/.github/CODEOWNERS +1 -0
  2. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/.github/workflows/code_quality_checks.yml +9 -2
  3. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/.github/workflows/functional-test.yml +1 -1
  4. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/.github/workflows/release-trusted-publisher.yml +1 -1
  5. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/.github/workflows/unit-test.yml +1 -1
  6. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/PKG-INFO +12 -5
  7. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/README.md +8 -3
  8. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/amd_node_scraper.egg-info/PKG-INFO +12 -5
  9. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/amd_node_scraper.egg-info/SOURCES.txt +15 -1
  10. amd_node_scraper-1.1.6/amd_node_scraper.egg-info/entry_points.txt +6 -0
  11. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/docs/PLUGIN_DOC.md +18 -12
  12. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/base/inbandcollectortask.py +5 -0
  13. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/base/redfishcollectortask.py +27 -0
  14. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/cli/cli.py +17 -16
  15. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/cli/helper.py +2 -2
  16. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/cli/host_cli_embed.py +1 -6
  17. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/cli/invocation.py +4 -0
  18. amd_node_scraper-1.1.6/nodescraper/configregistry.py +183 -0
  19. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/connection/redfish/__init__.py +10 -0
  20. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/connection/redfish/redfish_connection.py +48 -0
  21. amd_node_scraper-1.1.6/nodescraper/connection/redfish/redfish_constants.py +38 -0
  22. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/connection/redfish/redfish_oem_diag.py +1 -3
  23. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/constants.py +2 -0
  24. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/interfaces/connectionmanager.py +8 -0
  25. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/interfaces/datacollectortask.py +14 -1
  26. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/interfaces/dataplugin.py +16 -0
  27. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/interfaces/plugin.py +8 -1
  28. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/interfaces/task.py +37 -2
  29. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/models/__init__.py +11 -1
  30. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/models/datamodel.py +2 -2
  31. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/models/event.py +27 -8
  32. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/models/pluginconfig.py +31 -1
  33. amd_node_scraper-1.1.6/nodescraper/models/priority_override.py +126 -0
  34. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/pluginexecutor.py +16 -0
  35. amd_node_scraper-1.1.6/nodescraper/pluginrecipe/__init__.py +51 -0
  36. amd_node_scraper-1.1.6/nodescraper/pluginrecipe/all_plugins.py +24 -0
  37. amd_node_scraper-1.1.6/nodescraper/pluginrecipe/discovery.py +98 -0
  38. amd_node_scraper-1.1.6/nodescraper/pluginrecipe/node_status.py +38 -0
  39. amd_node_scraper-1.1.6/nodescraper/pluginrecipe/pluginrecipe.py +177 -0
  40. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/amdsmi_analyzer.py +237 -17
  41. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/amdsmi_collector.py +82 -19
  42. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/amdsmidata.py +270 -66
  43. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/analyzer_args.py +7 -0
  44. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/device_enumeration/device_enumeration_collector.py +5 -1
  45. amd_node_scraper-1.1.6/nodescraper/plugins/inband/network/ethtool_vendor.py +662 -0
  46. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/network/network_analyzer.py +50 -14
  47. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/network/network_collector.py +162 -0
  48. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/network/networkdata.py +5 -0
  49. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nic/nic_collector.py +29 -13
  50. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/pcie/pcie_analyzer.py +26 -2
  51. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rocm/rocm_collector.py +4 -2
  52. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rocm/rocmdata.py +26 -15
  53. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_endpoint/collector_args.py +10 -0
  54. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_collector.py +29 -12
  55. amd_node_scraper-1.1.6/nodescraper/serialization.py +72 -0
  56. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/utils.py +6 -4
  57. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/pyproject.toml +6 -2
  58. amd_node_scraper-1.1.6/test/functional/fixtures/amdsmi_plugin_config.json +14 -0
  59. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/test_plugin_configs.py +1 -0
  60. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/cli/test_plugin_configs_cli.py +5 -9
  61. amd_node_scraper-1.1.6/test/unit/connection/redfish/test_redfish_connection_paging.py +160 -0
  62. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/common/shared_utils.py +7 -0
  63. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/test_cli_helper.py +4 -1
  64. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/test_config_registry.py +2 -1
  65. amd_node_scraper-1.1.6/test/unit/framework/test_config_registry_entry_points.py +163 -0
  66. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/test_datacollector.py +11 -0
  67. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/test_dataplugin.py +141 -1
  68. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/test_plugin_executor.py +6 -1
  69. amd_node_scraper-1.1.6/test/unit/framework/test_pluginrecipe.py +130 -0
  70. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_amdsmi_analyzer.py +129 -11
  71. amd_node_scraper-1.1.6/test/unit/plugin/test_amdsmi_data.py +514 -0
  72. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_device_enumeration_collector.py +10 -2
  73. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_network_analyzer.py +47 -1
  74. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_network_collector.py +41 -0
  75. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_niccli_collector.py +38 -0
  76. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_redfish_endpoint_collector.py +110 -0
  77. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_rocm_collector.py +136 -54
  78. amd_node_scraper-1.1.6/test/unit/test_serialization.py +75 -0
  79. amd_node_scraper-1.1.4/.github/CODEOWNERS +0 -1
  80. amd_node_scraper-1.1.4/amd_node_scraper.egg-info/entry_points.txt +0 -2
  81. amd_node_scraper-1.1.4/nodescraper/configregistry.py +0 -66
  82. amd_node_scraper-1.1.4/nodescraper/configs/node_status.json +0 -19
  83. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  84. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  85. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  86. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/.github/pull_request_template.md +0 -0
  87. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/.github/scripts/plugin_convention_warnings.py +0 -0
  88. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/.github/workflows/update-plugin-docs.yml +0 -0
  89. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/.gitignore +0 -0
  90. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/.mypy.ini +0 -0
  91. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/.pre-commit-config.yaml +0 -0
  92. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/CONTRIBUTING.md +0 -0
  93. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/EXTENDING.md +0 -0
  94. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/LICENSE +0 -0
  95. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/SECURITY.md +0 -0
  96. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/amd_node_scraper.egg-info/dependency_links.txt +0 -0
  97. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/amd_node_scraper.egg-info/requires.txt +0 -0
  98. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/amd_node_scraper.egg-info/top_level.txt +0 -0
  99. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/dev-setup.sh +0 -0
  100. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/docs/generate_plugin_doc_bundle.py +0 -0
  101. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/docs/node-scraper-external/README.md +0 -0
  102. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/docs/node-scraper-external/ext_nodescraper_plugins/sample/__init__.py +0 -0
  103. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_analyzer.py +0 -0
  104. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_collector.py +0 -0
  105. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_data.py +0 -0
  106. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_plugin.py +0 -0
  107. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/docs/node-scraper-external/pyproject.toml +0 -0
  108. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/__init__.py +0 -0
  109. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/base/__init__.py +0 -0
  110. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/base/inbanddataplugin.py +0 -0
  111. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/base/oobanddataplugin.py +0 -0
  112. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/base/regexanalyzer.py +0 -0
  113. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/cli/__init__.py +0 -0
  114. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/cli/compare_runs.py +0 -0
  115. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/cli/constants.py +0 -0
  116. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/cli/dynamicparserbuilder.py +0 -0
  117. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/cli/embed.py +0 -0
  118. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/cli/inputargtypes.py +0 -0
  119. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/configbuilder.py +0 -0
  120. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/connection/__init__.py +0 -0
  121. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/connection/inband/__init__.py +0 -0
  122. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/connection/inband/inband.py +0 -0
  123. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/connection/inband/inbandlocal.py +0 -0
  124. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/connection/inband/inbandmanager.py +0 -0
  125. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/connection/inband/inbandremote.py +0 -0
  126. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/connection/inband/sshparams.py +0 -0
  127. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/connection/redfish/redfish_manager.py +0 -0
  128. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/connection/redfish/redfish_params.py +0 -0
  129. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/connection/redfish/redfish_path.py +0 -0
  130. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/enums/__init__.py +0 -0
  131. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/enums/eventcategory.py +0 -0
  132. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/enums/eventpriority.py +0 -0
  133. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/enums/executionstatus.py +0 -0
  134. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/enums/osfamily.py +0 -0
  135. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/enums/systeminteraction.py +0 -0
  136. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/enums/systemlocation.py +0 -0
  137. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/enums/taskstate.py +0 -0
  138. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/generictypes.py +0 -0
  139. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/helpers/__init__.py +0 -0
  140. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/interfaces/__init__.py +0 -0
  141. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/interfaces/dataanalyzertask.py +0 -0
  142. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/interfaces/resultcollator.py +0 -0
  143. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/interfaces/taskresulthook.py +0 -0
  144. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/models/analyzerargs.py +0 -0
  145. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/models/collectorargs.py +0 -0
  146. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/models/connectionconfig.py +0 -0
  147. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/models/datapluginresult.py +0 -0
  148. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/models/pluginresult.py +0 -0
  149. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/models/systeminfo.py +0 -0
  150. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/models/taskresult.py +0 -0
  151. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/models/timerangeargs.py +0 -0
  152. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/pluginregistry.py +0 -0
  153. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/__init__.py +0 -0
  154. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/__init__.py +0 -0
  155. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/__init__.py +0 -0
  156. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/amdsmi_plugin.py +0 -0
  157. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/collector_args.py +0 -0
  158. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/cper.py +0 -0
  159. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/bios/__init__.py +0 -0
  160. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/bios/analyzer_args.py +0 -0
  161. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/bios/bios_analyzer.py +0 -0
  162. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/bios/bios_collector.py +0 -0
  163. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/bios/bios_plugin.py +0 -0
  164. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/bios/biosdata.py +0 -0
  165. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/cmdline/__init__.py +0 -0
  166. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/cmdline/analyzer_args.py +0 -0
  167. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/cmdline/cmdline_analyzer.py +0 -0
  168. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/cmdline/cmdline_collector.py +0 -0
  169. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/cmdline/cmdline_plugin.py +0 -0
  170. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/cmdline/cmdlineconfig.py +0 -0
  171. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/cmdline/cmdlinedata.py +0 -0
  172. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/device_enumeration/__init__.py +0 -0
  173. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/device_enumeration/analyzer_args.py +0 -0
  174. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/device_enumeration/device_enumeration_analyzer.py +0 -0
  175. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/device_enumeration/device_enumeration_plugin.py +0 -0
  176. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/device_enumeration/deviceenumdata.py +0 -0
  177. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dimm/__init__.py +0 -0
  178. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dimm/collector_args.py +0 -0
  179. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dimm/dimm_collector.py +0 -0
  180. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dimm/dimm_plugin.py +0 -0
  181. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dimm/dimmdata.py +0 -0
  182. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dkms/__init__.py +0 -0
  183. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dkms/analyzer_args.py +0 -0
  184. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dkms/dkms_analyzer.py +0 -0
  185. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dkms/dkms_collector.py +0 -0
  186. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dkms/dkms_plugin.py +0 -0
  187. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dkms/dkmsdata.py +0 -0
  188. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/__init__.py +0 -0
  189. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/analyzer_args.py +0 -0
  190. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/collector_args.py +0 -0
  191. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/dmesg_analyzer.py +0 -0
  192. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/dmesg_collector.py +0 -0
  193. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/dmesg_plugin.py +0 -0
  194. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/dmesgdata.py +0 -0
  195. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/run_compare.py +0 -0
  196. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/fabrics/__init__.py +0 -0
  197. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/fabrics/fabrics_collector.py +0 -0
  198. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/fabrics/fabrics_plugin.py +0 -0
  199. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/fabrics/fabricsdata.py +0 -0
  200. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/journal/__init__.py +0 -0
  201. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/journal/analyzer_args.py +0 -0
  202. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/journal/collector_args.py +0 -0
  203. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/journal/journal_analyzer.py +0 -0
  204. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/journal/journal_collector.py +0 -0
  205. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/journal/journal_plugin.py +0 -0
  206. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/journal/journaldata.py +0 -0
  207. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel/__init__.py +0 -0
  208. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel/analyzer_args.py +0 -0
  209. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel/kernel_analyzer.py +0 -0
  210. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel/kernel_collector.py +0 -0
  211. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel/kernel_plugin.py +0 -0
  212. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel/kerneldata.py +0 -0
  213. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel_module/__init__.py +0 -0
  214. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel_module/analyzer_args.py +0 -0
  215. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel_module/kernel_module_analyzer.py +0 -0
  216. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel_module/kernel_module_collector.py +0 -0
  217. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel_module/kernel_module_data.py +0 -0
  218. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel_module/kernel_module_plugin.py +0 -0
  219. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/memory/__init__.py +0 -0
  220. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/memory/analyzer_args.py +0 -0
  221. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/memory/memory_analyzer.py +0 -0
  222. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/memory/memory_collector.py +0 -0
  223. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/memory/memory_plugin.py +0 -0
  224. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/memory/memorydata.py +0 -0
  225. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/network/__init__.py +0 -0
  226. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/network/analyzer_args.py +0 -0
  227. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/network/collector_args.py +0 -0
  228. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/network/network_plugin.py +0 -0
  229. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nic/__init__.py +0 -0
  230. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nic/analyzer_args.py +0 -0
  231. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nic/collector_args.py +0 -0
  232. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nic/nic_analyzer.py +0 -0
  233. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nic/nic_data.py +0 -0
  234. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nic/nic_plugin.py +0 -0
  235. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nvme/__init__.py +0 -0
  236. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nvme/nvme_collector.py +0 -0
  237. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nvme/nvme_plugin.py +0 -0
  238. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nvme/nvmedata.py +0 -0
  239. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/os/__init__.py +0 -0
  240. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/os/analyzer_args.py +0 -0
  241. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/os/os_analyzer.py +0 -0
  242. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/os/os_collector.py +0 -0
  243. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/os/os_plugin.py +0 -0
  244. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/os/osdata.py +0 -0
  245. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/package/__init__.py +0 -0
  246. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/package/analyzer_args.py +0 -0
  247. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/package/package_analyzer.py +0 -0
  248. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/package/package_collector.py +0 -0
  249. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/package/package_plugin.py +0 -0
  250. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/package/packagedata.py +0 -0
  251. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/pcie/__init__.py +0 -0
  252. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/pcie/analyzer_args.py +0 -0
  253. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/pcie/pcie_collector.py +0 -0
  254. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/pcie/pcie_data.py +0 -0
  255. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/pcie/pcie_plugin.py +0 -0
  256. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/process/__init__.py +0 -0
  257. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/process/analyzer_args.py +0 -0
  258. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/process/collector_args.py +0 -0
  259. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/process/process_analyzer.py +0 -0
  260. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/process/process_collector.py +0 -0
  261. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/process/process_plugin.py +0 -0
  262. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/process/processdata.py +0 -0
  263. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rdma/__init__.py +0 -0
  264. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rdma/rdma_analyzer.py +0 -0
  265. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rdma/rdma_collector.py +0 -0
  266. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rdma/rdma_plugin.py +0 -0
  267. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rdma/rdmadata.py +0 -0
  268. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rocm/__init__.py +0 -0
  269. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rocm/analyzer_args.py +0 -0
  270. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rocm/collector_args.py +0 -0
  271. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rocm/rocm_analyzer.py +0 -0
  272. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rocm/rocm_plugin.py +0 -0
  273. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/storage/__init__.py +0 -0
  274. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/storage/analyzer_args.py +0 -0
  275. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/storage/collector_args.py +0 -0
  276. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/storage/storage_analyzer.py +0 -0
  277. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/storage/storage_collector.py +0 -0
  278. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/storage/storage_plugin.py +0 -0
  279. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/storage/storagedata.py +0 -0
  280. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sys_settings/__init__.py +0 -0
  281. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sys_settings/analyzer_args.py +0 -0
  282. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sys_settings/collector_args.py +0 -0
  283. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sys_settings/sys_settings_analyzer.py +0 -0
  284. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sys_settings/sys_settings_collector.py +0 -0
  285. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sys_settings/sys_settings_data.py +0 -0
  286. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sys_settings/sys_settings_plugin.py +0 -0
  287. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sysctl/__init__.py +0 -0
  288. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sysctl/analyzer_args.py +0 -0
  289. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sysctl/sysctl_analyzer.py +0 -0
  290. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sysctl/sysctl_collector.py +0 -0
  291. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sysctl/sysctl_plugin.py +0 -0
  292. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sysctl/sysctldata.py +0 -0
  293. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/syslog/__init__.py +0 -0
  294. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/syslog/syslog_collector.py +0 -0
  295. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/syslog/syslog_plugin.py +0 -0
  296. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/syslog/syslogdata.py +0 -0
  297. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/uptime/__init__.py +0 -0
  298. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/uptime/uptime_collector.py +0 -0
  299. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/uptime/uptime_plugin.py +0 -0
  300. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/uptime/uptimedata.py +0 -0
  301. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/__init__.py +0 -0
  302. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_endpoint/__init__.py +0 -0
  303. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_endpoint/analyzer_args.py +0 -0
  304. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_analyzer.py +0 -0
  305. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_data.py +0 -0
  306. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_plugin.py +0 -0
  307. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_oem_diag/__init__.py +0 -0
  308. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_oem_diag/analyzer_args.py +0 -0
  309. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_oem_diag/collector_args.py +0 -0
  310. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_analyzer.py +0 -0
  311. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_collector.py +0 -0
  312. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_data.py +0 -0
  313. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_plugin.py +0 -0
  314. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/regex_search/__init__.py +0 -0
  315. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/regex_search/analyzer_args.py +0 -0
  316. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/regex_search/regex_search_analyzer.py +0 -0
  317. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/regex_search/regex_search_data.py +0 -0
  318. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/plugins/regex_search/regex_search_plugin.py +0 -0
  319. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/resultcollators/__init__.py +0 -0
  320. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/resultcollators/tablesummary.py +0 -0
  321. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/taskresulthooks/__init__.py +0 -0
  322. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/taskresulthooks/filesystemloghook.py +0 -0
  323. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/nodescraper/typeutils.py +0 -0
  324. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/pytest.ini +0 -0
  325. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/setup.cfg +0 -0
  326. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/setup.py +0 -0
  327. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/__init__.py +0 -0
  328. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/conftest.py +0 -0
  329. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/bios_plugin_config.json +0 -0
  330. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/cmdline_plugin_config.json +0 -0
  331. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/dimm_plugin_config.json +0 -0
  332. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/dkms_plugin_config.json +0 -0
  333. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/dmesg_plugin_config.json +0 -0
  334. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/dmesg_plugin_config_custom_regex.json +0 -0
  335. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/dmesg_sample.log +0 -0
  336. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/dmesg_sample_with_collapsing.log +0 -0
  337. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/fabrics_plugin_config.json +0 -0
  338. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/journal_plugin_config.json +0 -0
  339. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/kernel_module_plugin_config.json +0 -0
  340. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/kernel_plugin_config.json +0 -0
  341. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/memory_plugin_config.json +0 -0
  342. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/network_plugin_config.json +0 -0
  343. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/nic_plugin_config_full_analyzer_args.json +0 -0
  344. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/niccli_plugin_config.json +0 -0
  345. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/nvme_plugin_config.json +0 -0
  346. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/os_plugin_config.json +0 -0
  347. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/package_plugin_config.json +0 -0
  348. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/pcie_plugin_advanced_config.json +0 -0
  349. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/pcie_plugin_config.json +0 -0
  350. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/plugin_config.json +0 -0
  351. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/process_plugin_config.json +0 -0
  352. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/rdma_plugin_config.json +0 -0
  353. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/redfish_connection_config.json +0 -0
  354. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/redfish_endpoint_plugin_config.json +0 -0
  355. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/redfish_endpoint_plugin_config_full_args.json +0 -0
  356. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/regex_search_multi_logs/app_error.log +0 -0
  357. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/regex_search_multi_logs/no_errors.log +0 -0
  358. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/regex_search_multi_logs/storage_warn.log +0 -0
  359. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/regex_search_sample.log +0 -0
  360. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/rocm_plugin_config.json +0 -0
  361. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/storage_plugin_config.json +0 -0
  362. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/sys_settings_plugin_config.json +0 -0
  363. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/sysctl_plugin_config.json +0 -0
  364. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/syslog_plugin_config.json +0 -0
  365. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/fixtures/uptime_plugin_config.json +0 -0
  366. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/test_cli_describe.py +0 -0
  367. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/test_cli_help.py +0 -0
  368. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/test_cli_no_console_log.py +0 -0
  369. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/test_fabrics_plugin.py +0 -0
  370. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/test_network_plugin.py +0 -0
  371. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/test_nic_plugin.py +0 -0
  372. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/test_pcie_plugin.py +0 -0
  373. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/test_plugin_registry.py +0 -0
  374. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/test_rdma_plugin.py +0 -0
  375. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/test_redfish_endpoint_plugin.py +0 -0
  376. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/test_reference_config_workflow.py +0 -0
  377. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/test_run_plugins.py +0 -0
  378. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/functional/test_sys_settings_plugin.py +0 -0
  379. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/cli/test_build_global_argument_parser.py +0 -0
  380. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/cli/test_cli_embed_api.py +0 -0
  381. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/cli/test_cli_no_console_stdout.py +0 -0
  382. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/cli/test_host_cli_embed.py +0 -0
  383. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/conftest.py +0 -0
  384. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/connection/redfish/test_redfish_oem_diag.py +0 -0
  385. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/compare_runs_sysctl/run1/sysctl_plugin/sysctl_collector/result.json +0 -0
  386. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/compare_runs_sysctl/run1/sysctl_plugin/sysctl_collector/sysctldatamodel.json +0 -0
  387. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/compare_runs_sysctl/run2/sysctl_plugin/sysctl_collector/result.json +0 -0
  388. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/compare_runs_sysctl/run2/sysctl_plugin/sysctl_collector/sysctldatamodel.json +0 -0
  389. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/example.json +0 -0
  390. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/example_config.json +0 -0
  391. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/invalid.json +0 -0
  392. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/log_dir/collector/biosdatamodel.json +0 -0
  393. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/log_dir/collector/result.json +0 -0
  394. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/test_analyzerargs.py +0 -0
  395. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/test_cli.py +0 -0
  396. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/test_compare_runs.py +0 -0
  397. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/test_config_builder.py +0 -0
  398. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/test_connection_manager_entrypoints.py +0 -0
  399. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/test_dataanalyzer.py +0 -0
  400. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/test_file_artifact.py +0 -0
  401. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/test_regexanalyzer.py +0 -0
  402. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/framework/test_type_utils.py +0 -0
  403. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/fixtures/package_commands.json +0 -0
  404. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/fixtures/rdma_link_example_data.json +0 -0
  405. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/fixtures/rdma_statistic_example_data.json +0 -0
  406. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_amdsmi_collector.py +0 -0
  407. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_analyzer_args_build_from_model.py +0 -0
  408. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_bios_analyzer.py +0 -0
  409. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_bios_collector.py +0 -0
  410. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_cmdline_analyzer.py +0 -0
  411. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_cmdline_collector.py +0 -0
  412. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_device_enumeration_analyzer.py +0 -0
  413. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_dimms_collector.py +0 -0
  414. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_dkms_analyzer.py +0 -0
  415. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_dkms_collector.py +0 -0
  416. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_dmesg_analyzer.py +0 -0
  417. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_dmesg_collector.py +0 -0
  418. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_fabrics_collector.py +0 -0
  419. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_journal_collector.py +0 -0
  420. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_kernel_analyzer.py +0 -0
  421. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_kernel_collector.py +0 -0
  422. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_kernel_module_analyzer.py +0 -0
  423. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_kernel_module_collector.py +0 -0
  424. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_memory_analyzer.py +0 -0
  425. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_memory_collector.py +0 -0
  426. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_nvme_collector.py +0 -0
  427. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_os_analyzer.py +0 -0
  428. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_os_collector.py +0 -0
  429. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_package_analyzer.py +0 -0
  430. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_package_collector.py +0 -0
  431. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_process_analyzer.py +0 -0
  432. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_process_collector.py +0 -0
  433. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_rdma_analyzer.py +0 -0
  434. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_rdma_collector.py +0 -0
  435. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_redfish_endpoint_analyzer.py +0 -0
  436. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_redfish_endpoint_plugin.py +0 -0
  437. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_redfish_oem_diag_analyzer.py +0 -0
  438. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_redfish_oem_diag_collector.py +0 -0
  439. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_regex_search_analyzer.py +0 -0
  440. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_rocm_analyzer.py +0 -0
  441. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_storage_analyzer.py +0 -0
  442. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_storage_collector.py +0 -0
  443. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_sys_settings_analyzer.py +0 -0
  444. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_sys_settings_collector.py +0 -0
  445. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_sysctl_analyzer.py +0 -0
  446. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_sysctl_collector.py +0 -0
  447. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_syslog_collector.py +0 -0
  448. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/plugin/test_uptime_collector.py +0 -0
  449. {amd_node_scraper-1.1.4 → amd_node_scraper-1.1.6}/test/unit/test_version.py +0 -0
@@ -0,0 +1 @@
1
+ *@alexandraBara
@@ -14,12 +14,19 @@ jobs:
14
14
  container: python:3.9
15
15
 
16
16
  steps:
17
- - uses: actions/checkout@v3
17
+ - uses: actions/checkout@v4
18
18
  with:
19
19
  fetch-depth: 0 # Fetch all history for pre-commit to work
20
+
21
+ # python:3.9 image has no git; pre-commit requires it.
22
+ - name: Install git
23
+ run: |
24
+ apt-get update
25
+ apt-get install -y --no-install-recommends git
26
+
20
27
  - name: Configure git for container
21
28
  run: |
22
- git config --global --add safe.directory /__w/node-scraper/node-scraper
29
+ git config --global --add safe.directory "$GITHUB_WORKSPACE"
23
30
  git config --global user.email "ci@github.com"
24
31
  git config --global user.name "CI Bot"
25
32
  - name: setup environment and run pre-commit hooks
@@ -15,7 +15,7 @@ jobs:
15
15
  container: python:3.9
16
16
 
17
17
  steps:
18
- - uses: actions/checkout@v3
18
+ - uses: actions/checkout@v4
19
19
 
20
20
  - name: Install xmllint
21
21
  run: |
@@ -24,7 +24,7 @@ jobs:
24
24
 
25
25
  steps:
26
26
  - name: Checkout code
27
- uses: actions/checkout@v3
27
+ uses: actions/checkout@v4
28
28
  with:
29
29
  fetch-depth: 0 # Fetch all history and tags
30
30
  token: ${{ secrets.GITHUB_TOKEN }}
@@ -15,7 +15,7 @@ jobs:
15
15
  container: python:3.9
16
16
 
17
17
  steps:
18
- - uses: actions/checkout@v3
18
+ - uses: actions/checkout@v4
19
19
 
20
20
  - name: Install xmllint
21
21
  run: |
@@ -1,7 +1,8 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: amd-node-scraper
3
- Version: 1.1.4
3
+ Version: 1.1.6
4
4
  Summary: A framework for automated error detection and data collection
5
+ Author: AMD
5
6
  Project-URL: homepage, https://github.com/amd/node-scraper
6
7
  Project-URL: documentation, https://github.com/amd/node-scraper
7
8
  Project-URL: repository, https://github.com/amd/node-scraper
@@ -25,6 +26,7 @@ Requires-Dist: pre-commit; extra == "dev"
25
26
  Requires-Dist: pytest; extra == "dev"
26
27
  Requires-Dist: pytest-cov; extra == "dev"
27
28
  Requires-Dist: mypy; extra == "dev"
29
+ Dynamic: license-file
28
30
 
29
31
  # Node Scraper
30
32
  Node Scraper is a tool which performs automated data collection and analysis for the purposes of
@@ -33,7 +35,7 @@ system debug.
33
35
  ## Table of Contents
34
36
  - [Installation](#installation)
35
37
  - [Install from PyPI](#install-from-pypi)
36
- - [Install From Source](#install-from-source)
38
+ - [Install from Source](#install-from-source)
37
39
  - [CLI Usage](#cli-usage)
38
40
  - [Execution Methods](#execution-methods)
39
41
  - [Example: Remote Execution](#example-remote-execution)
@@ -66,7 +68,7 @@ Use a virtual environment if you prefer. After installation, confirm the CLI is
66
68
  node-scraper --help
67
69
  ```
68
70
 
69
- ### Install From Source
71
+ ### Install from Source
70
72
  Node Scraper requires Python 3.9+ for installation. After cloning this repository,
71
73
  call dev-setup.sh script with 'source'. This script creates an editable install of Node Scraper in
72
74
  a python virtual environment and also configures the pre-commit hooks for the project.
@@ -144,7 +146,7 @@ options:
144
146
  Comma-separated built-in names and/or plugin config
145
147
  JSON paths (e.g. --plugin-
146
148
  configs=NodeStatus,/path/c.json). Built-ins:
147
- NodeStatus, AllPlugins (default: None)
149
+ AllPlugins, NodeStatus (default: None)
148
150
  --system-config STRING
149
151
  Path to system config json (default: None)
150
152
  --connection-config STRING
@@ -519,7 +521,12 @@ The RedfishEndpointPlugin collects Redfish URIs (GET responses) and optionally r
519
521
  }
520
522
  ```
521
523
 
524
+ **`collection_args`**
522
525
  - **`uris`**: List of Redfish paths (e.g. `/redfish/v1/`, `/redfish/v1/Systems/1`) to GET and store.
526
+ - **`follow_next_link`**: Optional (default `false`). When `true`, the collector follows `Members@odata.nextLink` pagination for each URI and merges all pages into a single response.
527
+ - **`max_pages`**: Optional (default `200`). Safety cap on the number of pages to follow per URI when `follow_next_link` is enabled.
528
+
529
+ **`analysis_args`**
523
530
  - **`checks`**: Optional. Map of URI to expected values or constraints for analysis. Supports exact match (e.g. `"PowerState": "On"`), `anyOf`, `min`/`max`, etc.
524
531
 
525
532
  #### **'summary' sub command**
@@ -5,7 +5,7 @@ system debug.
5
5
  ## Table of Contents
6
6
  - [Installation](#installation)
7
7
  - [Install from PyPI](#install-from-pypi)
8
- - [Install From Source](#install-from-source)
8
+ - [Install from Source](#install-from-source)
9
9
  - [CLI Usage](#cli-usage)
10
10
  - [Execution Methods](#execution-methods)
11
11
  - [Example: Remote Execution](#example-remote-execution)
@@ -38,7 +38,7 @@ Use a virtual environment if you prefer. After installation, confirm the CLI is
38
38
  node-scraper --help
39
39
  ```
40
40
 
41
- ### Install From Source
41
+ ### Install from Source
42
42
  Node Scraper requires Python 3.9+ for installation. After cloning this repository,
43
43
  call dev-setup.sh script with 'source'. This script creates an editable install of Node Scraper in
44
44
  a python virtual environment and also configures the pre-commit hooks for the project.
@@ -116,7 +116,7 @@ options:
116
116
  Comma-separated built-in names and/or plugin config
117
117
  JSON paths (e.g. --plugin-
118
118
  configs=NodeStatus,/path/c.json). Built-ins:
119
- NodeStatus, AllPlugins (default: None)
119
+ AllPlugins, NodeStatus (default: None)
120
120
  --system-config STRING
121
121
  Path to system config json (default: None)
122
122
  --connection-config STRING
@@ -491,7 +491,12 @@ The RedfishEndpointPlugin collects Redfish URIs (GET responses) and optionally r
491
491
  }
492
492
  ```
493
493
 
494
+ **`collection_args`**
494
495
  - **`uris`**: List of Redfish paths (e.g. `/redfish/v1/`, `/redfish/v1/Systems/1`) to GET and store.
496
+ - **`follow_next_link`**: Optional (default `false`). When `true`, the collector follows `Members@odata.nextLink` pagination for each URI and merges all pages into a single response.
497
+ - **`max_pages`**: Optional (default `200`). Safety cap on the number of pages to follow per URI when `follow_next_link` is enabled.
498
+
499
+ **`analysis_args`**
495
500
  - **`checks`**: Optional. Map of URI to expected values or constraints for analysis. Supports exact match (e.g. `"PowerState": "On"`), `anyOf`, `min`/`max`, etc.
496
501
 
497
502
  #### **'summary' sub command**
@@ -1,7 +1,8 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: amd-node-scraper
3
- Version: 1.1.4
3
+ Version: 1.1.6
4
4
  Summary: A framework for automated error detection and data collection
5
+ Author: AMD
5
6
  Project-URL: homepage, https://github.com/amd/node-scraper
6
7
  Project-URL: documentation, https://github.com/amd/node-scraper
7
8
  Project-URL: repository, https://github.com/amd/node-scraper
@@ -25,6 +26,7 @@ Requires-Dist: pre-commit; extra == "dev"
25
26
  Requires-Dist: pytest; extra == "dev"
26
27
  Requires-Dist: pytest-cov; extra == "dev"
27
28
  Requires-Dist: mypy; extra == "dev"
29
+ Dynamic: license-file
28
30
 
29
31
  # Node Scraper
30
32
  Node Scraper is a tool which performs automated data collection and analysis for the purposes of
@@ -33,7 +35,7 @@ system debug.
33
35
  ## Table of Contents
34
36
  - [Installation](#installation)
35
37
  - [Install from PyPI](#install-from-pypi)
36
- - [Install From Source](#install-from-source)
38
+ - [Install from Source](#install-from-source)
37
39
  - [CLI Usage](#cli-usage)
38
40
  - [Execution Methods](#execution-methods)
39
41
  - [Example: Remote Execution](#example-remote-execution)
@@ -66,7 +68,7 @@ Use a virtual environment if you prefer. After installation, confirm the CLI is
66
68
  node-scraper --help
67
69
  ```
68
70
 
69
- ### Install From Source
71
+ ### Install from Source
70
72
  Node Scraper requires Python 3.9+ for installation. After cloning this repository,
71
73
  call dev-setup.sh script with 'source'. This script creates an editable install of Node Scraper in
72
74
  a python virtual environment and also configures the pre-commit hooks for the project.
@@ -144,7 +146,7 @@ options:
144
146
  Comma-separated built-in names and/or plugin config
145
147
  JSON paths (e.g. --plugin-
146
148
  configs=NodeStatus,/path/c.json). Built-ins:
147
- NodeStatus, AllPlugins (default: None)
149
+ AllPlugins, NodeStatus (default: None)
148
150
  --system-config STRING
149
151
  Path to system config json (default: None)
150
152
  --connection-config STRING
@@ -519,7 +521,12 @@ The RedfishEndpointPlugin collects Redfish URIs (GET responses) and optionally r
519
521
  }
520
522
  ```
521
523
 
524
+ **`collection_args`**
522
525
  - **`uris`**: List of Redfish paths (e.g. `/redfish/v1/`, `/redfish/v1/Systems/1`) to GET and store.
526
+ - **`follow_next_link`**: Optional (default `false`). When `true`, the collector follows `Members@odata.nextLink` pagination for each URI and merges all pages into a single response.
527
+ - **`max_pages`**: Optional (default `200`). Safety cap on the number of pages to follow per URI when `follow_next_link` is enabled.
528
+
529
+ **`analysis_args`**
523
530
  - **`checks`**: Optional. Map of URI to expected values or constraints for analysis. Supports exact match (e.g. `"PowerState": "On"`), `anyOf`, `min`/`max`, etc.
524
531
 
525
532
  #### **'summary' sub command**
@@ -43,6 +43,7 @@ nodescraper/constants.py
43
43
  nodescraper/generictypes.py
44
44
  nodescraper/pluginexecutor.py
45
45
  nodescraper/pluginregistry.py
46
+ nodescraper/serialization.py
46
47
  nodescraper/typeutils.py
47
48
  nodescraper/utils.py
48
49
  nodescraper/base/__init__.py
@@ -61,7 +62,6 @@ nodescraper/cli/helper.py
61
62
  nodescraper/cli/host_cli_embed.py
62
63
  nodescraper/cli/inputargtypes.py
63
64
  nodescraper/cli/invocation.py
64
- nodescraper/configs/node_status.json
65
65
  nodescraper/connection/__init__.py
66
66
  nodescraper/connection/inband/__init__.py
67
67
  nodescraper/connection/inband/inband.py
@@ -71,6 +71,7 @@ nodescraper/connection/inband/inbandremote.py
71
71
  nodescraper/connection/inband/sshparams.py
72
72
  nodescraper/connection/redfish/__init__.py
73
73
  nodescraper/connection/redfish/redfish_connection.py
74
+ nodescraper/connection/redfish/redfish_constants.py
74
75
  nodescraper/connection/redfish/redfish_manager.py
75
76
  nodescraper/connection/redfish/redfish_oem_diag.py
76
77
  nodescraper/connection/redfish/redfish_params.py
@@ -102,9 +103,15 @@ nodescraper/models/datapluginresult.py
102
103
  nodescraper/models/event.py
103
104
  nodescraper/models/pluginconfig.py
104
105
  nodescraper/models/pluginresult.py
106
+ nodescraper/models/priority_override.py
105
107
  nodescraper/models/systeminfo.py
106
108
  nodescraper/models/taskresult.py
107
109
  nodescraper/models/timerangeargs.py
110
+ nodescraper/pluginrecipe/__init__.py
111
+ nodescraper/pluginrecipe/all_plugins.py
112
+ nodescraper/pluginrecipe/discovery.py
113
+ nodescraper/pluginrecipe/node_status.py
114
+ nodescraper/pluginrecipe/pluginrecipe.py
108
115
  nodescraper/plugins/__init__.py
109
116
  nodescraper/plugins/inband/__init__.py
110
117
  nodescraper/plugins/inband/amdsmi/__init__.py
@@ -185,6 +192,7 @@ nodescraper/plugins/inband/memory/memorydata.py
185
192
  nodescraper/plugins/inband/network/__init__.py
186
193
  nodescraper/plugins/inband/network/analyzer_args.py
187
194
  nodescraper/plugins/inband/network/collector_args.py
195
+ nodescraper/plugins/inband/network/ethtool_vendor.py
188
196
  nodescraper/plugins/inband/network/network_analyzer.py
189
197
  nodescraper/plugins/inband/network/network_collector.py
190
198
  nodescraper/plugins/inband/network/network_plugin.py
@@ -305,6 +313,7 @@ test/functional/test_redfish_endpoint_plugin.py
305
313
  test/functional/test_reference_config_workflow.py
306
314
  test/functional/test_run_plugins.py
307
315
  test/functional/test_sys_settings_plugin.py
316
+ test/functional/fixtures/amdsmi_plugin_config.json
308
317
  test/functional/fixtures/bios_plugin_config.json
309
318
  test/functional/fixtures/cmdline_plugin_config.json
310
319
  test/functional/fixtures/dimm_plugin_config.json
@@ -343,12 +352,14 @@ test/functional/fixtures/regex_search_multi_logs/app_error.log
343
352
  test/functional/fixtures/regex_search_multi_logs/no_errors.log
344
353
  test/functional/fixtures/regex_search_multi_logs/storage_warn.log
345
354
  test/unit/conftest.py
355
+ test/unit/test_serialization.py
346
356
  test/unit/test_version.py
347
357
  test/unit/cli/test_build_global_argument_parser.py
348
358
  test/unit/cli/test_cli_embed_api.py
349
359
  test/unit/cli/test_cli_no_console_stdout.py
350
360
  test/unit/cli/test_host_cli_embed.py
351
361
  test/unit/cli/test_plugin_configs_cli.py
362
+ test/unit/connection/redfish/test_redfish_connection_paging.py
352
363
  test/unit/connection/redfish/test_redfish_oem_diag.py
353
364
  test/unit/framework/test_analyzerargs.py
354
365
  test/unit/framework/test_cli.py
@@ -356,12 +367,14 @@ test/unit/framework/test_cli_helper.py
356
367
  test/unit/framework/test_compare_runs.py
357
368
  test/unit/framework/test_config_builder.py
358
369
  test/unit/framework/test_config_registry.py
370
+ test/unit/framework/test_config_registry_entry_points.py
359
371
  test/unit/framework/test_connection_manager_entrypoints.py
360
372
  test/unit/framework/test_dataanalyzer.py
361
373
  test/unit/framework/test_datacollector.py
362
374
  test/unit/framework/test_dataplugin.py
363
375
  test/unit/framework/test_file_artifact.py
364
376
  test/unit/framework/test_plugin_executor.py
377
+ test/unit/framework/test_pluginrecipe.py
365
378
  test/unit/framework/test_regexanalyzer.py
366
379
  test/unit/framework/test_type_utils.py
367
380
  test/unit/framework/common/shared_utils.py
@@ -376,6 +389,7 @@ test/unit/framework/fixtures/log_dir/collector/biosdatamodel.json
376
389
  test/unit/framework/fixtures/log_dir/collector/result.json
377
390
  test/unit/plugin/test_amdsmi_analyzer.py
378
391
  test/unit/plugin/test_amdsmi_collector.py
392
+ test/unit/plugin/test_amdsmi_data.py
379
393
  test/unit/plugin/test_analyzer_args_build_from_model.py
380
394
  test/unit/plugin/test_bios_analyzer.py
381
395
  test/unit/plugin/test_bios_collector.py
@@ -0,0 +1,6 @@
1
+ [console_scripts]
2
+ node-scraper = nodescraper.cli:cli_entry
3
+
4
+ [nodescraper.plugin_configs]
5
+ AllPlugins = nodescraper.pluginrecipe.all_plugins:AllPlugins
6
+ NodeStatus = nodescraper.pluginrecipe.node_status:NodeStatus
@@ -4,10 +4,10 @@
4
4
 
5
5
  | Plugin | Collection | Analyzer Args | Collection Args | DataModel | Collector | Analyzer |
6
6
  | --- | --- | --- | --- | --- | --- | --- |
7
- | AmdSmiPlugin | bad-pages<br>firmware --json<br>list --json<br>metric -g all<br>partition --json<br>process --json<br>ras --cper --folder={folder}<br>ras --afid --cper-file {cper_file}<br>static -g all --json<br>static -g {gpu_id} --json<br>topology<br>version --json<br>xgmi -l<br>xgmi -m | **Analyzer Args:**<br>- `check_static_data`: bool — If True, run static data checks (e.g. driver version, partition mode).<br>- `expected_gpu_processes`: Optional[int] — Expected number of GPU processes.<br>- `expected_max_power`: Optional[int] — Expected maximum power value (e.g. watts).<br>- `expected_driver_version`: Optional[str] — Expected AMD driver version string.<br>- `expected_memory_partition_mode`: Optional[str] — Expected memory partition mode (e.g. sp3, dp).<br>- `expected_compute_partition_mode`: Optional[str] — Expected compute partition mode.<br>- `expected_firmware_versions`: Optional[dict[str, str]] — Expected firmware versions keyed by amd-smi fw_id (e.g. PLDM_BUNDLE).<br>- `l0_to_recovery_count_error_threshold`: Optional[int] — L0-to-recovery count above which an error is raised.<br>- `l0_to_recovery_count_warning_threshold`: Optional[int] — L0-to-recovery count above which a warning is raised.<br>- `vendorid_ep`: Optional[str] — Expected endpoint vendor ID (e.g. for PCIe).<br>- `vendorid_ep_vf`: Optional[str] — Expected endpoint VF vendor ID.<br>- `devid_ep`: Optional[str] — Expected endpoint device ID.<br>- `devid_ep_vf`: Optional[str] — Expected endpoint VF device ID.<br>- `sku_name`: Optional[str] — Expected SKU name string for GPU.<br>- `expected_xgmi_speed`: Optional[list[float]] — Expected xGMI speed value(s) (e.g. link rate).<br>- `analysis_range_start`: Optional[datetime.datetime] — Start of time range for time-windowed analysis.<br>- `analysis_range_end`: Optional[datetime.datetime] — End of time range for time-windowed analysis. | **Collection Args:**<br>- `analysis_firmware_ids`: Optional[list[str]] — amd-smi fw_id values to record in analysis_ref.firmware_versions<br>- `cper_file_path`: Optional[str] — Path to CPER folder or file for RAS AFID collection (ras --afid --cper-file). | [AmdSmiDataModel](#AmdSmiDataModel-Model) | [AmdSmiCollector](#Collector-Class-AmdSmiCollector) | [AmdSmiAnalyzer](#Data-Analyzer-Class-AmdSmiAnalyzer) |
7
+ | AmdSmiPlugin | bad-pages<br>firmware --json<br>list --json<br>metric -g all<br>partition --json<br>process --json<br>ras --cper --folder={folder}<br>ras --afid --cper-file {cper_file}<br>static -g all --json<br>static -g {gpu_id} --json<br>topology<br>version --json<br>xgmi -l<br>xgmi -m | **Analyzer Args:**<br>- `check_static_data`: bool — If True, run static data checks (e.g. driver version, partition mode).<br>- `expected_gpu_processes`: Optional[int] — Expected number of GPU processes.<br>- `expected_max_power`: Optional[int] — Expected maximum power value (e.g. watts).<br>- `expected_power_management`: Optional[str] — Expected amd-smi metric power_management value per GPU (e.g. DISABLED for active/full power, ENABLED for power-manage...<br>- `expected_driver_version`: Optional[str] — Expected AMD driver version string.<br>- `expected_memory_partition_mode`: Optional[str] — Expected memory partition mode (e.g. sp3, dp).<br>- `expected_compute_partition_mode`: Optional[str] — Expected compute partition mode.<br>- `expected_firmware_versions`: Optional[dict[str, str]] — Expected firmware versions keyed by amd-smi fw_id (e.g. PLDM_BUNDLE).<br>- `l0_to_recovery_count_error_threshold`: Optional[int] — L0-to-recovery count above which an error is raised.<br>- `l0_to_recovery_count_warning_threshold`: Optional[int] — L0-to-recovery count above which a warning is raised.<br>- `vendorid_ep`: Optional[str] — Expected endpoint vendor ID (e.g. for PCIe).<br>- `vendorid_ep_vf`: Optional[str] — Expected endpoint VF vendor ID.<br>- `devid_ep`: Optional[str] — Expected endpoint device ID.<br>- `devid_ep_vf`: Optional[str] — Expected endpoint VF device ID.<br>- `sku_name`: Optional[str] — Expected SKU name string for GPU.<br>- `expected_xgmi_speed`: Optional[list[float]] — Expected xGMI speed value(s) (e.g. link rate).<br>- `analysis_range_start`: Optional[datetime.datetime] — Start of time range for time-windowed analysis.<br>- `analysis_range_end`: Optional[datetime.datetime] — End of time range for time-windowed analysis. | **Collection Args:**<br>- `analysis_firmware_ids`: Optional[list[str]] — amd-smi fw_id values to record in analysis_ref.firmware_versions<br>- `cper_file_path`: Optional[str] — Path to CPER folder or file for RAS AFID collection (ras --afid --cper-file). | [AmdSmiDataModel](#AmdSmiDataModel-Model) | [AmdSmiCollector](#Collector-Class-AmdSmiCollector) | [AmdSmiAnalyzer](#Data-Analyzer-Class-AmdSmiAnalyzer) |
8
8
  | BiosPlugin | sh -c 'cat /sys/devices/virtual/dmi/id/bios_version'<br>wmic bios get SMBIOSBIOSVersion /Value | **Analyzer Args:**<br>- `exp_bios_version`: list[str] — Expected BIOS version(s) to match against collected value (str or list).<br>- `regex_match`: bool — If True, match exp_bios_version as regex; otherwise exact match. | - | [BiosDataModel](#BiosDataModel-Model) | [BiosCollector](#Collector-Class-BiosCollector) | [BiosAnalyzer](#Data-Analyzer-Class-BiosAnalyzer) |
9
9
  | CmdlinePlugin | cat /proc/cmdline | **Analyzer Args:**<br>- `required_cmdline`: Union[str, List] — Command-line parameters that must be present (e.g. 'pci=bfsort').<br>- `banned_cmdline`: Union[str, List] — Command-line parameters that must not be present.<br>- `os_overrides`: Dict[str, nodescraper.plugins.inband.cmdline.cmdlineconfig.OverrideConfig] — Per-OS overrides for required_cmdline and banned_cmdline (keyed by OS identifier).<br>- `platform_overrides`: Dict[str, nodescraper.plugins.inband.cmdline.cmdlineconfig.OverrideConfig] — Per-platform overrides for required_cmdline and banned_cmdline (keyed by platform). | - | [CmdlineDataModel](#CmdlineDataModel-Model) | [CmdlineCollector](#Collector-Class-CmdlineCollector) | [CmdlineAnalyzer](#Data-Analyzer-Class-CmdlineAnalyzer) |
10
- | DeviceEnumerationPlugin | powershell -Command "(Get-WmiObject -Class Win32_Processor &#124; Measure-Object).Count"<br>lspci -d {vendorid_ep}: &#124; grep -i 'VGA\&#124;Display\&#124;3D' &#124; wc -l<br>powershell -Command "(wmic path win32_VideoController get name &#124; findstr AMD &#124; Measure-Object).Count"<br>lscpu<br>lshw<br>lspci -d {vendorid_ep}: &#124; grep -i 'Virtual Function' &#124; wc -l<br>powershell -Command "(Get-VMHostPartitionableGpu &#124; Measure-Object).Count" | **Analyzer Args:**<br>- `cpu_count`: Optional[list[int]] — Expected CPU count(s); pass as int or list of ints. Analysis passes if actual is in list.<br>- `gpu_count`: Optional[list[int]] — Expected GPU count(s); pass as int or list of ints. Analysis passes if actual is in list.<br>- `vf_count`: Optional[list[int]] — Expected virtual function count(s); pass as int or list of ints. Analysis passes if actual is in list. | - | [DeviceEnumerationDataModel](#DeviceEnumerationDataModel-Model) | [DeviceEnumerationCollector](#Collector-Class-DeviceEnumerationCollector) | [DeviceEnumerationAnalyzer](#Data-Analyzer-Class-DeviceEnumerationAnalyzer) |
10
+ | DeviceEnumerationPlugin | powershell -Command "(Get-WmiObject -Class Win32_Processor &#124; Measure-Object).Count"<br>lspci -d {vendorid_ep}: &#124; grep -iE 'VGA&#124;Display&#124;3D&#124;Processing accelerators&#124;Co-processor&#124;Accelerator' &#124; grep -vi 'Virtual Function' &#124; wc -l<br>powershell -Command "(wmic path win32_VideoController get name &#124; findstr AMD &#124; Measure-Object).Count"<br>lscpu<br>lshw<br>lspci -d {vendorid_ep}: &#124; grep -i 'Virtual Function' &#124; wc -l<br>powershell -Command "(Get-VMHostPartitionableGpu &#124; Measure-Object).Count" | **Analyzer Args:**<br>- `cpu_count`: Optional[list[int]] — Expected CPU count(s); pass as int or list of ints. Analysis passes if actual is in list.<br>- `gpu_count`: Optional[list[int]] — Expected GPU count(s); pass as int or list of ints. Analysis passes if actual is in list.<br>- `vf_count`: Optional[list[int]] — Expected virtual function count(s); pass as int or list of ints. Analysis passes if actual is in list. | - | [DeviceEnumerationDataModel](#DeviceEnumerationDataModel-Model) | [DeviceEnumerationCollector](#Collector-Class-DeviceEnumerationCollector) | [DeviceEnumerationAnalyzer](#Data-Analyzer-Class-DeviceEnumerationAnalyzer) |
11
11
  | DimmPlugin | sh -c 'dmidecode -t 17 &#124; tr -s " " &#124; grep -v "Volatile\&#124;None\&#124;Module" &#124; grep Size' 2>/dev/null<br>dmidecode<br>wmic memorychip get Capacity | - | **Collection Args:**<br>- `skip_sudo`: bool — If True, do not use sudo when running dmidecode or wmic for memory info. | [DimmDataModel](#DimmDataModel-Model) | [DimmCollector](#Collector-Class-DimmCollector) | - |
12
12
  | DkmsPlugin | dkms status<br>dkms --version | **Analyzer Args:**<br>- `dkms_status`: Union[str, list] — Expected dkms status string(s) to match (e.g. 'amd/1.0.0'). At least one of dkms_status or dkms_version required.<br>- `dkms_version`: Union[str, list] — Expected dkms version string(s) to match. At least one of dkms_status or dkms_version required.<br>- `regex_match`: bool — If True, match dkms_status and dkms_version as regex; otherwise exact match. | - | [DkmsDataModel](#DkmsDataModel-Model) | [DkmsCollector](#Collector-Class-DkmsCollector) | [DkmsAnalyzer](#Data-Analyzer-Class-DkmsAnalyzer) |
13
13
  | DmesgPlugin | dmesg --time-format iso -x<br>ls -1 /var/log/dmesg* 2>/dev/null &#124; grep -E '^/var/log/dmesg(\.[0-9]+(\.gz)?)?$' &#124;&#124; true | **Built-in Regexes:**<br>- Out of memory error: `(?:oom_kill_process.*)&#124;(?:Out of memory.*)`<br>- I/O Page Fault: `IO_PAGE_FAULT`<br>- Kernel Panic: `\bkernel panic\b.*`<br>- SQ Interrupt: `sq_intr`<br>- SRAM ECC: `sram_ecc.*`<br>- Failed to load driver. IP hardware init error.: `\[amdgpu\]\] \*ERROR\* hw_init of IP block.*`<br>- Failed to load driver. IP software init error.: `\[amdgpu\]\] \*ERROR\* sw_init of IP block.*`<br>- Real Time throttling activated: `sched: RT throttling activated.*`<br>- RCU preempt detected stalls: `rcu_preempt detected stalls.*`<br>- RCU preempt self-detected stall: `rcu_preempt self-detected stall.*`<br>- QCM fence timeout: `qcm fence wait loop timeout.*`<br>- General protection fault: `(?:[\w-]+(?:\[[0-9.]+\])?\s+)?general protectio...`<br>- Segmentation fault: `(?:segfault.*in .*\[)&#124;(?:[Ss]egmentation [Ff]au...`<br>- Failed to disallow cf state: `amdgpu: Failed to disallow cf state.*`<br>- Failed to terminate tmr: `\*ERROR\* Failed to terminate tmr.*`<br>- Suspend of IP block failed: `\*ERROR\* suspend of IP block <\w+> failed.*`<br>- amdgpu Page Fault: `(amdgpu \w{4}:\w{2}:\w{2}\.\w:\s+amdgpu:\s+\[\S...`<br>- Page Fault: `page fault for address.*`<br>- Fatal error during GPU init: `(?:amdgpu)(.*Fatal error during GPU init)&#124;(Fata...`<br>- PCIe AER Error Status: `(pcieport [\w:.]+: AER: aer_status:[^\n]*(?:\n[...`<br>- PCIe AER Correctable Error Status: `(.*aer_cor_status: 0x[0-9a-fA-F]+, aer_cor_mask...`<br>- PCIe AER Uncorrectable Error Status: `(.*aer_uncor_status: 0x[0-9a-fA-F]+, aer_uncor_...`<br>- PCIe AER Uncorrectable Error Severity with TLP Header: `(.*aer_uncor_severity: 0x[0-9a-fA-F]+.*)(\n.*TL...`<br>- Failed to read journal file: `Failed to read journal file.*`<br>- Journal file corrupted or uncleanly shut down: `journal corrupted or uncleanly shut down.*`<br>- ACPI BIOS Error: `ACPI BIOS Error`<br>- ACPI Error: `ACPI Error`<br>- Filesystem corrupted!: `EXT4-fs error \(device .*\):`<br>- Error in buffered IO, check filesystem integrity: `(Buffer I\/O error on dev)(?:ice)? (\w+)`<br>- PCIe card no longer present: `pcieport (\w+:\w+:\w+\.\w+):\s+(\w+):\s+(Slot\(...`<br>- PCIe Link Down: `pcieport (\w+:\w+:\w+\.\w+):\s+(\w+):\s+(Slot\(...`<br>- Mismatched clock configuration between PCIe device and host: `pcieport (\w+:\w+:\w+\.\w+):\s+(\w+):\s+(curren...`<br>- RAS Correctable Error: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- RAS Uncorrectable Error: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- RAS Deferred Error: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- RAS Corrected PCIe Error: `((?:\[Hardware Error\]:\s+)?event severity: cor...`<br>- GPU Reset: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- GPU reset failed: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- ACA Error: `(Accelerator Check Architecture[^\n]*)(?:\n[^\n...`<br>- ACA Error: `(Accelerator Check Architecture[^\n]*)(?:\n[^\n...`<br>- MCE Error: `\[Hardware Error\]:.+MC\d+_STATUS.*(?:\n.*){0,5}`<br>- Mode 2 Reset Failed: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)? (...`<br>- RAS Corrected Error: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`<br>- SGX Error: `x86/cpu: SGX disabled by BIOS`<br>- MMP Error: `Failed to load MMP firmware qat_4xxx_mmp.bin`<br>- GPU Throttled: `amdgpu \w{4}:\w{2}:\w{2}.\w: amdgpu: WARN: GPU ...`<br>- RAS Poison Consumed: `amdgpu[ 0-9a-fA-F:.]+:(?:\s*amdgpu:)?\s+(?:{\d+...`<br>- RAS Poison created: `amdgpu[ 0-9a-fA-F:.]+:(?:\s*amdgpu:)?\s+(?:{\d+...`<br>- Bad page threshold exceeded: `(amdgpu: Saved bad pages (\d+) reaches threshol...`<br>- RAS Hardware Error: `Hardware error from APEI Generic Hardware Error...`<br>- Error Address: `Error Address.*(?:\s.*)`<br>- RAS EDR Event: `EDR: EDR event received`<br>- DPC Event: `DPC: .*`<br>- LNet: ko2iblnd has no matching interfaces: `(?:\[[^\]]+\]\s*)?LNetError:.*ko2iblnd:\s*No ma...`<br>- LNet: Error starting up LNI: `(?:\[[^\]]+\]\s*)?LNetError:\s*.*Error\s*-?\d+\...`<br>- Lustre: network initialisation failed: `LustreError:.*ptlrpc_init_portals\(\).*network ...` | **Collection Args:**<br>- `collect_rotated_logs`: bool — If True, also collect rotated dmesg log files from /var/log/dmesg*.<br>- `skip_sudo`: bool — If True, do not use sudo when running dmesg or listing log files.<br>- `log_dmesg_data`: bool — If True, log the collected dmesg output in artifacts. | [DmesgData](#DmesgData-Model) | [DmesgCollector](#Collector-Class-DmesgCollector) | [DmesgAnalyzer](#Data-Analyzer-Class-DmesgAnalyzer) |
@@ -16,15 +16,15 @@
16
16
  | KernelPlugin | sh -c 'uname -a'<br>sh -c 'cat /proc/sys/kernel/numa_balancing'<br>wmic os get Version /Value | **Analyzer Args:**<br>- `exp_kernel`: Union[str, list] — Expected kernel version string(s) to match (e.g. from uname -a).<br>- `exp_numa`: Optional[int] — Expected value for kernel.numa_balancing (e.g. 0 or 1).<br>- `regex_match`: bool — If True, match exp_kernel as regex; otherwise exact match. | - | [KernelDataModel](#KernelDataModel-Model) | [KernelCollector](#Collector-Class-KernelCollector) | [KernelAnalyzer](#Data-Analyzer-Class-KernelAnalyzer) |
17
17
  | KernelModulePlugin | cat /proc/modules<br>modinfo amdgpu<br>wmic os get Version /Value | **Analyzer Args:**<br>- `kernel_modules`: dict[str, dict] — Expected kernel module name -> {version, etc.}. Analyzer checks collected modules match.<br>- `regex_filter`: list[str] — List of regex patterns to filter which collected modules are checked (default: amd). | - | [KernelModuleDataModel](#KernelModuleDataModel-Model) | [KernelModuleCollector](#Collector-Class-KernelModuleCollector) | [KernelModuleAnalyzer](#Data-Analyzer-Class-KernelModuleAnalyzer) |
18
18
  | MemoryPlugin | free -b<br>lsmem<br>numactl -H<br>wmic OS get FreePhysicalMemory /Value; wmic ComputerSystem get TotalPhysicalMemory /Value | **Analyzer Args:**<br>- `ratio`: float — Required free-memory ratio (0-1). Analysis fails if free/total < ratio.<br>- `memory_threshold`: str — Minimum free memory required (e.g. '30Gi', '1T'). Used when ratio is not sufficient. | - | [MemoryDataModel](#MemoryDataModel-Model) | [MemoryCollector](#Collector-Class-MemoryCollector) | [MemoryAnalyzer](#Data-Analyzer-Class-MemoryAnalyzer) |
19
- | NetworkPlugin | ip addr show<br>curl<br>ethtool -S {interface}<br>ethtool {interface}<br>lldpcli show neighbor<br>lldpctl<br>ip neighbor show<br>ping<br>ip route show<br>ip rule show<br>wget | **Built-in Regexes:**<br>- tx_pfc_frames is non-zero: `^tx_pfc_frames$`<br>- tx_pfc_ena_frames_pri* is non-zero: `^tx_pfc_ena_frames_pri\d+$`<br>- pfc_pri*_tx_transitions is non-zero: `^pfc_pri\d+_tx_transitions$`<br>**Analyzer Args:**<br>- `error_regex`: Union[list[nodescraper.base.regexanalyzer.ErrorRegex], list[dict], NoneType] — Custom error regex patterns; each item can be ErrorRegex or dict with category/pattern. | **Collection Args:**<br>- `url`: Optional[str] — Optional URL to probe for network connectivity (used with netprobe).<br>- `netprobe`: Optional[Literal['ping', 'wget', 'curl']] — Tool to use for network connectivity probe: ping, wget, or curl. | [NetworkDataModel](#NetworkDataModel-Model) | [NetworkCollector](#Collector-Class-NetworkCollector) | [NetworkAnalyzer](#Data-Analyzer-Class-NetworkAnalyzer) |
20
- | NicPlugin | niccli --listdev<br>niccli --list<br>niccli --list_devices<br>niccli -dev {device_num} nvm -getoption pcie_relaxed_ordering<br>niccli --dev {device_num} nvm --getoption pcie_relaxed_ordering<br>niccli -dev {device_num} nvm -getoption performance_profile<br>niccli --dev {device_num} nvm --getoption performance_profile<br>niccli -dev {device_num} nvm -getoption support_rdma -scope 0<br>niccli -dev {device_num} getqos<br>niccli --dev {device_num} nvm --getoption support_rdma<br>niccli --dev {device_num} qos --ets --show<br>niccli --version<br>nicctl show card<br>nicctl --version<br>nicctl show card flash partition --json<br>nicctl show card interrupts --json<br>nicctl show card logs --non-persistent<br>nicctl show card logs --boot-fault<br>nicctl show card logs --persistent<br>nicctl show card profile --json<br>nicctl show card time --json<br>nicctl show card statistics packet-buffer summary --json<br>nicctl show lif statistics --json<br>nicctl show lif internal queue-to-ud-pinning<br>nicctl show pipeline internal anomalies<br>nicctl show pipeline internal rsq-ring<br>nicctl show pipeline internal statistics memory<br>nicctl show port fsm<br>nicctl show port transceiver --json<br>nicctl show port statistics --json<br>nicctl show port internal mac<br>nicctl show qos headroom --json<br>nicctl show rdma queue --json<br>nicctl show rdma queue-pair --detail --json<br>nicctl show version firmware<br>nicctl show dcqcn<br>nicctl show environment<br>nicctl show lif<br>nicctl show pcie ats<br>nicctl show port<br>nicctl show qos<br>nicctl show rdma statistics<br>nicctl show version host-software<br>nicctl show dcqcn --card {card_id} --json<br>nicctl show card hardware-config --card {card_id} | **Analyzer Args:**<br>- `expected_values`: Optional[Dict[str, Dict[str, Any]]] — Per-command expected checks keyed by canonical key (see command_to_canonical_key).<br>- `performance_profile_expected`: str — Expected Broadcom performance_profile value (case-insensitive). Default RoCE.<br>- `support_rdma_disabled_values`: List[str] — Values that indicate RDMA is not supported (case-insensitive).<br>- `pcie_relaxed_ordering_expected`: str — Expected Broadcom pcie_relaxed_ordering value (e.g. 'Relaxed ordering = enabled'); checked case-insensitively. Defaul...<br>- `expected_qos_prio_map`: Optional[Dict[Any, Any]] — Expected priority-to-TC map (e.g. {0: 0, 1: 1}; keys may be int or str in config). Checked per device when set.<br>- `expected_qos_pfc_enabled`: Optional[int] — Expected PFC enabled value (0/1 or bitmask). Checked per device when set.<br>- `expected_qos_tsa_map`: Optional[Dict[Any, Any]] — Expected TSA map for ETS (e.g. {0: 'ets', 1: 'strict'}; keys may be int or str in config). Checked per device when set.<br>- `expected_qos_tc_bandwidth`: Optional[List[int]] — Expected TC bandwidth percentages. Checked per device when set.<br>- `require_qos_consistent_across_adapters`: bool — When True and no expected_qos_* are set, require all adapters to have the same prio_map, pfc_enabled, and tsa_map.<br>- `nicctl_log_error_regex`: Optional[List[Dict[str, Any]]] — Optional list of error patterns for nicctl show card logs. | **Collection Args:**<br>- `commands`: Optional[List[str]] — Optional list of niccli/nicctl commands to run. When None, default command set is used.<br>- `use_sudo_niccli`: bool — If True, run niccli commands with sudo when required.<br>- `use_sudo_nicctl`: bool — If True, run nicctl commands with sudo when required. | [NicDataModel](#NicDataModel-Model) | [NicCollector](#Collector-Class-NicCollector) | [NicAnalyzer](#Data-Analyzer-Class-NicAnalyzer) |
19
+ | NetworkPlugin | ip addr show<br>curl<br>ethtool -S {interface}<br>ethtool {interface}<br>lldpcli show neighbor<br>lldpctl<br>ip neighbor show<br>ping<br>rdma link -j<br>ip route show<br>ip rule show<br>wget | **Built-in Regexes:**<br>- tx_pfc_frames is non-zero: `^tx_pfc_frames$`<br>- tx_pfc_ena_frames_pri* is non-zero: `^tx_pfc_ena_frames_pri\d+$`<br>- pfc_pri*_tx_transitions is non-zero: `^pfc_pri\d+_tx_transitions$`<br>**Analyzer Args:**<br>- `error_regex`: Union[list[nodescraper.base.regexanalyzer.ErrorRegex], list[dict], NoneType] — Custom error regex patterns; each item can be ErrorRegex or dict with category/pattern. | **Collection Args:**<br>- `url`: Optional[str] — Optional URL to probe for network connectivity (used with netprobe).<br>- `netprobe`: Optional[Literal['ping', 'wget', 'curl']] — Tool to use for network connectivity probe: ping, wget, or curl. | [NetworkDataModel](#NetworkDataModel-Model) | [NetworkCollector](#Collector-Class-NetworkCollector) | [NetworkAnalyzer](#Data-Analyzer-Class-NetworkAnalyzer) |
20
+ | NicPlugin | niccli --listdev<br>niccli --list<br>niccli --list_devices<br>niccli -dev {device_num} nvm -getoption pcie_relaxed_ordering<br>niccli --dev {device_num} nvm --getoption pcie_relaxed_ordering<br>niccli -dev {device_num} nvm -getoption performance_profile<br>niccli --dev {device_num} nvm --getoption performance_profile<br>niccli -dev {device_num} nvm -getoption support_rdma -scope 0<br>niccli -dev {device_num} getqos<br>niccli --dev {device_num} nvm --getoption support_rdma --scope 0<br>niccli --dev {device_num} qos --ets --show<br>niccli --version<br>nicctl show card<br>nicctl --version<br>nicctl show card flash partition --json<br>nicctl show card interrupts --json<br>nicctl show card logs --non-persistent<br>nicctl show card logs --boot-fault<br>nicctl show card logs --persistent<br>nicctl show card profile --json<br>nicctl show card time --json<br>nicctl show card statistics packet-buffer summary --json<br>nicctl show lif statistics --json<br>nicctl show lif internal queue-to-ud-pinning<br>nicctl show pipeline internal anomalies<br>nicctl show pipeline internal rsq-ring<br>nicctl show pipeline internal statistics memory<br>nicctl show port fsm<br>nicctl show port transceiver --json<br>nicctl show port statistics --json<br>nicctl show port internal mac<br>nicctl show qos headroom --json<br>nicctl show rdma queue --json<br>nicctl show rdma queue-pair --detail --json<br>nicctl show version firmware<br>nicctl show dcqcn<br>nicctl show environment<br>nicctl show lif<br>nicctl show pcie ats<br>nicctl show port<br>nicctl show qos<br>nicctl show rdma statistics<br>nicctl show version host-software<br>nicctl show dcqcn --card {card_id} --json<br>nicctl show card hardware-config --card {card_id} | **Analyzer Args:**<br>- `expected_values`: Optional[Dict[str, Dict[str, Any]]] — Per-command expected checks keyed by canonical key (see command_to_canonical_key).<br>- `performance_profile_expected`: str — Expected Broadcom performance_profile value (case-insensitive). Default RoCE.<br>- `support_rdma_disabled_values`: List[str] — Values that indicate RDMA is not supported (case-insensitive).<br>- `pcie_relaxed_ordering_expected`: str — Expected Broadcom pcie_relaxed_ordering value (e.g. 'Relaxed ordering = enabled'); checked case-insensitively. Defaul...<br>- `expected_qos_prio_map`: Optional[Dict[Any, Any]] — Expected priority-to-TC map (e.g. {0: 0, 1: 1}; keys may be int or str in config). Checked per device when set.<br>- `expected_qos_pfc_enabled`: Optional[int] — Expected PFC enabled value (0/1 or bitmask). Checked per device when set.<br>- `expected_qos_tsa_map`: Optional[Dict[Any, Any]] — Expected TSA map for ETS (e.g. {0: 'ets', 1: 'strict'}; keys may be int or str in config). Checked per device when set.<br>- `expected_qos_tc_bandwidth`: Optional[List[int]] — Expected TC bandwidth percentages. Checked per device when set.<br>- `require_qos_consistent_across_adapters`: bool — When True and no expected_qos_* are set, require all adapters to have the same prio_map, pfc_enabled, and tsa_map.<br>- `nicctl_log_error_regex`: Optional[List[Dict[str, Any]]] — Optional list of error patterns for nicctl show card logs. | **Collection Args:**<br>- `commands`: Optional[List[str]] — Optional list of niccli/nicctl commands to run. When None, default command set is used.<br>- `use_sudo_niccli`: bool — If True, run niccli commands with sudo when required.<br>- `use_sudo_nicctl`: bool — If True, run nicctl commands with sudo when required. | [NicDataModel](#NicDataModel-Model) | [NicCollector](#Collector-Class-NicCollector) | [NicAnalyzer](#Data-Analyzer-Class-NicAnalyzer) |
21
21
  | NvmePlugin | nvme smart-log {dev}<br>nvme error-log {dev} --log-entries=256<br>nvme id-ctrl {dev}<br>nvme id-ns {dev}{ns}<br>nvme fw-log {dev}<br>nvme self-test-log {dev}<br>nvme get-log {dev} --log-id=6 --log-len=512<br>nvme telemetry-log {dev} --output-file={dev}_{f_name}<br>nvme list -o json | - | - | [NvmeDataModel](#NvmeDataModel-Model) | [NvmeCollector](#Collector-Class-NvmeCollector) | - |
22
22
  | OsPlugin | sh -c '( lsb_release -ds &#124;&#124; (cat /etc/*release &#124; grep PRETTY_NAME) &#124;&#124; uname -om ) 2>/dev/null &#124; head -n1'<br>cat /etc/*release &#124; grep VERSION_ID<br>wmic os get Version /value<br>wmic os get Caption /Value | **Analyzer Args:**<br>- `exp_os`: Union[str, list] — Expected OS name/version string(s) to match (e.g. from lsb_release or /etc/os-release).<br>- `exact_match`: bool — If True, require exact match for exp_os; otherwise substring match. | - | [OsDataModel](#OsDataModel-Model) | [OsCollector](#Collector-Class-OsCollector) | [OsAnalyzer](#Data-Analyzer-Class-OsAnalyzer) |
23
23
  | PackagePlugin | dnf list --installed<br>dpkg-query -W<br>pacman -Q<br>cat /etc/*release<br>wmic product get name,version | **Analyzer Args:**<br>- `exp_package_ver`: Dict[str, Optional[str]] — Map package name -> expected version (None = any version). Checked against installed packages.<br>- `regex_match`: bool — If True, match package versions with regex; otherwise exact or prefix match.<br>- `rocm_regex`: Optional[str] — Optional regex to identify ROCm package version (used when enable_rocm_regex is True).<br>- `enable_rocm_regex`: bool — If True, use rocm_regex (or default pattern) to extract ROCm version for checks. | - | [PackageDataModel](#PackageDataModel-Model) | [PackageCollector](#Collector-Class-PackageCollector) | [PackageAnalyzer](#Data-Analyzer-Class-PackageAnalyzer) |
24
24
  | PciePlugin | lspci -d {vendor_id}: -nn<br>lspci -x<br>lspci -xxxx<br>lspci -PP<br>lspci -PP -d {vendor_id}:{dev_id}<br>lspci -vvv<br>lspci -vvvt | **Analyzer Args:**<br>- `exp_speed`: int — Expected PCIe link speed (generation 1–5).<br>- `exp_width`: int — Expected PCIe link width in lanes (1–16).<br>- `exp_sriov_count`: int — Expected SR-IOV virtual function count.<br>- `exp_gpu_count_override`: Optional[int] — Override expected GPU count for validation.<br>- `exp_max_payload_size`: Union[Dict[int, int], int, NoneType] — Expected max payload size: int for all devices, or dict keyed by device ID.<br>- `exp_max_rd_req_size`: Union[Dict[int, int], int, NoneType] — Expected max read request size: int for all devices, or dict keyed by device ID.<br>- `exp_ten_bit_tag_req_en`: Union[Dict[int, int], int, NoneType] — Expected 10-bit tag request enable: int for all devices, or dict keyed by device ID. | - | [PcieDataModel](#PcieDataModel-Model) | [PcieCollector](#Collector-Class-PcieCollector) | [PcieAnalyzer](#Data-Analyzer-Class-PcieAnalyzer) |
25
25
  | ProcessPlugin | top -b -n 1<br>rocm-smi --showpids<br>top -b -n 1 -o %CPU | **Analyzer Args:**<br>- `max_kfd_processes`: int — Maximum allowed number of KFD (Kernel Fusion Driver) processes; 0 disables the check.<br>- `max_cpu_usage`: float — Maximum allowed CPU usage (percent) for process checks. | **Collection Args:**<br>- `top_n_process`: int — Number of top processes by CPU usage to collect (e.g. for top -b -n 1 -o %%CPU). | [ProcessDataModel](#ProcessDataModel-Model) | [ProcessCollector](#Collector-Class-ProcessCollector) | [ProcessAnalyzer](#Data-Analyzer-Class-ProcessAnalyzer) |
26
26
  | RdmaPlugin | rdma link -j<br>rdma dev<br>rdma link<br>rdma statistic -j | - | - | [RdmaDataModel](#RdmaDataModel-Model) | [RdmaCollector](#Collector-Class-RdmaCollector) | [RdmaAnalyzer](#Data-Analyzer-Class-RdmaAnalyzer) |
27
- | RocmPlugin | {rocm_path}/opencl/bin/*/clinfo<br>env &#124; grep -Ei 'rocm&#124;hsa&#124;hip&#124;mpi&#124;openmp&#124;ucx&#124;miopen'<br>ls /sys/class/kfd/kfd/proc/<br>grep -i -E 'rocm' /etc/ld.so.conf.d/*<br>{rocm_path}/bin/rocminfo<br>ls -v -d {rocm_path}*<br>ls -v -d {rocm_path}-[3-7]* &#124; tail -1<br>ldconfig -p &#124; grep -i -E 'rocm'<br>grep . -r {rocm_path}/.info/* | **Analyzer Args:**<br>- `exp_rocm`: Union[str, list] — Expected ROCm version string(s) to match (e.g. from rocminfo).<br>- `exp_rocm_latest`: str — Expected 'latest' ROCm path or version string for versioned installs.<br>- `exp_rocm_sub_versions`: dict[str, Union[str, list]] — Map sub-version name (e.g. version_rocm) to expected string or list of allowed strings. | **Collection Args:**<br>- `rocm_path`: str — Base path to ROCm installation (e.g. /opt/rocm). Used for rocminfo, clinfo, and version discovery. | [RocmDataModel](#RocmDataModel-Model) | [RocmCollector](#Collector-Class-RocmCollector) | [RocmAnalyzer](#Data-Analyzer-Class-RocmAnalyzer) |
27
+ | RocmPlugin | {rocm_path}/opencl/bin/*/clinfo<br>env &#124; grep -Ei 'rocm&#124;hsa&#124;hip&#124;mpi&#124;openmp&#124;ucx&#124;miopen'<br>ls /sys/class/kfd/kfd/proc/<br>grep -i -E 'rocm' /etc/ld.so.conf.d/*<br>{rocm_path}/bin/rocminfo<br>ls -v -d {rocm_path}*<br>ls -v -d {rocm_path}-[3-7]* &#124; tail -1<br>ldconfig -p &#124; grep -i -E 'rocm'<br>grep . -H -r -i {rocm_path}/.info/* | **Analyzer Args:**<br>- `exp_rocm`: Union[str, list] — Expected ROCm version string(s) to match (e.g. from rocminfo).<br>- `exp_rocm_latest`: str — Expected 'latest' ROCm path or version string for versioned installs.<br>- `exp_rocm_sub_versions`: dict[str, Union[str, list]] — Map sub-version name (e.g. version_rocm) to expected string or list of allowed strings. | **Collection Args:**<br>- `rocm_path`: str — Base path to ROCm installation (e.g. /opt/rocm). Used for rocminfo, clinfo, and version discovery. | [RocmDataModel](#RocmDataModel-Model) | [RocmCollector](#Collector-Class-RocmCollector) | [RocmAnalyzer](#Data-Analyzer-Class-RocmAnalyzer) |
28
28
  | StoragePlugin | sh -c 'df -lH -B1 &#124; grep -v 'boot''<br>wmic LogicalDisk Where DriveType="3" Get DeviceId,Size,FreeSpace | - | **Collection Args:**<br>- `skip_sudo`: bool — If True, do not use sudo when running df and related storage commands. | [StorageDataModel](#StorageDataModel-Model) | [StorageCollector](#Collector-Class-StorageCollector) | [StorageAnalyzer](#Data-Analyzer-Class-StorageAnalyzer) |
29
29
  | SysSettingsPlugin | cat /sys/{}<br>ls -1 /sys/{}<br>ls -l /sys/{} | **Analyzer Args:**<br>- `checks`: Optional[list[nodescraper.plugins.inband.sys_settings.analyzer_args.SysfsCheck]] — List of sysfs checks (path, expected values or pattern, display name). | **Collection Args:**<br>- `paths`: list[str] — Sysfs paths to read (cat). Paths with '*' are collected with ls -l (e.g. class/net/*/device).<br>- `directory_paths`: list[str] — Sysfs paths to list (ls -1); used for checks that match entry names by regex. | [SysSettingsDataModel](#SysSettingsDataModel-Model) | [SysSettingsCollector](#Collector-Class-SysSettingsCollector) | [SysSettingsAnalyzer](#Data-Analyzer-Class-SysSettingsAnalyzer) |
30
30
  | SysctlPlugin | sysctl -n | **Analyzer Args:**<br>- `exp_vm_swappiness`: Optional[int] — Expected vm.swappiness value.<br>- `exp_vm_numa_balancing`: Optional[int] — Expected vm.numa_balancing value.<br>- `exp_vm_oom_kill_allocating_task`: Optional[int] — Expected vm.oom_kill_allocating_task value.<br>- `exp_vm_compaction_proactiveness`: Optional[int] — Expected vm.compaction_proactiveness value.<br>- `exp_vm_compact_unevictable_allowed`: Optional[int] — Expected vm.compact_unevictable_allowed value.<br>- `exp_vm_extfrag_threshold`: Optional[int] — Expected vm.extfrag_threshold value.<br>- `exp_vm_zone_reclaim_mode`: Optional[int] — Expected vm.zone_reclaim_mode value.<br>- `exp_vm_dirty_background_ratio`: Optional[int] — Expected vm.dirty_background_ratio value.<br>- `exp_vm_dirty_ratio`: Optional[int] — Expected vm.dirty_ratio value.<br>- `exp_vm_dirty_writeback_centisecs`: Optional[int] — Expected vm.dirty_writeback_centisecs value.<br>- `exp_kernel_numa_balancing`: Optional[int] — Expected kernel.numa_balancing value. | - | [SysctlDataModel](#SysctlDataModel-Model) | [SysctlCollector](#Collector-Class-SysctlCollector) | [SysctlAnalyzer](#Data-Analyzer-Class-SysctlAnalyzer) |
@@ -142,7 +142,7 @@ Collect CPU and GPU count
142
142
 
143
143
  ### Class Variables
144
144
 
145
- - **CMD_GPU_COUNT_LINUX**: `lspci -d {vendorid_ep}: | grep -i 'VGA\|Display\|3D' | wc -l`
145
+ - **CMD_GPU_COUNT_LINUX**: `lspci -d {vendorid_ep}: | grep -iE 'VGA|Display|3D|Processing accelerators|Co-processor|Accelerator' | grep -vi 'Virtual Function' | wc -l`
146
146
  - **CMD_VF_COUNT_LINUX**: `lspci -d {vendorid_ep}: | grep -i 'Virtual Function' | wc -l`
147
147
  - **CMD_LSCPU_LINUX**: `lscpu`
148
148
  - **CMD_LSHW_LINUX**: `lshw`
@@ -157,7 +157,7 @@ DeviceEnumerationDataModel
157
157
  ### Commands
158
158
 
159
159
  - powershell -Command "(Get-WmiObject -Class Win32_Processor | Measure-Object).Count"
160
- - lspci -d {vendorid_ep}: | grep -i 'VGA\|Display\|3D' | wc -l
160
+ - lspci -d {vendorid_ep}: | grep -iE 'VGA|Display|3D|Processing accelerators|Co-processor|Accelerator' | grep -vi 'Virtual Function' | wc -l
161
161
  - powershell -Command "(wmic path win32_VideoController get name | findstr AMD | Measure-Object).Count"
162
162
  - lscpu
163
163
  - lshw
@@ -405,6 +405,7 @@ Collect network configuration details using ip command
405
405
  - **CMD_NEIGHBOR**: `ip neighbor show`
406
406
  - **CMD_ETHTOOL_TEMPLATE**: `ethtool {interface}`
407
407
  - **CMD_ETHTOOL_S_TEMPLATE**: `ethtool -S {interface}`
408
+ - **CMD_RDMA_LINK_JSON**: `rdma link -j`
408
409
  - **CMD_PING**: `ping`
409
410
  - **CMD_WGET**: `wget`
410
411
  - **CMD_CURL**: `curl`
@@ -425,6 +426,7 @@ NetworkDataModel
425
426
  - lldpctl
426
427
  - ip neighbor show
427
428
  - ping
429
+ - rdma link -j
428
430
  - ip route show
429
431
  - ip rule show
430
432
  - wget
@@ -459,12 +461,12 @@ Collect raw output from niccli (Broadcom) and nicctl (Pensando) commands.
459
461
  niccli -dev {device_num} nvm -getoption pcie_relaxed_ordering,
460
462
  niccli -dev {device_num} getqos
461
463
  ]`
462
- - **CMD_NICCLI_SUPPORT_RDMA_TEMPLATE_NEW**: `niccli --dev {device_num} nvm --getoption support_rdma`
464
+ - **CMD_NICCLI_SUPPORT_RDMA_TEMPLATE_NEW**: `niccli --dev {device_num} nvm --getoption support_rdma --scope 0`
463
465
  - **CMD_NICCLI_PERFORMANCE_PROFILE_TEMPLATE_NEW**: `niccli --dev {device_num} nvm --getoption performance_profile`
464
466
  - **CMD_NICCLI_PCIE_RELAXED_ORDERING_TEMPLATE_NEW**: `niccli --dev {device_num} nvm --getoption pcie_relaxed_ordering`
465
467
  - **CMD_NICCLI_QOS_TEMPLATE_NEW**: `niccli --dev {device_num} qos --ets --show`
466
468
  - **CMD_NICCLI_PER_DEVICE_NEW**: `[
467
- niccli --dev {device_num} nvm --getoption support_rdma,
469
+ niccli --dev {device_num} nvm --getoption support_rdma --scope 0,
468
470
  niccli --dev {device_num} nvm --getoption performance_profile,
469
471
  niccli --dev {device_num} nvm --getoption pcie_relaxed_ordering,
470
472
  niccli --dev {device_num} qos --ets --show
@@ -531,7 +533,7 @@ NicDataModel
531
533
  - niccli --dev {device_num} nvm --getoption performance_profile
532
534
  - niccli -dev {device_num} nvm -getoption support_rdma -scope 0
533
535
  - niccli -dev {device_num} getqos
534
- - niccli --dev {device_num} nvm --getoption support_rdma
536
+ - niccli --dev {device_num} nvm --getoption support_rdma --scope 0
535
537
  - niccli --dev {device_num} qos --ets --show
536
538
  - niccli --version
537
539
  - nicctl show card
@@ -792,7 +794,7 @@ Collect ROCm version data
792
794
  ### Class Variables
793
795
 
794
796
  - **SUPPORTED_OS_FAMILY**: `{<OSFamily.LINUX: 3>}`
795
- - **CMD_ROCM_SUB_VERSIONS_TMPL**: `grep . -r {rocm_path}/.info/*`
797
+ - **CMD_ROCM_SUB_VERSIONS_TMPL**: `grep . -H -r -i {rocm_path}/.info/*`
796
798
  - **CMD_ROCMINFO_TMPL**: `{rocm_path}/bin/rocminfo`
797
799
  - **CMD_ROCM_LATEST_TMPL**: `ls -v -d {rocm_path}-[3-7]* | tail -1`
798
800
  - **CMD_ROCM_DIRS_TMPL**: `ls -v -d {rocm_path}*`
@@ -816,7 +818,7 @@ RocmDataModel
816
818
  - ls -v -d {rocm_path}*
817
819
  - ls -v -d {rocm_path}-[3-7]* | tail -1
818
820
  - ldconfig -p | grep -i -E 'rocm'
819
- - grep . -r {rocm_path}/.info/*
821
+ - grep . -H -r -i {rocm_path}/.info/*
820
822
 
821
823
  ## Collector Class StorageCollector
822
824
 
@@ -1134,6 +1136,8 @@ Complete network configuration data
1134
1136
  - **rules**: `List[nodescraper.plugins.inband.network.networkdata.RoutingRule]`
1135
1137
  - **neighbors**: `List[nodescraper.plugins.inband.network.networkdata.Neighbor]`
1136
1138
  - **ethtool_info**: `Dict[str, nodescraper.plugins.inband.network.networkdata.EthtoolInfo]`
1139
+ - **rdma_ethtool_netdevs**: `List[str]`
1140
+ - **rdma_ethtool_statistics**: `List[nodescraper.plugins.inband.network.ethtool_vendor.EthtoolStatistics]`
1137
1141
  - **accessible**: `Optional[bool]`
1138
1142
 
1139
1143
  ## NicDataModel Model
@@ -1281,6 +1285,7 @@ Data model for RDMA (Remote Direct Memory Access) statistics and link informatio
1281
1285
 
1282
1286
  ### Model annotations and fields
1283
1287
 
1288
+ - **ROCM_VERSION_FILENAME**: `ClassVar[str]`
1284
1289
  - **rocm_version**: `str`
1285
1290
  - **rocm_sub_versions**: `dict[str, str]`
1286
1291
  - **rocminfo**: `List[str]`
@@ -1750,6 +1755,7 @@ Check sysctl matches expected sysctl details
1750
1755
  - **check_static_data**: `bool` — If True, run static data checks (e.g. driver version, partition mode).
1751
1756
  - **expected_gpu_processes**: `Optional[int]` — Expected number of GPU processes.
1752
1757
  - **expected_max_power**: `Optional[int]` — Expected maximum power value (e.g. watts).
1758
+ - **expected_power_management**: `Optional[str]` — Expected amd-smi metric power_management value per GPU (e.g. DISABLED for active/full power, ENABLED for power-managed idle).
1753
1759
  - **expected_driver_version**: `Optional[str]` — Expected AMD driver version string.
1754
1760
  - **expected_memory_partition_mode**: `Optional[str]` — Expected memory partition mode (e.g. sp3, dp).
1755
1761
  - **expected_compute_partition_mode**: `Optional[str]` — Expected compute partition mode.
@@ -28,6 +28,7 @@ from typing import Generic, Optional, Union
28
28
 
29
29
  from nodescraper.connection.inband import InBandConnection
30
30
  from nodescraper.connection.inband.inband import BaseFileArtifact, CommandArtifact
31
+ from nodescraper.constants import DEFAULT_EVENT_REPORTER
31
32
  from nodescraper.enums import EventPriority, OSFamily, SystemInteractionLevel
32
33
  from nodescraper.generictypes import TCollectArg, TDataModel
33
34
  from nodescraper.interfaces import DataCollector, TaskResultHook
@@ -52,6 +53,8 @@ class InBandDataCollector(
52
53
  max_event_priority_level: Union[EventPriority, str] = EventPriority.CRITICAL,
53
54
  parent: Optional[str] = None,
54
55
  task_result_hooks: Optional[list[TaskResultHook]] = None,
56
+ event_reporter: str = DEFAULT_EVENT_REPORTER,
57
+ session_id: Optional[str] = None,
55
58
  **kwargs,
56
59
  ):
57
60
  super().__init__(
@@ -62,6 +65,8 @@ class InBandDataCollector(
62
65
  connection=connection,
63
66
  parent=parent,
64
67
  task_result_hooks=task_result_hooks,
68
+ event_reporter=event_reporter,
69
+ session_id=session_id,
65
70
  )
66
71
  if self.system_info.os_family not in self.SUPPORTED_OS_FAMILY:
67
72
  raise SystemCompatibilityError(
@@ -27,6 +27,7 @@ import logging
27
27
  from typing import Generic, Optional, Union
28
28
 
29
29
  from nodescraper.connection.redfish import RedfishConnection, RedfishGetResult
30
+ from nodescraper.constants import DEFAULT_EVENT_REPORTER
30
31
  from nodescraper.enums import EventPriority
31
32
  from nodescraper.generictypes import TCollectArg, TDataModel
32
33
  from nodescraper.interfaces import DataCollector, TaskResultHook
@@ -47,6 +48,8 @@ class RedfishDataCollector(
47
48
  max_event_priority_level: Union[EventPriority, str] = EventPriority.CRITICAL,
48
49
  parent: Optional[str] = None,
49
50
  task_result_hooks: Optional[list[TaskResultHook]] = None,
51
+ event_reporter: str = DEFAULT_EVENT_REPORTER,
52
+ session_id: Optional[str] = None,
50
53
  **kwargs,
51
54
  ):
52
55
  super().__init__(
@@ -56,6 +59,8 @@ class RedfishDataCollector(
56
59
  max_event_priority_level=max_event_priority_level,
57
60
  parent=parent,
58
61
  task_result_hooks=task_result_hooks,
62
+ event_reporter=event_reporter,
63
+ session_id=session_id,
59
64
  **kwargs,
60
65
  )
61
66
 
@@ -77,3 +82,25 @@ class RedfishDataCollector(
77
82
  if log_artifact:
78
83
  self.result.artifacts.append(res)
79
84
  return res
85
+
86
+ def _run_redfish_get_paged(
87
+ self,
88
+ path: str,
89
+ max_pages: int = 200,
90
+ log_artifact: bool = True,
91
+ ) -> RedfishGetResult:
92
+ """
93
+ Run a Redfish GET and follow Members@odata.nextLink pagination, merging all pages into a single response.
94
+
95
+ Args:
96
+ path (str): Redfish URI path.
97
+ max_pages (int, optional): safety cap on the number of pages to follow. Defaults to 200.
98
+ log_artifact (bool, optional): whether we should log the merged result. Defaults to True.
99
+
100
+ Returns:
101
+ RedfishGetResult: path, success, merged data (or error), status_code.
102
+ """
103
+ res = self.connection.run_get_paged(path, max_pages=max_pages)
104
+ if log_artifact:
105
+ self.result.artifacts.append(res)
106
+ return res