internal/renderers/excel/recommendations.go (93 lines of code) (raw):
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
package excel
import (
"fmt"
_ "image/png"
"strconv"
"github.com/Azure/azqr/internal/renderers"
"github.com/rs/zerolog/log"
"github.com/xuri/excelize/v2"
)
func renderRecommendations(f *excelize.File, data *renderers.ReportData) int {
sheetName := "Recommendations"
err := f.SetSheetName("Sheet1", sheetName)
if err != nil {
log.Fatal().Err(err).Msgf("Failed to create %s sheet", sheetName)
}
records := data.RecommendationsTable()
headers := records[0]
createFirstRow(f, sheetName, headers)
if len(data.Recommendations) > 0 {
records = records[1:]
currentRow := 4
for _, row := range records {
currentRow += 1
cell, err := excelize.CoordinatesToCellName(1, currentRow)
if err != nil {
log.Fatal().Err(err).Msg("Failed to get cell")
}
err = f.SetSheetRow(sheetName, cell, &row)
if err != nil {
log.Fatal().Err(err).Msg("Failed to set row")
}
setHyperLink(f, sheetName, 11, currentRow)
}
configureSheet(f, sheetName, headers, currentRow)
return currentRow
} else {
log.Info().Msgf("Skipping %s. No data to render", sheetName)
return 0
}
}
func renderRecommendationsPivotTables(f *excelize.File, lastRow int) {
sheetName := "PivotTable"
if lastRow > 0 {
_, err := f.NewSheet(sheetName)
if err != nil {
log.Fatal().Err(err).Msgf("Failed to create %s sheet", sheetName)
}
if err := f.AddPivotTable(&excelize.PivotTableOptions{
DataRange: fmt.Sprintf("Recommendations!A4:L%s", strconv.Itoa(lastRow)),
PivotTableRange: "PivotTable!A4:F7",
Rows: []excelize.PivotTableField{
{Data: "Azure Service / Well-Architected"}, {Data: "Azure Service / Well-Architected Topic"}},
Filter: []excelize.PivotTableField{
{Data: "Implemented"}},
Columns: []excelize.PivotTableField{
{Data: "Impact"}},
Data: []excelize.PivotTableField{
{Data: "Azure Service / Well-Architected Topic", Name: "Recommendations per Azure Service / Well-Architected Topic", Subtotal: "Count"}},
RowGrandTotals: true,
ColGrandTotals: true,
ShowDrill: true,
ShowRowHeaders: true,
ShowColHeaders: true,
ShowLastColumn: true,
}); err != nil {
log.Info().Err(err).Msgf("Failed to create %s pivot table", sheetName)
return
}
if err := f.AddPivotTable(&excelize.PivotTableOptions{
DataRange: fmt.Sprintf("Recommendations!A4:L%s", strconv.Itoa(lastRow)),
PivotTableRange: "PivotTable!I4:N7",
Filter: []excelize.PivotTableField{
{Data: "Implemented"}},
Columns: []excelize.PivotTableField{
{Data: "Impact"}},
Rows: []excelize.PivotTableField{
{Data: "Resiliency Category"}},
Data: []excelize.PivotTableField{
{Data: "Resiliency Category", Name: "Count of Resiliency Category", Subtotal: "Count"}},
RowGrandTotals: true,
ColGrandTotals: true,
ShowDrill: true,
ShowRowHeaders: true,
ShowColHeaders: true,
ShowLastColumn: true,
}); err != nil {
log.Info().Err(err).Msgf("Failed to create %s pivot table", sheetName)
return
}
} else {
log.Info().Msgf("Skipping %s. No data to render", sheetName)
}
}