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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/PKG-INFO +5 -3
  2. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/README.md +1 -1
  3. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/amd_node_scraper.egg-info/PKG-INFO +5 -3
  4. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/amd_node_scraper.egg-info/SOURCES.txt +9 -1
  5. amd_node_scraper-1.1.6/amd_node_scraper.egg-info/entry_points.txt +6 -0
  6. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/docs/PLUGIN_DOC.md +2 -1
  7. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/cli/cli.py +14 -15
  8. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/cli/helper.py +2 -2
  9. amd_node_scraper-1.1.6/nodescraper/configregistry.py +183 -0
  10. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/models/pluginconfig.py +31 -1
  11. amd_node_scraper-1.1.6/nodescraper/pluginrecipe/__init__.py +51 -0
  12. amd_node_scraper-1.1.6/nodescraper/pluginrecipe/all_plugins.py +24 -0
  13. amd_node_scraper-1.1.6/nodescraper/pluginrecipe/discovery.py +98 -0
  14. amd_node_scraper-1.1.6/nodescraper/pluginrecipe/node_status.py +38 -0
  15. amd_node_scraper-1.1.6/nodescraper/pluginrecipe/pluginrecipe.py +177 -0
  16. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/amdsmi_analyzer.py +237 -17
  17. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/amdsmi_collector.py +82 -19
  18. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/amdsmidata.py +270 -66
  19. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/analyzer_args.py +7 -0
  20. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/pyproject.toml +6 -2
  21. amd_node_scraper-1.1.6/test/functional/fixtures/amdsmi_plugin_config.json +14 -0
  22. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/test_plugin_configs.py +1 -0
  23. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/cli/test_plugin_configs_cli.py +5 -9
  24. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/test_cli_helper.py +4 -1
  25. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/test_config_registry.py +2 -1
  26. amd_node_scraper-1.1.6/test/unit/framework/test_config_registry_entry_points.py +163 -0
  27. amd_node_scraper-1.1.6/test/unit/framework/test_pluginrecipe.py +130 -0
  28. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_amdsmi_analyzer.py +129 -11
  29. amd_node_scraper-1.1.6/test/unit/plugin/test_amdsmi_data.py +514 -0
  30. amd_node_scraper-1.1.5/amd_node_scraper.egg-info/entry_points.txt +0 -2
  31. amd_node_scraper-1.1.5/nodescraper/configregistry.py +0 -66
  32. amd_node_scraper-1.1.5/nodescraper/configs/node_status.json +0 -19
  33. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/.github/CODEOWNERS +0 -0
  34. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  35. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  36. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  37. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/.github/pull_request_template.md +0 -0
  38. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/.github/scripts/plugin_convention_warnings.py +0 -0
  39. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/.github/workflows/code_quality_checks.yml +0 -0
  40. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/.github/workflows/functional-test.yml +0 -0
  41. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/.github/workflows/release-trusted-publisher.yml +0 -0
  42. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/.github/workflows/unit-test.yml +0 -0
  43. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/.github/workflows/update-plugin-docs.yml +0 -0
  44. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/.gitignore +0 -0
  45. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/.mypy.ini +0 -0
  46. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/.pre-commit-config.yaml +0 -0
  47. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/CONTRIBUTING.md +0 -0
  48. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/EXTENDING.md +0 -0
  49. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/LICENSE +0 -0
  50. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/SECURITY.md +0 -0
  51. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/amd_node_scraper.egg-info/dependency_links.txt +0 -0
  52. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/amd_node_scraper.egg-info/requires.txt +0 -0
  53. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/amd_node_scraper.egg-info/top_level.txt +0 -0
  54. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/dev-setup.sh +0 -0
  55. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/docs/generate_plugin_doc_bundle.py +0 -0
  56. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/docs/node-scraper-external/README.md +0 -0
  57. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/docs/node-scraper-external/ext_nodescraper_plugins/sample/__init__.py +0 -0
  58. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_analyzer.py +0 -0
  59. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_collector.py +0 -0
  60. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_data.py +0 -0
  61. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_plugin.py +0 -0
  62. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/docs/node-scraper-external/pyproject.toml +0 -0
  63. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/__init__.py +0 -0
  64. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/base/__init__.py +0 -0
  65. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/base/inbandcollectortask.py +0 -0
  66. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/base/inbanddataplugin.py +0 -0
  67. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/base/oobanddataplugin.py +0 -0
  68. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/base/redfishcollectortask.py +0 -0
  69. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/base/regexanalyzer.py +0 -0
  70. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/cli/__init__.py +0 -0
  71. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/cli/compare_runs.py +0 -0
  72. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/cli/constants.py +0 -0
  73. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/cli/dynamicparserbuilder.py +0 -0
  74. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/cli/embed.py +0 -0
  75. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/cli/host_cli_embed.py +0 -0
  76. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/cli/inputargtypes.py +0 -0
  77. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/cli/invocation.py +0 -0
  78. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/configbuilder.py +0 -0
  79. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/connection/__init__.py +0 -0
  80. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/connection/inband/__init__.py +0 -0
  81. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/connection/inband/inband.py +0 -0
  82. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/connection/inband/inbandlocal.py +0 -0
  83. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/connection/inband/inbandmanager.py +0 -0
  84. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/connection/inband/inbandremote.py +0 -0
  85. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/connection/inband/sshparams.py +0 -0
  86. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/connection/redfish/__init__.py +0 -0
  87. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/connection/redfish/redfish_connection.py +0 -0
  88. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/connection/redfish/redfish_constants.py +0 -0
  89. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/connection/redfish/redfish_manager.py +0 -0
  90. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/connection/redfish/redfish_oem_diag.py +0 -0
  91. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/connection/redfish/redfish_params.py +0 -0
  92. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/connection/redfish/redfish_path.py +0 -0
  93. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/constants.py +0 -0
  94. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/enums/__init__.py +0 -0
  95. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/enums/eventcategory.py +0 -0
  96. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/enums/eventpriority.py +0 -0
  97. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/enums/executionstatus.py +0 -0
  98. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/enums/osfamily.py +0 -0
  99. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/enums/systeminteraction.py +0 -0
  100. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/enums/systemlocation.py +0 -0
  101. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/enums/taskstate.py +0 -0
  102. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/generictypes.py +0 -0
  103. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/helpers/__init__.py +0 -0
  104. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/interfaces/__init__.py +0 -0
  105. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/interfaces/connectionmanager.py +0 -0
  106. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/interfaces/dataanalyzertask.py +0 -0
  107. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/interfaces/datacollectortask.py +0 -0
  108. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/interfaces/dataplugin.py +0 -0
  109. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/interfaces/plugin.py +0 -0
  110. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/interfaces/resultcollator.py +0 -0
  111. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/interfaces/task.py +0 -0
  112. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/interfaces/taskresulthook.py +0 -0
  113. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/models/__init__.py +0 -0
  114. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/models/analyzerargs.py +0 -0
  115. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/models/collectorargs.py +0 -0
  116. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/models/connectionconfig.py +0 -0
  117. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/models/datamodel.py +0 -0
  118. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/models/datapluginresult.py +0 -0
  119. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/models/event.py +0 -0
  120. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/models/pluginresult.py +0 -0
  121. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/models/priority_override.py +0 -0
  122. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/models/systeminfo.py +0 -0
  123. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/models/taskresult.py +0 -0
  124. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/models/timerangeargs.py +0 -0
  125. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/pluginexecutor.py +0 -0
  126. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/pluginregistry.py +0 -0
  127. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/__init__.py +0 -0
  128. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/__init__.py +0 -0
  129. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/__init__.py +0 -0
  130. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/amdsmi_plugin.py +0 -0
  131. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/collector_args.py +0 -0
  132. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/amdsmi/cper.py +0 -0
  133. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/bios/__init__.py +0 -0
  134. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/bios/analyzer_args.py +0 -0
  135. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/bios/bios_analyzer.py +0 -0
  136. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/bios/bios_collector.py +0 -0
  137. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/bios/bios_plugin.py +0 -0
  138. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/bios/biosdata.py +0 -0
  139. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/cmdline/__init__.py +0 -0
  140. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/cmdline/analyzer_args.py +0 -0
  141. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/cmdline/cmdline_analyzer.py +0 -0
  142. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/cmdline/cmdline_collector.py +0 -0
  143. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/cmdline/cmdline_plugin.py +0 -0
  144. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/cmdline/cmdlineconfig.py +0 -0
  145. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/cmdline/cmdlinedata.py +0 -0
  146. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/device_enumeration/__init__.py +0 -0
  147. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/device_enumeration/analyzer_args.py +0 -0
  148. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/device_enumeration/device_enumeration_analyzer.py +0 -0
  149. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/device_enumeration/device_enumeration_collector.py +0 -0
  150. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/device_enumeration/device_enumeration_plugin.py +0 -0
  151. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/device_enumeration/deviceenumdata.py +0 -0
  152. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dimm/__init__.py +0 -0
  153. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dimm/collector_args.py +0 -0
  154. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dimm/dimm_collector.py +0 -0
  155. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dimm/dimm_plugin.py +0 -0
  156. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dimm/dimmdata.py +0 -0
  157. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dkms/__init__.py +0 -0
  158. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dkms/analyzer_args.py +0 -0
  159. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dkms/dkms_analyzer.py +0 -0
  160. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dkms/dkms_collector.py +0 -0
  161. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dkms/dkms_plugin.py +0 -0
  162. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dkms/dkmsdata.py +0 -0
  163. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/__init__.py +0 -0
  164. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/analyzer_args.py +0 -0
  165. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/collector_args.py +0 -0
  166. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/dmesg_analyzer.py +0 -0
  167. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/dmesg_collector.py +0 -0
  168. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/dmesg_plugin.py +0 -0
  169. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/dmesgdata.py +0 -0
  170. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/dmesg/run_compare.py +0 -0
  171. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/fabrics/__init__.py +0 -0
  172. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/fabrics/fabrics_collector.py +0 -0
  173. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/fabrics/fabrics_plugin.py +0 -0
  174. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/fabrics/fabricsdata.py +0 -0
  175. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/journal/__init__.py +0 -0
  176. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/journal/analyzer_args.py +0 -0
  177. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/journal/collector_args.py +0 -0
  178. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/journal/journal_analyzer.py +0 -0
  179. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/journal/journal_collector.py +0 -0
  180. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/journal/journal_plugin.py +0 -0
  181. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/journal/journaldata.py +0 -0
  182. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel/__init__.py +0 -0
  183. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel/analyzer_args.py +0 -0
  184. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel/kernel_analyzer.py +0 -0
  185. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel/kernel_collector.py +0 -0
  186. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel/kernel_plugin.py +0 -0
  187. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel/kerneldata.py +0 -0
  188. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel_module/__init__.py +0 -0
  189. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel_module/analyzer_args.py +0 -0
  190. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel_module/kernel_module_analyzer.py +0 -0
  191. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel_module/kernel_module_collector.py +0 -0
  192. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel_module/kernel_module_data.py +0 -0
  193. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/kernel_module/kernel_module_plugin.py +0 -0
  194. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/memory/__init__.py +0 -0
  195. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/memory/analyzer_args.py +0 -0
  196. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/memory/memory_analyzer.py +0 -0
  197. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/memory/memory_collector.py +0 -0
  198. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/memory/memory_plugin.py +0 -0
  199. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/memory/memorydata.py +0 -0
  200. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/network/__init__.py +0 -0
  201. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/network/analyzer_args.py +0 -0
  202. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/network/collector_args.py +0 -0
  203. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/network/ethtool_vendor.py +0 -0
  204. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/network/network_analyzer.py +0 -0
  205. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/network/network_collector.py +0 -0
  206. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/network/network_plugin.py +0 -0
  207. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/network/networkdata.py +0 -0
  208. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nic/__init__.py +0 -0
  209. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nic/analyzer_args.py +0 -0
  210. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nic/collector_args.py +0 -0
  211. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nic/nic_analyzer.py +0 -0
  212. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nic/nic_collector.py +0 -0
  213. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nic/nic_data.py +0 -0
  214. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nic/nic_plugin.py +0 -0
  215. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nvme/__init__.py +0 -0
  216. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nvme/nvme_collector.py +0 -0
  217. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nvme/nvme_plugin.py +0 -0
  218. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/nvme/nvmedata.py +0 -0
  219. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/os/__init__.py +0 -0
  220. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/os/analyzer_args.py +0 -0
  221. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/os/os_analyzer.py +0 -0
  222. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/os/os_collector.py +0 -0
  223. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/os/os_plugin.py +0 -0
  224. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/os/osdata.py +0 -0
  225. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/package/__init__.py +0 -0
  226. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/package/analyzer_args.py +0 -0
  227. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/package/package_analyzer.py +0 -0
  228. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/package/package_collector.py +0 -0
  229. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/package/package_plugin.py +0 -0
  230. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/package/packagedata.py +0 -0
  231. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/pcie/__init__.py +0 -0
  232. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/pcie/analyzer_args.py +0 -0
  233. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/pcie/pcie_analyzer.py +0 -0
  234. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/pcie/pcie_collector.py +0 -0
  235. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/pcie/pcie_data.py +0 -0
  236. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/pcie/pcie_plugin.py +0 -0
  237. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/process/__init__.py +0 -0
  238. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/process/analyzer_args.py +0 -0
  239. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/process/collector_args.py +0 -0
  240. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/process/process_analyzer.py +0 -0
  241. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/process/process_collector.py +0 -0
  242. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/process/process_plugin.py +0 -0
  243. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/process/processdata.py +0 -0
  244. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rdma/__init__.py +0 -0
  245. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rdma/rdma_analyzer.py +0 -0
  246. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rdma/rdma_collector.py +0 -0
  247. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rdma/rdma_plugin.py +0 -0
  248. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rdma/rdmadata.py +0 -0
  249. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rocm/__init__.py +0 -0
  250. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rocm/analyzer_args.py +0 -0
  251. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rocm/collector_args.py +0 -0
  252. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rocm/rocm_analyzer.py +0 -0
  253. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rocm/rocm_collector.py +0 -0
  254. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rocm/rocm_plugin.py +0 -0
  255. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/rocm/rocmdata.py +0 -0
  256. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/storage/__init__.py +0 -0
  257. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/storage/analyzer_args.py +0 -0
  258. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/storage/collector_args.py +0 -0
  259. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/storage/storage_analyzer.py +0 -0
  260. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/storage/storage_collector.py +0 -0
  261. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/storage/storage_plugin.py +0 -0
  262. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/storage/storagedata.py +0 -0
  263. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sys_settings/__init__.py +0 -0
  264. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sys_settings/analyzer_args.py +0 -0
  265. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sys_settings/collector_args.py +0 -0
  266. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sys_settings/sys_settings_analyzer.py +0 -0
  267. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sys_settings/sys_settings_collector.py +0 -0
  268. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sys_settings/sys_settings_data.py +0 -0
  269. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sys_settings/sys_settings_plugin.py +0 -0
  270. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sysctl/__init__.py +0 -0
  271. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sysctl/analyzer_args.py +0 -0
  272. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sysctl/sysctl_analyzer.py +0 -0
  273. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sysctl/sysctl_collector.py +0 -0
  274. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sysctl/sysctl_plugin.py +0 -0
  275. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/sysctl/sysctldata.py +0 -0
  276. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/syslog/__init__.py +0 -0
  277. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/syslog/syslog_collector.py +0 -0
  278. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/syslog/syslog_plugin.py +0 -0
  279. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/syslog/syslogdata.py +0 -0
  280. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/uptime/__init__.py +0 -0
  281. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/uptime/uptime_collector.py +0 -0
  282. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/uptime/uptime_plugin.py +0 -0
  283. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/inband/uptime/uptimedata.py +0 -0
  284. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/__init__.py +0 -0
  285. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_endpoint/__init__.py +0 -0
  286. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_endpoint/analyzer_args.py +0 -0
  287. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_endpoint/collector_args.py +0 -0
  288. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_analyzer.py +0 -0
  289. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_collector.py +0 -0
  290. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_data.py +0 -0
  291. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_endpoint/endpoint_plugin.py +0 -0
  292. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_oem_diag/__init__.py +0 -0
  293. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_oem_diag/analyzer_args.py +0 -0
  294. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_oem_diag/collector_args.py +0 -0
  295. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_analyzer.py +0 -0
  296. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_collector.py +0 -0
  297. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_data.py +0 -0
  298. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/ooband/redfish_oem_diag/oem_diag_plugin.py +0 -0
  299. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/regex_search/__init__.py +0 -0
  300. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/regex_search/analyzer_args.py +0 -0
  301. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/regex_search/regex_search_analyzer.py +0 -0
  302. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/regex_search/regex_search_data.py +0 -0
  303. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/plugins/regex_search/regex_search_plugin.py +0 -0
  304. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/resultcollators/__init__.py +0 -0
  305. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/resultcollators/tablesummary.py +0 -0
  306. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/serialization.py +0 -0
  307. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/taskresulthooks/__init__.py +0 -0
  308. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/taskresulthooks/filesystemloghook.py +0 -0
  309. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/typeutils.py +0 -0
  310. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/nodescraper/utils.py +0 -0
  311. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/pytest.ini +0 -0
  312. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/setup.cfg +0 -0
  313. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/setup.py +0 -0
  314. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/__init__.py +0 -0
  315. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/conftest.py +0 -0
  316. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/bios_plugin_config.json +0 -0
  317. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/cmdline_plugin_config.json +0 -0
  318. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/dimm_plugin_config.json +0 -0
  319. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/dkms_plugin_config.json +0 -0
  320. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/dmesg_plugin_config.json +0 -0
  321. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/dmesg_plugin_config_custom_regex.json +0 -0
  322. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/dmesg_sample.log +0 -0
  323. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/dmesg_sample_with_collapsing.log +0 -0
  324. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/fabrics_plugin_config.json +0 -0
  325. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/journal_plugin_config.json +0 -0
  326. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/kernel_module_plugin_config.json +0 -0
  327. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/kernel_plugin_config.json +0 -0
  328. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/memory_plugin_config.json +0 -0
  329. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/network_plugin_config.json +0 -0
  330. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/nic_plugin_config_full_analyzer_args.json +0 -0
  331. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/niccli_plugin_config.json +0 -0
  332. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/nvme_plugin_config.json +0 -0
  333. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/os_plugin_config.json +0 -0
  334. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/package_plugin_config.json +0 -0
  335. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/pcie_plugin_advanced_config.json +0 -0
  336. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/pcie_plugin_config.json +0 -0
  337. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/plugin_config.json +0 -0
  338. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/process_plugin_config.json +0 -0
  339. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/rdma_plugin_config.json +0 -0
  340. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/redfish_connection_config.json +0 -0
  341. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/redfish_endpoint_plugin_config.json +0 -0
  342. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/redfish_endpoint_plugin_config_full_args.json +0 -0
  343. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/regex_search_multi_logs/app_error.log +0 -0
  344. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/regex_search_multi_logs/no_errors.log +0 -0
  345. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/regex_search_multi_logs/storage_warn.log +0 -0
  346. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/regex_search_sample.log +0 -0
  347. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/rocm_plugin_config.json +0 -0
  348. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/storage_plugin_config.json +0 -0
  349. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/sys_settings_plugin_config.json +0 -0
  350. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/sysctl_plugin_config.json +0 -0
  351. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/syslog_plugin_config.json +0 -0
  352. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/fixtures/uptime_plugin_config.json +0 -0
  353. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/test_cli_describe.py +0 -0
  354. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/test_cli_help.py +0 -0
  355. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/test_cli_no_console_log.py +0 -0
  356. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/test_fabrics_plugin.py +0 -0
  357. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/test_network_plugin.py +0 -0
  358. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/test_nic_plugin.py +0 -0
  359. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/test_pcie_plugin.py +0 -0
  360. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/test_plugin_registry.py +0 -0
  361. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/test_rdma_plugin.py +0 -0
  362. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/test_redfish_endpoint_plugin.py +0 -0
  363. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/test_reference_config_workflow.py +0 -0
  364. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/test_run_plugins.py +0 -0
  365. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/functional/test_sys_settings_plugin.py +0 -0
  366. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/cli/test_build_global_argument_parser.py +0 -0
  367. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/cli/test_cli_embed_api.py +0 -0
  368. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/cli/test_cli_no_console_stdout.py +0 -0
  369. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/cli/test_host_cli_embed.py +0 -0
  370. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/conftest.py +0 -0
  371. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/connection/redfish/test_redfish_connection_paging.py +0 -0
  372. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/connection/redfish/test_redfish_oem_diag.py +0 -0
  373. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/common/shared_utils.py +0 -0
  374. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/compare_runs_sysctl/run1/sysctl_plugin/sysctl_collector/result.json +0 -0
  375. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/compare_runs_sysctl/run1/sysctl_plugin/sysctl_collector/sysctldatamodel.json +0 -0
  376. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/compare_runs_sysctl/run2/sysctl_plugin/sysctl_collector/result.json +0 -0
  377. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/compare_runs_sysctl/run2/sysctl_plugin/sysctl_collector/sysctldatamodel.json +0 -0
  378. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/example.json +0 -0
  379. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/example_config.json +0 -0
  380. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/invalid.json +0 -0
  381. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/log_dir/collector/biosdatamodel.json +0 -0
  382. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/fixtures/log_dir/collector/result.json +0 -0
  383. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/test_analyzerargs.py +0 -0
  384. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/test_cli.py +0 -0
  385. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/test_compare_runs.py +0 -0
  386. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/test_config_builder.py +0 -0
  387. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/test_connection_manager_entrypoints.py +0 -0
  388. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/test_dataanalyzer.py +0 -0
  389. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/test_datacollector.py +0 -0
  390. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/test_dataplugin.py +0 -0
  391. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/test_file_artifact.py +0 -0
  392. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/test_plugin_executor.py +0 -0
  393. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/test_regexanalyzer.py +0 -0
  394. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/framework/test_type_utils.py +0 -0
  395. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/fixtures/package_commands.json +0 -0
  396. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/fixtures/rdma_link_example_data.json +0 -0
  397. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/fixtures/rdma_statistic_example_data.json +0 -0
  398. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_amdsmi_collector.py +0 -0
  399. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_analyzer_args_build_from_model.py +0 -0
  400. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_bios_analyzer.py +0 -0
  401. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_bios_collector.py +0 -0
  402. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_cmdline_analyzer.py +0 -0
  403. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_cmdline_collector.py +0 -0
  404. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_device_enumeration_analyzer.py +0 -0
  405. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_device_enumeration_collector.py +0 -0
  406. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_dimms_collector.py +0 -0
  407. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_dkms_analyzer.py +0 -0
  408. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_dkms_collector.py +0 -0
  409. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_dmesg_analyzer.py +0 -0
  410. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_dmesg_collector.py +0 -0
  411. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_fabrics_collector.py +0 -0
  412. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_journal_collector.py +0 -0
  413. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_kernel_analyzer.py +0 -0
  414. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_kernel_collector.py +0 -0
  415. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_kernel_module_analyzer.py +0 -0
  416. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_kernel_module_collector.py +0 -0
  417. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_memory_analyzer.py +0 -0
  418. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_memory_collector.py +0 -0
  419. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_network_analyzer.py +0 -0
  420. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_network_collector.py +0 -0
  421. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_niccli_collector.py +0 -0
  422. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_nvme_collector.py +0 -0
  423. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_os_analyzer.py +0 -0
  424. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_os_collector.py +0 -0
  425. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_package_analyzer.py +0 -0
  426. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_package_collector.py +0 -0
  427. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_process_analyzer.py +0 -0
  428. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_process_collector.py +0 -0
  429. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_rdma_analyzer.py +0 -0
  430. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_rdma_collector.py +0 -0
  431. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_redfish_endpoint_analyzer.py +0 -0
  432. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_redfish_endpoint_collector.py +0 -0
  433. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_redfish_endpoint_plugin.py +0 -0
  434. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_redfish_oem_diag_analyzer.py +0 -0
  435. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_redfish_oem_diag_collector.py +0 -0
  436. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_regex_search_analyzer.py +0 -0
  437. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_rocm_analyzer.py +0 -0
  438. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_rocm_collector.py +0 -0
  439. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_storage_analyzer.py +0 -0
  440. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_storage_collector.py +0 -0
  441. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_sys_settings_analyzer.py +0 -0
  442. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_sys_settings_collector.py +0 -0
  443. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_sysctl_analyzer.py +0 -0
  444. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_sysctl_collector.py +0 -0
  445. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_syslog_collector.py +0 -0
  446. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/plugin/test_uptime_collector.py +0 -0
  447. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/test_serialization.py +0 -0
  448. {amd_node_scraper-1.1.5 → amd_node_scraper-1.1.6}/test/unit/test_version.py +0 -0
