/
login_influxdb.go
105 lines (95 loc) · 2.42 KB
/
login_influxdb.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
package cmd
import (
"encoding/json"
"syscall"
"time"
"github.com/spf13/cobra"
"golang.org/x/term"
"gopkg.in/guregu/null.v3"
"go.k6.io/k6/cmd/state"
"go.k6.io/k6/output/influxdb"
"go.k6.io/k6/ui"
)
//nolint:funlen
func getCmdLoginInfluxDB(gs *state.GlobalState) *cobra.Command {
// loginInfluxDBCommand represents the 'login influxdb' command
loginInfluxDBCommand := &cobra.Command{
Use: "influxdb [uri]",
Short: "Authenticate with InfluxDB",
Long: `Authenticate with InfluxDB.
This will set the default server used when just "-o influxdb" is passed.`,
Args: cobra.MaximumNArgs(1),
RunE: func(_ *cobra.Command, args []string) error {
config, err := readDiskConfig(gs)
if err != nil {
return err
}
conf := influxdb.NewConfig()
jsonConf := config.Collectors["influxdb"]
if jsonConf != nil {
jsonConfParsed, jsonerr := influxdb.ParseJSON(jsonConf)
if jsonerr != nil {
return jsonerr
}
conf = conf.Apply(jsonConfParsed)
}
if len(args) > 0 {
urlConf, err := influxdb.ParseURL(args[0])
if err != nil {
return err
}
conf = conf.Apply(urlConf)
}
form := ui.Form{
Fields: []ui.Field{
ui.StringField{
Key: "Addr",
Label: "Address",
Default: conf.Addr.String,
},
ui.StringField{
Key: "DB",
Label: "Database",
Default: conf.DB.String,
},
ui.StringField{
Key: "Username",
Label: "Username",
Default: conf.Username.String,
},
ui.PasswordField{
Key: "Password",
Label: "Password",
},
},
}
if !term.IsTerminal(int(syscall.Stdin)) { //nolint:unconvert
gs.Logger.Warn("Stdin is not a terminal, falling back to plain text input")
}
vals, err := form.Run(gs.Stdin, gs.Stdout)
if err != nil {
return err
}
conf.Addr = null.StringFrom(vals["Addr"])
conf.DB = null.StringFrom(vals["DB"])
conf.Username = null.StringFrom(vals["Username"])
conf.Password = null.StringFrom(vals["Password"])
client, err := influxdb.MakeClient(conf)
if err != nil {
return err
}
if _, _, err = client.Ping(10 * time.Second); err != nil {
return err
}
if config.Collectors == nil {
config.Collectors = make(map[string]json.RawMessage)
}
config.Collectors["influxdb"], err = json.Marshal(conf)
if err != nil {
return err
}
return writeDiskConfig(gs, config)
},
}
return loginInfluxDBCommand
}