Skip to content

ScaleOutDellPlugin and ScaleOutAristaPlugin#232

Open
sunnyhe2 wants to merge 7 commits into
developmentfrom
sunny_switch_port
Open

ScaleOutDellPlugin and ScaleOutAristaPlugin#232
sunnyhe2 wants to merge 7 commits into
developmentfrom
sunny_switch_port

Conversation

@sunnyhe2

Copy link
Copy Markdown
Collaborator

Summary

  • Port over Arista and Dell scaleup switch from errorscraper.

Test plan

  • pytest test/unit
  • pytest test/functional (if applicable)
  • pre-commit run --all-files

Checklist

  • Added/updated tests (or explained why not)
  • Updated docs/README if behavior changed
  • No secrets or credentials committed

@sunnyhe2 sunnyhe2 requested a review from alexandraBara June 22, 2026 21:20
@alexandraBara alexandraBara changed the title Switch errorscraper port ScaleOutDellPlugin and ScaleOutAristaPlugin Jun 22, 2026
Comment thread nodescraper/interfaces/dataplugin.py
Mapping of port name to a list of
:class:`DellPfcWatchdogQueueStats`, or ``None``.
"""
cmd = "show qos interface Ethall queue all priority-flow-control watchdog-statistics"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this the same as "Eth all"?

alexbara@ausalexbara02:~/node-scraper_test$ git grep "Eth all"
nodescraper/plugins/inband/switch/scale_out_dell/scale_out_dell_collector.py:        "show qos interface Eth all",
nodescraper/plugins/inband/switch/scale_out_dell/scale_out_dell_collector.py:        "show qos interface Eth all queue all",   
alexbara@ausalexbara02:~/node-scraper_test$ git grep "Ethall"
nodescraper/plugins/inband/switch/scale_out_dell/scale_out_dell_collector.py:        cmd = "show qos interface Ethall priority-flow-control statistics"
nodescraper/plugins/inband/switch/scale_out_dell/scale_out_dell_collector.py:        cmd = "show qos interface Ethall queue all priority-flow-control watchdog-statistics"

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Slightly different

accumulated: Optional[Union[dict, list]] = None
for spec in specs:
rendered = self._substitute_port_placeholder(command, spec)
cmd_ret: CommandArtifact = self._run_sut_cmd(f"{rendered} | json | no-more")

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we need to have the cmds inside run_sut_cmd abstracted at a class level so the documentation generator script can pick them up for the automated doc creation. You can put in place holders, see other plugins. Make sure the cmd names start with CMD_<>. Throughout

cmd_ret: CommandArtifact = self._run_sut_cmd(f"{rendered} | json | no-more")
if cmd_ret.exit_code != 0:
self._log_event(
category=EventCategory.APPLICATION,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe we need a new EventCategory? SWITCH? just a suggestion.

Comment on lines +259 to +265
"transmitted_ok": "0",
"transmitted_drop": "0",
"received_ok": "0",
"received_drop": "0",
"tx_last_ok": "0",
"tx_last_drop": "0",
"rx_last_ok": "0",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these <>_ok fields here, wont they be non-zero?

return None
try:
return DellInterfaceDetailCounters.model_validate(kwargs)
except (ValidationError, TypeError):

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we print something here? we should know what fails in case some parsing needs updating. Silent failures are not a good idea


error_fields: ClassVar[dict[str, str]] = {
"oper": "up",
"speed": "400000",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will this ever change? should this be made a collector arg so we can update it at runtime?

Comment on lines +275 to +283
for port_name in port_names:
text = self._run_dell_command(f"show interface counters {port_name}")
if text is None:
continue
parsed = self._parse_detail_counters_block(text)
if parsed is None:
continue
result[port_name] = parsed
return result or None

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how many ports are we looking at? can we get all ports info in 1 ssh call and then do the parsing on the python side?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a limitation of Dell. The current workaround is have filters to collect (for the commands that cant be done in one call) on the ports we care about.

@alexandraBara alexandraBara added the enhancement New feature or request label Jun 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants