Add flag parsing
This commit is contained in:
72
flags.go
Normal file
72
flags.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package event
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var (
|
||||
eventTargetURL *string
|
||||
eventHeaders *string
|
||||
eventSecondsPerWrite *float64
|
||||
eventRateClasses *string
|
||||
eventTotalPerSecond *float64
|
||||
|
||||
ErrInvalidFlags = errors.New("invalid flags")
|
||||
ErrInvalidHeader = fmt.Errorf("%w: invalid --event-headers (missing =)", ErrInvalidFlags)
|
||||
ErrInvalidRateClass = fmt.Errorf("%w: invalid --event-rate-classes (missing =)", ErrInvalidFlags)
|
||||
)
|
||||
|
||||
func RegisterFlags() {
|
||||
eventTargetURL = flag.String("event-target-url", "", "URL to send events to")
|
||||
eventHeaders = flag.String("event-headers", "", "key=value|key=value|... headers to include with events")
|
||||
eventSecondsPerWrite = flag.Float64("event-seconds-per-write", 5.0, "write events to target every N seconds")
|
||||
eventRateClasses = flag.String("event-rate-classes", "", "key=value=rate|key=value=rate|...")
|
||||
eventTotalPerSecond = flag.Float64("event-total-per-second", 0.2, "write on average N total events per second")
|
||||
}
|
||||
|
||||
func (c *Client) HandleFlags() error {
|
||||
if *eventTargetURL == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
headers := map[string]string{}
|
||||
|
||||
for _, pair := range strings.Split(*eventHeaders, "|") {
|
||||
parts := strings.SplitN(pair, "=", 2)
|
||||
if len(parts) != 2 {
|
||||
return ErrInvalidHeader
|
||||
}
|
||||
|
||||
headers[parts[0]] = parts[1]
|
||||
}
|
||||
|
||||
target := c.AddTarget(
|
||||
*eventTargetURL,
|
||||
headers,
|
||||
*eventSecondsPerWrite,
|
||||
)
|
||||
|
||||
for _, rc := range strings.Split(*eventRateClasses, "|") {
|
||||
parts := strings.SplitN(rc, "=", 3)
|
||||
if len(parts) != 3 {
|
||||
return ErrInvalidRateClass
|
||||
}
|
||||
|
||||
rate, err := strconv.ParseFloat(parts[3], 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("%w %w", ErrInvalidRateClass, err)
|
||||
}
|
||||
|
||||
target.AddRateClass(rate, parts[0], parts[1])
|
||||
}
|
||||
|
||||
target.AddRateClass(
|
||||
*eventTotalPerSecond,
|
||||
)
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user