amd-node-scraper 1.1.6__tar.gz → 1.1.7__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 (473) hide show
  1. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/PKG-INFO +3 -1
  2. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/amd_node_scraper.egg-info/PKG-INFO +3 -1
  3. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/amd_node_scraper.egg-info/SOURCES.txt +28 -0
  4. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/amd_node_scraper.egg-info/requires.txt +2 -0
  5. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/docs/PLUGIN_DOC.md +21 -10
  6. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/base/__init__.py +2 -0
  7. amd_node_scraper-1.1.7/nodescraper/base/oobsshdataplugin.py +54 -0
  8. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/configbuilder.py +7 -0
  9. amd_node_scraper-1.1.7/nodescraper/connection/oob_ssh/__init__.py +28 -0
  10. amd_node_scraper-1.1.7/nodescraper/connection/oob_ssh/oob_ssh_connection_manager.py +124 -0
  11. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/connection/redfish/__init__.py +2 -1
  12. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/connection/redfish/redfish_params.py +29 -0
  13. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/interfaces/connectionmanager.py +1 -1
  14. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/interfaces/dataplugin.py +209 -67
  15. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/pluginexecutor.py +86 -45
  16. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/pluginrecipe/discovery.py +11 -1
  17. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/pluginregistry.py +5 -3
  18. amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/__init__.py +49 -0
  19. amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/analyzer_args.py +126 -0
  20. amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/collector_args.py +136 -0
  21. amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/generic_analyzer.py +266 -0
  22. amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/generic_collection_collector.py +121 -0
  23. amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/generic_collection_data.py +48 -0
  24. amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/generic_collection_plugin_mixin.py +52 -0
  25. amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/inband_plugin.py +42 -0
  26. amd_node_scraper-1.1.7/nodescraper/plugins/generic_collection/oob_plugin.py +42 -0
  27. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/dmesg_analyzer.py +15 -2
  28. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/pcie/pcie_collector.py +27 -2
  29. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/pcie/pcie_data.py +1 -0
  30. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sys_settings/collector_args.py +4 -2
  31. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/syslog/syslog_collector.py +19 -6
  32. amd_node_scraper-1.1.7/nodescraper/plugins/ooband/bmc_archive/__init__.py +40 -0
  33. amd_node_scraper-1.1.7/nodescraper/plugins/ooband/bmc_archive/bmc_archive_collector.py +351 -0
  34. amd_node_scraper-1.1.7/nodescraper/plugins/ooband/bmc_archive/bmc_archive_data.py +65 -0
  35. amd_node_scraper-1.1.7/nodescraper/plugins/ooband/bmc_archive/bmc_archive_plugin.py +44 -0
  36. amd_node_scraper-1.1.7/nodescraper/plugins/ooband/bmc_archive/collector_args.py +115 -0
  37. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_endpoint/collector_args.py +4 -2
  38. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_oem_diag/collector_args.py +4 -2
  39. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/typeutils.py +8 -5
  40. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/pyproject.toml +3 -1
  41. amd_node_scraper-1.1.7/test/functional/fixtures/generic_collection_plugin_config.json +150 -0
  42. amd_node_scraper-1.1.7/test/functional/test_generic_collection_plugin.py +141 -0
  43. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/test_plugin_configs.py +2 -0
  44. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/common/shared_utils.py +2 -0
  45. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_cli_helper.py +2 -0
  46. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_config_builder.py +2 -0
  47. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_dataplugin.py +140 -1
  48. amd_node_scraper-1.1.7/test/unit/framework/test_pluginconfig.py +47 -0
  49. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_type_utils.py +12 -0
  50. amd_node_scraper-1.1.7/test/unit/plugin/fixtures/pcie_plugin_advanced_config.json +28 -0
  51. amd_node_scraper-1.1.7/test/unit/plugin/fixtures/pcie_plugin_config.json +19 -0
  52. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_dmesg_analyzer.py +53 -7
  53. amd_node_scraper-1.1.7/test/unit/plugin/test_generic_analyzer.py +239 -0
  54. amd_node_scraper-1.1.7/test/unit/plugin/test_generic_collection_collector.py +223 -0
  55. amd_node_scraper-1.1.7/test/unit/plugin/test_oob_bmc_archive_plugin.py +272 -0
  56. amd_node_scraper-1.1.7/test/unit/plugin/test_oob_generic_collection_plugin.py +73 -0
  57. amd_node_scraper-1.1.7/test/unit/plugin/test_pcie_collector.py +111 -0
  58. amd_node_scraper-1.1.7/test/unit/plugin/test_pcie_plugin.py +140 -0
  59. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_syslog_collector.py +45 -2
  60. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/.github/CODEOWNERS +0 -0
  61. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  62. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  63. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  64. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/.github/pull_request_template.md +0 -0
  65. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/.github/scripts/plugin_convention_warnings.py +0 -0
  66. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/.github/workflows/code_quality_checks.yml +0 -0
  67. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/.github/workflows/functional-test.yml +0 -0
  68. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/.github/workflows/release-trusted-publisher.yml +0 -0
  69. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/.github/workflows/unit-test.yml +0 -0
  70. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/.github/workflows/update-plugin-docs.yml +0 -0
  71. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/.gitignore +0 -0
  72. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/.mypy.ini +0 -0
  73. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/.pre-commit-config.yaml +0 -0
  74. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/CONTRIBUTING.md +0 -0
  75. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/EXTENDING.md +0 -0
  76. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/LICENSE +0 -0
  77. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/README.md +0 -0
  78. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/SECURITY.md +0 -0
  79. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/amd_node_scraper.egg-info/dependency_links.txt +0 -0
  80. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/amd_node_scraper.egg-info/entry_points.txt +0 -0
  81. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/amd_node_scraper.egg-info/top_level.txt +0 -0
  82. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/dev-setup.sh +0 -0
  83. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/docs/generate_plugin_doc_bundle.py +0 -0
  84. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/docs/node-scraper-external/README.md +0 -0
  85. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/docs/node-scraper-external/ext_nodescraper_plugins/sample/__init__.py +0 -0
  86. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_analyzer.py +0 -0
  87. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_collector.py +0 -0
  88. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_data.py +0 -0
  89. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_plugin.py +0 -0
  90. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/docs/node-scraper-external/pyproject.toml +0 -0
  91. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/__init__.py +0 -0
  92. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/base/inbandcollectortask.py +0 -0
  93. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/base/inbanddataplugin.py +0 -0
  94. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/base/oobanddataplugin.py +0 -0
  95. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/base/redfishcollectortask.py +0 -0
  96. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/base/regexanalyzer.py +0 -0
  97. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/cli/__init__.py +0 -0
  98. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/cli/cli.py +0 -0
  99. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/cli/compare_runs.py +0 -0
  100. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/cli/constants.py +0 -0
  101. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/cli/dynamicparserbuilder.py +0 -0
  102. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/cli/embed.py +0 -0
  103. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/cli/helper.py +0 -0
  104. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/cli/host_cli_embed.py +0 -0
  105. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/cli/inputargtypes.py +0 -0
  106. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/cli/invocation.py +0 -0
  107. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/configregistry.py +0 -0
  108. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/connection/__init__.py +0 -0
  109. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/connection/inband/__init__.py +0 -0
  110. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/connection/inband/inband.py +0 -0
  111. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/connection/inband/inbandlocal.py +0 -0
  112. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/connection/inband/inbandmanager.py +0 -0
  113. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/connection/inband/inbandremote.py +0 -0
  114. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/connection/inband/sshparams.py +0 -0
  115. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/connection/redfish/redfish_connection.py +0 -0
  116. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/connection/redfish/redfish_constants.py +0 -0
  117. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/connection/redfish/redfish_manager.py +0 -0
  118. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/connection/redfish/redfish_oem_diag.py +0 -0
  119. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/connection/redfish/redfish_path.py +0 -0
  120. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/constants.py +0 -0
  121. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/enums/__init__.py +0 -0
  122. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/enums/eventcategory.py +0 -0
  123. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/enums/eventpriority.py +0 -0
  124. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/enums/executionstatus.py +0 -0
  125. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/enums/osfamily.py +0 -0
  126. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/enums/systeminteraction.py +0 -0
  127. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/enums/systemlocation.py +0 -0
  128. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/enums/taskstate.py +0 -0
  129. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/generictypes.py +0 -0
  130. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/helpers/__init__.py +0 -0
  131. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/interfaces/__init__.py +0 -0
  132. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/interfaces/dataanalyzertask.py +0 -0
  133. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/interfaces/datacollectortask.py +0 -0
  134. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/interfaces/plugin.py +0 -0
  135. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/interfaces/resultcollator.py +0 -0
  136. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/interfaces/task.py +0 -0
  137. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/interfaces/taskresulthook.py +0 -0
  138. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/models/__init__.py +0 -0
  139. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/models/analyzerargs.py +0 -0
  140. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/models/collectorargs.py +0 -0
  141. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/models/connectionconfig.py +0 -0
  142. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/models/datamodel.py +0 -0
  143. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/models/datapluginresult.py +0 -0
  144. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/models/event.py +0 -0
  145. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/models/pluginconfig.py +0 -0
  146. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/models/pluginresult.py +0 -0
  147. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/models/priority_override.py +0 -0
  148. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/models/systeminfo.py +0 -0
  149. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/models/taskresult.py +0 -0
  150. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/models/timerangeargs.py +0 -0
  151. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/pluginrecipe/__init__.py +0 -0
  152. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/pluginrecipe/all_plugins.py +0 -0
  153. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/pluginrecipe/node_status.py +0 -0
  154. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/pluginrecipe/pluginrecipe.py +0 -0
  155. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/__init__.py +0 -0
  156. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/__init__.py +0 -0
  157. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/__init__.py +0 -0
  158. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/amdsmi_analyzer.py +0 -0
  159. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/amdsmi_collector.py +0 -0
  160. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/amdsmi_plugin.py +0 -0
  161. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/amdsmidata.py +0 -0
  162. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/analyzer_args.py +0 -0
  163. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/collector_args.py +0 -0
  164. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/amdsmi/cper.py +0 -0
  165. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/bios/__init__.py +0 -0
  166. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/bios/analyzer_args.py +0 -0
  167. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/bios/bios_analyzer.py +0 -0
  168. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/bios/bios_collector.py +0 -0
  169. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/bios/bios_plugin.py +0 -0
  170. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/bios/biosdata.py +0 -0
  171. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/cmdline/__init__.py +0 -0
  172. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/cmdline/analyzer_args.py +0 -0
  173. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/cmdline/cmdline_analyzer.py +0 -0
  174. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/cmdline/cmdline_collector.py +0 -0
  175. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/cmdline/cmdline_plugin.py +0 -0
  176. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/cmdline/cmdlineconfig.py +0 -0
  177. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/cmdline/cmdlinedata.py +0 -0
  178. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/device_enumeration/__init__.py +0 -0
  179. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/device_enumeration/analyzer_args.py +0 -0
  180. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/device_enumeration/device_enumeration_analyzer.py +0 -0
  181. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/device_enumeration/device_enumeration_collector.py +0 -0
  182. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/device_enumeration/device_enumeration_plugin.py +0 -0
  183. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/device_enumeration/deviceenumdata.py +0 -0
  184. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dimm/__init__.py +0 -0
  185. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dimm/collector_args.py +0 -0
  186. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dimm/dimm_collector.py +0 -0
  187. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dimm/dimm_plugin.py +0 -0
  188. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dimm/dimmdata.py +0 -0
  189. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dkms/__init__.py +0 -0
  190. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dkms/analyzer_args.py +0 -0
  191. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dkms/dkms_analyzer.py +0 -0
  192. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dkms/dkms_collector.py +0 -0
  193. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dkms/dkms_plugin.py +0 -0
  194. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dkms/dkmsdata.py +0 -0
  195. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/__init__.py +0 -0
  196. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/analyzer_args.py +0 -0
  197. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/collector_args.py +0 -0
  198. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/dmesg_collector.py +0 -0
  199. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/dmesg_plugin.py +0 -0
  200. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/dmesgdata.py +0 -0
  201. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/dmesg/run_compare.py +0 -0
  202. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/fabrics/__init__.py +0 -0
  203. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/fabrics/fabrics_collector.py +0 -0
  204. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/fabrics/fabrics_plugin.py +0 -0
  205. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/fabrics/fabricsdata.py +0 -0
  206. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/journal/__init__.py +0 -0
  207. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/journal/analyzer_args.py +0 -0
  208. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/journal/collector_args.py +0 -0
  209. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/journal/journal_analyzer.py +0 -0
  210. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/journal/journal_collector.py +0 -0
  211. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/journal/journal_plugin.py +0 -0
  212. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/journal/journaldata.py +0 -0
  213. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel/__init__.py +0 -0
  214. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel/analyzer_args.py +0 -0
  215. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel/kernel_analyzer.py +0 -0
  216. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel/kernel_collector.py +0 -0
  217. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel/kernel_plugin.py +0 -0
  218. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel/kerneldata.py +0 -0
  219. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel_module/__init__.py +0 -0
  220. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel_module/analyzer_args.py +0 -0
  221. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel_module/kernel_module_analyzer.py +0 -0
  222. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel_module/kernel_module_collector.py +0 -0
  223. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel_module/kernel_module_data.py +0 -0
  224. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/kernel_module/kernel_module_plugin.py +0 -0
  225. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/memory/__init__.py +0 -0
  226. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/memory/analyzer_args.py +0 -0
  227. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/memory/memory_analyzer.py +0 -0
  228. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/memory/memory_collector.py +0 -0
  229. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/memory/memory_plugin.py +0 -0
  230. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/memory/memorydata.py +0 -0
  231. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/__init__.py +0 -0
  232. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/analyzer_args.py +0 -0
  233. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/collector_args.py +0 -0
  234. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/ethtool_vendor.py +0 -0
  235. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/network_analyzer.py +0 -0
  236. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/network_collector.py +0 -0
  237. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/network_plugin.py +0 -0
  238. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/network/networkdata.py +0 -0
  239. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nic/__init__.py +0 -0
  240. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nic/analyzer_args.py +0 -0
  241. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nic/collector_args.py +0 -0
  242. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nic/nic_analyzer.py +0 -0
  243. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nic/nic_collector.py +0 -0
  244. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nic/nic_data.py +0 -0
  245. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nic/nic_plugin.py +0 -0
  246. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nvme/__init__.py +0 -0
  247. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nvme/nvme_collector.py +0 -0
  248. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nvme/nvme_plugin.py +0 -0
  249. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/nvme/nvmedata.py +0 -0
  250. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/os/__init__.py +0 -0
  251. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/os/analyzer_args.py +0 -0
  252. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/os/os_analyzer.py +0 -0
  253. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/os/os_collector.py +0 -0
  254. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/os/os_plugin.py +0 -0
  255. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/os/osdata.py +0 -0
  256. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/package/__init__.py +0 -0
  257. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/package/analyzer_args.py +0 -0
  258. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/package/package_analyzer.py +0 -0
  259. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/package/package_collector.py +0 -0
  260. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/package/package_plugin.py +0 -0
  261. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/package/packagedata.py +0 -0
  262. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/pcie/__init__.py +0 -0
  263. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/pcie/analyzer_args.py +0 -0
  264. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/pcie/pcie_analyzer.py +0 -0
  265. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/pcie/pcie_plugin.py +0 -0
  266. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/process/__init__.py +0 -0
  267. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/process/analyzer_args.py +0 -0
  268. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/process/collector_args.py +0 -0
  269. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/process/process_analyzer.py +0 -0
  270. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/process/process_collector.py +0 -0
  271. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/process/process_plugin.py +0 -0
  272. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/process/processdata.py +0 -0
  273. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rdma/__init__.py +0 -0
  274. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rdma/rdma_analyzer.py +0 -0
  275. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rdma/rdma_collector.py +0 -0
  276. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rdma/rdma_plugin.py +0 -0
  277. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rdma/rdmadata.py +0 -0
  278. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rocm/__init__.py +0 -0
  279. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rocm/analyzer_args.py +0 -0
  280. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rocm/collector_args.py +0 -0
  281. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rocm/rocm_analyzer.py +0 -0
  282. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rocm/rocm_collector.py +0 -0
  283. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rocm/rocm_plugin.py +0 -0
  284. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/rocm/rocmdata.py +0 -0
  285. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/storage/__init__.py +0 -0
  286. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/storage/analyzer_args.py +0 -0
  287. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/storage/collector_args.py +0 -0
  288. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/storage/storage_analyzer.py +0 -0
  289. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/storage/storage_collector.py +0 -0
  290. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/storage/storage_plugin.py +0 -0
  291. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/storage/storagedata.py +0 -0
  292. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sys_settings/__init__.py +0 -0
  293. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sys_settings/analyzer_args.py +0 -0
  294. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sys_settings/sys_settings_analyzer.py +0 -0
  295. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sys_settings/sys_settings_collector.py +0 -0
  296. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sys_settings/sys_settings_data.py +0 -0
  297. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sys_settings/sys_settings_plugin.py +0 -0
  298. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sysctl/__init__.py +0 -0
  299. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sysctl/analyzer_args.py +0 -0
  300. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sysctl/sysctl_analyzer.py +0 -0
  301. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sysctl/sysctl_collector.py +0 -0
  302. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sysctl/sysctl_plugin.py +0 -0
  303. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/sysctl/sysctldata.py +0 -0
  304. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/syslog/__init__.py +0 -0
  305. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/syslog/syslog_plugin.py +0 -0
  306. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/syslog/syslogdata.py +0 -0
  307. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/uptime/__init__.py +0 -0
  308. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/uptime/uptime_collector.py +0 -0
  309. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/uptime/uptime_plugin.py +0 -0
  310. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/inband/uptime/uptimedata.py +0 -0
  311. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/__init__.py +0 -0
  312. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_endpoint/__init__.py +0 -0
  313. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_endpoint/analyzer_args.py +0 -0
  314. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_analyzer.py +0 -0
  315. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_collector.py +0 -0
  316. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_data.py +0 -0
  317. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_plugin.py +0 -0
  318. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_oem_diag/__init__.py +0 -0
  319. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_oem_diag/analyzer_args.py +0 -0
  320. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_analyzer.py +0 -0
  321. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_collector.py +0 -0
  322. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_data.py +0 -0
  323. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_plugin.py +0 -0
  324. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/regex_search/__init__.py +0 -0
  325. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/regex_search/analyzer_args.py +0 -0
  326. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/regex_search/regex_search_analyzer.py +0 -0
  327. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/regex_search/regex_search_data.py +0 -0
  328. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/plugins/regex_search/regex_search_plugin.py +0 -0
  329. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/resultcollators/__init__.py +0 -0
  330. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/resultcollators/tablesummary.py +0 -0
  331. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/serialization.py +0 -0
  332. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/taskresulthooks/__init__.py +0 -0
  333. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/taskresulthooks/filesystemloghook.py +0 -0
  334. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/nodescraper/utils.py +0 -0
  335. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/pytest.ini +0 -0
  336. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/setup.cfg +0 -0
  337. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/setup.py +0 -0
  338. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/__init__.py +0 -0
  339. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/conftest.py +0 -0
  340. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/amdsmi_plugin_config.json +0 -0
  341. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/bios_plugin_config.json +0 -0
  342. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/cmdline_plugin_config.json +0 -0
  343. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/dimm_plugin_config.json +0 -0
  344. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/dkms_plugin_config.json +0 -0
  345. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/dmesg_plugin_config.json +0 -0
  346. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/dmesg_plugin_config_custom_regex.json +0 -0
  347. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/dmesg_sample.log +0 -0
  348. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/dmesg_sample_with_collapsing.log +0 -0
  349. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/fabrics_plugin_config.json +0 -0
  350. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/journal_plugin_config.json +0 -0
  351. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/kernel_module_plugin_config.json +0 -0
  352. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/kernel_plugin_config.json +0 -0
  353. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/memory_plugin_config.json +0 -0
  354. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/network_plugin_config.json +0 -0
  355. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/nic_plugin_config_full_analyzer_args.json +0 -0
  356. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/niccli_plugin_config.json +0 -0
  357. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/nvme_plugin_config.json +0 -0
  358. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/os_plugin_config.json +0 -0
  359. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/package_plugin_config.json +0 -0
  360. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/pcie_plugin_advanced_config.json +0 -0
  361. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/pcie_plugin_config.json +0 -0
  362. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/plugin_config.json +0 -0
  363. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/process_plugin_config.json +0 -0
  364. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/rdma_plugin_config.json +0 -0
  365. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/redfish_connection_config.json +0 -0
  366. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/redfish_endpoint_plugin_config.json +0 -0
  367. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/redfish_endpoint_plugin_config_full_args.json +0 -0
  368. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/regex_search_multi_logs/app_error.log +0 -0
  369. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/regex_search_multi_logs/no_errors.log +0 -0
  370. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/regex_search_multi_logs/storage_warn.log +0 -0
  371. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/regex_search_sample.log +0 -0
  372. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/rocm_plugin_config.json +0 -0
  373. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/storage_plugin_config.json +0 -0
  374. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/sys_settings_plugin_config.json +0 -0
  375. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/sysctl_plugin_config.json +0 -0
  376. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/syslog_plugin_config.json +0 -0
  377. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/fixtures/uptime_plugin_config.json +0 -0
  378. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/test_cli_describe.py +0 -0
  379. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/test_cli_help.py +0 -0
  380. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/test_cli_no_console_log.py +0 -0
  381. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/test_fabrics_plugin.py +0 -0
  382. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/test_network_plugin.py +0 -0
  383. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/test_nic_plugin.py +0 -0
  384. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/test_pcie_plugin.py +0 -0
  385. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/test_plugin_registry.py +0 -0
  386. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/test_rdma_plugin.py +0 -0
  387. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/test_redfish_endpoint_plugin.py +0 -0
  388. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/test_reference_config_workflow.py +0 -0
  389. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/test_run_plugins.py +0 -0
  390. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/functional/test_sys_settings_plugin.py +0 -0
  391. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/cli/test_build_global_argument_parser.py +0 -0
  392. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/cli/test_cli_embed_api.py +0 -0
  393. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/cli/test_cli_no_console_stdout.py +0 -0
  394. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/cli/test_host_cli_embed.py +0 -0
  395. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/cli/test_plugin_configs_cli.py +0 -0
  396. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/conftest.py +0 -0
  397. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/connection/redfish/test_redfish_connection_paging.py +0 -0
  398. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/connection/redfish/test_redfish_oem_diag.py +0 -0
  399. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/compare_runs_sysctl/run1/sysctl_plugin/sysctl_collector/result.json +0 -0
  400. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/compare_runs_sysctl/run1/sysctl_plugin/sysctl_collector/sysctldatamodel.json +0 -0
  401. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/compare_runs_sysctl/run2/sysctl_plugin/sysctl_collector/result.json +0 -0
  402. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/compare_runs_sysctl/run2/sysctl_plugin/sysctl_collector/sysctldatamodel.json +0 -0
  403. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/example.json +0 -0
  404. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/example_config.json +0 -0
  405. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/invalid.json +0 -0
  406. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/log_dir/collector/biosdatamodel.json +0 -0
  407. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/fixtures/log_dir/collector/result.json +0 -0
  408. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_analyzerargs.py +0 -0
  409. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_cli.py +0 -0
  410. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_compare_runs.py +0 -0
  411. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_config_registry.py +0 -0
  412. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_config_registry_entry_points.py +0 -0
  413. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_connection_manager_entrypoints.py +0 -0
  414. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_dataanalyzer.py +0 -0
  415. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_datacollector.py +0 -0
  416. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_file_artifact.py +0 -0
  417. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_plugin_executor.py +0 -0
  418. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_pluginrecipe.py +0 -0
  419. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/framework/test_regexanalyzer.py +0 -0
  420. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/fixtures/package_commands.json +0 -0
  421. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/fixtures/rdma_link_example_data.json +0 -0
  422. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/fixtures/rdma_statistic_example_data.json +0 -0
  423. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_amdsmi_analyzer.py +0 -0
  424. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_amdsmi_collector.py +0 -0
  425. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_amdsmi_data.py +0 -0
  426. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_analyzer_args_build_from_model.py +0 -0
  427. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_bios_analyzer.py +0 -0
  428. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_bios_collector.py +0 -0
  429. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_cmdline_analyzer.py +0 -0
  430. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_cmdline_collector.py +0 -0
  431. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_device_enumeration_analyzer.py +0 -0
  432. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_device_enumeration_collector.py +0 -0
  433. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_dimms_collector.py +0 -0
  434. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_dkms_analyzer.py +0 -0
  435. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_dkms_collector.py +0 -0
  436. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_dmesg_collector.py +0 -0
  437. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_fabrics_collector.py +0 -0
  438. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_journal_collector.py +0 -0
  439. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_kernel_analyzer.py +0 -0
  440. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_kernel_collector.py +0 -0
  441. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_kernel_module_analyzer.py +0 -0
  442. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_kernel_module_collector.py +0 -0
  443. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_memory_analyzer.py +0 -0
  444. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_memory_collector.py +0 -0
  445. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_network_analyzer.py +0 -0
  446. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_network_collector.py +0 -0
  447. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_niccli_collector.py +0 -0
  448. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_nvme_collector.py +0 -0
  449. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_os_analyzer.py +0 -0
  450. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_os_collector.py +0 -0
  451. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_package_analyzer.py +0 -0
  452. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_package_collector.py +0 -0
  453. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_process_analyzer.py +0 -0
  454. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_process_collector.py +0 -0
  455. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_rdma_analyzer.py +0 -0
  456. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_rdma_collector.py +0 -0
  457. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_redfish_endpoint_analyzer.py +0 -0
  458. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_redfish_endpoint_collector.py +0 -0
  459. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_redfish_endpoint_plugin.py +0 -0
  460. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_redfish_oem_diag_analyzer.py +0 -0
  461. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_redfish_oem_diag_collector.py +0 -0
  462. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_regex_search_analyzer.py +0 -0
  463. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_rocm_analyzer.py +0 -0
  464. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_rocm_collector.py +0 -0
  465. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_storage_analyzer.py +0 -0
  466. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_storage_collector.py +0 -0
  467. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_sys_settings_analyzer.py +0 -0
  468. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_sys_settings_collector.py +0 -0
  469. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_sysctl_analyzer.py +0 -0
  470. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_sysctl_collector.py +0 -0
  471. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/plugin/test_uptime_collector.py +0 -0
  472. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/test_serialization.py +0 -0
  473. {amd_node_scraper-1.1.6 → amd_node_scraper-1.1.7}/test/unit/test_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: amd-node-scraper
