
* basic list, create, and invoke working * all commands working * added support for create script body from file and invoke params from file * linter cleanup * update defaults to existing parameters if not provided * updated generated mock files, added mock files for scripts, added basic script create test * added mock script list * cleanup pass, fixed not using params in list call * added update mock test * fixed mock tests requiring go 1.18 * updated openapi, integrated overrides upstream, added new override to fix codegen bug * added nil check * fixed routes
173 lines
3.8 KiB
Go
173 lines
3.8 KiB
Go
package script
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/influxdata/influx-cli/v2/api"
|
|
"github.com/influxdata/influx-cli/v2/clients"
|
|
"github.com/influxdata/influx-cli/v2/clients/query"
|
|
)
|
|
|
|
type Client struct {
|
|
clients.CLI
|
|
api.InvokableScriptsApi
|
|
}
|
|
|
|
func (c Client) printScripts(scripts []api.Script) error {
|
|
if c.PrintAsJSON {
|
|
return c.PrintJSON(scripts)
|
|
}
|
|
|
|
headers := []string{
|
|
"ID",
|
|
"Name",
|
|
"Description",
|
|
"Organization ID",
|
|
"Language",
|
|
}
|
|
|
|
var rows []map[string]interface{}
|
|
for _, s := range scripts {
|
|
row := map[string]interface{}{
|
|
"ID": *s.Id,
|
|
"Name": s.Name,
|
|
"Description": *s.Description,
|
|
"Organization ID": s.OrgID,
|
|
"Language": *s.Language,
|
|
}
|
|
|
|
rows = append(rows, row)
|
|
}
|
|
|
|
return c.PrintTable(headers, rows...)
|
|
}
|
|
|
|
type ListParams struct {
|
|
Limit int
|
|
Offset int
|
|
}
|
|
|
|
func (c Client) List(ctx context.Context, params *ListParams) error {
|
|
req := c.GetScripts(ctx)
|
|
if params != nil {
|
|
req = req.Limit(int32(params.Limit)).Offset(int32(params.Offset))
|
|
}
|
|
res, err := req.Execute()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to list scripts: %v", err)
|
|
}
|
|
|
|
return c.printScripts(*res.Scripts)
|
|
}
|
|
|
|
type CreateParams struct {
|
|
Description string
|
|
Language string
|
|
Name string
|
|
Script string
|
|
}
|
|
|
|
func (c Client) Create(ctx context.Context, params *CreateParams) error {
|
|
if params == nil {
|
|
return errors.New("failed to create script: no parameters provided")
|
|
}
|
|
|
|
req := api.ScriptCreateRequest{
|
|
Name: params.Name,
|
|
Description: params.Description,
|
|
Script: params.Script,
|
|
Language: api.ScriptLanguage(params.Language),
|
|
}
|
|
|
|
script, err := c.PostScripts(ctx).ScriptCreateRequest(req).Execute()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to create script: %v", err)
|
|
}
|
|
|
|
return c.printScripts([]api.Script{script})
|
|
}
|
|
|
|
type DeleteParams struct {
|
|
ScriptID string
|
|
}
|
|
|
|
func (c Client) Delete(ctx context.Context, params *DeleteParams) error {
|
|
err := c.DeleteScriptsID(ctx, params.ScriptID).Execute()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to delete script: %v", err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type RetrieveParams struct {
|
|
ScriptID string
|
|
}
|
|
|
|
func (c Client) Retrieve(ctx context.Context, params *RetrieveParams) error {
|
|
script, err := c.GetScriptsID(ctx, params.ScriptID).Execute()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to retrieve script: %v", err)
|
|
}
|
|
|
|
return c.printScripts([]api.Script{script})
|
|
}
|
|
|
|
type UpdateParams struct {
|
|
ScriptID string
|
|
Description string
|
|
Name string
|
|
Script string
|
|
}
|
|
|
|
func (c Client) Update(ctx context.Context, params *UpdateParams) error {
|
|
// Retrieve the original since we might carry over some unchanged details.
|
|
oldScript, err := c.GetScriptsID(ctx, params.ScriptID).Execute()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to update script: %v", err)
|
|
}
|
|
|
|
if len(params.Description) == 0 {
|
|
params.Description = *oldScript.Description
|
|
}
|
|
if len(params.Name) == 0 {
|
|
params.Name = oldScript.Name
|
|
}
|
|
if len(params.Script) == 0 {
|
|
params.Script = oldScript.Script
|
|
}
|
|
|
|
req := api.ScriptUpdateRequest{
|
|
Name: ¶ms.Name,
|
|
Description: ¶ms.Description,
|
|
Script: ¶ms.Script,
|
|
}
|
|
|
|
script, err := c.PatchScriptsID(ctx, params.ScriptID).ScriptUpdateRequest(req).Execute()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to update script: %v", err)
|
|
}
|
|
|
|
return c.printScripts([]api.Script{script})
|
|
}
|
|
|
|
type InvokeParams struct {
|
|
ScriptID string
|
|
Params map[string]interface{}
|
|
}
|
|
|
|
func (c Client) Invoke(ctx context.Context, params *InvokeParams) error {
|
|
req := api.ScriptInvocationParams{
|
|
Params: ¶ms.Params,
|
|
}
|
|
|
|
resp, err := c.PostScriptsIDInvoke(ctx, params.ScriptID).ScriptInvocationParams(req).Execute()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to invoke script: %v", err)
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
return query.RawResultPrinter.PrintQueryResults(resp.Body, c.StdIO)
|
|
}
|