mirror of
https://codeberg.org/scip/esctl.git
synced 2026-08-24 17:24:18 +02:00
add index template completion, index pattern filter and name filter
This commit is contained in:
@@ -34,6 +34,7 @@ const (
|
|||||||
Cilm
|
Cilm
|
||||||
Cnode
|
Cnode
|
||||||
Cclustersettings
|
Cclustersettings
|
||||||
|
Cindextemplate
|
||||||
)
|
)
|
||||||
|
|
||||||
func complete(conf *cfg.Config, cmd *cli.Command, what int) {
|
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)
|
list, err = es.NodeNames(conf)
|
||||||
case Cclustersettings:
|
case Cclustersettings:
|
||||||
list, err = es.ClusterSettingsNames(conf)
|
list, err = es.ClusterSettingsNames(conf)
|
||||||
|
case Cindextemplate:
|
||||||
|
list, err = es.IndexTemplateNames(conf)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -49,8 +49,23 @@ func IndexTemplateList(conf *cfg.Config) *cli.Command {
|
|||||||
Aliases: []string{"ls"},
|
Aliases: []string{"ls"},
|
||||||
Usage: "list index templates",
|
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 {
|
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) {
|
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) {
|
ShellComplete: func(ctx context.Context, cmd *cli.Command) {
|
||||||
complete(conf, cmd, Cindex)
|
complete(conf, cmd, Cindextemplate)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,23 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// used for completion
|
// 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().
|
res, err := conf.DefaultCluster.ES().Indices.GetIndexTemplate().
|
||||||
Do(context.Background())
|
Do(context.Background())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -42,20 +58,42 @@ func IndexTemplateList(conf *cfg.Config) error {
|
|||||||
|
|
||||||
slog.Debug("res", "index templates", res)
|
slog.Debug("res", "index templates", res)
|
||||||
|
|
||||||
table := printer.NewTable(conf, 5, len(res.IndexTemplates))
|
table := printer.NewTable(conf, 5, 0)
|
||||||
table.Addheaders("name", "description", "priority")
|
table.Addheaders("name", "description", "index patterns", "priority")
|
||||||
|
|
||||||
for idx, tpl := range res.IndexTemplates {
|
for _, tpl := range res.IndexTemplates {
|
||||||
desc, err := json.Marshal(tpl.IndexTemplate.Meta_["description"])
|
if !conf.Hidden && strings.HasPrefix(tpl.Name, ".") {
|
||||||
if err != nil {
|
continue
|
||||||
return fmt.Errorf("failed to unmarshal meta json data: %w", err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
var prio int64
|
||||||
if tpl.IndexTemplate.Priority != nil {
|
if tpl.IndexTemplate.Priority != nil {
|
||||||
prio = *tpl.IndexTemplate.Priority
|
prio = *tpl.IndexTemplate.Priority
|
||||||
}
|
}
|
||||||
table.Entries[idx] = []any{tpl.Name, desc, prio}
|
|
||||||
|
table.AddRow(tpl.Name, desc, tpl.IndexTemplate.IndexPatterns, prio)
|
||||||
}
|
}
|
||||||
|
|
||||||
table.Sort()
|
table.Sort()
|
||||||
|
|||||||
Reference in New Issue
Block a user