generated from wesen/wesen-go-template
/
es.go
123 lines (107 loc) · 2.69 KB
/
es.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package cmds
import (
"context"
"encoding/json"
"fmt"
"github.com/elastic/go-elasticsearch/v8"
layers2 "github.com/go-go-golems/escuse-me/pkg/cmds/layers"
"github.com/go-go-golems/glazed/pkg/cmds"
"github.com/go-go-golems/glazed/pkg/cmds/layers"
"github.com/go-go-golems/glazed/pkg/cmds/parameters"
"github.com/go-go-golems/glazed/pkg/middlewares"
"github.com/go-go-golems/glazed/pkg/middlewares/row"
"github.com/go-go-golems/glazed/pkg/settings"
"github.com/go-go-golems/glazed/pkg/types"
"github.com/pkg/errors"
"io"
)
type InfoCommand struct {
*cmds.CommandDescription
}
var _ cmds.GlazeCommand = &InfoCommand{}
func NewInfoCommand() (*InfoCommand, error) {
glazedParameterLayer, err := settings.NewGlazedParameterLayers()
if err != nil {
return nil, errors.Wrap(err, "could not create Glazed parameter layer")
}
esParameterLayer, err := layers2.NewESParameterLayer()
if err != nil {
return nil, errors.Wrap(err, "could not create ES parameter layer")
}
return &InfoCommand{
CommandDescription: cmds.NewCommandDescription(
"info",
cmds.WithShort("Prints information about the ES server"),
cmds.WithFlags(
parameters.NewParameterDefinition(
"full",
parameters.ParameterTypeBool,
parameters.WithHelp("Prints the full version response"),
parameters.WithDefault(false),
),
),
cmds.WithLayersList(
glazedParameterLayer,
esParameterLayer,
),
),
}, nil
}
type InfoSettings struct {
Full bool `glazed.parameter:"full"`
}
func (i *InfoCommand) RunIntoGlazeProcessor(
ctx context.Context,
parsedLayers *layers.ParsedLayers,
gp middlewares.Processor,
) error {
s := &InfoSettings{}
err := parsedLayers.InitializeStruct(layers.DefaultSlug, s)
if err != nil {
return err
}
es, err := layers2.NewESClientFromParsedLayers(parsedLayers)
if err != nil {
return err
}
gp.(*middlewares.TableProcessor).AddRowMiddleware(
row.NewReorderColumnOrderMiddleware(
[]string{"client_version", "version", "cluster_name"},
),
)
clientVersion := elasticsearch.Version
res, err := es.Info()
if err != nil {
return err
}
defer func(Body io.ReadCloser) {
err := Body.Close()
if err != nil {
fmt.Println(err)
}
}(res.Body)
// read all body
body, err := io.ReadAll(res.Body)
if err != nil {
return err
}
body_ := types.NewRow()
err = json.Unmarshal(body, &body_)
if err != nil {
return err
}
if !s.Full {
version_, ok := body_.Get("version")
if !ok {
return errors.New("could not find version in response")
}
version := version_.(map[string]interface{})
body_.Set("version", version["number"])
}
body_.Set("client_version", clientVersion)
err = gp.AddRow(ctx, body_)
if err != nil {
return err
}
return nil
}