3
- Version: 1.1.6
3
+ Version: 1.1.7
4
4
  Summary: A framework for automated error detection and data collection
5
5
  Author: AMD
6
6
  Project-URL: homepage, https://github.com/amd/node-scraper
@@ -26,6 +26,8 @@ Requires-Dist: pre-commit; extra == "dev"
26
26
  Requires-Dist: pytest; extra == "dev"
27
27
  Requires-Dist: pytest-cov; extra == "dev"
28
28
  Requires-Dist: mypy; extra == "dev"
29
+ Requires-Dist: types-paramiko; extra == "dev"
30
+ Requires-Dist: types-setuptools; extra == "dev"
29
31
  Dynamic: license-file
30
32
 
31
33
  # Node Scraper
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: amd-node-scraper
3
- Version: 1.1.6
3
+ Version: 1.1.7
4
4
  Summary: A framework for automated error detection and data collection
5
5
  Author: AMD
6
6
  Project-URL: homepage, https://github.com/amd/node-scraper
@@ -26,6 +26,8 @@ Requires-Dist: pre-commit; extra == "dev"
26
26
  Requires-Dist: pytest; extra == "dev"
27
27
  Requires-Dist: pytest-cov; extra == "dev"
28
28
  Requires-Dist: mypy; extra == "dev"
