200 lines
6.1 KiB
Go
200 lines
6.1 KiB
Go
package template
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"time"
|
|
|
|
"github.com/influxdata/influx-cli/v2/api"
|
|
"github.com/influxdata/influx-cli/v2/pkg/influxid"
|
|
)
|
|
|
|
// PrintSummary renders high-level info about a template as a table for display on the console.
|
|
//
|
|
// NOTE: The implementation here is very "static" in that it's hard-coded to look for specific
|
|
// resource-kinds and fields within those kinds. If the API changes to add more kinds / more fields,
|
|
// this function won't automatically pick them up & print them. It'd be nice to rework this to be
|
|
// less opinionated / more resilient to extension in the future...
|
|
func PrintSummary(summary api.TemplateSummaryResources, out io.Writer, useColor bool, useBorders bool) error {
|
|
newPrinter := func(title string, headers []string) *TablePrinter {
|
|
return NewTablePrinter(out, useColor, useBorders).
|
|
Title(title).
|
|
SetHeaders(append([]string{"Package Name", "ID", "Resource Name"}, headers...)...)
|
|
}
|
|
|
|
if labels := summary.Labels; len(labels) > 0 {
|
|
printer := newPrinter("LABELS", []string{"Description", "Color"})
|
|
for _, l := range labels {
|
|
id := influxid.ID(l.Id).String()
|
|
var desc string
|
|
if l.Properties.Description != nil {
|
|
desc = *l.Properties.Description
|
|
}
|
|
printer.Append([]string{l.TemplateMetaName, id, l.Name, desc, l.Properties.Color})
|
|
}
|
|
printer.Render()
|
|
_, _ = out.Write([]byte("\n"))
|
|
}
|
|
|
|
if buckets := summary.Buckets; len(buckets) > 0 {
|
|
printer := newPrinter("BUCKETS", []string{"Retention", "Description", "Schema Type"})
|
|
for _, b := range buckets {
|
|
id := influxid.ID(b.Id).String()
|
|
var desc string
|
|
if b.Description != nil {
|
|
desc = *b.Description
|
|
}
|
|
rp := "inf"
|
|
if b.RetentionPeriod != 0 {
|
|
rp = time.Duration(b.RetentionPeriod).String()
|
|
}
|
|
schemaType := api.SCHEMATYPE_IMPLICIT
|
|
if b.SchemaType != nil {
|
|
schemaType = *b.SchemaType
|
|
}
|
|
printer.Append([]string{b.TemplateMetaName, id, b.Name, rp, desc, schemaType.String()})
|
|
}
|
|
printer.Render()
|
|
_, _ = out.Write([]byte("\n"))
|
|
}
|
|
|
|
if checks := summary.Checks; len(checks) > 0 {
|
|
printer := newPrinter("CHECKS", []string{"Description"})
|
|
for _, c := range checks {
|
|
id := influxid.ID(c.Id).String()
|
|
var desc string
|
|
if c.Description != nil {
|
|
desc = *c.Description
|
|
}
|
|
printer.Append([]string{c.TemplateMetaName, id, c.Name, desc})
|
|
}
|
|
printer.Render()
|
|
_, _ = out.Write([]byte("\n"))
|
|
}
|
|
|
|
if dashboards := summary.Dashboards; len(dashboards) > 0 {
|
|
printer := newPrinter("DASHBOARDS", []string{"Description"})
|
|
for _, d := range dashboards {
|
|
id := influxid.ID(d.Id).String()
|
|
var desc string
|
|
if d.Description != nil {
|
|
desc = *d.Description
|
|
}
|
|
printer.Append([]string{d.TemplateMetaName, id, d.Name, desc})
|
|
}
|
|
printer.Render()
|
|
_, _ = out.Write([]byte("\n"))
|
|
}
|
|
|
|
if endpoints := summary.NotificationEndpoints; len(endpoints) > 0 {
|
|
printer := newPrinter("NOTIFICATION ENDPOINTS", []string{"Description", "Status"})
|
|
for _, e := range endpoints {
|
|
id := influxid.ID(e.Id).String()
|
|
var desc string
|
|
if e.Description != nil {
|
|
desc = *e.Description
|
|
}
|
|
printer.Append([]string{e.TemplateMetaName, id, e.Name, desc, e.Status})
|
|
}
|
|
printer.Render()
|
|
_, _ = out.Write([]byte("\n"))
|
|
}
|
|
|
|
if rules := summary.NotificationRules; len(rules) > 0 {
|
|
printer := newPrinter("NOTIFICATION RULES", []string{"Description", "Every", "Offset", "Endpoint Name", "Endpoint ID", "Endpoint Type"})
|
|
for _, r := range rules {
|
|
id := influxid.ID(r.Id).String()
|
|
eid := influxid.ID(r.EndpointID).String()
|
|
var desc string
|
|
if r.Description != nil {
|
|
desc = *r.Description
|
|
}
|
|
printer.Append([]string{r.TemplateMetaName, id, r.Name, desc, r.Every, r.Offset, r.EndpointTemplateMetaName, eid, r.EndpointType})
|
|
}
|
|
printer.Render()
|
|
_, _ = out.Write([]byte("\n"))
|
|
}
|
|
|
|
if tasks := summary.Tasks; len(tasks) > 0 {
|
|
printer := newPrinter("TASKS", []string{"Description", "Cycle"})
|
|
for _, t := range tasks {
|
|
id := influxid.ID(t.Id).String()
|
|
var desc string
|
|
if t.Description != nil {
|
|
desc = *t.Description
|
|
}
|
|
var timing string
|
|
if t.Cron != nil {
|
|
timing = *t.Cron
|
|
} else {
|
|
offset := time.Duration(0).String()
|
|
if t.Offset != nil {
|
|
offset = *t.Offset
|
|
}
|
|
// If `cron` isn't set, `every` must be set
|
|
timing = fmt.Sprintf("every: %s offset: %s", *t.Every, offset)
|
|
}
|
|
printer.Append([]string{t.TemplateMetaName, id, t.Name, desc, timing})
|
|
}
|
|
printer.Render()
|
|
_, _ = out.Write([]byte("\n"))
|
|
}
|
|
|
|
if teles := summary.TelegrafConfigs; len(teles) > 0 {
|
|
printer := newPrinter("TELEGRAF CONFIGS", []string{"Description"})
|
|
for _, t := range teles {
|
|
var desc string
|
|
if t.TelegrafConfig.Description != nil {
|
|
desc = *t.TelegrafConfig.Description
|
|
}
|
|
printer.Append([]string{t.TemplateMetaName, t.TelegrafConfig.Id, t.TelegrafConfig.Name, desc})
|
|
}
|
|
printer.Render()
|
|
_, _ = out.Write([]byte("\n"))
|
|
}
|
|
|
|
if vars := summary.Variables; len(vars) > 0 {
|
|
printer := newPrinter("VARIABLES", []string{"Description", "Arg Type", "Arg Values"})
|
|
for _, v := range vars {
|
|
id := influxid.ID(v.Id).String()
|
|
var desc string
|
|
if v.Description != nil {
|
|
desc = *v.Description
|
|
}
|
|
var argType string
|
|
if v.Arguments != nil {
|
|
argType = v.Arguments.Type
|
|
}
|
|
printer.Append([]string{v.TemplateMetaName, id, v.Name, desc, argType, v.Arguments.Render()})
|
|
}
|
|
printer.Render()
|
|
_, _ = out.Write([]byte("\n"))
|
|
}
|
|
|
|
if mappings := summary.LabelMappings; len(mappings) > 0 {
|
|
printer := NewTablePrinter(out, useColor, useBorders).
|
|
Title("LABEL ASSOCIATIONS").
|
|
SetHeaders("Resource Type", "Resource Name", "Resource ID", "Label Name", "Label ID")
|
|
for _, m := range mappings {
|
|
rid := influxid.ID(m.ResourceID).String()
|
|
lid := influxid.ID(m.LabelID).String()
|
|
printer.Append([]string{m.ResourceType, m.ResourceName, rid, m.LabelName, lid})
|
|
}
|
|
printer.Render()
|
|
_, _ = out.Write([]byte("\n"))
|
|
}
|
|
|
|
if secrets := summary.MissingSecrets; len(secrets) > 0 {
|
|
printer := NewTablePrinter(out, useColor, useBorders).
|
|
Title("MISSING SECRETS").
|
|
SetHeaders("Secret Key")
|
|
for _, sk := range secrets {
|
|
printer.Append([]string{sk})
|
|
}
|
|
printer.Render()
|
|
_, _ = out.Write([]byte("\n"))
|
|
}
|
|
|
|
return nil
|
|
}
|