mirror of
https://github.com/Oxalide/vsphere-influxdb-go.git
synced 2023-10-10 13:36:51 +02:00
146 lines
3.6 KiB
Go
146 lines
3.6 KiB
Go
|
package stress
|
||
|
|
||
|
import (
|
||
|
"flag"
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
|
||
|
"github.com/BurntSushi/toml"
|
||
|
)
|
||
|
|
||
|
// Config is a struct for the Stress test configuration
|
||
|
type Config struct {
|
||
|
Provision Provision `toml:"provision"`
|
||
|
Write Write `toml:"write"`
|
||
|
Read Read `toml:"read"`
|
||
|
}
|
||
|
|
||
|
// Provision is a struct that contains the configuration
|
||
|
// parameters for all implemented Provisioner's.
|
||
|
type Provision struct {
|
||
|
Basic BasicProvisioner `toml:"basic"`
|
||
|
}
|
||
|
|
||
|
// Write is a struct that contains the configuration
|
||
|
// parameters for the stress test Writer.
|
||
|
type Write struct {
|
||
|
PointGenerators PointGenerators `toml:"point_generator"`
|
||
|
InfluxClients InfluxClients `toml:"influx_client"`
|
||
|
}
|
||
|
|
||
|
// PointGenerators is a struct that contains the configuration
|
||
|
// parameters for all implemented PointGenerator's.
|
||
|
type PointGenerators struct {
|
||
|
Basic *BasicPointGenerator `toml:"basic"`
|
||
|
}
|
||
|
|
||
|
// InfluxClients is a struct that contains the configuration
|
||
|
// parameters for all implemented InfluxClient's.
|
||
|
type InfluxClients struct {
|
||
|
Basic BasicClient `toml:"basic"`
|
||
|
}
|
||
|
|
||
|
// Read is a struct that contains the configuration
|
||
|
// parameters for the stress test Reader.
|
||
|
type Read struct {
|
||
|
QueryGenerators QueryGenerators `toml:"query_generator"`
|
||
|
QueryClients QueryClients `toml:"query_client"`
|
||
|
}
|
||
|
|
||
|
// QueryGenerators is a struct that contains the configuration
|
||
|
// parameters for all implemented QueryGenerator's.
|
||
|
type QueryGenerators struct {
|
||
|
Basic BasicQuery `toml:"basic"`
|
||
|
}
|
||
|
|
||
|
// QueryClients is a struct that contains the configuration
|
||
|
// parameters for all implemented QueryClient's.
|
||
|
type QueryClients struct {
|
||
|
Basic BasicQueryClient `toml:"basic"`
|
||
|
}
|
||
|
|
||
|
// NewConfig returns a pointer to a Config
|
||
|
func NewConfig(s string) (*Config, error) {
|
||
|
var c *Config
|
||
|
var err error
|
||
|
|
||
|
if s == "" {
|
||
|
c, err = BasicStress()
|
||
|
} else {
|
||
|
c, err = DecodeFile(s)
|
||
|
}
|
||
|
|
||
|
return c, err
|
||
|
}
|
||
|
|
||
|
// DecodeFile takes a file path for a toml config file
|
||
|
// and returns a pointer to a Config Struct.
|
||
|
func DecodeFile(s string) (*Config, error) {
|
||
|
t := &Config{}
|
||
|
|
||
|
// Decode the toml file
|
||
|
if _, err := toml.DecodeFile(s, t); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return t, nil
|
||
|
}
|
||
|
|
||
|
// DecodeConfig takes a file path for a toml config file
|
||
|
// and returns a pointer to a Config Struct.
|
||
|
func DecodeConfig(s string) (*Config, error) {
|
||
|
t := &Config{}
|
||
|
|
||
|
// Decode the toml file
|
||
|
if _, err := toml.Decode(s, t); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return t, nil
|
||
|
}
|
||
|
|
||
|
type outputConfig struct {
|
||
|
tags map[string]string
|
||
|
addr string
|
||
|
database string
|
||
|
retentionPolicy string
|
||
|
}
|
||
|
|
||
|
func (t *outputConfig) SetParams(addr, db, rp string) {
|
||
|
t.addr = addr
|
||
|
t.database = db
|
||
|
t.retentionPolicy = rp
|
||
|
}
|
||
|
|
||
|
func NewOutputConfig() *outputConfig {
|
||
|
var o outputConfig
|
||
|
tags := make(map[string]string)
|
||
|
o.tags = tags
|
||
|
database := flag.String("database", "stress", "name of database where the response times will persist")
|
||
|
retentionPolicy := flag.String("retention-policy", "", "name of the retention policy where the response times will persist")
|
||
|
address := flag.String("addr", "http://localhost:8086", "IP address and port of database where response times will persist (e.g., localhost:8086)")
|
||
|
flag.Var(&o, "tags", "A comma seperated list of tags")
|
||
|
flag.Parse()
|
||
|
|
||
|
o.SetParams(*address, *database, *retentionPolicy)
|
||
|
|
||
|
return &o
|
||
|
|
||
|
}
|
||
|
|
||
|
func (t *outputConfig) String() string {
|
||
|
var s string
|
||
|
for k, v := range t.tags {
|
||
|
s += fmt.Sprintf("%v=%v ", k, v)
|
||
|
}
|
||
|
return fmt.Sprintf("%v %v %v %v", s, t.database, t.retentionPolicy, t.addr)
|
||
|
}
|
||
|
|
||
|
func (t *outputConfig) Set(value string) error {
|
||
|
for _, s := range strings.Split(value, ",") {
|
||
|
tags := strings.Split(s, "=")
|
||
|
t.tags[tags[0]] = tags[1]
|
||
|
}
|
||
|
return nil
|
||
|
}
|