66package config
77
88import (
9- "context "
9+ "errors "
1010 "fmt"
11- "log/slog"
1211 "regexp"
12+
13+ "github.com/DataDog/datadog-serverless-functions/aws/logs_monitoring_go/internal/filtering"
14+ "github.com/DataDog/datadog-serverless-functions/aws/logs_monitoring_go/internal/model"
15+ "github.com/DataDog/datadog-serverless-functions/aws/logs_monitoring_go/internal/scrubbing"
1316)
1417
1518const ForwarderVersion = "6.0"
@@ -23,96 +26,65 @@ type Config struct {
2326 UseFIPS bool
2427 Source string
2528 Host string
26- CustomTags string
27- Scrubbing ScrubbingConfig
28- Filtering FilteringConfig
29+ Tags model.Tags
30+ Service string
31+ Scrubber * scrubbing.Scrubber
32+ Filter * filtering.Filter
2933 S3MultilineLogRegex * regexp.Regexp
3034}
3135
32- type ScrubbingConfig struct {
33- ScrubIP bool
34- ScrubEmail bool
35- CustomRule string
36- CustomReplacement string
37- }
38-
39- type FilteringConfig struct {
40- IncludePattern string
41- ExcludePattern string
42- }
43-
44- func Load (ctx context.Context ) (* Config , error ) {
45- initLogger (envOrDefault ("DD_LOG_LEVEL" , "INFO" ))
36+ func Load () (* Config , error ) {
37+ logLevel := envOrDefault ("DD_LOG_LEVEL" , "INFO" )
38+ initLogger (logLevel )
4639 logDroppedEnvVars ()
4740
48- cfg := loadConfig ()
49- slog .Debug ("config loaded" , "config" , cfg )
41+ var cfg Config
42+ cfg .LogLevel = logLevel
43+ cfg .loadEnv ()
44+ cfg .extractFromEnv ()
5045
51- if err := cfg .resolveAPIKey (ctx ); err != nil {
52- return nil , fmt .Errorf ("resolving API key: %w" , err )
53- }
46+ err := cfg .compileS3MultilineLogRegex ()
47+
48+ scrubber , scrubbingErr := scrubbing .NewScrubber (
49+ envOrDefault ("DD_SCRUBBING_RULE" , "" ),
50+ envOrDefault ("DD_SCRUBBING_RULE_REPLACEMENT" , "" ),
51+ envOrDefaultBool ("REDACT_IP" , false ),
52+ envOrDefaultBool ("REDACT_EMAIL" , false ),
53+ )
54+ err = errors .Join (err , scrubbingErr )
5455
55- if err := cfg .validateAPIKey (ctx ); err != nil {
56- return nil , fmt .Errorf ("validating API key: %w" , err )
56+ filter , filteringErr := filtering .NewFilter (
57+ envOrDefault ("INCLUDE_AT_MATCH" , "" ),
58+ envOrDefault ("EXCLUDE_AT_MATCH" , "" ),
59+ )
60+ err = errors .Join (err , filteringErr )
61+ if err != nil {
62+ return nil , err
5763 }
5864
59- return cfg , nil
65+ cfg .Scrubber = scrubber
66+ cfg .Filter = filter
67+ return & cfg , nil
6068}
6169
62- func loadConfig () * Config {
63- S3MultilineLogRegex := loadS3MultilineLogRegex ()
64- site := envOrDefault ("DD_SITE" , "datadoghq.com" )
65-
66- return & Config {
67- Site : site ,
68- IntakeURL : envOrDefault ("DD_URL" , "https://http-intake.logs." + site + "/api/v2/logs" ),
69- APIURL : envOrDefault ("DD_API_URL" , "https://api." + site ),
70- LogLevel : envOrDefault ("DD_LOG_LEVEL" , "INFO" ),
71- UseFIPS : envOrDefaultBool ("DD_USE_FIPS" , false ),
72- Source : envOrDefault ("DD_SOURCE" , "" ),
73- Host : envOrDefault ("DD_HOST" , "" ),
74- CustomTags : envOrDefault ("DD_TAGS" , "" ),
75- Scrubbing : ScrubbingConfig {
76- ScrubIP : envOrDefaultBool ("REDACT_IP" , false ),
77- ScrubEmail : envOrDefaultBool ("REDACT_EMAIL" , false ),
78- CustomRule : envOrDefault ("DD_SCRUBBING_RULE" , "" ),
79- CustomReplacement : envOrDefault ("DD_SCRUBBING_RULE_REPLACEMENT" , "" ),
80- },
81- Filtering : FilteringConfig {
82- IncludePattern : envOrDefault ("INCLUDE_AT_MATCH" , "" ),
83- ExcludePattern : envOrDefault ("EXCLUDE_AT_MATCH" , "" ),
84- },
85- S3MultilineLogRegex : S3MultilineLogRegex ,
86- }
70+ func (c * Config ) loadEnv () {
71+ c .Site = envOrDefault ("DD_SITE" , "datadoghq.com" )
72+ c .IntakeURL = envOrDefault ("DD_URL" , "https://http-intake.logs." + c .Site + "/api/v2/logs" )
73+ c .APIURL = envOrDefault ("DD_API_URL" , "https://api." + c .Site )
74+ c .UseFIPS = envOrDefaultBool ("DD_USE_FIPS" , false )
75+ c .Source = envOrDefault ("DD_SOURCE" , "" )
76+ c .Host = envOrDefault ("DD_HOST" , "" )
8777}
8878
89- func loadS3MultilineLogRegex () * regexp. Regexp {
79+ func ( c * Config ) compileS3MultilineLogRegex () error {
9080 pattern := envOrDefault ("DD_MULTILINE_LOG_REGEX_PATTERN" , "" )
9181 if pattern == "" {
9282 return nil
9383 }
94-
9584 re , err := regexp .Compile (pattern )
9685 if err != nil {
97- slog .Error ("invalid multiline log pattern" , slog .String ("pattern" , pattern ), slog .Any ("error" , err ))
98- return nil
86+ return fmt .Errorf ("compile multiline log regex: %w" , err )
9987 }
100-
101- return re
102- }
103-
104- func (c Config ) LogValue () slog.Value {
105- return slog .GroupValue (
106- slog .String ("site" , c .Site ),
107- slog .String ("intakeUrl" , c .IntakeURL ),
108- slog .String ("apiUrl" , c .APIURL ),
109- slog .String ("loglevel" , c .LogLevel ),
110- slog .Bool ("fips" , c .UseFIPS ),
111- slog .Bool ("redactIP" , c .Scrubbing .ScrubIP ),
112- slog .Bool ("redactEmail" , c .Scrubbing .ScrubEmail ),
113- slog .Bool ("customScrubbing" , c .Scrubbing .CustomRule != "" ),
114- slog .Bool ("includeFilter" , c .Filtering .IncludePattern != "" ),
115- slog .Bool ("excludeFilter" , c .Filtering .ExcludePattern != "" ),
116- slog .Bool ("multilineRegex" , c .S3MultilineLogRegex != nil ),
117- )
88+ c .S3MultilineLogRegex = re
89+ return nil
11890}
0 commit comments