@@ -1,7 +1,8 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: amd-node-scraper
3
- Version: 1.1.5
3
+ Version: 1.1.6
4
4
  Summary: A framework for automated error detection and data collection
5
+ Author: AMD
5
6
  Project-URL: homepage, https://github.com/amd/node-scraper
6
7
  Project-URL: documentation, https://github.com/amd/node-scraper
7
8
  Project-URL: repository, https://github.com/amd/node-scraper
@@ -25,6 +26,7 @@ Requires-Dist: pre-commit; extra == "dev"
25
26
  Requires-Dist: pytest; extra == "dev"
26
27
  Requires-Dist: pytest-cov; extra == "dev"
27
28
  Requires-Dist: mypy; extra == "dev"
29
+ Dynamic: license-file
28
30
 
29
31
  # Node Scraper
30
32
  Node Scraper is a tool which performs automated data collection and analysis for the purposes of
@@ -144,7 +146,7 @@ options:
144
146
  Comma-separated built-in names and/or plugin config
145
147
  JSON paths (e.g. --plugin-
146
148
  configs=NodeStatus,/path/c.json). Built-ins:
147
- NodeStatus, AllPlugins (default: None)
149
+ AllPlugins, NodeStatus (default: None)
148
150
  --system-config STRING
149
151
  Path to system config json (default: None)
