Skip to content
This repository was archived by the owner on Aug 17, 2020. It is now read-only.

Commit 4ec866a

Browse files
committed
Configuration loader form yaml->env->defaults
1 parent 3208764 commit 4ec866a

File tree

6 files changed

+89
-87
lines changed

6 files changed

+89
-87
lines changed

agent/agent.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"github.com/mitchellh/go-homedir"
1919
"github.com/opentracing/opentracing-go"
2020

21+
"go.undefinedlabs.com/scopeagent/config"
2122
"go.undefinedlabs.com/scopeagent/env"
2223
scopeError "go.undefinedlabs.com/scopeagent/errors"
2324
"go.undefinedlabs.com/scopeagent/instrumentation"
@@ -291,8 +292,10 @@ func NewAgent(options ...Option) (*Agent, error) {
291292
agent.metadata[tags.Dependencies] = getDependencyMap()
292293

293294
// Expand '~' in source root
295+
var sourceRoot string
294296
if sRoot, ok := agent.metadata[tags.SourceRoot]; ok {
295297
if sRootEx, err := homedir.Expand(sRoot.(string)); err == nil {
298+
sourceRoot = sRootEx
296299
agent.metadata[tags.SourceRoot] = sRootEx
297300
}
298301
}
@@ -336,6 +339,9 @@ func NewAgent(options ...Option) (*Agent, error) {
336339
})
337340
instrumentation.SetTracer(agent.tracer)
338341
instrumentation.SetLogger(agent.logger)
342+
if err := config.Load(path.Join(sourceRoot, "scope.yml")); err != nil {
343+
agent.logger.Println(err)
344+
}
339345
if agent.setGlobalTracer || env.ScopeTracerGlobal.Value {
340346
opentracing.SetGlobalTracer(agent.Tracer())
341347
}

config/types.go