29
+ Requires-Dist: types-paramiko; extra == "dev"
30
+ Requires-Dist: types-setuptools; extra == "dev"
29
31
  Dynamic: license-file
30
32
 
31
33
  # Node Scraper
@@ -50,6 +50,7 @@ nodescraper/base/__init__.py
50
50
  nodescraper/base/inbandcollectortask.py
51
51
  nodescraper/base/inbanddataplugin.py
52
52
  nodescraper/base/oobanddataplugin.py
53
+ nodescraper/base/oobsshdataplugin.py
53
54
  nodescraper/base/redfishcollectortask.py
54
55
  nodescraper/base/regexanalyzer.py
55
56
  nodescraper/cli/__init__.py
@@ -69,6 +70,8 @@ nodescraper/connection/inband/inbandlocal.py
69
70
  nodescraper/connection/inband/inbandmanager.py
70
71
  nodescraper/connection/inband/inbandremote.py
71
72
  nodescraper/connection/inband/sshparams.py
73
+ nodescraper/connection/oob_ssh/__init__.py
74
+ nodescraper/connection/oob_ssh/oob_ssh_connection_manager.py
72
75
  nodescraper/connection/redfish/__init__.py
73
76
  nodescraper/connection/redfish/redfish_connection.py
74
77
  nodescraper/connection/redfish/redfish_constants.py