150
152
  --connection-config STRING
@@ -116,7 +116,7 @@ options:
116
116
  Comma-separated built-in names and/or plugin config
117
117
  JSON paths (e.g. --plugin-
118
118
  configs=NodeStatus,/path/c.json). Built-ins:
119
- NodeStatus, AllPlugins (default: None)
119
+ AllPlugins, NodeStatus (default: None)
120
120
  --system-config STRING
121
121
  Path to system config json (default: None)
122
122
  --connection-config STRING
@@ -1,7 +1,8 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: amd-node-scraper
3
- Version: 1.1.5
3
+ Version: 1.1.6
4
4
  Summary: A framework for automated error detection and data collection
5
+ Author: AMD
5
6
  Project-URL: homepage, https://github.com/amd/node-scraper
6
7
  Project-URL: documentation, https://github.com/amd/node-scraper
7
8
  Project-URL: repository, https://github.com/amd/node-scraper
@@ -25,6 +26,7 @@ Requires-Dist: pre-commit; extra == "dev"
25
26
  Requires-Dist: pytest; extra == "dev"
26
27
  Requires-Dist: pytest-cov; extra == "dev"
27
28
  Requires-Dist: mypy; extra == "dev"
29
+ Dynamic: license-file
28
30
 
29
31
  # Node Scraper
