github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/control/controldisplay/summary_severity_row.go (about)

     1  package controldisplay
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/turbot/go-kit/helpers"
     8  	"github.com/turbot/steampipe/pkg/control/controlexecute"
     9  )
    10  
    11  type SummarySeverityRowRenderer struct {
    12  	resultTree *controlexecute.ExecutionTree
    13  	width      int
    14  	severity   string
    15  }
    16  
    17  func NewSummarySeverityRowRenderer(resultTree *controlexecute.ExecutionTree, width int, severity string) *SummarySeverityRowRenderer {
    18  	return &SummarySeverityRowRenderer{
    19  		resultTree: resultTree,
    20  		width:      width,
    21  		severity:   severity,
    22  	}
    23  }
    24  
    25  func (r *SummarySeverityRowRenderer) Render() string {
    26  	severitySummary, exists := r.resultTree.Root.Summary.Severity[r.severity]
    27  	// if there are no items for this severity level, return empty string
    28  	if !exists {
    29  		return ""
    30  	}
    31  	colorFunc := ControlColors.Severity
    32  	severityStr := fmt.Sprintf("%s ", colorFunc(strings.ToUpper(r.severity)))
    33  
    34  	count := NewCounterRenderer(
    35  		severitySummary.FailedCount(),
    36  		severitySummary.TotalCount(),
    37  		r.resultTree.Root.Summary.Status.FailedCount(),
    38  		r.resultTree.Root.Summary.Status.TotalCount(),
    39  		CounterRendererOptions{
    40  			AddLeadingSpace: false,
    41  		},
    42  	).Render()
    43  
    44  	graph := NewCounterGraphRenderer(
    45  		severitySummary.FailedCount(),
    46  		severitySummary.TotalCount(),
    47  		r.resultTree.Root.Summary.Status.TotalCount(),
    48  		CounterGraphRendererOptions{
    49  			FailedColorFunc: ControlColors.CountGraphFail,
    50  		},
    51  	).Render()
    52  
    53  	spaceAvailable := r.width - (helpers.PrintableLength(severityStr) + helpers.PrintableLength(count) + helpers.PrintableLength(graph))
    54  	space := ""
    55  	if r.severity == "critical" {
    56  		space = NewSpacerRenderer(4).Render()
    57  	} else {
    58  		space = NewSpacerRenderer(spaceAvailable).Render()
    59  	}
    60  
    61  	return fmt.Sprintf(
    62  		"%s%s%s%s",
    63  		severityStr,
    64  		space,
    65  		count,
    66  		graph,
    67  	)
    68  }