Lines changed: 2 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ type (
5252
Dispatcher TracerDispatcherConfig `yaml:"dispatcher"`
5353
}
5454
TracerDispatcherConfig struct {
55-
HealthCheckFrequency *int `yaml:"healthcheck_frecuency" env:"SCOPE_TRACER_DISPATCHER_HEALTHCHECK_FRECUENCY" default:"1"`
56-
HealthCheckFrequencyInTestMode *int `yaml:"healthcheck_frecuency_in_testmode" env:"SCOPE_TRACER_DISPATCHER_HEALTHCHECK_FRECUENCY_IN_TESTMODE" default:"60"`
55+
HealthCheckFrequency *int `yaml:"healthcheck_frecuency" env:"SCOPE_TRACER_DISPATCHER_HEALTHCHECK_FRECUENCY" default:"1000"`
56+
HealthCheckFrequencyInTestMode *int `yaml:"healthcheck_frecuency_in_testmode" env:"SCOPE_TRACER_DISPATCHER_HEALTHCHECK_FRECUENCY_IN_TESTMODE" default:"60000"`
5757
ConcurrencyLevel *int `yaml:"concurrency_level" env:"SCOPE_TRACER_DISPATCHER_CONCURRENCY_LEVEL" default:"1"`
5858
Spans TracerDispatcherSpansConfig `yaml:"spans"`
5959
Events TracerDispatcherEventsConfig `yaml:"events"`
@@ -65,79 +65,3 @@ type (
6565
MaxPayloadSize *int `yaml:"max_payload_size" env:"SCOPE_TRACER_DISPATCHER_EVENTS_MAX_PAYLOAD_SIZE" default:"1000"`
6666
}
6767
)
68-
69-
/*
70-
service: 'service-name' #SCOPE_SERVICE
71-
repository: 'https://github.com/undefinedlabs/scope-docs.git' #SCOPE_REPOSITORY
72-
commit_sha: '974c3566eb8e221d130db86a7ce1f99703fe2e69' #SCOPE_COMMIT_SHA
73-
branch: 'master' #SCOPE_BRANCH
74-
source_root: '/home/user/projects/scope-docs' #SCOPE_SOURCE_ROOT
75-
logger:
76-
level: 'trace' #SCOPE_LOGGER_LEVEL
77-
root: '/home/user/projects/scope/log' #SCOPE_LOGGER_ROOT
78-
code_path:
79-
enabled: true #SCOPE_CODE_PATH_ENABLED
80-
base_packages: 'com.undefinedlabs.scope' #SCOPE_CODE_PATH_BASE_PACKAGES
81-
debug: true #SCOPE_CODE_PATH_DEBUG
82-
metadata: #SCOPE_METADATA
83-
sample.key1: $SAMPLE_VAR1
84-
sample.key2: $SAMPLE_VAR2
85-
sample.key3: sampleValue3
86-
configuration: #SCOPE_CONFIGURATION
87-
- sample.key1
88-
- sample.key2
89-
- sample.key3
90-
testing_mode: true #SCOPE_TESTING_MODE
91-
instrumentation:
92-
enabled: true #SCOPE_INSTRUMENTATION_ENABLED
93-
diff_summary: true #SCOPE_INSTRUMENTATION_DIFF_SUMMARY
94-
tests_frameworks:
95-
fail_retries: 5 #SCOPE_INSTRUMENTATION_TESTS_FRAMEWORKS_FAIL_RETRIES
96-
libraries:
97-
mstest: true #SCOPE_INSTRUMENTATION_TESTS_FRAMEWORKS_LIBRARIES_MSTEST
98-
nunit: true #SCOPE_INSTRUMENTATION_TESTS_FRAMEWORKS_LIBRARIES_NUNIT
99-
xunit: true #SCOPE_INSTRUMENTATION_TESTS_FRAMEWORKS_LIBRARIES_XUNIT
100-
db:
101-
execution_plan: true #SCOPE_INSTRUMENTATION_DB_EXECUTION_PLAN
102-
execution_plan_threshold: 0 #SCOPE_INSTRUMENTATION_DB_EXECUTION_PLAN_THRESHOLD
103-
statement_values: true #SCOPE_INSTRUMENTATION_DB_STATEMENT_VALUES
104-
libraries:
105-
entityframework_core: true #SCOPE_INSTRUMENTATION_DB_LIBRARIES_ENTITYFRAMEWORK_CORE
106-
redis: true #SCOPE_INSTRUMENTATION_DB_LIBRARIES_REDIS
107-
sqlserver: true #SCOPE_INSTRUMENTATION_DB_LIBRARIES_SQLSERVER
108-
mysql: true #SCOPE_INSTRUMENTATION_DB_LIBRARIES_MYSQL
109-
postgres: true #SCOPE_INSTRUMENTATION_DB_LIBRARIES_POSTGRES
110-
sqlite: true #SCOPE_INSTRUMENTATION_DB_LIBRARIES_SQLITE
111-
mongodb: true #SCOPE_INSTRUMENTATION_DB_LIBRARIES_MONGODB
112-
http:
113-
client: true #SCOPE_INSTRUMENTATION_HTTP_CLIENT
114-
server: true #SCOPE_INSTRUMENTATION_HTTP_SERVER
115-
libraries:
116-
aspnet_core: true #SCOPE_INSTRUMENTATION_HTTP_LIBRARIES_ASPNET_CORE
117-
payloads: true #SCOPE_INSTRUMENTATION_HTTP_PAYLOADS
118-
headers: #SCOPE_INSTRUMENTATION_HTTP_HEADERS
119-
- Authorization
120-
- My-Header-One
121-
- My-Header-Two
122-
logger:
123-
standard_trace: true #SCOPE_INSTRUMENTATION_LOGGER_STANDARD_TRACE
124-
libraries:
125-
microsoft_logging: true #SCOPE_INSTRUMENTATION_LOGGER_LIBRARIES_MICROSOFT_LOGGING
126-
serilog: true #SCOPE_INSTRUMENTATION_LOGGER_LIBRARIES_SERILOG
127-
nlog: true #SCOPE_INSTRUMENTATION_LOGGER_LIBRARIES_NLOG
128-
log4net: true #SCOPE_INSTRUMENTATION_LOGGER_LIBRARIES_LOG4NET
129-
tracer:
130-
global: true #SCOPE_TRACER_GLOBAL
131-
dispatcher:
132-
healthcheck_frecuency: 10000 #SCOPE_TRACER_DISPATCHER_HEALTHCHECK_FRECUENCY
133-
healthcheck_frecuency_in_testmode: 1000 #SCOPE_TRACER_DISPATCHER_HEALTHCHECK_FRECUENCY_IN_TESTMODE
134-
concurrency_level: 5 #SCOPE_TRACER_DISPATCHER_CONCURRENCY_LEVEL
135-
close_timeout: 30000 #SCOPE_TRACER_DISPATCHER_CLOSE_TIMEOUT
136-
spans:
137-
max_buffer_size: 1000 #SCOPE_TRACER_DISPATCHER_SPANS_MAX_BUFFER_SIZE
138-
max_payload_size: -1 #SCOPE_TRACER_DISPATCHER_SPANS_MAX_PAYLOAD_SIZE
139-
events:
140-
max_buffer_size: 1000 #SCOPE_TRACER_DISPATCHER_EVENTS_MAX_BUFFER_SIZE
141-
max_payload_size: -1 #SCOPE_TRACER_DISPATCHER_EVENTS_MAX_PAYLOAD_SIZE
142-
143-
*/

