mirror of
https://codeberg.org/scip/esctl.git
synced 2026-08-24 05:04:18 +02:00
add index template completion, index pattern filter and name filter
This commit is contained in:
@@ -34,6 +34,7 @@ const (
|
||||
Cilm
|
||||
Cnode
|
||||
Cclustersettings
|
||||
Cindextemplate
|
||||
)
|
||||
|
||||
func complete(conf *cfg.Config, cmd *cli.Command, what int) {
|
||||
@@ -65,6 +66,8 @@ func complete(conf *cfg.Config, cmd *cli.Command, what int) {
|
||||
list, err = es.NodeNames(conf)
|
||||
case Cclustersettings:
|
||||
list, err = es.ClusterSettingsNames(conf)
|
||||
case Cindextemplate:
|
||||
list, err = es.IndexTemplateNames(conf)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
|
||||
@@ -49,8 +49,23 @@ func IndexTemplateList(conf *cfg.Config) *cli.Command {
|
||||
Aliases: []string{"ls"},
|
||||
Usage: "list index templates",
|
||||
|
||||
Flags: []cli.Flag{
|
||||
&cli.StringSliceFlag{
|
||||
Name: "filter-index-pattern",
|
||||
Usage: "show only index templates which use patterns, which match the filter",
|
||||
Destination: &conf.Filter,
|
||||
Aliases: []string{"F"},
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "hidden",
|
||||
Usage: "show hidden index templates as well",
|
||||
Destination: &conf.Hidden,
|
||||
Aliases: []string{"H"},
|
||||
},
|
||||
},
|
||||
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return es.IndexTemplateList(conf)
|
||||
return es.IndexTemplateList(conf, cmd.Args().Get(0))
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -71,7 +86,7 @@ func IndexTemplateShow(conf *cfg.Config) *cli.Command {
|
||||
},
|
||||
|
||||
ShellComplete: func(ctx context.Context, cmd *cli.Command) {
|
||||
complete(conf, cmd, Cindex)
|
||||
complete(conf, cmd, Cindextemplate)
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -215,7 +230,7 @@ func IndexTemplateDelete(conf *cfg.Config) *cli.Command {
|
||||
},
|
||||
|
||||
ShellComplete: func(ctx context.Context, cmd *cli.Command) {
|
||||
complete(conf, cmd, Cindex)
|
||||
complete(conf, cmd, Cindextemplate)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,23 @@ import (
|
||||
)
|
||||
|
||||
// used for completion
|
||||
func IndexTemplateList(conf *cfg.Config) error {
|
||||
func IndexTemplateNames(conf *cfg.Config) ([]string, error) {
|
||||
res, err := conf.DefaultCluster.ES().Indices.GetIndexTemplate().
|
||||
Do(context.Background())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get index templates: %w", esErrorString(err))
|
||||
}
|
||||
|
||||
names := make([]string, len(res.IndexTemplates))
|
||||
|
||||
for idx, tpl := range res.IndexTemplates {
|
||||
names[idx] = tpl.Name
|
||||
}
|
||||
|
||||
return names, nil
|
||||
}
|
||||
|
||||
func IndexTemplateList(conf *cfg.Config, filter string) error {
|
||||
res, err := conf.DefaultCluster.ES().Indices.GetIndexTemplate().
|
||||
Do(context.Background())
|
||||
if err != nil {
|
||||
@@ -42,20 +58,42 @@ func IndexTemplateList(conf *cfg.Config) error {
|
||||
|
||||
slog.Debug("res", "index templates", res)
|
||||
|
||||
table := printer.NewTable(conf, 5, len(res.IndexTemplates))
|
||||
table.Addheaders("name", "description", "priority")
|
||||
table := printer.NewTable(conf, 5, 0)
|
||||
table.Addheaders("name", "description", "index patterns", "priority")
|
||||
|
||||
for idx, tpl := range res.IndexTemplates {
|
||||
desc, err := json.Marshal(tpl.IndexTemplate.Meta_["description"])
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to unmarshal meta json data: %w", err)
|
||||
for _, tpl := range res.IndexTemplates {
|
||||
if !conf.Hidden && strings.HasPrefix(tpl.Name, ".") {
|
||||
continue
|
||||
}
|
||||
|
||||
if filter != "" && !strings.Contains(tpl.Name, filter) {
|
||||
continue
|
||||
}
|
||||
|
||||
if len(conf.Filter) > 0 {
|
||||
skip := true
|
||||
|
||||
for _, filter := range conf.Filter {
|
||||
for _, pattern := range tpl.IndexTemplate.IndexPatterns {
|
||||
if strings.Contains(pattern, filter) {
|
||||
skip = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if skip {
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
desc := strings.TrimPrefix(strings.TrimSuffix(string(tpl.IndexTemplate.Meta_["description"]), `"`), `"`)
|
||||
|
||||
var prio int64
|
||||
if tpl.IndexTemplate.Priority != nil {
|
||||
prio = *tpl.IndexTemplate.Priority
|
||||
}
|
||||
table.Entries[idx] = []any{tpl.Name, desc, prio}
|
||||
|
||||
table.AddRow(tpl.Name, desc, tpl.IndexTemplate.IndexPatterns, prio)
|
||||
}
|
||||
|
||||
table.Sort()
|
||||
|
||||
Reference in New Issue
Block a user