97 lines
2.3 KiB
Go
97 lines
2.3 KiB
Go
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/pkg/model"
|
|
)
|
|
|
|
func RenderColor(value string, c text.Colors, format string) string {
|
|
if format != "table" {
|
|
return value
|
|
}
|
|
|
|
return c.Sprint(value)
|
|
}
|
|
|
|
func Render(values []*model.Result, 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 = RenderColor(fmt.Sprintf("%.0f", *value.DaysLeft), text.Colors{0, text.FgRed}, format)
|
|
date = RenderColor(*value.Date, text.Colors{0, text.FgRed}, format)
|
|
} 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()
|
|
}
|
|
}
|