-
Notifications
You must be signed in to change notification settings - Fork 1
/
config.go
104 lines (90 loc) · 3.26 KB
/
config.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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package cwl
import (
"errors"
"fmt"
"regexp"
"time"
)
type Multiline struct {
Pattern string
Negate bool
Match string
}
type Prospector struct {
Id string `config:"id"`
GroupNames []string `config:"groupnames"`
Multiline *Multiline `config:"multiline"`
}
type Config struct {
S3BucketName string `config:"s3_bucket_name"`
S3KeyPrefix string `config:"s3_key_prefix"`
GroupRefreshFrequency time.Duration `config:"group_refresh_frequency"`
StreamRefreshFrequency time.Duration `config:"stream_refresh_frequency"`
ReportFrequency time.Duration `config:"report_frequency"`
AWSRegion string `config:"aws_region"`
HotStreamEventHorizon time.Duration `config:"hot_stream_event_horizon"`
HotStreamEventRefreshFrequency time.Duration `config:"hot_stream_event_refresh_frequency"`
StreamEventHorizon time.Duration `config:"stream_event_horizon"`
StreamEventRefreshFrequency time.Duration `config:"stream_event_refresh_frequency"`
StreamEventLimit int64 `config:"stream_event_limit"`
Prospectors []Prospector `config:"prospectors"`
}
func DefaultConfig(awsRegion string) *Config {
return &Config{
GroupRefreshFrequency: 1 * time.Minute,
StreamRefreshFrequency: 20 * time.Second,
ReportFrequency: 1 * time.Minute,
AWSRegion: awsRegion,
StreamEventHorizon: 10 * time.Minute,
StreamEventRefreshFrequency: 5 * time.Second,
StreamEventLimit: 100,
}
}
func (config *Config) Validate() error {
// validate host stream settings
if config.HotStreamEventHorizon > 0 && config.HotStreamEventRefreshFrequency == 0 {
return errors.New(
fmt.Sprintf("HotStreamEventRefreshFrequency can not be zero while HotStreamEventHorizon=%v", config.HotStreamEventHorizon))
}
for _, prospector := range config.Prospectors {
err := ValidateMultiline(prospector.Multiline)
if err != nil {
return err
}
}
return nil
}
func (config *Config) String() string {
return "settings: " +
fmt.Sprintf("s3_bucket_name=%s", config.S3BucketName) +
fmt.Sprintf("|s3_key_prefix=%s", config.S3KeyPrefix) +
fmt.Sprintf("|aws_region=%v", config.AWSRegion) +
fmt.Sprintf("|group_refresh_frequency=%v", config.GroupRefreshFrequency) +
fmt.Sprintf("|stream_refresh_frequency=%v", config.StreamRefreshFrequency) +
fmt.Sprintf("|report_frequency=%v", config.ReportFrequency) +
fmt.Sprintf("|stream_event_horizon=%v", config.StreamEventHorizon) +
fmt.Sprintf("|stream_event_refresh_frequency=%v", config.StreamEventRefreshFrequency) +
fmt.Sprintf("|stream_event_limit=%v", config.StreamEventLimit) +
fmt.Sprintf("|hot_stream_event_horizon=%v", config.HotStreamEventHorizon) +
fmt.Sprintf("|hot_stream_event_refresh_frequency=%v", config.HotStreamEventRefreshFrequency)
}
// Validates a multiline configuration section
func ValidateMultiline(multiline *Multiline) error {
if multiline == nil {
return nil
}
// Check if valid regular expression for multiline
_, err := regexp.Compile(multiline.Pattern)
if err != nil {
return err
}
// Check match mode
match := multiline.Match
switch match {
case "after":
case "before":
default:
return errors.New("Configuration: Invalid match type in multiline mode: " + match)
}
return nil
}