@@ -113,6 +116,15 @@ nodescraper/pluginrecipe/discovery.py
113
116
  nodescraper/pluginrecipe/node_status.py
114
117
  nodescraper/pluginrecipe/pluginrecipe.py
115
118
  nodescraper/plugins/__init__.py
119
+ nodescraper/plugins/generic_collection/__init__.py
120
+ nodescraper/plugins/generic_collection/analyzer_args.py
121
+ nodescraper/plugins/generic_collection/collector_args.py
122
+ nodescraper/plugins/generic_collection/generic_analyzer.py
123
+ nodescraper/plugins/generic_collection/generic_collection_collector.py
124
+ nodescraper/plugins/generic_collection/generic_collection_data.py
125
+ nodescraper/plugins/generic_collection/generic_collection_plugin_mixin.py
126
+ nodescraper/plugins/generic_collection/inband_plugin.py
127
+ nodescraper/plugins/generic_collection/oob_plugin.py
116
128
  nodescraper/plugins/inband/__init__.py
117
129
  nodescraper/plugins/inband/amdsmi/__init__.py
118
130
  nodescraper/plugins/inband/amdsmi/amdsmi_analyzer.py
@@ -274,6 +286,11 @@ nodescraper/plugins/inband/uptime/uptime_collector.py
274
286
  nodescraper/plugins/inband/uptime/uptime_plugin.py
