Files
influx-cli/clients/dashboards/dashboards.go

66 lines
1.5 KiB
Go

package dashboards
import (
"context"
"fmt"
"github.com/influxdata/influx-cli/v2/api"
"github.com/influxdata/influx-cli/v2/clients"
)
type Client struct {
clients.CLI
api.DashboardsApi
}
type Params struct {
clients.OrgParams
Ids []string
}
func (c Client) List(ctx context.Context, params *Params) error {
if params.OrgID == "" && params.OrgName == "" && c.ActiveConfig.Org == "" && len(params.Ids) == 0 {
return fmt.Errorf("at least one of org, org-id, or id must be provided")
}
const limit = 100
req := c.GetDashboards(ctx)
req = req.Limit(limit)
if params.OrgID != "" {
req = req.OrgID(params.OrgID)
}
if params.OrgName != "" {
req = req.Org(params.OrgName)
}
if params.OrgID == "" && params.OrgName == "" {
req = req.Org(c.ActiveConfig.Org)
}
dashboards, err := req.Id(params.Ids).Execute()
if err != nil {
return fmt.Errorf("failed to find dashboards: %w", err)
}
return c.printDashboards(dashboards)
}
func (c Client) printDashboards(dashboards api.Dashboards) error {
if c.PrintAsJSON {
return c.PrintJSON(dashboards)
}
headers := []string{"ID", "OrgID", "Name", "Description", "Num Cells"}
var rows []map[string]interface{}
for _, u := range dashboards.GetDashboards() {
row := map[string]interface{}{
"ID": u.GetId(),
"OrgID": u.GetOrgID(),
"Name": u.GetName(),
"Description": u.GetDescription(),
"Num Cells": len(u.GetCells()),
}
rows = append(rows, row)
}
return c.PrintTable(headers, rows...)
}