156 lines
3.6 KiB
Go
156 lines
3.6 KiB
Go
package telegrafs
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/influxdata/influx-cli/v2/api"
|
|
"github.com/influxdata/influx-cli/v2/clients"
|
|
)
|
|
|
|
type Client struct {
|
|
clients.CLI
|
|
api.TelegrafsApi
|
|
api.OrganizationsApi
|
|
}
|
|
|
|
type telegrafPrintOpts struct {
|
|
graf *api.Telegraf
|
|
grafs *api.Telegrafs
|
|
}
|
|
|
|
type ListParams struct {
|
|
clients.OrgParams
|
|
Id string
|
|
}
|
|
|
|
func (c Client) List(ctx context.Context, params *ListParams) error {
|
|
if params.Id == "" && params.OrgID == "" && params.OrgName == "" && c.ActiveConfig.Org == "" {
|
|
return errors.New("at least one of org, org-id, or id must be provided")
|
|
}
|
|
|
|
if params.Id != "" {
|
|
telegraf, err := c.GetTelegrafsID(ctx, params.Id).Execute()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to get telegraf config with ID %q: %w", params.Id, err)
|
|
}
|
|
|
|
return c.printTelegrafs(telegrafPrintOpts{graf: &telegraf})
|
|
}
|
|
|
|
orgID, err := params.GetOrgID(ctx, c.ActiveConfig, c.OrganizationsApi)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
telegrafs, err := c.GetTelegrafs(ctx).OrgID(orgID).Execute()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to get telegraf configs from org %q: %w", orgID, err)
|
|
}
|
|
|
|
return c.printTelegrafs(telegrafPrintOpts{grafs: &telegrafs})
|
|
}
|
|
|
|
type CreateParams struct {
|
|
clients.OrgParams
|
|
Desc string
|
|
Config string
|
|
Name string
|
|
}
|
|
|
|
func (c Client) Create(ctx context.Context, params *CreateParams) error {
|
|
orgID, err := params.GetOrgID(ctx, c.ActiveConfig, c.OrganizationsApi)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
newTelegraf := api.TelegrafPluginRequest{
|
|
Name: ¶ms.Name,
|
|
Description: ¶ms.Desc,
|
|
Config: ¶ms.Config,
|
|
OrgID: &orgID,
|
|
}
|
|
|
|
graf, err := c.PostTelegrafs(ctx).TelegrafPluginRequest(newTelegraf).Execute()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to create telegraf config %q: %w", params.Name, err)
|
|
}
|
|
|
|
return c.printTelegrafs(telegrafPrintOpts{graf: &graf})
|
|
}
|
|
|
|
type RemoveParams struct {
|
|
Ids []string
|
|
}
|
|
|
|
func (c Client) Remove(ctx context.Context, params *RemoveParams) error {
|
|
for _, rawID := range params.Ids {
|
|
if err := c.DeleteTelegrafsID(ctx, rawID).Execute(); err != nil {
|
|
return fmt.Errorf("failed to delete telegraf config with ID %q: %w", rawID, err)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type UpdateParams struct {
|
|
Desc string
|
|
Config string
|
|
Name string
|
|
Id string
|
|
}
|
|
|
|
func (c Client) Update(ctx context.Context, params *UpdateParams) error {
|
|
oldTelegraf, err := c.GetTelegrafsID(ctx, params.Id).Execute()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to find telegraf config with ID %q: %w", params.Id, err)
|
|
}
|
|
orgID := oldTelegraf.OrgID
|
|
|
|
updateTelegraf := api.TelegrafRequest{
|
|
Name: ¶ms.Name,
|
|
Description: ¶ms.Desc,
|
|
Config: ¶ms.Config,
|
|
OrgID: orgID,
|
|
}
|
|
|
|
graf, err := c.PutTelegrafsID(ctx, params.Id).TelegrafRequest(updateTelegraf).Execute()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to update telegraf config with ID %q: %w", params.Id, err)
|
|
}
|
|
|
|
return c.printTelegrafs(telegrafPrintOpts{graf: &graf})
|
|
}
|
|
|
|
func (c Client) printTelegrafs(opts telegrafPrintOpts) error {
|
|
if c.PrintAsJSON {
|
|
var v interface{}
|
|
if opts.graf != nil {
|
|
v = opts.graf
|
|
} else {
|
|
v = opts.grafs
|
|
}
|
|
return c.PrintJSON(v)
|
|
}
|
|
|
|
headers := []string{"ID", "OrgID", "Name", "Description"}
|
|
|
|
telegrafs := opts.grafs.GetConfigurations()
|
|
if opts.graf != nil {
|
|
telegrafs = append(telegrafs, *opts.graf)
|
|
}
|
|
|
|
var rows []map[string]interface{}
|
|
for _, u := range telegrafs {
|
|
row := map[string]interface{}{
|
|
"ID": u.GetId(),
|
|
"OrgID": u.GetOrgID(),
|
|
"Name": u.GetName(),
|
|
"Description": u.GetDescription(),
|
|
}
|
|
rows = append(rows, row)
|
|
}
|
|
|
|
return c.PrintTable(headers, rows...)
|
|
}
|