275
287
  nodescraper/plugins/inband/uptime/uptimedata.py
276
288
  nodescraper/plugins/ooband/__init__.py
289
+ nodescraper/plugins/ooband/bmc_archive/__init__.py
290
+ nodescraper/plugins/ooband/bmc_archive/bmc_archive_collector.py
291
+ nodescraper/plugins/ooband/bmc_archive/bmc_archive_data.py
292
+ nodescraper/plugins/ooband/bmc_archive/bmc_archive_plugin.py
293
+ nodescraper/plugins/ooband/bmc_archive/collector_args.py
277
294
  nodescraper/plugins/ooband/redfish_endpoint/__init__.py
278
295
  nodescraper/plugins/ooband/redfish_endpoint/analyzer_args.py
279
296
  nodescraper/plugins/ooband/redfish_endpoint/collector_args.py
@@ -303,6 +320,7 @@ test/functional/test_cli_describe.py
303
320
  test/functional/test_cli_help.py
304
321
  test/functional/test_cli_no_console_log.py
305
322
  test/functional/test_fabrics_plugin.py
323
+ test/functional/test_generic_collection_plugin.py
306
324
  test/functional/test_network_plugin.py
307
325
  test/functional/test_nic_plugin.py
308
326
  test/functional/test_pcie_plugin.py
@@ -323,6 +341,7 @@ test/functional/fixtures/dmesg_plugin_config_custom_regex.json
323
341
  test/functional/fixtures/dmesg_sample.log
324
342
  test/functional/fixtures/dmesg_sample_with_collapsing.log
325
343
  test/functional/fixtures/fabrics_plugin_config.json
344
+ test/functional/fixtures/generic_collection_plugin_config.json
326
345
  test/functional/fixtures/journal_plugin_config.json
327
346
  test/functional/fixtures/kernel_module_plugin_config.json
328
347
  test/functional/fixtures/kernel_plugin_config.json
@@ -374,6 +393,7 @@ test/unit/framework/test_datacollector.py
374
393
  test/unit/framework/test_dataplugin.py
375
394
  test/unit/framework/test_file_artifact.py
376
395
  test/unit/framework/test_plugin_executor.py
396
+ test/unit/framework/test_pluginconfig.py
377
397
  test/unit/framework/test_pluginrecipe.py
378
398
  test/unit/framework/test_regexanalyzer.py
379
399
  test/unit/framework/test_type_utils.py
@@ -403,6 +423,8 @@ test/unit/plugin/test_dkms_collector.py
403
423
  test/unit/plugin/test_dmesg_analyzer.py
404
424
  test/unit/plugin/test_dmesg_collector.py
405
425
  test/unit/plugin/test_fabrics_collector.py
426
+ test/unit/plugin/test_generic_analyzer.py
427
+ test/unit/plugin/test_generic_collection_collector.py
406
428
  test/unit/plugin/test_journal_collector.py
407
429
  test/unit/plugin/test_kernel_analyzer.py
408
430
  test/unit/plugin/test_kernel_collector.py
@@ -414,10 +436,14 @@ test/unit/plugin/test_network_analyzer.py
414
436
  test/unit/plugin/test_network_collector.py
415
437
  test/unit/plugin/test_niccli_collector.py
416
438
  test/unit/plugin/test_nvme_collector.py
439
+ test/unit/plugin/test_oob_bmc_archive_plugin.py
440
+ test/unit/plugin/test_oob_generic_collection_plugin.py
417
441
  test/unit/plugin/test_os_analyzer.py
418
442
  test/unit/plugin/test_os_collector.py
419
443
  test/unit/plugin/test_package_analyzer.py
420
444
  test/unit/plugin/test_package_collector.py
445
+ test/unit/plugin/test_pcie_collector.py
446
+ test/unit/plugin/test_pcie_plugin.py
421
447
  test/unit/plugin/test_process_analyzer.py
422
448
  test/unit/plugin/test_process_collector.py
423
449
  test/unit/plugin/test_rdma_analyzer.py
@@ -439,5 +465,7 @@ test/unit/plugin/test_sysctl_collector.py
439
465
  test/unit/plugin/test_syslog_collector.py
440
466
  test/unit/plugin/test_uptime_collector.py
441
467
  test/unit/plugin/fixtures/package_commands.json
468
+ test/unit/plugin/fixtures/pcie_plugin_advanced_config.json
469
+ test/unit/plugin/fixtures/pcie_plugin_config.json
442
470
  test/unit/plugin/fixtures/rdma_link_example_data.json
443
471
  test/unit/plugin/fixtures/rdma_statistic_example_data.json
@@ -15,3 +15,5 @@ pre-commit
15
15
  pytest
16
16
  pytest-cov
17
17
  mypy
18
+ types-paramiko
19
+ types-setuptools
@@ -10,7 +10,7 @@
10
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
- | 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) |
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 Corrected Error: `\[Hardware Error\]:.+MC\d+_STATUS\[[^\]]*\&#124;CE\&#124;...`<br>- MCE Uncorrected Error: `\[Hardware Error\]:.+MC\d+_STATUS\[[^\]]*\&#124;UC\&#124;...`<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) |
14
14
  | FabricsPlugin | lspci &#124; grep -i cassini<br>lsmod &#124; grep cxi<br>cxi_stat<br>ibstat<br>ibv_devinfo<br>ls -l /sys/class/infiniband/*/device/net<br>fi_info -p cxi<br>mst start<br>mst status -v<br>ip link show<br>ofed_info -s | - | - | [FabricsDataModel](#FabricsDataModel-Model) | [FabricsCollector](#Collector-Class-FabricsCollector) | - |
