-
Notifications
You must be signed in to change notification settings - Fork 0
/
flags.go
80 lines (64 loc) · 1.82 KB
/
flags.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
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, "|") {
if pair == "" {
continue
}
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, "|") {
if rc == "" {
continue
}
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
}