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