15
15
  | JournalPlugin | journalctl --no-pager --system --output=short-iso<br>journalctl --no-pager --system --output=json | **Analyzer Args:**<br>- `analysis_range_start`: Optional[datetime.datetime] — Start of time range for analysis (ISO format). Only events on or after this time are analyzed.<br>- `analysis_range_end`: Optional[datetime.datetime] — End of time range for analysis (ISO format). Only events before this time are analyzed.<br>- `check_priority`: Optional[int] — Check against journal log priority (0=emergency..7=debug). If an entry has priority <= check_priority, an ERROR event...<br>- `group`: bool — If True, group entries that have the same priority and message. | **Collection Args:**<br>- `boot`: Optional[int] — Optional boot ID to limit journal collection to a specific boot. | [JournalData](#JournalData-Model) | [JournalCollector](#Collector-Class-JournalCollector) | [JournalAnalyzer](#Data-Analyzer-Class-JournalAnalyzer) |
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) |
@@ -21,14 +21,14 @@
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
- | 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) |
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 -PP -D -d {vendor_id}:{dev_id}<br>lspci -PP -D<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
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) |
31
- | SyslogPlugin | ls -1 /var/log/syslog* 2>/dev/null &#124; grep -E '^/var/log/syslog(\.[0-9]+(\.gz)?)?$' &#124;&#124; true | - | - | [SyslogData](#SyslogData-Model) | [SyslogCollector](#Collector-Class-SyslogCollector) | - |
31
+ | SyslogPlugin | ls -1 /var/log/syslog* 2>/dev/null &#124; grep -E '^/var/log/syslog(\.[0-9]+(\.gz)?)?$' &#124;&#124; true<br>ls -1 /var/log/messages* 2>/dev/null &#124; grep -E '^/var/log/messages(\.[0-9]+(\.gz)?)?$' &#124;&#124; true | - | - | [SyslogData](#SyslogData-Model) | [SyslogCollector](#Collector-Class-SyslogCollector) | - |
32
32
  | UptimePlugin | uptime | - | - | [UptimeDataModel](#UptimeDataModel-Model) | [UptimeCollector](#Collector-Class-UptimeCollector) | - |
33
33
 
34
34
  # Collectors
@@ -686,11 +686,13 @@ class for collection of PCIe data only supports Linux OS type.
686
686
  - `lspci -vvv` : Verbose collection of PCIe data
687
687
  - `lspci -vvvt`: Verbose tree view of PCIe data
688
688
  - `lspci -PP`: Path view of PCIe data for the GPUs
689
+ - `lspci -PP -D`: Path view of PCIe data for the GPUs (with domain prefix)
689
690
  - If system interaction level is set to STANDARD or higher, the following commands will be run with sudo:
690
691
  - `lspci -xxxx`: Hex view of PCIe data for the GPUs
691
692
  - otherwise the following commands will be run without sudo:
692
693
  - `lspci -x`: Hex view of PCIe data for the GPUs
693
- - `lspci -d <vendor_id>:<dev_id>` : Count the number of GPUs in the system with this command
694
+ - `lspci -d <vendor_id>:` : Detect AMD GPU device IDs in the system
695
+ - `lspci -PP -D -d <vendor_id>:<dev_id>` : Upstream BDF path for GPUs (with domain prefix)
694
696
  - If system interaction level is set to STANDARD or higher, the following commands will be run with sudo:
695
697
  - The sudo lspci -xxxx command is used to collect the PCIe configuration space for the GPUs in the system
696
698
  - otherwise the following commands will be run without sudo:
@@ -706,10 +708,12 @@ class for collection of PCIe data only supports Linux OS type.
706
708
  - **CMD_LSPCI_VERBOSE**: `lspci -vvv`
707
709
  - **CMD_LSPCI_VERBOSE_TREE**: `lspci -vvvt`
708
710
  - **CMD_LSPCI_PATH**: `lspci -PP`
711
+ - **CMD_LSPCI_PATH_DOMAIN**: `lspci -PP -D`
709
712
  - **CMD_LSPCI_HEX_SUDO**: `lspci -xxxx`
710
713
  - **CMD_LSPCI_HEX**: `lspci -x`
711
714
  - **CMD_LSPCI_AMD_DEVICES**: `lspci -d {vendor_id}: -nn`
712
715
  - **CMD_LSPCI_PATH_DEVICE**: `lspci -PP -d {vendor_id}:{dev_id}`
716
+ - **CMD_LSPCI_PATH_DEVICE_DOMAIN**: `lspci -PP -D -d {vendor_id}:{dev_id}`
713
717
 
714
718
  ### Provides Data
715
719
 
@@ -722,6 +726,8 @@ PcieDataModel
722
726
  - lspci -xxxx
723
727
  - lspci -PP
724
728
  - lspci -PP -d {vendor_id}:{dev_id}
729
+ - lspci -PP -D -d {vendor_id}:{dev_id}
730
+ - lspci -PP -D
725
731
  - lspci -vvv
726
732
  - lspci -vvvt
727
733
 
@@ -907,6 +913,7 @@ Read syslog log
907
913
 
908
914
  - **SUPPORTED_OS_FAMILY**: `{<OSFamily.LINUX: 3>}`
909
915
  - **CMD**: `ls -1 /var/log/syslog* 2>/dev/null | grep -E '^/var/log/syslog(\.[0-9]+(\.gz)?)?$' || true`
916
+ - **CMD_MESSAGES**: `ls -1 /var/log/messages* 2>/dev/null | grep -E '^/var/log/messages(\.[0-9]+(\.gz)?)?$' || true`
910
917
 
911
918
  ### Provides Data
912
919
 
@@ -915,6 +922,7 @@ SyslogData
915
922
  ### Commands
916
923
 
917
924
  - ls -1 /var/log/syslog* 2>/dev/null | grep -E '^/var/log/syslog(\.[0-9]+(\.gz)?)?$' || true
925
+ - ls -1 /var/log/messages* 2>/dev/null | grep -E '^/var/log/messages(\.[0-9]+(\.gz)?)?$' || true
918
926
 
919
927
  ## Collector Class UptimeCollector
920
928
 
@@ -1237,6 +1245,7 @@ class for collection of PCIe data.
1237
1245
  - lspci_verbose: Verbose collection of PCIe data
1238
1246
  - lspci_verbose_tree: Tree view of PCIe data
1239
1247
  - lspci_path: Path view of PCIe data for the GPUs
1248
+ - lspci_path_domain: Path view of PCIe data for the GPUs (with domain prefix)
1240
1249
  - lspci_hex: Hex view of PCIe data for the GPUs
1241
1250
 
1242
1251
  **Link to code**: [pcie_data.py](https://github.com/amd/node-scraper/blob/HEAD/nodescraper/plugins/inband/pcie/pcie_data.py)
@@ -1467,17 +1476,18 @@ Check dmesg for errors
1467
1476
  regex=re.compile('pcieport (\\w+:\\w+:\\w+\\.\\w+):\\s+(\\w+):\\s+(Slot\\(\\d+\\)):\\s+(Card not present)') message='PCIe card no longer present' event_category=<EventCategory.IO: 'IO'> event_priority=<EventPriority.ERROR: 3>,
1468
1477
  regex=re.compile('pcieport (\\w+:\\w+:\\w+\\.\\w+):\\s+(\\w+):\\s+(Slot\\(\\d+\\)):\\s+(Link Down)') message='PCIe Link Down' event_category=<EventCategory.IO: 'IO'> event_priority=<EventPriority.ERROR: 3>,
1469
1478
  regex=re.compile('pcieport (\\w+:\\w+:\\w+\\.\\w+):\\s+(\\w+):\\s+(current common clock configuration is inconsistent, reconfiguring)') message='Mismatched clock configuration between PCIe device and host' event_category=<EventCategory.IO: 'IO'> event_priority=<EventPriority.ERROR: 3>,
1470
- regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.* correctable hardware errors detected in total in \\w+ block.*)') message='RAS Correctable Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
1479
+ regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.* correctable hardware errors detected in total in \\w+ block.*)') message='RAS Correctable Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.WARNING: 2>,
1471
1480
  regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.* uncorrectable hardware errors detected in \\w+ block.*)') message='RAS Uncorrectable Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
1472
1481
  regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.* deferred hardware errors detected in \\w+ block.*)') message='RAS Deferred Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
1473
- regex=re.compile('((?:\\[Hardware Error\\]:\\s+)?event severity: corrected.*)\\n.*(\\[Hardware Error\\]:\\s+Error \\d+, type: corrected.*)\\n.*(\\[Hardware Error\\]:\\s+section_type: PCIe error.*)') message='RAS Corrected PCIe Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
1482
+ regex=re.compile('((?:\\[Hardware Error\\]:\\s+)?event severity: corrected.*)\\n.*(\\[Hardware Error\\]:\\s+Error \\d+, type: corrected.*)\\n.*(\\[Hardware Error\\]:\\s+section_type: PCIe error.*)') message='RAS Corrected PCIe Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.WARNING: 2>,
1474
1483
  regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.*GPU reset begin.*)') message='GPU Reset' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
1475
1484
  regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.*GPU reset(?:\\(\\d+\\))? failed.*)') message='GPU reset failed' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
