appsignal 3.10.0-java → 3.12.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +197 -0
- data/Gemfile +1 -0
- data/Rakefile +1 -1
- data/benchmark.rake +99 -42
- data/lib/appsignal/cli/demo.rb +0 -1
- data/lib/appsignal/cli/diagnose.rb +1 -1
- data/lib/appsignal/config.rb +204 -130
- data/lib/appsignal/demo.rb +16 -26
- data/lib/appsignal/event_formatter/rom/sql_formatter.rb +1 -0
- data/lib/appsignal/event_formatter.rb +3 -2
- data/lib/appsignal/helpers/instrumentation.rb +331 -19
- data/lib/appsignal/hooks/action_cable.rb +21 -16
- data/lib/appsignal/hooks/active_job.rb +14 -8
- data/lib/appsignal/hooks/delayed_job.rb +1 -1
- data/lib/appsignal/hooks/shoryuken.rb +3 -63
- data/lib/appsignal/integrations/action_cable.rb +5 -7
- data/lib/appsignal/integrations/active_support_notifications.rb +1 -0
- data/lib/appsignal/integrations/capistrano/capistrano_2_tasks.rb +36 -35
- data/lib/appsignal/integrations/data_mapper.rb +1 -0
- data/lib/appsignal/integrations/delayed_job_plugin.rb +27 -33
- data/lib/appsignal/integrations/dry_monitor.rb +1 -0
- data/lib/appsignal/integrations/excon.rb +1 -0
- data/lib/appsignal/integrations/grape.rb +7 -0
- data/lib/appsignal/integrations/hanami.rb +8 -43
- data/lib/appsignal/integrations/http.rb +1 -0
- data/lib/appsignal/integrations/net_http.rb +1 -0
- data/lib/appsignal/integrations/object.rb +6 -0
- data/lib/appsignal/integrations/padrino.rb +8 -73
- data/lib/appsignal/integrations/que.rb +13 -20
- data/lib/appsignal/integrations/railtie.rb +36 -14
- data/lib/appsignal/integrations/rake.rb +1 -5
- data/lib/appsignal/integrations/redis.rb +1 -0
- data/lib/appsignal/integrations/redis_client.rb +1 -0
- data/lib/appsignal/integrations/resque.rb +2 -5
- data/lib/appsignal/integrations/shoryuken.rb +75 -0
- data/lib/appsignal/integrations/sidekiq.rb +7 -15
- data/lib/appsignal/integrations/sinatra.rb +8 -19
- data/lib/appsignal/integrations/unicorn.rb +1 -0
- data/lib/appsignal/integrations/webmachine.rb +2 -5
- data/lib/appsignal/loaders/grape.rb +13 -0
- data/lib/appsignal/loaders/hanami.rb +40 -0
- data/lib/appsignal/loaders/padrino.rb +68 -0
- data/lib/appsignal/loaders/sinatra.rb +24 -0
- data/lib/appsignal/loaders.rb +92 -0
- data/lib/appsignal/logger.rb +7 -3
- data/lib/appsignal/probes/helpers.rb +1 -0
- data/lib/appsignal/probes/mri.rb +1 -0
- data/lib/appsignal/probes/sidekiq.rb +1 -0
- data/lib/appsignal/probes.rb +3 -0
- data/lib/appsignal/rack/abstract_middleware.rb +20 -13
- data/lib/appsignal/rack/event_handler.rb +44 -13
- data/lib/appsignal/rack/generic_instrumentation.rb +1 -0
- data/lib/appsignal/rack/grape_middleware.rb +2 -1
- data/lib/appsignal/rack/streaming_listener.rb +1 -0
- data/lib/appsignal/rack.rb +35 -0
- data/lib/appsignal/span.rb +1 -0
- data/lib/appsignal/transaction.rb +308 -101
- data/lib/appsignal/utils/data.rb +0 -1
- data/lib/appsignal/utils/hash_sanitizer.rb +0 -1
- data/lib/appsignal/utils/integration_logger.rb +0 -13
- data/lib/appsignal/utils/integration_memory_logger.rb +0 -13
- data/lib/appsignal/utils/json.rb +0 -1
- data/lib/appsignal/utils/query_params_sanitizer.rb +0 -1
- data/lib/appsignal/utils/stdout_and_logger_message.rb +0 -1
- data/lib/appsignal/utils.rb +6 -0
- data/lib/appsignal/version.rb +1 -1
- data/lib/appsignal.rb +169 -14
- data/spec/lib/appsignal/capistrano2_spec.rb +1 -1
- data/spec/lib/appsignal/cli/demo_spec.rb +0 -1
- data/spec/lib/appsignal/cli/diagnose/paths_spec.rb +1 -1
- data/spec/lib/appsignal/cli/diagnose_spec.rb +0 -1
- data/spec/lib/appsignal/config_spec.rb +291 -44
- data/spec/lib/appsignal/demo_spec.rb +1 -2
- data/spec/lib/appsignal/environment_spec.rb +4 -2
- data/spec/lib/appsignal/hooks/action_cable_spec.rb +43 -74
- data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +3 -6
- data/spec/lib/appsignal/hooks/activejob_spec.rb +12 -3
- data/spec/lib/appsignal/hooks/delayed_job_spec.rb +2 -443
- data/spec/lib/appsignal/hooks/dry_monitor_spec.rb +4 -7
- data/spec/lib/appsignal/hooks/excon_spec.rb +3 -6
- data/spec/lib/appsignal/hooks/gvl_spec.rb +2 -2
- data/spec/lib/appsignal/hooks/http_spec.rb +1 -3
- data/spec/lib/appsignal/hooks/net_http_spec.rb +1 -1
- data/spec/lib/appsignal/hooks/redis_client_spec.rb +5 -8
- data/spec/lib/appsignal/hooks/redis_spec.rb +3 -6
- data/spec/lib/appsignal/hooks/resque_spec.rb +1 -1
- data/spec/lib/appsignal/hooks/sequel_spec.rb +3 -5
- data/spec/lib/appsignal/hooks/shoryuken_spec.rb +0 -171
- data/spec/lib/appsignal/hooks/sidekiq_spec.rb +1 -1
- data/spec/lib/appsignal/hooks/webmachine_spec.rb +1 -1
- data/spec/lib/appsignal/integrations/delayed_job_plugin_spec.rb +459 -0
- data/spec/lib/appsignal/integrations/grape_spec.rb +36 -0
- data/spec/lib/appsignal/integrations/hanami_spec.rb +9 -178
- data/spec/lib/appsignal/integrations/http_spec.rb +1 -5
- data/spec/lib/appsignal/integrations/mongo_ruby_driver_spec.rb +4 -2
- data/spec/lib/appsignal/integrations/net_http_spec.rb +1 -1
- data/spec/lib/appsignal/integrations/object_spec.rb +1 -3
- data/spec/lib/appsignal/integrations/padrino_spec.rb +8 -330
- data/spec/lib/appsignal/integrations/que_spec.rb +3 -4
- data/spec/lib/appsignal/integrations/railtie_spec.rb +275 -191
- data/spec/lib/appsignal/integrations/shoryuken_spec.rb +167 -0
- data/spec/lib/appsignal/integrations/sidekiq_spec.rb +15 -13
- data/spec/lib/appsignal/integrations/sinatra_spec.rb +9 -104
- data/spec/lib/appsignal/integrations/webmachine_spec.rb +13 -1
- data/spec/lib/appsignal/loaders/grape_spec.rb +12 -0
- data/spec/lib/appsignal/loaders/hanami_spec.rb +95 -0
- data/spec/lib/appsignal/loaders/padrino_spec.rb +277 -0
- data/spec/lib/appsignal/loaders/sinatra_spec.rb +47 -0
- data/spec/lib/appsignal/loaders_spec.rb +137 -0
- data/spec/lib/appsignal/probes/sidekiq_spec.rb +1 -1
- data/spec/lib/appsignal/probes_spec.rb +6 -5
- data/spec/lib/appsignal/rack/abstract_middleware_spec.rb +51 -5
- data/spec/lib/appsignal/rack/event_handler_spec.rb +114 -10
- data/spec/lib/appsignal/rack/generic_instrumentation_spec.rb +1 -1
- data/spec/lib/appsignal/rack/grape_middleware_spec.rb +2 -35
- data/spec/lib/appsignal/rack/hanami_middleware_spec.rb +1 -1
- data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +4 -2
- data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +3 -3
- data/spec/lib/appsignal/rack_spec.rb +63 -0
- data/spec/lib/appsignal/span_spec.rb +1 -3
- data/spec/lib/appsignal/transaction_spec.rb +1640 -1075
- data/spec/lib/appsignal/utils/integration_logger_spec.rb +12 -16
- data/spec/lib/appsignal/utils/integration_memory_logger_spec.rb +0 -10
- data/spec/lib/appsignal_spec.rb +601 -36
- data/spec/lib/puma/appsignal_spec.rb +0 -3
- data/spec/spec_helper.rb +5 -4
- data/spec/support/helpers/config_helpers.rb +2 -1
- data/spec/support/helpers/loader_helper.rb +21 -0
- data/spec/support/helpers/transaction_helpers.rb +44 -20
- data/spec/support/matchers/transaction.rb +15 -1
- data/spec/support/stubs/appsignal/loaders/loader_stub.rb +7 -0
- data/spec/support/testing.rb +47 -1
- metadata +19 -2
@@ -1,19 +1,4 @@
|
|
1
1
|
describe Appsignal::Config do
|
2
|
-
describe "config keys" do
|
3
|
-
it "all config keys have an environment variable version registered" do
|
4
|
-
config = Appsignal::Config
|
5
|
-
mapped_env_keys = config::ENV_TO_KEY_MAPPING.keys.sort
|
6
|
-
configured_env_keys = (
|
7
|
-
config::ENV_STRING_KEYS +
|
8
|
-
config::ENV_BOOLEAN_KEYS +
|
9
|
-
config::ENV_ARRAY_KEYS +
|
10
|
-
config::ENV_FLOAT_KEYS
|
11
|
-
).sort
|
12
|
-
|
13
|
-
expect(mapped_env_keys).to eql(configured_env_keys)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
2
|
describe "#initialize" do
|
18
3
|
describe "environment" do
|
19
4
|
context "when environment is nil" do
|
@@ -26,7 +11,7 @@ describe Appsignal::Config do
|
|
26
11
|
|
27
12
|
context "when environment is given" do
|
28
13
|
let(:env) { "my_env" }
|
29
|
-
let(:config) { described_class.new("", "my_env") }
|
14
|
+
let(:config) { described_class.new("/root/path", "my_env") }
|
30
15
|
|
31
16
|
it "sets the environment" do
|
32
17
|
expect(config.env).to eq(env)
|
@@ -35,6 +20,7 @@ describe Appsignal::Config do
|
|
35
20
|
it "sets the environment as loaded through the initial_config" do
|
36
21
|
expect(config.initial_config).to eq(:env => env)
|
37
22
|
expect(config.config_hash).to_not have_key(:env)
|
23
|
+
expect(config.config_hash).to_not have_key(:root_path)
|
38
24
|
end
|
39
25
|
|
40
26
|
context "with APPSIGNAL_APP_ENV environment variable" do
|
@@ -49,6 +35,7 @@ describe Appsignal::Config do
|
|
49
35
|
expect(config.initial_config).to eq(:env => env)
|
50
36
|
expect(config.env_config).to eq(:env => env_env)
|
51
37
|
expect(config.config_hash).to_not have_key(:env)
|
38
|
+
expect(config.config_hash).to_not have_key(:root_path)
|
52
39
|
end
|
53
40
|
end
|
54
41
|
end
|
@@ -136,6 +123,76 @@ describe Appsignal::Config do
|
|
136
123
|
end
|
137
124
|
end
|
138
125
|
|
126
|
+
describe "loader default config" do
|
127
|
+
let(:config) do
|
128
|
+
described_class.new("some-path", "production")
|
129
|
+
end
|
130
|
+
before do
|
131
|
+
class TestLoader < Appsignal::Loaders::Loader
|
132
|
+
register :test
|
133
|
+
def on_load
|
134
|
+
register_config_defaults(
|
135
|
+
:env => "new_env",
|
136
|
+
:root_path => "/some/path",
|
137
|
+
:my_option => "my_value",
|
138
|
+
:nil_option => nil
|
139
|
+
)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
load_loader(:test)
|
143
|
+
end
|
144
|
+
after do
|
145
|
+
Object.send(:remove_const, :TestLoader)
|
146
|
+
unregister_loader(:first)
|
147
|
+
end
|
148
|
+
|
149
|
+
it "merges with the loader defaults" do
|
150
|
+
expect(config.config_hash).to include(:my_option => "my_value")
|
151
|
+
end
|
152
|
+
|
153
|
+
it "does not set any nil values" do
|
154
|
+
expect(config.config_hash).to_not have_key(:nil_option)
|
155
|
+
end
|
156
|
+
|
157
|
+
it "overwrites the env" do
|
158
|
+
expect(config.env).to eq("new_env")
|
159
|
+
end
|
160
|
+
|
161
|
+
it "overwrites the path" do
|
162
|
+
expect(config.root_path).to eq("/some/path")
|
163
|
+
end
|
164
|
+
|
165
|
+
context "with multiple loaders" do
|
166
|
+
before do
|
167
|
+
class SecondLoader < Appsignal::Loaders::Loader
|
168
|
+
register :second
|
169
|
+
def on_load
|
170
|
+
register_config_defaults(
|
171
|
+
:env => "second_env",
|
172
|
+
:root_path => "/second/path",
|
173
|
+
:my_option => "second_value",
|
174
|
+
:second_option => "second_value"
|
175
|
+
)
|
176
|
+
end
|
177
|
+
end
|
178
|
+
load_loader(:second)
|
179
|
+
end
|
180
|
+
after do
|
181
|
+
Object.send(:remove_const, :SecondLoader)
|
182
|
+
unregister_loader(:second)
|
183
|
+
end
|
184
|
+
|
185
|
+
it "makes the first loader's config leading" do
|
186
|
+
expect(config.config_hash).to include(
|
187
|
+
:my_option => "my_value",
|
188
|
+
:second_option => "second_value"
|
189
|
+
)
|
190
|
+
expect(config.env).to eq("new_env")
|
191
|
+
expect(config.root_path).to eq("/some/path")
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
139
196
|
describe "initial config" do
|
140
197
|
let(:initial_config) do
|
141
198
|
{
|
@@ -416,49 +473,159 @@ describe Appsignal::Config do
|
|
416
473
|
let(:working_directory_path) { File.join(tmp_dir, "test_working_directory_path") }
|
417
474
|
let(:env_config) do
|
418
475
|
{
|
419
|
-
:running_in_container => true,
|
420
|
-
:push_api_key => "aaa-bbb-ccc",
|
421
476
|
:active => true,
|
477
|
+
:activejob_report_errors => "all",
|
422
478
|
:bind_address => "0.0.0.0",
|
479
|
+
:ca_file_path => "/some/path",
|
423
480
|
:cpu_count => 1.5,
|
424
|
-
:name => "App name",
|
425
481
|
:debug => true,
|
426
482
|
:dns_servers => ["8.8.8.8", "8.8.4.4"],
|
427
|
-
:
|
428
|
-
:
|
483
|
+
:enable_allocation_tracking => false,
|
484
|
+
:enable_gvl_global_timer => false,
|
485
|
+
:enable_gvl_waiting_threads => false,
|
486
|
+
:enable_host_metrics => false,
|
487
|
+
:enable_minutely_probes => false,
|
488
|
+
:enable_nginx_metrics => false,
|
489
|
+
:enable_rails_error_reporter => false,
|
490
|
+
:enable_rake_performance_instrumentation => false,
|
491
|
+
:enable_statsd => false,
|
492
|
+
:endpoint => "https://test.appsignal.com",
|
493
|
+
:files_world_accessible => false,
|
494
|
+
:filter_metadata => ["key1", "key2"],
|
495
|
+
:filter_parameters => ["param1", "param2"],
|
496
|
+
:filter_session_data => ["session1", "session2"],
|
497
|
+
:host_role => "my host role",
|
498
|
+
:hostname => "my hostname",
|
499
|
+
:http_proxy => "some proxy",
|
500
|
+
:ignore_actions => ["action1", "action2"],
|
501
|
+
:ignore_errors => ["ExampleStandardError", "AnotherError"],
|
429
502
|
:ignore_logs => ["^start$", "^Completed 2.* in .*ms (.*)"],
|
430
|
-
:ignore_namespaces =>
|
503
|
+
:ignore_namespaces => ["admin", "private_namespace"],
|
504
|
+
:instrument_http_rb => false,
|
431
505
|
:instrument_net_http => false,
|
432
506
|
:instrument_redis => false,
|
433
507
|
:instrument_sequel => false,
|
434
|
-
:
|
435
|
-
:
|
508
|
+
:log => "file",
|
509
|
+
:log_level => "debug",
|
510
|
+
:log_path => "/tmp/something",
|
511
|
+
:logging_endpoint => "https://appsignal-endpoint.net/test",
|
512
|
+
:name => "App name",
|
513
|
+
:push_api_key => "aaa-bbb-ccc",
|
514
|
+
:request_headers => ["accept", "accept-charset"],
|
436
515
|
:revision => "v2.5.1",
|
516
|
+
:running_in_container => true,
|
437
517
|
:send_environment_metadata => false,
|
518
|
+
:send_params => false,
|
519
|
+
:send_session_data => false,
|
520
|
+
:sidekiq_report_errors => "all",
|
521
|
+
:skip_session_data => false,
|
522
|
+
:statsd_port => "7890",
|
523
|
+
:transaction_debug_mode => false,
|
524
|
+
:working_dir_path => "/some/path",
|
438
525
|
:working_directory_path => working_directory_path
|
439
526
|
}
|
440
527
|
end
|
528
|
+
let(:env_vars) do
|
529
|
+
{
|
530
|
+
# Strings
|
531
|
+
"APPSIGNAL_ACTIVEJOB_REPORT_ERRORS" => "all",
|
532
|
+
"APPSIGNAL_APP_NAME" => "App name",
|
533
|
+
"APPSIGNAL_BIND_ADDRESS" => "0.0.0.0",
|
534
|
+
"APPSIGNAL_CA_FILE_PATH" => "/some/path",
|
535
|
+
"APPSIGNAL_HOSTNAME" => "my hostname",
|
536
|
+
"APPSIGNAL_HOST_ROLE" => "my host role",
|
537
|
+
"APPSIGNAL_HTTP_PROXY" => "some proxy",
|
538
|
+
"APPSIGNAL_LOG" => "file",
|
539
|
+
"APPSIGNAL_LOGGING_ENDPOINT" => "https://appsignal-endpoint.net/test",
|
540
|
+
"APPSIGNAL_LOG_LEVEL" => "debug",
|
541
|
+
"APPSIGNAL_LOG_PATH" => "/tmp/something",
|
542
|
+
"APPSIGNAL_PUSH_API_ENDPOINT" => "https://test.appsignal.com",
|
543
|
+
"APPSIGNAL_PUSH_API_KEY" => "aaa-bbb-ccc",
|
544
|
+
"APPSIGNAL_SIDEKIQ_REPORT_ERRORS" => "all",
|
545
|
+
"APPSIGNAL_STATSD_PORT" => "7890",
|
546
|
+
"APPSIGNAL_WORKING_DIRECTORY_PATH" => working_directory_path,
|
547
|
+
"APPSIGNAL_WORKING_DIR_PATH" => "/some/path",
|
548
|
+
"APP_REVISION" => "v2.5.1",
|
549
|
+
|
550
|
+
# Booleans
|
551
|
+
"APPSIGNAL_ACTIVE" => "true",
|
552
|
+
"APPSIGNAL_DEBUG" => "true",
|
553
|
+
"APPSIGNAL_ENABLE_ALLOCATION_TRACKING" => "false",
|
554
|
+
"APPSIGNAL_ENABLE_GVL_GLOBAL_TIMER" => "false",
|
555
|
+
"APPSIGNAL_ENABLE_GVL_WAITING_THREADS" => "false",
|
556
|
+
"APPSIGNAL_ENABLE_HOST_METRICS" => "false",
|
557
|
+
"APPSIGNAL_ENABLE_MINUTELY_PROBES" => "false",
|
558
|
+
"APPSIGNAL_ENABLE_NGINX_METRICS" => "false",
|
559
|
+
"APPSIGNAL_ENABLE_RAILS_ERROR_REPORTER" => "false",
|
560
|
+
"APPSIGNAL_ENABLE_RAKE_PERFORMANCE_INSTRUMENTATION" => "false",
|
561
|
+
"APPSIGNAL_ENABLE_STATSD" => "false",
|
562
|
+
"APPSIGNAL_FILES_WORLD_ACCESSIBLE" => "false",
|
563
|
+
"APPSIGNAL_INSTRUMENT_HTTP_RB" => "false",
|
564
|
+
"APPSIGNAL_INSTRUMENT_NET_HTTP" => "false",
|
565
|
+
"APPSIGNAL_INSTRUMENT_REDIS" => "false",
|
566
|
+
"APPSIGNAL_INSTRUMENT_SEQUEL" => "false",
|
567
|
+
"APPSIGNAL_RUNNING_IN_CONTAINER" => "true",
|
568
|
+
"APPSIGNAL_SEND_ENVIRONMENT_METADATA" => "false",
|
569
|
+
"APPSIGNAL_SEND_PARAMS" => "false",
|
570
|
+
"APPSIGNAL_SEND_SESSION_DATA" => "false",
|
571
|
+
"APPSIGNAL_SKIP_SESSION_DATA" => "false",
|
572
|
+
"APPSIGNAL_TRANSACTION_DEBUG_MODE" => "false",
|
573
|
+
|
574
|
+
# Arrays
|
575
|
+
"APPSIGNAL_DNS_SERVERS" => "8.8.8.8,8.8.4.4",
|
576
|
+
"APPSIGNAL_FILTER_METADATA" => "key1,key2",
|
577
|
+
"APPSIGNAL_FILTER_PARAMETERS" => "param1,param2",
|
578
|
+
"APPSIGNAL_FILTER_SESSION_DATA" => "session1,session2",
|
579
|
+
"APPSIGNAL_IGNORE_ACTIONS" => "action1,action2",
|
580
|
+
"APPSIGNAL_IGNORE_ERRORS" => "ExampleStandardError,AnotherError",
|
581
|
+
"APPSIGNAL_IGNORE_LOGS" => "^start$,^Completed 2.* in .*ms (.*)",
|
582
|
+
"APPSIGNAL_IGNORE_NAMESPACES" => "admin,private_namespace",
|
583
|
+
"APPSIGNAL_REQUEST_HEADERS" => "accept,accept-charset",
|
584
|
+
|
585
|
+
# Floats
|
586
|
+
"APPSIGNAL_CPU_COUNT" => "1.5"
|
587
|
+
}
|
588
|
+
end
|
441
589
|
before do
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
590
|
+
env_vars.each do |key, value|
|
591
|
+
ENV[key] = value
|
592
|
+
end
|
593
|
+
end
|
594
|
+
|
595
|
+
it "reads all string env keys" do
|
596
|
+
config
|
597
|
+
|
598
|
+
Appsignal::Config::ENV_STRING_KEYS.each do |env_key, option|
|
599
|
+
ENV.fetch(env_key) { raise "Config env var '#{env_key}' is not set for this test" }
|
600
|
+
expect(config[option]).to eq(ENV.fetch(env_key, nil))
|
601
|
+
end
|
602
|
+
end
|
603
|
+
|
604
|
+
it "reads all boolean env keys" do
|
605
|
+
config
|
606
|
+
|
607
|
+
Appsignal::Config::ENV_BOOLEAN_KEYS.each do |env_key, option|
|
608
|
+
ENV.fetch(env_key) { raise "Config env var '#{env_key}' is not set for this test" }
|
609
|
+
expect(config[option]).to eq(ENV.fetch(env_key, nil) == "true")
|
610
|
+
end
|
611
|
+
end
|
612
|
+
|
613
|
+
it "reads all array env keys" do
|
614
|
+
config
|
615
|
+
|
616
|
+
Appsignal::Config::ENV_ARRAY_KEYS.each do |env_key, option|
|
617
|
+
ENV.fetch(env_key) { raise "Config env var '#{env_key}' is not set for this test" }
|
618
|
+
expect(config[option]).to eq(ENV.fetch(env_key, nil).split(","))
|
619
|
+
end
|
620
|
+
end
|
621
|
+
|
622
|
+
it "reads all float env keys" do
|
623
|
+
config
|
624
|
+
|
625
|
+
Appsignal::Config::ENV_FLOAT_KEYS.each do |env_key, option|
|
626
|
+
ENV.fetch(env_key) { raise "Config env var '#{env_key}' is not set for this test" }
|
627
|
+
expect(config[option]).to eq(ENV.fetch(env_key, nil).to_f)
|
628
|
+
end
|
462
629
|
end
|
463
630
|
|
464
631
|
it "overrides config with environment values" do
|
@@ -1164,4 +1331,84 @@ describe Appsignal::Config do
|
|
1164
1331
|
end
|
1165
1332
|
end
|
1166
1333
|
end
|
1334
|
+
|
1335
|
+
describe Appsignal::Config::ConfigDSL do
|
1336
|
+
let(:env) { :production }
|
1337
|
+
let(:config) { project_fixture_config(env) }
|
1338
|
+
let(:dsl) { described_class.new(config) }
|
1339
|
+
|
1340
|
+
describe "default options" do
|
1341
|
+
let(:env) { :unknown_env }
|
1342
|
+
|
1343
|
+
it "returns default values for config options" do
|
1344
|
+
Appsignal::Config::DEFAULT_CONFIG.each do |option, value|
|
1345
|
+
expect(dsl.send(option)).to eq(value)
|
1346
|
+
end
|
1347
|
+
end
|
1348
|
+
end
|
1349
|
+
|
1350
|
+
it "returns already set values for config options" do
|
1351
|
+
ENV["APPSIGNAL_IGNORE_ERRORS"] = "my_error1,my_error2"
|
1352
|
+
config[:push_api_key] = "my push key"
|
1353
|
+
config[:ignore_actions] = ["My ignored action"]
|
1354
|
+
|
1355
|
+
expect(dsl.push_api_key).to eq("my push key")
|
1356
|
+
expect(dsl.ignore_actions).to eq(["My ignored action"])
|
1357
|
+
expect(dsl.ignore_errors).to eq(["my_error1", "my_error2"])
|
1358
|
+
end
|
1359
|
+
|
1360
|
+
it "returns the env" do
|
1361
|
+
expect(dsl.env).to eq("production")
|
1362
|
+
end
|
1363
|
+
|
1364
|
+
it "sets config options" do
|
1365
|
+
dsl.push_api_key = "my push key"
|
1366
|
+
dsl.ignore_actions = ["My ignored action"]
|
1367
|
+
|
1368
|
+
expect(dsl.push_api_key).to eq("my push key")
|
1369
|
+
expect(dsl.ignore_actions).to eq(["My ignored action"])
|
1370
|
+
end
|
1371
|
+
|
1372
|
+
it "doesn't update the config object" do
|
1373
|
+
dsl.push_api_key = "my push key"
|
1374
|
+
|
1375
|
+
expect(dsl.push_api_key).to eq("my push key")
|
1376
|
+
expect(config[:push_api_key]).to eq("abc") # Loaded from file
|
1377
|
+
end
|
1378
|
+
|
1379
|
+
it "casts strings to strings" do
|
1380
|
+
dsl.activejob_report_errors = :all
|
1381
|
+
dsl.sidekiq_report_errors = :all
|
1382
|
+
|
1383
|
+
expect(dsl.activejob_report_errors).to eq("all")
|
1384
|
+
expect(dsl.sidekiq_report_errors).to eq("all")
|
1385
|
+
end
|
1386
|
+
|
1387
|
+
it "casts booleans to booleans" do
|
1388
|
+
dsl.active = :yes
|
1389
|
+
dsl.enable_host_metrics = "An object representing a truthy value"
|
1390
|
+
dsl.send_params = true
|
1391
|
+
dsl.send_session_data = false
|
1392
|
+
|
1393
|
+
expect(dsl.active).to be(true)
|
1394
|
+
expect(dsl.enable_host_metrics).to be(true)
|
1395
|
+
expect(dsl.send_params).to be(true)
|
1396
|
+
expect(dsl.send_session_data).to be(false)
|
1397
|
+
end
|
1398
|
+
|
1399
|
+
it "casts arrays to arrays" do
|
1400
|
+
ignore_actions = Set.new
|
1401
|
+
ignore_actions << "my ignored action 1"
|
1402
|
+
ignore_actions << "my ignored action 2"
|
1403
|
+
dsl.ignore_actions = ignore_actions
|
1404
|
+
|
1405
|
+
expect(dsl.ignore_actions).to eq(["my ignored action 1", "my ignored action 2"])
|
1406
|
+
end
|
1407
|
+
|
1408
|
+
it "casts floats to floats" do
|
1409
|
+
dsl.cpu_count = 1
|
1410
|
+
|
1411
|
+
expect(dsl.cpu_count).to eq(1.0)
|
1412
|
+
end
|
1413
|
+
end
|
1167
1414
|
end
|
@@ -1,8 +1,10 @@
|
|
1
1
|
describe Appsignal::Environment do
|
2
2
|
include EnvironmentMetadataHelper
|
3
3
|
|
4
|
-
before
|
5
|
-
|
4
|
+
before do
|
5
|
+
start_agent
|
6
|
+
capture_environment_metadata_report_calls
|
7
|
+
end
|
6
8
|
|
7
9
|
def report(key, &value_block)
|
8
10
|
described_class.report(key, &value_block)
|