config/vars.go

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,45 @@
11
package config
22

33
import (
4+
"io/ioutil"
5+
"os"
6+
"sync"
7+
48
env "github.com/undefinedlabs/go-env"
9+
"gopkg.in/yaml.v2"
10+
)
11+
12+
var (
13+
current *ScopeConfig
14+
m sync.RWMutex
515
)
616

7-
// Current scope configuration
8-
var Current = loadConfig()
17+
func Get() *ScopeConfig {
18+
m.RLock()
19+
defer m.RUnlock()
920

10-
func loadConfig() *ScopeConfig {
11-
var config ScopeConfig
12-
//yaml.Unmarshal()
13-
env.UnmarshalFromEnviron(&config)
21+
return current
22+
}
23+
24+
func Load(filePath string) error {
25+
m.Lock()
26+
defer m.Unlock()
1427

15-
return &config
28+
file, err := os.Open(filePath)
29+
if err != nil {
30+
return err
31+
}
32+
content, err := ioutil.ReadAll(file)
33+
if err != nil {
34+
return err
35+
}
36+
37+
var config ScopeConfig
38+
yamlErr := yaml.Unmarshal(content, &config)
39+
_, envErr := env.UnmarshalFromEnviron(&config)
40+
if yamlErr != nil && envErr != nil {
41+
return envErr
42+
}
43+
current = &config
44+
return nil
1645
}

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ require (
1313
github.com/opentracing/basictracer-go v1.0.0
1414
github.com/opentracing/opentracing-go v1.1.0
1515
github.com/stretchr/testify v1.5.1
16-
github.com/undefinedlabs/go-env v0.0.0-20200228151352-fe4feb3a53ee
16+
github.com/undefinedlabs/go-env v0.0.0-20200228171926-13a0450a15a5
1717
github.com/undefinedlabs/go-mpatch v0.0.0-20200122175732-0044123dbb98
1818
github.com/vmihailenco/msgpack v4.0.4+incompatible
1919
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa
@@ -22,5 +22,5 @@ require (
2222
google.golang.org/grpc v1.27.1
2323
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
2424
gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637
25-
gopkg.in/yaml.v2 v2.2.8 // indirect
25+
gopkg.in/yaml.v2 v2.2.8
2626
)

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H
4949
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
5050
github.com/undefinedlabs/go-env v0.0.0-20200228151352-fe4feb3a53ee h1:oyS1ol4QtbdIbe4NO5vSqP9Lzq/x8yFHKuAquNItS9Q=
5151
github.com/undefinedlabs/go-env v0.0.0-20200228151352-fe4feb3a53ee/go.mod h1:6rizfv+i1uxF4fm4IBliMR2ngXLaaR1UANOx0Qmt70o=
52+
github.com/undefinedlabs/go-env v0.0.0-20200228171926-13a0450a15a5 h1:FxfKRBQhThVjMp0+xEjhvt2DNPgkgGMjJwgog3FA0XU=
53+
github.com/undefinedlabs/go-env v0.0.0-20200228171926-13a0450a15a5/go.mod h1:6rizfv+i1uxF4fm4IBliMR2ngXLaaR1UANOx0Qmt70o=
5254
github.com/undefinedlabs/go-mpatch v0.0.0-20200122152126-8db832768c71 h1:wVaGx1BqVqs6hb36eUX6O/z1peLxfRMoiw91mwjjiX8=
5355
github.com/undefinedlabs/go-mpatch v0.0.0-20200122152126-8db832768c71/go.mod h1:TyJZDQ/5AgyN7FSLiBJ8RO9u2c6wbtRvK827b6AVqY4=
5456
github.com/undefinedlabs/go-mpatch v0.0.0-20200122175732-0044123dbb98 h1:Z/megzdoMbuZ0H/oLmfTw92PAEfyTi1DkvAr8AUzFgw=

scope.yml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
service: 'service-name' #SCOPE_SERVICE
2+
#logger:
3+
# root: '/home/user/projects/scope/log' #SCOPE_LOGGER_ROOT
4+
metadata: #SCOPE_METADATA
5+
sample.key1: $SAMPLE_VAR1
6+
sample.key2: $SAMPLE_VAR2
7+
sample.key3: sampleValue3
8+
configuration: #SCOPE_CONFIGURATION
9+
- sample.key1
10+
- sample.key2
11+
- sample.key3
12+
instrumentation:
13+
enabled: true #SCOPE_INSTRUMENTATION_ENABLED
14+
diff_summary: true #SCOPE_INSTRUMENTATION_DIFF_SUMMARY
15+
tests_frameworks:
16+
fail_retries: 5 #SCOPE_INSTRUMENTATION_TESTS_FRAMEWORKS_FAIL_RETRIES
17+
panic_as_fail: true #SCOPE_INSTRUMENTATION_TESTS_FRAMEWORKS_PANIC_AS_FAIL
18+
db:
19+
statement_values: true #SCOPE_INSTRUMENTATION_DB_STATEMENT_VALUES
20+
http:
21+
client: true #SCOPE_INSTRUMENTATION_HTTP_CLIENT
22+
server: true #SCOPE_INSTRUMENTATION_HTTP_SERVER
23+
payloads: true #SCOPE_INSTRUMENTATION_HTTP_PAYLOADS
24+
headers: #SCOPE_INSTRUMENTATION_HTTP_HEADERS
25+
- Authorization
26+
- My-Header-One
27+
- My-Header-Two
28+
logger:
29+
standard_logger: true #SCOPE_INSTRUMENTATION_LOGGER_STANDARD_LOGGER
30+
standard_output: true #SCOPE_INSTRUMENTATION_LOGGER_STANDARD_OUTPUT
31+
standard_error: true #SCOPE_INSTRUMENTATION_LOGGER_STANDARD_ERROR
32+
tracer:
33+
global: true #SCOPE_TRACER_GLOBAL
34+
dispatcher:
35+
healthcheck_frecuency: 60000 #SCOPE_TRACER_DISPATCHER_HEALTHCHECK_FRECUENCY
36+
healthcheck_frecuency_in_testmode: 1000 #SCOPE_TRACER_DISPATCHER_HEALTHCHECK_FRECUENCY_IN_TESTMODE
37+
concurrency_level: 5 #SCOPE_TRACER_DISPATCHER_CONCURRENCY_LEVEL
38+
spans:
39+
max_payload_size: -1 #SCOPE_TRACER_DISPATCHER_SPANS_MAX_PAYLOAD_SIZE
40+
events:
41+
max_payload_size: -1 #SCOPE_TRACER_DISPATCHER_EVENTS_MAX_PAYLOAD_SIZE

0 commit comments

Comments
 (0)