1476
1485
  regex=re.compile('(Accelerator Check Architecture[^\\n]*)(?:\\n[^\\n]*){0,10}?(amdgpu[ 0-9a-fA-F:.]+:? [^\\n]*entry\\[\\d+\\]\\.STATUS=0x[0-9a-fA-F]+)(?:\\n[^\\n]*){0,5}?(amdgpu[ 0-9a-fA-F:.]+:? [^\\n]*entry\\[\\d+\\], re.MULTILINE) message='ACA Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
1477
1486
  regex=re.compile('(Accelerator Check Architecture[^\\n]*)(?:\\n[^\\n]*){0,10}?(amdgpu[ 0-9a-fA-F:.]+:? [^\\n]*CONTROL=0x[0-9a-fA-F]+)(?:\\n[^\\n]*){0,5}?(amdgpu[ 0-9a-fA-F:.]+:? [^\\n]*STATUS=0x[0-9a-fA-F]+)(?:\\n[^\\, re.MULTILINE) message='ACA Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
1478
- regex=re.compile('\\[Hardware Error\\]:.+MC\\d+_STATUS.*(?:\\n.*){0,5}') message='MCE Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
1487
+ regex=re.compile('\\[Hardware Error\\]:.+MC\\d+_STATUS\\[[^\\]]*\\|CE\\|[^\\]]*\\].*(?:\\n.*){0,5}') message='MCE Corrected Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.WARNING: 2>,
1488
+ regex=re.compile('\\[Hardware Error\\]:.+MC\\d+_STATUS\\[[^\\]]*\\|UC\\|[^\\]]*\\].*(?:\\n.*){0,5}') message='MCE Uncorrected Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
1479
1489
  regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)? (.*Mode2 reset failed.*)') message='Mode 2 Reset Failed' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
1480
- regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.*\\[Hardware Error\\]: Corrected error.*)') message='RAS Corrected Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.ERROR: 3>,
1490
+ regex=re.compile('(?:\\d{4}-\\d+-\\d+T\\d+:\\d+:\\d+,\\d+[+-]\\d+:\\d+)?(.*\\[Hardware Error\\]: Corrected error.*)') message='RAS Corrected Error' event_category=<EventCategory.RAS: 'RAS'> event_priority=<EventPriority.WARNING: 2>,
1481
1491
  regex=re.compile('x86/cpu: SGX disabled by BIOS') message='SGX Error' event_category=<EventCategory.BIOS: 'BIOS'> event_priority=<EventPriority.WARNING: 2>,
1482
1492
  regex=re.compile('Failed to load MMP firmware qat_4xxx_mmp.bin') message='MMP Error' event_category=<EventCategory.BIOS: 'BIOS'> event_priority=<EventPriority.WARNING: 2>,
1483
1493
  regex=re.compile('amdgpu \\w{4}:\\w{2}:\\w{2}.\\w: amdgpu: WARN: GPU is throttled.*') message='GPU Throttled' event_category=<EventCategory.SW_DRIVER: 'SW_DRIVER'> event_priority=<EventPriority.WARNING: 2>,
@@ -1495,7 +1505,7 @@ Check dmesg for errors
1495
1505
 
1496
1506
  ### Regex Patterns
1497
1507
 
1498
- *57 items defined*
1508
+ *58 items defined*
1499
1509
 
1500
1510
  - **Built-in Regexes:**
1501
1511
  - - Out of memory error: `(?:oom_kill_process.*)|(?:Out of memory.*)`