30
32
  Node Scraper is a tool which performs automated data collection and analysis for the purposes of
@@ -144,7 +146,7 @@ options:
144
146
  Comma-separated built-in names and/or plugin config
145
147
  JSON paths (e.g. --plugin-
146
148
  configs=NodeStatus,/path/c.json). Built-ins:
147
- NodeStatus, AllPlugins (default: None)
149
+ AllPlugins, NodeStatus (default: None)
148
150
  --system-config STRING
149
151
  Path to system config json (default: None)
150
152
  --connection-config STRING
@@ -62,7 +62,6 @@ nodescraper/cli/helper.py
62
62
  nodescraper/cli/host_cli_embed.py
63
63
  nodescraper/cli/inputargtypes.py
64
64
  nodescraper/cli/invocation.py
65
- nodescraper/configs/node_status.json
66
65
  nodescraper/connection/__init__.py
67
66
  nodescraper/connection/inband/__init__.py
68
67
  nodescraper/connection/inband/inband.py
@@ -108,6 +107,11 @@ nodescraper/models/priority_override.py
108
107
  nodescraper/models/systeminfo.py
109
108
  nodescraper/models/taskresult.py
110
109
  nodescraper/models/timerangeargs.py
110
+ nodescraper/pluginrecipe/__init__.py
111
+ nodescraper/pluginrecipe/all_plugins.py
112
+ nodescraper/pluginrecipe/discovery.py
113
+ nodescraper/pluginrecipe/node_status.py
114
+ nodescraper/pluginrecipe/pluginrecipe.py
111
115
  nodescraper/plugins/__init__.py
112
116
  nodescraper/plugins/inband/__init__.py
113
117
  nodescraper/plugins/inband/amdsmi/__init__.py
@@ -309,6 +313,7 @@ test/functional/test_redfish_endpoint_plugin.py
309
313
  test/functional/test_reference_config_workflow.py
310
314
  test/functional/test_run_plugins.py
311
315
  test/functional/test_sys_settings_plugin.py
316
+ test/functional/fixtures/amdsmi_plugin_config.json
312
317
  test/functional/fixtures/bios_plugin_config.json
313
318
  test/functional/fixtures/cmdline_plugin_config.json
314
319
  test/functional/fixtures/dimm_plugin_config.json
@@ -362,12 +367,14 @@ test/unit/framework/test_cli_helper.py
362
367
  test/unit/framework/test_compare_runs.py
