package render import ( "encoding/json" "fmt" "os" "sort" "github.com/jedib0t/go-pretty/v6/table" "github.com/jedib0t/go-pretty/v6/text" "gitnet.fr/deblan/expiration-check/checker" ) func RenderColor(value string, c text.Colors, format string) string { if format != "table" { return value } return c.Sprint(value) } func Render(values []checker.Domain, warning, danger float64, format string) { sort.SliceStable(values, func(i, j int) bool { if values[i].Failed && values[j].Failed { return values[i].Name < values[j].Name } if values[i].Failed { return false } if values[j].Failed { return true } return values[i].DaysLeft < values[j].DaysLeft }) if format == "json" { data, _ := json.Marshal(&values) os.Stdout.Write(data) return } t := table.NewWriter() t.SetOutputMirror(os.Stdout) t.AppendHeader(table.Row{ RenderColor("Domain", text.Colors{0, text.FgCyan}, format), RenderColor("Days", text.Colors{0, text.FgCyan}, format), RenderColor("Date", text.Colors{0, text.FgCyan}, format), }) t.SetColumnConfigs([]table.ColumnConfig{ {Number: 2, Align: text.AlignRight}, {Number: 3, Align: text.AlignRight}, }) for _, value := range values { failed := RenderColor("FAIL", text.Colors{0, text.FgRed}, format) if value.Failed { t.AppendRow(table.Row{value.Name, failed, failed}, table.RowConfig{}) } else { var days string var date string if value.DaysLeft <= danger { days = failed date = failed } else if value.DaysLeft <= warning { days = RenderColor(fmt.Sprintf("%.0f", value.DaysLeft), text.Colors{0, text.FgYellow}, format) date = RenderColor(value.Date, text.Colors{0, text.FgYellow}, format) } else { days = RenderColor(fmt.Sprintf("%.0f", value.DaysLeft), text.Colors{0, text.FgGreen}, format) date = RenderColor(value.Date, text.Colors{0, text.FgGreen}, format) } t.AppendRow(table.Row{ value.Name, days, date, }, table.RowConfig{}) } } if format == "table" { t.Render() } else if format == "csv" { t.RenderCSV() } else if format == "html" { t.RenderHTML() } else if format == "tsv" { t.RenderTSV() } else if format == "markdown" { t.RenderMarkdown() } }