@@ -1538,7 +1548,8 @@ Check dmesg for errors
1538
1548
  - - GPU reset failed: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`
1539
1549
  - - ACA Error: `(Accelerator Check Architecture[^\n]*)(?:\n[^\n...`
1540
1550
  - - ACA Error: `(Accelerator Check Architecture[^\n]*)(?:\n[^\n...`
1541
- - - MCE Error: `\[Hardware Error\]:.+MC\d+_STATUS.*(?:\n.*){0,5}`
1551
+ - - MCE Corrected Error: `\[Hardware Error\]:.+MC\d+_STATUS\[[^\]]*\|CE\|...`
1552
+ - - MCE Uncorrected Error: `\[Hardware Error\]:.+MC\d+_STATUS\[[^\]]*\|UC\|...`
1542
1553
  - - Mode 2 Reset Failed: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)? (...`
1543
1554
  - - RAS Corrected Error: `(?:\d{4}-\d+-\d+T\d+:\d+:\d+,\d+[+-]\d+:\d+)?(....`
1544
1555
  - - SGX Error: `x86/cpu: SGX disabled by BIOS`
@@ -26,6 +26,7 @@
26
26
  from .inbandcollectortask import InBandDataCollector
27
27
  from .inbanddataplugin import InBandDataPlugin
28
28
  from .oobanddataplugin import OOBandDataPlugin
29
+ from .oobsshdataplugin import OOBSSHDataPlugin
29
30
  from .redfishcollectortask import RedfishDataCollector
30
31
  from .regexanalyzer import RegexAnalyzer
31
32
 
@@ -33,6 +34,7 @@ __all__ = [
33
34
  "InBandDataCollector",
34
35
  "InBandDataPlugin",
35
36
  "OOBandDataPlugin",
37
+ "OOBSSHDataPlugin",
36
38
  "RedfishDataCollector",
37
39
  "RegexAnalyzer",
38
40
  ]
@@ -0,0 +1,54 @@
1
+ ###############################################################################
2
+ #
3
+ # MIT License
4
+ #
5
+ # Copyright (c) 2026 Advanced Micro Devices, Inc.
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ # of this software and associated documentation files (the "Software"), to deal
9
+ # in the Software without restriction, including without limitation the rights
10
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ # copies of the Software, and to permit persons to whom the Software is
12
+ # furnished to do so, subject to the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be included in all
15
+ # copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ # SOFTWARE.
24
+ #
25
+ ###############################################################################
26
+ from __future__ import annotations
27
+
28
+ from typing import Generic
29
+
30
+ from nodescraper.connection.redfish import (
31
+ RedfishConnectionManager,
32
+ RedfishConnectionParams,
33
+ )
34
+ from nodescraper.generictypes import TAnalyzeArg, TCollectArg, TDataModel
35
+ from nodescraper.interfaces import DataPlugin
36
+
37
+
38
+ class OOBSSHDataPlugin(
39
+ DataPlugin[
40
+ RedfishConnectionManager,
41
+ RedfishConnectionParams,
42
+ TDataModel,
43
+ TCollectArg,
44
+ TAnalyzeArg,
45
+ ],
46
+ Generic[TDataModel, TCollectArg, TAnalyzeArg],
47
+ ):
48
+ """Base class for out-of-band (OOB) plugins that run shell commands on the BMC.
49
+
50
+ Configure the BMC using ``RedfishConnectionManager`` in the connection config.
51
+ Commands are executed over SSH (port 22) using the same host/username/password.
52
+ """
53
+
54
+ CONNECTION_TYPE = RedfishConnectionManager
@@ -109,6 +109,13 @@ class ConfigBuilder:
109
109
  return_dict = {}
110
110
  for key, val in value.items():
111
111
  return_dict[key] = cls._process_value(val)
112
+ return return_dict
113
+
114
+ if isinstance(value, list):
115
+ return_list = []
116
+ for item in value:
117
+ return_list.append(cls._process_value(item))
118
+ return return_list
112
119
 
113
120
  elif not isinstance(
114
121
  value,
@@ -0,0 +1,28 @@
1
+ ###############################################################################
2
+ #
3
+ # MIT License
4
+ #
5
+ # Copyright (c) 2026 Advanced Micro Devices, Inc.
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ # of this software and associated documentation files (the "Software"), to deal
9
+ # in the Software without restriction, including without limitation the rights
10
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ # copies of the Software, and to permit persons to whom the Software is
12
+ # furnished to do so, subject to the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be included in all
15
+ # copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ # SOFTWARE.
24
+ #
25
+ ###############################################################################
26
+ from .oob_ssh_connection_manager import OobSshConnectionManager
27
+
28
+ __all__ = ["OobSshConnectionManager"]
@@ -0,0 +1,124 @@
1
+ ###############################################################################
2
+ #
3
+ # MIT License
4
+ #
5
+ # Copyright (c) 2026 Advanced Micro Devices, Inc.
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ # of this software and associated documentation files (the "Software"), to deal
9
+ # in the Software without restriction, including without limitation the rights
10
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ # copies of the Software, and to permit persons to whom the Software is
12
+ # furnished to do so, subject to the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be included in all
15
+ # copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ # SOFTWARE.
24
+ #
25
+ ###############################################################################
26
+ from __future__ import annotations
27
+
28
+ from logging import Logger
29
+ from typing import Optional, Union
30
+
31
+ from nodescraper.enums import EventCategory, EventPriority, ExecutionStatus
32
+ from nodescraper.interfaces.connectionmanager import ConnectionManager
33
+ from nodescraper.interfaces.taskresulthook import TaskResultHook
34
+ from nodescraper.models import SystemInfo, TaskResult
35
+ from nodescraper.utils import get_exception_traceback
36
+
37
+ from ..inband.inband import InBandConnection
38
+ from ..inband.inbandremote import RemoteShell, SSHConnectionError
39
+ from ..redfish.redfish_params import RedfishConnectionParams, redfish_params_to_ssh
40
+
41
+
42
+ class OobSshConnectionManager(ConnectionManager[InBandConnection, RedfishConnectionParams]):
43
+ """SSH to the BMC using the same host and credentials as Redfish (OOB shell)."""
44
+
45
+ def __init__(
46
+ self,
47
+ system_info: SystemInfo,
48
+ logger: Optional[Logger] = None,
49
+ max_event_priority_level: Union[EventPriority, str] = EventPriority.CRITICAL,
50
+ parent: Optional[str] = None,
51
+ task_result_hooks: Optional[list[TaskResultHook]] = None,
52
+ connection_args: Optional[RedfishConnectionParams] = None,
53
+ **kwargs,
54
+ ):
55
+ super().__init__(
56
+ system_info,
57
+ logger,
58
+ max_event_priority_level,
59
+ parent,
60
+ task_result_hooks,
61
+ connection_args,
62
+ **kwargs,
63
+ )
64
+
65
+ def connect(self) -> TaskResult:
66
+ if not self.connection_args:
67
+ self._log_event(
68
+ category=EventCategory.RUNTIME,
69
+ description="No Redfish connection parameters provided for OOB SSH",
70
+ priority=EventPriority.CRITICAL,
71
+ console_log=True,
72
+ )
73
+ self.result.status = ExecutionStatus.EXECUTION_FAILURE
74
+ return self.result
75
+
76
+ raw = self.connection_args
77
+ if isinstance(raw, dict):
78
+ params = RedfishConnectionParams.model_validate(raw)
79
+ elif isinstance(raw, RedfishConnectionParams):
80
+ params = raw
81
+ else:
82
+ self._log_event(
83
+ category=EventCategory.RUNTIME,
84
+ description="Redfish connection_args must be dict or RedfishConnectionParams",
85
+ priority=EventPriority.CRITICAL,
86
+ console_log=True,
87
+ )
88
+ self.result.status = ExecutionStatus.EXECUTION_FAILURE
89
+ return self.result
90
+
91
+ try:
92
+ ssh_params = redfish_params_to_ssh(params)
93
+ self.logger.info("Initializing OOB SSH to BMC host %s", ssh_params.hostname)
94
+ self.connection = RemoteShell(ssh_params)
95
+ self.connection.connect_ssh()
96
+ except SSHConnectionError as exception:
97
+ self._log_event(
98
+ category=EventCategory.SSH,
99
+ description=str(exception),
100
+ priority=EventPriority.CRITICAL,
101
+ console_log=True,
102
+ )
103
+ self.result.status = ExecutionStatus.EXECUTION_FAILURE
104
+ self.connection = None
105
+ except Exception as exception:
106
+ self._log_event(
107
+ category=EventCategory.SSH,
108
+ description=f"Exception during OOB SSH: {exception!s}",
109
+ data=get_exception_traceback(exception),
110
+ priority=EventPriority.CRITICAL,
111
+ console_log=True,
112
+ )
113
+ self.result.status = ExecutionStatus.EXECUTION_FAILURE
114
+ self.connection = None
115
+ return self.result
116
+
117
+ def disconnect(self) -> None:
118
+ conn = self.connection
119
+ super().disconnect()
120
+ if isinstance(conn, RemoteShell):
121
+ try:
122
+ conn.client.close()
123
+ except Exception:
124
+ pass
@@ -39,7 +39,7 @@ from .redfish_oem_diag import (
39
39
  collect_oem_diagnostic_data,
40
40
  get_oem_diagnostic_allowable_values,
41
41
  )
42
- from .redfish_params import RedfishConnectionParams
42
+ from .redfish_params import RedfishConnectionParams, redfish_params_to_ssh
43
43
  from .redfish_path import RedfishPath
44
44
 
45
45
  __all__ = [
@@ -48,6 +48,7 @@ __all__ = [
48
48
  "RedfishGetResult",
49
49
  "RedfishConnectionManager",
50
50
  "RedfishConnectionParams",
51
+ "redfish_params_to_ssh",
51
52
  "RedfishPath",
52
53
  "collect_oem_diagnostic_data",
53
54
  "get_oem_diagnostic_allowable_values",
@@ -23,11 +23,15 @@
23
23
  # SOFTWARE.
24
24
  #
25
25
  ###############################################################################
26
+ from __future__ import annotations
27
+
26
28
  from typing import Optional, Union
27
29
 
28
30
  from pydantic import BaseModel, ConfigDict, Field, SecretStr
29
31
  from pydantic.networks import IPvAnyAddress
30
32
 
33
+ from nodescraper.connection.inband.sshparams import SSHConnectionParams
34
+
31
35
  from .redfish_connection import DEFAULT_REDFISH_API_ROOT
32
36
 
33
37
 
@@ -51,3 +55,28 @@ class RedfishConnectionParams(BaseModel):
51
55
  default=DEFAULT_REDFISH_API_ROOT,
52
56
  description="Redfish API path (e.g. 'redfish/v1'). Override for a different API version.",
53
57
  )
58
+
59
+
60
+ def redfish_params_to_ssh(
61
+ params: Union[RedfishConnectionParams, dict],
62
+ *,
63
+ ssh_port: Optional[int] = None,
64
+ key_filename: Optional[str] = None,
65
+ ) -> SSHConnectionParams:
66
+ """Map Redfish BMC credentials to SSH connection params for shell access."""
67
+ if isinstance(params, dict):
68
+ data = dict(params)
69
+ ssh_port = data.pop("ssh_port", ssh_port if ssh_port is not None else 22)
70
+ key_filename = data.pop("key_filename", key_filename)
71
+ params = RedfishConnectionParams.model_validate(data)
72
+ else:
73
+ if ssh_port is None:
74
+ ssh_port = 22
75
+
76
+ return SSHConnectionParams(
77
+ hostname=str(params.host),
78
+ username=params.username,
79
+ password=params.password,
80
+ port=ssh_port,
81
+ key_filename=key_filename,
82
+ )
@@ -126,7 +126,7 @@ class ConnectionManager(Task, Generic[TConnection, TConnectArg]):
126
126
  def __init_subclass__(cls, **kwargs) -> None:
127
127
  super().__init_subclass__(**kwargs)
128
128
 
129
- if hasattr(cls, "connect"):
129
+ if "connect" in cls.__dict__:
130
130
  cls.connect = connect_decorator(cls.connect)
131
131
 
132
132
  def __enter__(self):