363
368
  test/unit/framework/test_config_builder.py
364
369
  test/unit/framework/test_config_registry.py
370
+ test/unit/framework/test_config_registry_entry_points.py
365
371
  test/unit/framework/test_connection_manager_entrypoints.py
366
372
  test/unit/framework/test_dataanalyzer.py
367
373
  test/unit/framework/test_datacollector.py
368
374
  test/unit/framework/test_dataplugin.py
369
375
  test/unit/framework/test_file_artifact.py
370
376
  test/unit/framework/test_plugin_executor.py
377
+ test/unit/framework/test_pluginrecipe.py
371
378
  test/unit/framework/test_regexanalyzer.py
372
379
  test/unit/framework/test_type_utils.py
373
380
  test/unit/framework/common/shared_utils.py
@@ -382,6 +389,7 @@ test/unit/framework/fixtures/log_dir/collector/biosdatamodel.json
382
389
  test/unit/framework/fixtures/log_dir/collector/result.json
383
390
  test/unit/plugin/test_amdsmi_analyzer.py
384
391
  test/unit/plugin/test_amdsmi_collector.py
392
+ test/unit/plugin/test_amdsmi_data.py
385
393
  test/unit/plugin/test_analyzer_args_build_from_model.py
386
394
  test/unit/plugin/test_bios_analyzer.py
387
395
  test/unit/plugin/test_bios_collector.py
@@ -0,0 +1,6 @@
1
+ [console_scripts]
2
+ node-scraper = nodescraper.cli:cli_entry
3
+
4
+ [nodescraper.plugin_configs]
5
+ AllPlugins = nodescraper.pluginrecipe.all_plugins:AllPlugins
6
+ NodeStatus = nodescraper.pluginrecipe.node_status:NodeStatus
@@ -4,7 +4,7 @@
4
4
 
5
5
  | Plugin | Collection | Analyzer Args | Collection Args | DataModel | Collector | Analyzer |
6
6
  | --- | --- | --- | --- | --- | --- | --- |
