You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.0 KiB
107 lines
2.0 KiB
package main
|
|
|
|
import (
|
|
"fmt"
|
|
elastic "github.com/olivere/elastic/v7"
|
|
toml "github.com/pelletier/go-toml"
|
|
"io/ioutil"
|
|
"os"
|
|
)
|
|
|
|
type ElasticConfig struct {
|
|
Elastic ElasticSettings
|
|
Servers map[string]ElasticServer
|
|
}
|
|
|
|
type ElasticSettings struct {
|
|
DefaultServer string
|
|
}
|
|
|
|
type ElasticServer struct {
|
|
URL string
|
|
User string
|
|
Pass string
|
|
}
|
|
|
|
func (ec *ElasticConfig) GetClient(name string) *elastic.Client {
|
|
if name == "" {
|
|
if ec.Elastic.DefaultServer == "" {
|
|
fmt.Fprintf(os.Stderr, "no server name provided\n")
|
|
os.Exit(1)
|
|
}
|
|
name = ec.Elastic.DefaultServer
|
|
}
|
|
|
|
if _, ok := ec.Servers[name]; !ok {
|
|
fmt.Fprintf(os.Stderr, "no configuration found for server \"%s\"\n", name)
|
|
os.Exit(1)
|
|
}
|
|
|
|
server := ec.Servers[name]
|
|
|
|
opts := []elastic.ClientOptionFunc{
|
|
elastic.SetURL(server.URL),
|
|
elastic.SetSniff(false),
|
|
elastic.SetGzip(true),
|
|
}
|
|
if server.User != "" && server.Pass != "" {
|
|
opts = append(opts, elastic.SetBasicAuth(
|
|
server.User, server.Pass,
|
|
))
|
|
}
|
|
|
|
es, err := elastic.NewClient(opts...)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "elastic connection error: %s\n", err.Error())
|
|
os.Exit(1)
|
|
}
|
|
|
|
return es
|
|
}
|
|
|
|
func LoadConfig(cfgpath string) *ElasticConfig {
|
|
cfg := ElasticConfig{}
|
|
if cfgpath != "" {
|
|
cfgfile, err := ioutil.ReadFile(cfgpath)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "read error: %s\n", err.Error())
|
|
os.Exit(1)
|
|
}
|
|
|
|
err = toml.Unmarshal(cfgfile, &cfg)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "parse error: %s\n", err.Error())
|
|
os.Exit(1)
|
|
}
|
|
|
|
return &cfg
|
|
}
|
|
|
|
paths := []string{}
|
|
homedir, _ := os.UserHomeDir()
|
|
if homedir != "" {
|
|
paths = append(paths, homedir+"/.es.toml")
|
|
}
|
|
paths = append(paths, "/etc/es.toml")
|
|
|
|
for _, path := range paths {
|
|
cfgfile, err := ioutil.ReadFile(path)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
|
|
err = toml.Unmarshal(cfgfile, &cfg)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
|
|
return &cfg
|
|
}
|
|
|
|
fmt.Fprintf(os.Stderr, "no valid configuration found in:\n")
|
|
for _, path := range paths {
|
|
fmt.Fprintf(os.Stderr, " %s\n", path)
|
|
}
|
|
os.Exit(1)
|
|
return nil
|
|
}
|