XLSX report export + HTML report Results/Payload toggle improvements#652
XLSX report export + HTML report Results/Payload toggle improvements#652sivaprabug wants to merge 6 commits intoDMTF:mainfrom
Conversation
Add XLSX report generation and update requirements Signed-off-by: Sivaprabu Ganesan <sivaprabug@ami.com>
Aligned junk characters and unwanted spaces Signed-off-by: Sivaprabu Ganesan <sivaprabug@ami.com>
|
This is great! Could we also have a "hide" option for the existing "Results" and "Payload" buttons like there is with the "Both" option? |
Review comment Addressed: DMTF#652 (comment) CC: @mraineri Signed-off-by: Sivaprabu Ganesan <sivaprabug@ami.com>
Review comment Addressed: DMTF#652 (comment) CC: @mraineri Signed-off-by: Sivaprabu Ganesan <sivaprabug@ami.com>
Hi @mraineri Thanks for the suggestion! I’ve implemented the requested changes accordingly. Kindly refer to the attached report for details. Please take a look and let me know if this aligns with your expectations or if any further adjustments are needed. Thanks! |
|
Looks great to me! I'll pass it around to others for more feedback |
|
This is very helpful! From the other PR - it would be good to fix the "copy" button so it produces better-formatted output (probably plain text or markdown columns?) that can be easily pasted into issues or emails. The whole spreadsheet has the "best" output for this, so the resource-specific copy function can be simple. |
- Replace plain-text copy with a Markdown table formatter for the Results panel Copy button - Extracted shared _doCopy() helper; copyToClipboard() and the new copyTableAsMarkdown() both delegate to it - copyTableAsMarkdown() reads the rendered <table> DOM, builds | col | col | rows with a separator line after the header, and escapes any pipe characters inside cell content - Fix Python double-escape: \n and \| in the JS regex/string literals are now correctly rendered in the generated HTML - Copy JSON button on the Payload panel is unchanged Addressed the review comments: DMTF#652 (comment) CC: @mraineri @jautor Signed-off-by: Sivaprabu Ganesan <sivaprabug@ami.com>
Hi @jautor Thanks for the suggestion — that makes a lot of sense. I’ve updated the Results panel Copy button to generate a Markdown-formatted table instead of plain text, so it can be easily pasted into issues or emails. The implementation keeps the resource-specific logic simple while aligning the output more closely with the spreadsheet-style format you mentioned. The JSON copy functionality remains unchanged. Sample Reports ( Based on OpenBMC - 2600 SOC ) : RedfishServiceValidatorDebug_03_31_2026_081623.log RedfishServiceValidatorReport_03_31_2026_081623.html RedfishServiceValidatorReport_03_31_2026_081623.xlsx Sample URI :
Copy Results (Supports Markdownformat) : | Property | Value | Result |
| :--- | :--- | :---: |
| @odata.context | [Not Present] | SKIP |
| @odata.etag | [Not Present] | SKIP |
| @odata.id | /redfish/v1/TelemetryService/Triggers | PASS |
| @odata.type | #TriggersCollection.TriggersCollection | PASS |
| Description | [Not Present] | SKIP |
| Members | [Array] | PASS |
| Members@odata.count | 0 | PASS |
| Members@odata.nextLink | [Not Present] | SKIP |
| Name | Triggers Collection | PASS |
| Oem | [Not Present] | SKIP |Preview looks like below
Json Data : {
"@odata.id": "/redfish/v1/TelemetryService/Triggers",
"@odata.type": "#TriggersCollection.TriggersCollection",
"Members": [],
"Members@odata.count": 0,
"Name": "Triggers Collection"
} |
|
Nothing else on my end; I expect this will be formally approved on the next tools call |
Thanks @mraineri Based on the feedback, we will enhance the other tools as time permits. |
I would recommend holding off on the Interop Validator for some time; we plan on overhauling it like we did with the service validator recently. I'm glad you're planning on taking this through the other tools though! |

Description
This PR introduces two major enhancements to the Redfish Service Validator reporting system:
Motivation
Previously, validation results were only available in an HTML report — useful for human review but difficult to process programmatically, filter, sort, or share in enterprise environments. This PR adds an Excel-compatible spreadsheet export that makes the data immediately actionable in tools like Excel, LibreOffice, Google Sheets, or any data pipeline that reads
.xlsxfiles.Additionally, the HTML report required toggling back and forth between the property table and raw JSON payload. The new "Both" view eliminates that friction.
Changes
requirements.txt
openpyxl(pure-Python, no native build dependencies) as a runtime dependency to support XLSX generation.report.py
HTML Report — Button Toggle Improvements
.btn-bothCSS style (green,#198754) to the existing button group.build_resource_header()to render three buttons per resource card:classList.toggle()— replaced with explicitclassList.add()/classList.remove()for deterministic state management.New
xlsx_report()FunctionGenerates
RedfishServiceValidatorReport_<timestamp>.xlsxin the same report directory as the HTML file.Sheet 1 — Summary
Sheet 2 — Results
wrap_text=Falseon data cells to prevent Excel from auto-expanding row heights and creating visual empty rows.[Link to: <path>]values are unwrapped to display the bare path (e.g./redfish/v1/Managers/bmc).console_scripts.py
report.xlsx_report()immediately afterreport.html_report().XLSX Report: <path>.Testing
python3 -c "from redfish_service_validator import report"Notes
openpyxlis a well-maintained, widely adopted library (PyPI:openpyxl).Checklist
📊 Sample Reports