expiration-check/render/render.go

97 lines
2.2 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/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()
}
}