7
- | AmdSmiPlugin | bad-pages<br>firmware --json<br>list --json<br>metric -g all<br>partition --json<br>process --json<br>ras --cper --folder={folder}<br>ras --afid --cper-file {cper_file}<br>static -g all --json<br>static -g {gpu_id} --json<br>topology<br>version --json<br>xgmi -l<br>xgmi -m | **Analyzer Args:**<br>- `check_static_data`: bool — If True, run static data checks (e.g. driver version, partition mode).<br>- `expected_gpu_processes`: Optional[int] — Expected number of GPU processes.<br>- `expected_max_power`: Optional[int] — Expected maximum power value (e.g. watts).<br>- `expected_driver_version`: Optional[str] — Expected AMD driver version string.<br>- `expected_memory_partition_mode`: Optional[str] — Expected memory partition mode (e.g. sp3, dp).<br>- `expected_compute_partition_mode`: Optional[str] — Expected compute partition mode.<br>- `expected_firmware_versions`: Optional[dict[str, str]] — Expected firmware versions keyed by amd-smi fw_id (e.g. PLDM_BUNDLE).<br>- `l0_to_recovery_count_error_threshold`: Optional[int] — L0-to-recovery count above which an error is raised.<br>- `l0_to_recovery_count_warning_threshold`: Optional[int] — L0-to-recovery count above which a warning is raised.<br>- `vendorid_ep`: Optional[str] — Expected endpoint vendor ID (e.g. for PCIe).<br>- `vendorid_ep_vf`: Optional[str] — Expected endpoint VF vendor ID.<br>- `devid_ep`: Optional[str] — Expected endpoint device ID.<br>- `devid_ep_vf`: Optional[str] — Expected endpoint VF device ID.<br>- `sku_name`: Optional[str] — Expected SKU name string for GPU.<br>- `expected_xgmi_speed`: Optional[list[float]] — Expected xGMI speed value(s) (e.g. link rate).<br>- `analysis_range_start`: Optional[datetime.datetime] — Start of time range for time-windowed analysis.<br>- `analysis_range_end`: Optional[datetime.datetime] — End of time range for time-windowed analysis. | **Collection Args:**<br>- `analysis_firmware_ids`: Optional[list[str]] — amd-smi fw_id values to record in analysis_ref.firmware_versions<br>- `cper_file_path`: Optional[str] — Path to CPER folder or file for RAS AFID collection (ras --afid --cper-file). | [AmdSmiDataModel](#AmdSmiDataModel-Model) | [AmdSmiCollector](#Collector-Class-AmdSmiCollector) | [AmdSmiAnalyzer](#Data-Analyzer-Class-AmdSmiAnalyzer) |
7
+ | AmdSmiPlugin | bad-pages<br>firmware --json<br>list --json<br>metric -g all<br>partition --json<br>process --json<br>ras --cper --folder={folder}<br>ras --afid --cper-file {cper_file}<br>static -g all --json<br>static -g {gpu_id} --json<br>topology<br>version --json<br>xgmi -l<br>xgmi -m | **Analyzer Args:**<br>- `check_static_data`: bool — If True, run static data checks (e.g. driver version, partition mode).<br>- `expected_gpu_processes`: Optional[int] — Expected number of GPU processes.<br>- `expected_max_power`: Optional[int] — Expected maximum power value (e.g. watts).<br>- `expected_power_management`: Optional[str] — Expected amd-smi metric power_management value per GPU (e.g. DISABLED for active/full power, ENABLED for power-manage...<br>- `expected_driver_version`: Optional[str] — Expected AMD driver version string.<br>- `expected_memory_partition_mode`: Optional[str] — Expected memory partition mode (e.g. sp3, dp).<br>- `expected_compute_partition_mode`: Optional[str] — Expected compute partition mode.<br>- `expected_firmware_versions`: Optional[dict[str, str]] — Expected firmware versions keyed by amd-smi fw_id (e.g. PLDM_BUNDLE).<br>- `l0_to_recovery_count_error_threshold`: Optional[int] — L0-to-recovery count above which an error is raised.<br>- `l0_to_recovery_count_warning_threshold`: Optional[int] — L0-to-recovery count above which a warning is raised.<br>- `vendorid_ep`: Optional[str] — Expected endpoint vendor ID (e.g. for PCIe).<br>- `vendorid_ep_vf`: Optional[str] — Expected endpoint VF vendor ID.<br>- `devid_ep`: Optional[str] — Expected endpoint device ID.<br>- `devid_ep_vf`: Optional[str] — Expected endpoint VF device ID.<br>- `sku_name`: Optional[str] — Expected SKU name string for GPU.<br>- `expected_xgmi_speed`: Optional[list[float]] — Expected xGMI speed value(s) (e.g. link rate).<br>- `analysis_range_start`: Optional[datetime.datetime] — Start of time range for time-windowed analysis.<br>- `analysis_range_end`: Optional[datetime.datetime] — End of time range for time-windowed analysis. | **Collection Args:**<br>- `analysis_firmware_ids`: Optional[list[str]] — amd-smi fw_id values to record in analysis_ref.firmware_versions<br>- `cper_file_path`: Optional[str] — Path to CPER folder or file for RAS AFID collection (ras --afid --cper-file). | [AmdSmiDataModel](#AmdSmiDataModel-Model) | [AmdSmiCollector](#Collector-Class-AmdSmiCollector) | [AmdSmiAnalyzer](#Data-Analyzer-Class-AmdSmiAnalyzer) |
8
8
  | BiosPlugin | sh -c 'cat /sys/devices/virtual/dmi/id/bios_version'<br>wmic bios get SMBIOSBIOSVersion /Value | **Analyzer Args:**<br>- `exp_bios_version`: list[str] — Expected BIOS version(s) to match against collected value (str or list).<br>- `regex_match`: bool — If True, match exp_bios_version as regex; otherwise exact match. | - | [BiosDataModel](#BiosDataModel-Model) | [BiosCollector](#Collector-Class-BiosCollector) | [BiosAnalyzer](#Data-Analyzer-Class-BiosAnalyzer) |
9
9
  | CmdlinePlugin | cat /proc/cmdline | **Analyzer Args:**<br>- `required_cmdline`: Union[str, List] — Command-line parameters that must be present (e.g. 'pci=bfsort').<br>- `banned_cmdline`: Union[str, List] — Command-line parameters that must not be present.<br>- `os_overrides`: Dict[str, nodescraper.plugins.inband.cmdline.cmdlineconfig.OverrideConfig] — Per-OS overrides for required_cmdline and banned_cmdline (keyed by OS identifier).<br>- `platform_overrides`: Dict[str, nodescraper.plugins.inband.cmdline.cmdlineconfig.OverrideConfig] — Per-platform overrides for required_cmdline and banned_cmdline (keyed by platform). | - | [CmdlineDataModel](#CmdlineDataModel-Model) | [CmdlineCollector](#Collector-Class-CmdlineCollector) | [CmdlineAnalyzer](#Data-Analyzer-Class-CmdlineAnalyzer) |
10
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) |
@@ -1755,6 +1755,7 @@ Check sysctl matches expected sysctl details
1755
1755
  - **check_static_data**: `bool` — If True, run static data checks (e.g. driver version, partition mode).
1756
1756
  - **expected_gpu_processes**: `Optional[int]` — Expected number of GPU processes.
1757
1757
  - **expected_max_power**: `Optional[int]` — Expected maximum power value (e.g. watts).
1758
+ - **expected_power_management**: `Optional[str]` — Expected amd-smi metric power_management value per GPU (e.g. DISABLED for active/full power, ENABLED for power-managed idle).
1758
1759
  - **expected_driver_version**: `Optional[str]` — Expected AMD driver version string.
1759
1760
  - **expected_memory_partition_mode**: `Optional[str]` — Expected memory partition mode (e.g. sp3, dp).
1760
1761
  - **expected_compute_partition_mode**: `Optional[str]` — Expected compute partition mode.
@@ -64,7 +64,7 @@ from nodescraper.connection.redfish import (
64
64
  from nodescraper.connection.redfish.redfish_params import RedfishConnectionParams
65
65
  from nodescraper.constants import DEFAULT_LOGGER
66
66
  from nodescraper.enums import ExecutionStatus, SystemInteractionLevel, SystemLocation
67
- from nodescraper.models import PluginConfig, SystemInfo
67
+ from nodescraper.models import SystemInfo
68
68
  from nodescraper.pluginexecutor import PluginExecutor
69
69
  from nodescraper.pluginregistry import PluginRegistry
70
70
 
@@ -74,17 +74,16 @@ def _parse_plugin_configs_csv(value: str) -> list[str]:
74
74
  return [p.strip() for p in value.split(",") if p.strip()]
75
75
 
76
76
 
77
- def _config_registry_with_all_plugins(plugin_reg: PluginRegistry) -> ConfigRegistry:
78
- """Synthetic ``AllPlugins`` config used for CLI help and :func:`build_global_argument_parser`."""
79
- config_reg = ConfigRegistry()
80
- config_reg.configs["AllPlugins"] = PluginConfig(
81
- name="AllPlugins",
82
- desc="Run all registered plugins with default arguments",
83
- global_args={},
84
- plugins={name: {} for name in plugin_reg.plugins},
85
- result_collators={},
86
- )
87
- return config_reg
77
+ def _default_config_registry(_plugin_reg: PluginRegistry) -> ConfigRegistry:
78
+ """Build the config registry from bundled JSON and plugin-config entry points.
79
+
80
+ Args:
81
+ _plugin_reg (PluginRegistry): Unused; retained for call-site compatibility.
82
+
83
+ Returns:
84
+ ConfigRegistry: Registry containing bundled and entry-point plugin configs.
85
+ """
86
+ return ConfigRegistry()
88
87
 
89
88
 
90
89
  def _add_cli_root_globals(
@@ -203,7 +202,7 @@ def _add_cli_root_globals(
203
202
  def build_global_argument_parser(*, add_help: bool = True) -> argparse.ArgumentParser:
204
203
  """Globals only (no subcommands), for host CLIs."""
205
204
  plugin_reg = PluginRegistry()
206
- config_reg = _config_registry_with_all_plugins(plugin_reg)
205
+ config_reg = _default_config_registry(plugin_reg)
207
206
  parser = argparse.ArgumentParser(
208
207
  description="node scraper CLI (global options only)",
209
208
  formatter_class=argparse.ArgumentDefaultsHelpFormatter,
@@ -406,7 +405,7 @@ def get_cli_top_level_subcommands() -> tuple[str, ...]:
406
405
  Tuple of ``subcmd`` subparser names; call ``cache_clear()`` if registries change in-process.
407
406
  """
408
407
  plugin_reg = PluginRegistry()
409
- config_reg = _config_registry_with_all_plugins(plugin_reg)
408
+ config_reg = _default_config_registry(plugin_reg)
410
409
  parser, _plugin_subparser_map = build_parser(plugin_reg, config_reg)
411
410
  return _top_level_subcommand_names(parser)
412
411
 
@@ -474,7 +473,7 @@ def main(
474
473
  arg_input = sys.argv[1:]
475
474
 
476
475
  plugin_reg = PluginRegistry()
477
- config_reg = _config_registry_with_all_plugins(plugin_reg)
476
+ config_reg = _default_config_registry(plugin_reg)
478
477
  parser, plugin_subparser_map = build_parser(plugin_reg, config_reg)
479
478
 
480
479
  try:
@@ -211,8 +211,8 @@ def parse_describe(
211
211
  if not parsed_args.name:
212
212
  out: list[str] = []
213
213
  if parsed_args.type == "config":
214
- out.append("Available built-in configs:")
215
- for name in config_reg.configs:
214
+ out.append("Available configs:")
215
+ for name in sorted(config_reg.configs):
216
216
  out.append(f" {name}")
217
217
  elif parsed_args.type == "plugin":
218
218
  out.append("Available plugins:")
@@ -0,0 +1,183 @@
1
+ ###############################################################################
2
+ #
3
+ # MIT License
4
+ #
5
+ # Copyright (c) 2025 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
+ import importlib.metadata
29
+ import inspect
30
+ import json
31
+ import os
32
+ from pathlib import Path
33
+ from typing import Any, Optional
34
+
35
+ from pydantic import ValidationError
36
+
37
+ from nodescraper.models import PluginConfig
38
+
39
+ PLUGIN_CONFIG_ENTRY_POINT_GROUP = "nodescraper.plugin_configs"
40
+
41
+
42
+ class PluginConfigEntryPointError(RuntimeError):
43
+ """Raised when a ``nodescraper.plugin_configs`` entry point cannot be loaded."""
44
+
45
+
46
+ class ConfigRegistry:
47
+ """Class to load json plugin configs into models"""
48
+
49
+ INTERNAL_SEARCH_PATH = os.path.join(os.path.dirname(__file__), "configs")
50
+
51
+ def __init__(
52
+ self,
53
+ config_path: Optional[str] = None,
54
+ load_entry_point_configs: bool = True,
55
+ ) -> None:
56
+ """Initialize the config registry.
57
+
58
+ Args:
59
+ config_path (Optional[str], optional): Path in which to search for JSON config files.
60
+ Defaults to None.
61
+ load_entry_point_configs (bool, optional): Whether to load ``nodescraper.plugin_configs``
62
+ entry points. Defaults to True.
63
+ """
64
+ self.configs: dict[str, PluginConfig] = {}
65
+ self.load_configs(config_path)
66
+ if load_entry_point_configs:
67
+ self.configs.update(self.load_plugin_configs_from_entry_points())
68
+
69
+ def load_configs(self, config_path: Optional[str] = None):
70
+ """Load plugin config JSON files into pydantic models.
71
+
72
+ Args:
73
+ config_path (Optional[str], optional): Path in which to search for config files.
74
+ Defaults to None.
75
+ """
76
+ if not config_path:
77
+ config_path = self.INTERNAL_SEARCH_PATH
78
+
79
+ config_path = Path(config_path)
80
+
81
+ for config_file in config_path.glob("*.json"):
82
+ with open(config_file, "r", encoding="utf-8") as in_file:
83
+ try:
84
+ file_data = json.load(in_file)
85
+ config_model = PluginConfig(**file_data)
86
+ if config_model.name:
87
+ self.configs[config_model.name] = config_model
88
+ else:
89
+ self.configs[config_file.name] = config_model
90
+ except (ValidationError, json.JSONDecodeError):
91
+ pass
92
+
93
+ @staticmethod
94
+ def _entry_points_for_group(group: str):
95
+ """Return setuptools entry points for the given group name.
96
+
97
+ Args:
98
+ group (str): Entry point group to query.
99
+
100
+ Returns:
101
+ Iterable: Entry points registered under ``group``.
102
+ """
103
+ try:
104
+ return importlib.metadata.entry_points(group=group) # type: ignore[call-arg]
105
+ except TypeError:
106
+ all_eps = importlib.metadata.entry_points() # type: ignore[assignment]
107
+ return all_eps.get(group, []) # type: ignore[assignment, attr-defined, arg-type]
108
+
109
+ @staticmethod
110
+ def _resolve_entry_point_config(loaded: Any) -> PluginConfig | dict[str, Any] | None:
111
+ """Resolve a loaded entry point object into a plugin config.
112
+
113
+ Args:
114
+ loaded (Any): Object returned by an entry point ``load()`` call.
115
+
116
+ Returns:
117
+ Optional[PluginConfig | dict[str, Any]]: Plugin config, or None if ``loaded`` is unsupported.
118
+ """
119
+ if isinstance(loaded, PluginConfig):
120
+ return loaded
121
+ if isinstance(loaded, dict):
122
+ return loaded
123
+ if inspect.isclass(loaded) and hasattr(loaded, "plugin_config"):
124
+ config_data = loaded.plugin_config()
125
+ elif callable(loaded):
126
+ config_data = loaded()
127
+ else:
128
+ return None
129
+
130
+ if isinstance(config_data, (PluginConfig, dict)):
131
+ return config_data
132
+ return None
133
+
134
+ @classmethod
135
+ def load_plugin_configs_from_entry_points(cls) -> dict[str, PluginConfig]:
136
+ """Load plugin configs registered under ``nodescraper.plugin_configs`` entry points.
137
+
138
+ Returns:
139
+ dict[str, PluginConfig]: Map of config name to loaded :class:`~nodescraper.models.PluginConfig`.
140
+
141
+ Raises:
142
+ PluginConfigEntryPointError: If an entry point target is missing, invalid, or unsupported.
143
+ """
144
+ configs: dict[str, PluginConfig] = {}
145
+
146
+ for entry_point in cls._entry_points_for_group(PLUGIN_CONFIG_ENTRY_POINT_GROUP):
147
+ entry_point_name = getattr(entry_point, "name", None)
148
+ entry_point_label = entry_point_name or "<unknown>"
149
+ try:
150
+ loaded = entry_point.load() # type: ignore[attr-defined]
151
+ config_data = cls._resolve_entry_point_config(loaded)
152
+ if config_data is None:
153
+ raise PluginConfigEntryPointError(
154
+ f"Failed to load plugin config entry point {entry_point_label!r}: "
155
+ f"unsupported target {loaded!r}"
156
+ )
157
+
158
+ config_model = (
159
+ config_data
160
+ if isinstance(config_data, PluginConfig)
161
+ else PluginConfig(**config_data)
162
+ )
163
+ config_key = entry_point_name or config_model.name
164
+ if config_key:
165
+ configs[config_key] = config_model
166
+ except ModuleNotFoundError as exc:
167
+ raise PluginConfigEntryPointError(
168
+ f"Failed to load plugin config entry point {entry_point_label!r}: "
169
+ f"module not found ({exc}). Check the entry point target in pyproject.toml."
170
+ ) from exc
171
+ except ValidationError as exc:
172
+ raise PluginConfigEntryPointError(
173
+ f"Failed to load plugin config entry point {entry_point_label!r}: "
174
+ "invalid plugin config"
175
+ ) from exc
176
+ except PluginConfigEntryPointError:
177
+ raise
178
+ except Exception as exc:
179
+ raise PluginConfigEntryPointError(
180
+ f"Failed to load plugin config entry point {entry_point_label!r}: {exc}"
181
+ ) from exc
182
+
183
+ return configs
@@ -23,7 +23,9 @@
23
23
  # SOFTWARE.
24
24
  #
25
25
  ###############################################################################
26
- from typing import Optional
26
+ from __future__ import annotations
27
+
28
+ from typing import Any, Optional
27
29
 
28
30
  from pydantic import BaseModel, Field
29
31
 
@@ -36,3 +38,31 @@ class PluginConfig(BaseModel):
36
38
  result_collators: dict[str, dict] = Field(default_factory=dict)
37
39
  name: Optional[str] = None
38
40
  desc: Optional[str] = None
41
+
42
+ @classmethod
43
+ def coerce(cls, config: PluginConfig | dict[str, Any]) -> PluginConfig:
44
+ """Return a ``PluginConfig`` instance from a model or mapping."""
45
+ if isinstance(config, cls):
46
+ return config
47
+ return cls.model_validate(config)
48
+
49
+ @classmethod
50
+ def merge(cls, *configs: PluginConfig | dict[str, Any]) -> PluginConfig:
51
+ """Merge recipe plugin configs.
52
+
53
+ Plugin entries from later configs overwrite earlier ones with the same name.
54
+ ``name``, ``desc``, ``global_args``, and ``result_collators`` come from the first
55
+ config.
56
+ """
57
+ normalized = [cls.coerce(config) for config in configs]
58
+ merged_plugins: dict[str, dict[str, Any]] = {}
59
+ for config in normalized:
60
+ merged_plugins.update(config.plugins)
61
+ first = normalized[0] if normalized else cls()
62
+ return cls(
63
+ name=first.name,
64
+ desc=first.desc,
65
+ global_args=first.global_args,
66
+ plugins=merged_plugins,
67
+ result_collators=first.result_collators,
68
+ )
@@ -0,0 +1,51 @@
1
+ ###############################################################################
2
+ #
3
+ # MIT License
4
+ #
5
+ # Copyright (c) 2025 Advanced Micro Devices, Inc.
6
+ #
7
+ ###############################################################################
8
+ from nodescraper.models import PluginConfig
9
+
10
+ from .all_plugins import AllPlugins
11
+ from .discovery import (
12
+ load_plugin_class,
13
+ plugin_has_analyzer,
14
+ plugin_has_collector,
15
+ plugin_names_matching,
16
+ plugins_with_analyzer,
17
+ plugins_with_collector,
18
+ registered_plugin_names,
19
+ )
20
+ from .node_status import NodeStatus
21
+ from .pluginrecipe import (
22
+ ANALYZE_ONLY,
23
+ COLLECT_AND_ANALYZE,
24
+ COLLECT_ONLY,
25
+ AnalyzerOnlyPluginRecipe,
26
+ CollectorOnlyPluginRecipe,
27
+ PluginRecipe,
28
+ PluginRunFlags,
29
+ merge_plugin_configs,
30
+ )
31
+
32
+ __all__ = [
33
+ "ANALYZE_ONLY",
34
+ "COLLECT_AND_ANALYZE",
35
+ "COLLECT_ONLY",
36
+ "AllPlugins",
37
+ "AnalyzerOnlyPluginRecipe",
38
+ "CollectorOnlyPluginRecipe",
39
+ "NodeStatus",
40
+ "PluginConfig",
41
+ "PluginRecipe",
42
+ "PluginRunFlags",
43
+ "load_plugin_class",
44
+ "merge_plugin_configs",
45
+ "plugin_has_analyzer",
46
+ "plugin_has_collector",
47
+ "plugin_names_matching",
48
+ "plugins_with_analyzer",
49
+ "plugins_with_collector",
50
+ "registered_plugin_names",
51
+ ]
@@ -0,0 +1,24 @@
1
+ ###############################################################################
2
+ #
3
+ # MIT License
4
+ #
5
+ # Copyright (c) 2025 Advanced Micro Devices, Inc.
6
+ #
7
+ ###############################################################################
8
+ from __future__ import annotations
9
+
10
+ from .discovery import registered_plugin_names
11
+ from .pluginrecipe import PluginRecipe
12
+
13
+
14
+ class AllPlugins(PluginRecipe):
15
+ """Run all registered plugins with default arguments."""
16
+
17
+ @classmethod
18
+ def plugin_names(cls) -> tuple[str, ...]:
19
+ """Return every plugin registered at runtime.
20
+
21
+ Returns:
22
+ tuple[str, ...]: Sorted names of all plugins in the plugin registry.
23
+ """
24
+ return registered_plugin_names()
@@ -0,0 +1,98 @@
1
+ ###############################################################################
2
+ #
3
+ # MIT License
4
+ #
5
+ # Copyright (c) 2025 Advanced Micro Devices, Inc.
6
+ #
7
+ ###############################################################################
8
+ from __future__ import annotations
9
+
10
+ from typing import Iterable
11
+
12
+
13
+ def registered_plugin_names() -> tuple[str, ...]:
14
+ """Return all plugin names known to :class:`~nodescraper.pluginregistry.PluginRegistry`.
15
+
16
+ Returns:
17
+ tuple[str, ...]: Sorted registered plugin names.
18
+ """
19
+ from nodescraper.pluginregistry import PluginRegistry
20
+
21
+ return tuple(sorted(PluginRegistry().plugins))
22
+
23
+
24
+ def plugin_names_matching(names: Iterable[str]) -> tuple[str, ...]:
25
+ """Return plugin names from ``names`` that are registered at runtime.
26
+
27
+ Args:
28
+ names (Iterable[str]): Candidate plugin names to filter.
29
+
30
+ Returns:
31
+ tuple[str, ...]: Sorted subset of ``names`` present in the plugin registry.
32
+ """
33
+ available = set(registered_plugin_names())
34
+ return tuple(sorted(name for name in names if name in available))
35
+
36
+
37
+ def load_plugin_class(plugin_name: str) -> type | None:
38
+ """Return a registered plugin class by name.
39
+
40
+ Args:
41
+ plugin_name (str): Registered plugin name.
42
+
43
+ Returns:
44
+ type | None: Plugin class, or ``None`` if the name is not registered.
45
+ """
46
+ from nodescraper.pluginregistry import PluginRegistry
47
+
48
+ return PluginRegistry().plugins.get(plugin_name)
49
+
50
+
51
+ def plugin_has_collector(plugin_name: str) -> bool:
52
+ """Return whether the plugin exposes a collector task.
53
+
54
+ Args:
55
+ plugin_name (str): Registered plugin name.
56
+
57
+ Returns:
58
+ bool: ``True`` when the plugin class defines ``COLLECTOR``.
59
+ """
60
+ plugin_class = load_plugin_class(plugin_name)
61
+ return plugin_class is not None and getattr(plugin_class, "COLLECTOR", None) is not None
62
+
63
+
64
+ def plugin_has_analyzer(plugin_name: str) -> bool:
65
+ """Return whether the plugin exposes an analyzer task.
66
+
67
+ Args:
68
+ plugin_name (str): Registered plugin name.
69
+
70
+ Returns:
71
+ bool: ``True`` when the plugin class defines ``ANALYZER``.
72
+ """
73
+ plugin_class = load_plugin_class(plugin_name)
74
+ return plugin_class is not None and getattr(plugin_class, "ANALYZER", None) is not None
75
+
76
+
77
+ def plugins_with_collector(plugin_names: Iterable[str]) -> tuple[str, ...]:
78
+ """Filter plugin names to those that define a collector.
79
+
80
+ Args:
81
+ plugin_names (Iterable[str]): Candidate plugin names.
82
+
83
+ Returns:
84
+ tuple[str, ...]: Sorted plugin names with a ``COLLECTOR`` implementation.
85
+ """
86
+ return tuple(sorted(name for name in plugin_names if plugin_has_collector(name)))
87
+
88
+
89
+ def plugins_with_analyzer(plugin_names: Iterable[str]) -> tuple[str, ...]:
90
+ """Filter plugin names to those that define an analyzer.
91
+
92
+ Args:
93
+ plugin_names (Iterable[str]): Candidate plugin names.
94
+
95
+ Returns:
96
+ tuple[str, ...]: Sorted plugin names with an ``ANALYZER`` implementation.
97
+ """
98
+ return tuple(sorted(name for name in plugin_names if plugin_has_analyzer(name)))
@@ -0,0 +1,38 @@
1
+ ###############################################################################
2
+ #
3
+ # MIT License
4
+ #
5
+ # Copyright (c) 2025 Advanced Micro Devices, Inc.
6
+ #
7
+ ###############################################################################
8
+ from __future__ import annotations
9
+
10
+ from .discovery import plugin_names_matching
11
+ from .pluginrecipe import PluginRecipe
12
+
13
+ _NODE_STATUS_PLUGINS = (
14
+ "BiosPlugin",
15
+ "CmdlinePlugin",
16
+ "DimmPlugin",
17
+ "DkmsPlugin",
18
+ "DmesgPlugin",
19
+ "KernelPlugin",
20
+ "MemoryPlugin",
21
+ "OsPlugin",
22
+ "RocmPlugin",
23
+ "StoragePlugin",
24
+ "UptimePlugin",
25
+ )
26
+
27
+
28
+ class NodeStatus(PluginRecipe):
29
+ """Check configuration and status of the node."""
30
+
31
+ @classmethod
32
+ def plugin_names(cls) -> tuple[str, ...]:
33
+ """Return the NodeStatus plugin set resolved at runtime.
34
+
35
+ Returns:
36
+ tuple[str, ...]: Sorted node-status plugin names registered in the plugin registry.
37
+ """
38
+ return plugin_names_matching(_NODE_STATUS_PLUGINS)