appsignal 3.6.2-java → 3.6.3-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +19 -4
- data/Rakefile +1 -1
- data/ext/agent.rb +27 -27
- data/lib/appsignal/auth_check.rb +1 -1
- data/lib/appsignal/config.rb +14 -1
- data/lib/appsignal/event_formatter/sequel/sql_formatter.rb +1 -1
- data/lib/appsignal/integrations/railtie.rb +14 -2
- data/lib/appsignal/logger.rb +5 -5
- data/lib/appsignal/version.rb +1 -1
- data/lib/puma/plugin/appsignal.rb +1 -1
- data/spec/lib/appsignal/capistrano2_spec.rb +2 -2
- data/spec/lib/appsignal/capistrano3_spec.rb +2 -2
- data/spec/lib/appsignal/cli/diagnose_spec.rb +1 -1
- data/spec/lib/appsignal/config_spec.rb +10 -5
- data/spec/lib/appsignal/environment_spec.rb +3 -3
- data/spec/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter_spec.rb +1 -1
- data/spec/lib/appsignal/hooks/resque_spec.rb +1 -1
- data/spec/lib/appsignal/hooks_spec.rb +1 -1
- data/spec/lib/appsignal/integrations/railtie_spec.rb +27 -2
- data/spec/lib/appsignal/integrations/sidekiq_spec.rb +1 -1
- data/spec/lib/appsignal/transaction_spec.rb +2 -2
- data/spec/lib/appsignal_spec.rb +1 -1
- data/spec/lib/puma/appsignal_spec.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '087bfd6a23d24ba7a74aeb4307eef319da3613b6d6843dc61a7995715d242958'
|
4
|
+
data.tar.gz: 63ec67e524abc5fac18bb85746b0f45b3dcb3aa05870b23fb46d8cf44381054c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b44722132c864d47321fa58a3c8493fdb51a734b988d994f0d2f269152372ae9df9844abb4158870020f9f30fe3b386e0a97fbe757300412b637bb069fe4d68
|
7
|
+
data.tar.gz: e7b735d7384c2c9ef43141b1eb2d2eb2704c9a42d23185fd7748bdb09e786afcf2717b2a8b80ad0401503f9f65b9dd510bbdc3545e48ce40a7e8a0f6ef5ee375
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# AppSignal for Ruby gem Changelog
|
2
2
|
|
3
|
+
## 3.6.3
|
4
|
+
|
5
|
+
_Published on 2024-03-20._
|
6
|
+
|
7
|
+
### Added
|
8
|
+
|
9
|
+
- [e50433fb](https://github.com/appsignal/appsignal-ruby/commit/e50433fbcb109ef741a889b0b7e78f16b884bd81) patch - Implement CPU count configuration option. Use it to override the auto-detected, cgroups-provided number of CPUs that is used to calculate CPU usage percentages.
|
10
|
+
|
11
|
+
To set it, use the the `cpu_count`
|
12
|
+
configuration option or the `APPSIGNAL_CPU_COUNT` environment variable.
|
13
|
+
|
14
|
+
### Fixed
|
15
|
+
|
16
|
+
- [c6dd9779](https://github.com/appsignal/appsignal-ruby/commit/c6dd9779bb50dd9385da8962ccf1057ca1a44c7a) patch - Add request parameters, path and method tags to errors reported in controllers via the Rails error reporter.
|
17
|
+
|
3
18
|
## 3.6.2
|
4
19
|
|
5
20
|
_Published on 2024-03-08._
|
@@ -1459,7 +1474,7 @@ Yanked
|
|
1459
1474
|
- Support for arrays, literal value types and function arguments in sql lexer
|
1460
1475
|
|
1461
1476
|
## 1.2.2
|
1462
|
-
- Handle out of range numbers in queue
|
1477
|
+
- Handle out of range numbers in queue length and metrics api
|
1463
1478
|
|
1464
1479
|
## 1.2.1
|
1465
1480
|
- Use Dir.pwd in CLI install wizard
|
@@ -1484,7 +1499,7 @@ Yanked
|
|
1484
1499
|
## 1.1.7
|
1485
1500
|
- Make logging resilient for closing FD's (daemons gem does this)
|
1486
1501
|
- Add support for using Resque through ActiveJob
|
1487
|
-
- Rescue more
|
1502
|
+
- Rescue more exceptions in json generation
|
1488
1503
|
|
1489
1504
|
## 1.1.6
|
1490
1505
|
- Generic Rack instrumentation middleware
|
@@ -1534,7 +1549,7 @@ Yanked
|
|
1534
1549
|
- Improved sql sanitization
|
1535
1550
|
- Improved mongoid/mongodb sanitization
|
1536
1551
|
- Minor performance improvements
|
1537
|
-
- Better handling for non-utf8
|
1552
|
+
- Better handling for non-utf8 convertible strings
|
1538
1553
|
- Make gem installable (but not functional) on JRuby
|
1539
1554
|
|
1540
1555
|
## 1.0.4
|
@@ -1715,7 +1730,7 @@ Yanked
|
|
1715
1730
|
Yanked
|
1716
1731
|
|
1717
1732
|
## 0.8.8
|
1718
|
-
-
|
1733
|
+
- Explicitly require securerandom
|
1719
1734
|
|
1720
1735
|
## 0.8.7
|
1721
1736
|
- Dup process action event to avoid threading issue
|
data/Rakefile
CHANGED
@@ -219,7 +219,7 @@ namespace :build do
|
|
219
219
|
Gem::PackageTask.new(base_gemspec, &block)
|
220
220
|
rescue StandardError => e
|
221
221
|
puts "Warning: An error occurred defining `build:#{task_name}:gem` Rake task."
|
222
|
-
puts "This task will not be
|
222
|
+
puts "This task will not be available."
|
223
223
|
if ENV["DEBUG"]
|
224
224
|
puts "#{e}: #{e.message}"
|
225
225
|
puts e.backtrace
|
data/ext/agent.rb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# Modifications to this file will be overwritten with the next agent release.
|
7
7
|
|
8
8
|
APPSIGNAL_AGENT_CONFIG = {
|
9
|
-
"version" => "0.
|
9
|
+
"version" => "0.34.1",
|
10
10
|
"mirrors" => [
|
11
11
|
"https://appsignal-agent-releases.global.ssl.fastly.net",
|
12
12
|
"https://d135dj0rjqvssy.cloudfront.net"
|
@@ -14,131 +14,131 @@ APPSIGNAL_AGENT_CONFIG = {
|
|
14
14
|
"triples" => {
|
15
15
|
"x86_64-darwin" => {
|
16
16
|
"static" => {
|
17
|
-
"checksum" => "
|
17
|
+
"checksum" => "351f3dae916d3e84177d8cc35eaeaca5345f4deca9e0925a29353915cc0530d2",
|
18
18
|
"filename" => "appsignal-x86_64-darwin-all-static.tar.gz"
|
19
19
|
},
|
20
20
|
"dynamic" => {
|
21
|
-
"checksum" => "
|
21
|
+
"checksum" => "91ecacdf5e826dd21d5da26c07c5ecffd668cb16eaf15388d08a223425e716bb",
|
22
22
|
"filename" => "appsignal-x86_64-darwin-all-dynamic.tar.gz"
|
23
23
|
}
|
24
24
|
},
|
25
25
|
"universal-darwin" => {
|
26
26
|
"static" => {
|
27
|
-
"checksum" => "
|
27
|
+
"checksum" => "351f3dae916d3e84177d8cc35eaeaca5345f4deca9e0925a29353915cc0530d2",
|
28
28
|
"filename" => "appsignal-x86_64-darwin-all-static.tar.gz"
|
29
29
|
},
|
30
30
|
"dynamic" => {
|
31
|
-
"checksum" => "
|
31
|
+
"checksum" => "91ecacdf5e826dd21d5da26c07c5ecffd668cb16eaf15388d08a223425e716bb",
|
32
32
|
"filename" => "appsignal-x86_64-darwin-all-dynamic.tar.gz"
|
33
33
|
}
|
34
34
|
},
|
35
35
|
"aarch64-darwin" => {
|
36
36
|
"static" => {
|
37
|
-
"checksum" => "
|
37
|
+
"checksum" => "fd7359232fbd65f10ee565fcf65f4afa6d7a2ba1a8dead200c34736ca942df16",
|
38
38
|
"filename" => "appsignal-aarch64-darwin-all-static.tar.gz"
|
39
39
|
},
|
40
40
|
"dynamic" => {
|
41
|
-
"checksum" => "
|
41
|
+
"checksum" => "a53ed8cc13d2821a4eee1ea7e4e58346125f27309973d4a2e8f059f129e927e2",
|
42
42
|
"filename" => "appsignal-aarch64-darwin-all-dynamic.tar.gz"
|
43
43
|
}
|
44
44
|
},
|
45
45
|
"arm64-darwin" => {
|
46
46
|
"static" => {
|
47
|
-
"checksum" => "
|
47
|
+
"checksum" => "fd7359232fbd65f10ee565fcf65f4afa6d7a2ba1a8dead200c34736ca942df16",
|
48
48
|
"filename" => "appsignal-aarch64-darwin-all-static.tar.gz"
|
49
49
|
},
|
50
50
|
"dynamic" => {
|
51
|
-
"checksum" => "
|
51
|
+
"checksum" => "a53ed8cc13d2821a4eee1ea7e4e58346125f27309973d4a2e8f059f129e927e2",
|
52
52
|
"filename" => "appsignal-aarch64-darwin-all-dynamic.tar.gz"
|
53
53
|
}
|
54
54
|
},
|
55
55
|
"arm-darwin" => {
|
56
56
|
"static" => {
|
57
|
-
"checksum" => "
|
57
|
+
"checksum" => "fd7359232fbd65f10ee565fcf65f4afa6d7a2ba1a8dead200c34736ca942df16",
|
58
58
|
"filename" => "appsignal-aarch64-darwin-all-static.tar.gz"
|
59
59
|
},
|
60
60
|
"dynamic" => {
|
61
|
-
"checksum" => "
|
61
|
+
"checksum" => "a53ed8cc13d2821a4eee1ea7e4e58346125f27309973d4a2e8f059f129e927e2",
|
62
62
|
"filename" => "appsignal-aarch64-darwin-all-dynamic.tar.gz"
|
63
63
|
}
|
64
64
|
},
|
65
65
|
"aarch64-linux" => {
|
66
66
|
"static" => {
|
67
|
-
"checksum" => "
|
67
|
+
"checksum" => "dfbab18b7faa24684bf0ab57666b6b493356a3da43ecdba2e992b2d6d513cf31",
|
68
68
|
"filename" => "appsignal-aarch64-linux-all-static.tar.gz"
|
69
69
|
},
|
70
70
|
"dynamic" => {
|
71
|
-
"checksum" => "
|
71
|
+
"checksum" => "865b8f034aa680aa6cdfe77cf117f071f9b5857c92cc7b6f36decfd5b2293b27",
|
72
72
|
"filename" => "appsignal-aarch64-linux-all-dynamic.tar.gz"
|
73
73
|
}
|
74
74
|
},
|
75
75
|
"i686-linux" => {
|
76
76
|
"static" => {
|
77
|
-
"checksum" => "
|
77
|
+
"checksum" => "ce4a819f3eaa4590795497915e4a20b3fe281a0821364b80d26ffd1391af67a8",
|
78
78
|
"filename" => "appsignal-i686-linux-all-static.tar.gz"
|
79
79
|
},
|
80
80
|
"dynamic" => {
|
81
|
-
"checksum" => "
|
81
|
+
"checksum" => "195d570b7f6b1ea5d2ced90dc12d68a6627e1886d078258b5483163e52afc620",
|
82
82
|
"filename" => "appsignal-i686-linux-all-dynamic.tar.gz"
|
83
83
|
}
|
84
84
|
},
|
85
85
|
"x86-linux" => {
|
86
86
|
"static" => {
|
87
|
-
"checksum" => "
|
87
|
+
"checksum" => "ce4a819f3eaa4590795497915e4a20b3fe281a0821364b80d26ffd1391af67a8",
|
88
88
|
"filename" => "appsignal-i686-linux-all-static.tar.gz"
|
89
89
|
},
|
90
90
|
"dynamic" => {
|
91
|
-
"checksum" => "
|
91
|
+
"checksum" => "195d570b7f6b1ea5d2ced90dc12d68a6627e1886d078258b5483163e52afc620",
|
92
92
|
"filename" => "appsignal-i686-linux-all-dynamic.tar.gz"
|
93
93
|
}
|
94
94
|
},
|
95
95
|
"x86_64-linux" => {
|
96
96
|
"static" => {
|
97
|
-
"checksum" => "
|
97
|
+
"checksum" => "e55f9ecb4e4b51e9232918216487712b63a7cfea9710763f61077e8d40d53dbe",
|
98
98
|
"filename" => "appsignal-x86_64-linux-all-static.tar.gz"
|
99
99
|
},
|
100
100
|
"dynamic" => {
|
101
|
-
"checksum" => "
|
101
|
+
"checksum" => "b5edf38f4ac2725907995518a1d09dc09c70cae600d1d3a287e0b6404c2301d2",
|
102
102
|
"filename" => "appsignal-x86_64-linux-all-dynamic.tar.gz"
|
103
103
|
}
|
104
104
|
},
|
105
105
|
"x86_64-linux-musl" => {
|
106
106
|
"static" => {
|
107
|
-
"checksum" => "
|
107
|
+
"checksum" => "8963ebc98405648205a6d8aa371bafa49cb33cd104e0c3e6cc1856ba41fe3d8c",
|
108
108
|
"filename" => "appsignal-x86_64-linux-musl-all-static.tar.gz"
|
109
109
|
},
|
110
110
|
"dynamic" => {
|
111
|
-
"checksum" => "
|
111
|
+
"checksum" => "6b5bab353f1597e64d0dc7638f02e8a0c4da2b341991f8e8efb251d8f94878a2",
|
112
112
|
"filename" => "appsignal-x86_64-linux-musl-all-dynamic.tar.gz"
|
113
113
|
}
|
114
114
|
},
|
115
115
|
"aarch64-linux-musl" => {
|
116
116
|
"static" => {
|
117
|
-
"checksum" => "
|
117
|
+
"checksum" => "34bb72678b896a2a8289a97611a61a297b5a0e6110f5085a683ad93857cdf26c",
|
118
118
|
"filename" => "appsignal-aarch64-linux-musl-all-static.tar.gz"
|
119
119
|
},
|
120
120
|
"dynamic" => {
|
121
|
-
"checksum" => "
|
121
|
+
"checksum" => "999e0bdc36613f9e016b01d4a00fab864b5996472e32ff1e03a0019877cd5e5d",
|
122
122
|
"filename" => "appsignal-aarch64-linux-musl-all-dynamic.tar.gz"
|
123
123
|
}
|
124
124
|
},
|
125
125
|
"x86_64-freebsd" => {
|
126
126
|
"static" => {
|
127
|
-
"checksum" => "
|
127
|
+
"checksum" => "68e882ba3bc87328953d9bfbb676b00d4199756a7090d5cdc265a4b32d857cc5",
|
128
128
|
"filename" => "appsignal-x86_64-freebsd-all-static.tar.gz"
|
129
129
|
},
|
130
130
|
"dynamic" => {
|
131
|
-
"checksum" => "
|
131
|
+
"checksum" => "3e770a387ada2e12052929c6f4ea141d05bd3dec5337ca53bbcf1078a6a2537d",
|
132
132
|
"filename" => "appsignal-x86_64-freebsd-all-dynamic.tar.gz"
|
133
133
|
}
|
134
134
|
},
|
135
135
|
"amd64-freebsd" => {
|
136
136
|
"static" => {
|
137
|
-
"checksum" => "
|
137
|
+
"checksum" => "68e882ba3bc87328953d9bfbb676b00d4199756a7090d5cdc265a4b32d857cc5",
|
138
138
|
"filename" => "appsignal-x86_64-freebsd-all-static.tar.gz"
|
139
139
|
},
|
140
140
|
"dynamic" => {
|
141
|
-
"checksum" => "
|
141
|
+
"checksum" => "3e770a387ada2e12052929c6f4ea141d05bd3dec5337ca53bbcf1078a6a2537d",
|
142
142
|
"filename" => "appsignal-x86_64-freebsd-all-dynamic.tar.gz"
|
143
143
|
}
|
144
144
|
}
|
data/lib/appsignal/auth_check.rb
CHANGED
@@ -40,7 +40,7 @@ module Appsignal
|
|
40
40
|
# @return [Array<String/nil, String>] response tuple.
|
41
41
|
# - First value is the response status code.
|
42
42
|
# - Second value is a description of the response and the exception error
|
43
|
-
# message if an exception
|
43
|
+
# message if an exception occurred.
|
44
44
|
def perform_with_result
|
45
45
|
status = perform
|
46
46
|
result =
|
data/lib/appsignal/config.rb
CHANGED
@@ -70,6 +70,7 @@ module Appsignal
|
|
70
70
|
"APPSIGNAL_APP_NAME" => :name,
|
71
71
|
"APPSIGNAL_BIND_ADDRESS" => :bind_address,
|
72
72
|
"APPSIGNAL_CA_FILE_PATH" => :ca_file_path,
|
73
|
+
"APPSIGNAL_CPU_COUNT" => :cpu_count,
|
73
74
|
"APPSIGNAL_DEBUG" => :debug,
|
74
75
|
"APPSIGNAL_DNS_SERVERS" => :dns_servers,
|
75
76
|
"APPSIGNAL_ENABLE_ALLOCATION_TRACKING" => :enable_allocation_tracking,
|
@@ -167,6 +168,9 @@ module Appsignal
|
|
167
168
|
APPSIGNAL_IGNORE_NAMESPACES
|
168
169
|
APPSIGNAL_REQUEST_HEADERS
|
169
170
|
].freeze
|
171
|
+
ENV_FLOAT_KEYS = %w[
|
172
|
+
APPSIGNAL_CPU_COUNT
|
173
|
+
].freeze
|
170
174
|
|
171
175
|
# @attribute [r] system_config
|
172
176
|
# Config detected on the system level.
|
@@ -344,6 +348,7 @@ module Appsignal
|
|
344
348
|
ENV["_APPSIGNAL_APP_PATH"] = root_path.to_s
|
345
349
|
ENV["_APPSIGNAL_BIND_ADDRESS"] = config_hash[:bind_address].to_s
|
346
350
|
ENV["_APPSIGNAL_CA_FILE_PATH"] = config_hash[:ca_file_path].to_s
|
351
|
+
ENV["_APPSIGNAL_CPU_COUNT"] = config_hash[:cpu_count].to_s
|
347
352
|
ENV["_APPSIGNAL_DEBUG_LOGGING"] = config_hash[:debug].to_s
|
348
353
|
ENV["_APPSIGNAL_DNS_SERVERS"] = config_hash[:dns_servers].join(",")
|
349
354
|
ENV["_APPSIGNAL_ENABLE_HOST_METRICS"] = config_hash[:enable_host_metrics].to_s
|
@@ -444,7 +449,7 @@ module Appsignal
|
|
444
449
|
"'APPSIGNAL_INACTIVE_ON_CONFIG_FILE_ERROR=1' in your system " \
|
445
450
|
"environment."
|
446
451
|
end
|
447
|
-
message = "An error
|
452
|
+
message = "An error occurred while loading the AppSignal config file. " \
|
448
453
|
"#{extra_message}\n" \
|
449
454
|
"File: #{config_file.inspect}\n" \
|
450
455
|
"#{e.class.name}: #{e}"
|
@@ -501,6 +506,14 @@ module Appsignal
|
|
501
506
|
config[ENV_TO_KEY_MAPPING[var]] = env_var.split(",")
|
502
507
|
end
|
503
508
|
|
509
|
+
# Configuration with float type
|
510
|
+
ENV_FLOAT_KEYS.each do |var|
|
511
|
+
env_var = ENV.fetch(var, nil)
|
512
|
+
next unless env_var
|
513
|
+
|
514
|
+
config[ENV_TO_KEY_MAPPING[var]] = env_var.to_f
|
515
|
+
end
|
516
|
+
|
504
517
|
config
|
505
518
|
end
|
506
519
|
|
@@ -4,7 +4,7 @@ module Appsignal
|
|
4
4
|
class EventFormatter
|
5
5
|
# @api private
|
6
6
|
module Sequel
|
7
|
-
#
|
7
|
+
# Compatibility with the sequel-rails gem.
|
8
8
|
# The sequel-rails gem adds its own ActiveSupport::Notifications events
|
9
9
|
# that conflict with our own sequel instrumentor. Without this event
|
10
10
|
# formatter the sequel-rails events are recorded without the SQL query
|
@@ -60,9 +60,13 @@ module Appsignal
|
|
60
60
|
return unless handled
|
61
61
|
|
62
62
|
Appsignal.send_error(error) do |transaction|
|
63
|
-
namespace, action_name, tags, custom_data =
|
63
|
+
namespace, action_name, path, method, params, tags, custom_data =
|
64
|
+
context_for(context.dup)
|
64
65
|
transaction.set_namespace(namespace) if namespace
|
65
66
|
transaction.set_action(action_name) if action_name
|
67
|
+
transaction.set_metadata("path", path)
|
68
|
+
transaction.set_metadata("method", method)
|
69
|
+
transaction.params = params
|
66
70
|
transaction.set_sample_data("custom_data", custom_data) if custom_data
|
67
71
|
|
68
72
|
tags[:severity] = severity
|
@@ -81,9 +85,17 @@ module Appsignal
|
|
81
85
|
# Fetch the namespace and action name based on the Rails execution
|
82
86
|
# context.
|
83
87
|
controller = context.delete(:controller)
|
88
|
+
path = nil
|
89
|
+
method = nil
|
90
|
+
params = nil
|
84
91
|
if controller
|
85
92
|
namespace = Appsignal::Transaction::HTTP_REQUEST
|
86
93
|
action_name = "#{controller.class.name}##{controller.action_name}"
|
94
|
+
unless controller.request.nil?
|
95
|
+
path = controller.request.path
|
96
|
+
method = controller.request.method
|
97
|
+
params = controller.request.filtered_parameters
|
98
|
+
end
|
87
99
|
end
|
88
100
|
# ActiveJob transaction naming relies on the current AppSignal
|
89
101
|
# transaction namespace and action name copying done after this.
|
@@ -115,7 +127,7 @@ module Appsignal
|
|
115
127
|
end
|
116
128
|
tags.merge!(context)
|
117
129
|
|
118
|
-
[namespace, action_name, tags, custom_data]
|
130
|
+
[namespace, action_name, path, method, params, tags, custom_data]
|
119
131
|
end
|
120
132
|
end
|
121
133
|
end
|
data/lib/appsignal/logger.rb
CHANGED
@@ -64,7 +64,7 @@ module Appsignal
|
|
64
64
|
alias log add
|
65
65
|
|
66
66
|
# Log a debug level message
|
67
|
-
# @param message
|
67
|
+
# @param message Message to log
|
68
68
|
# @param attributes Attributes to tag the log with
|
69
69
|
# @return [void]
|
70
70
|
def debug(message = nil, attributes = {})
|
@@ -77,7 +77,7 @@ module Appsignal
|
|
77
77
|
end
|
78
78
|
|
79
79
|
# Log an info level message
|
80
|
-
# @param message
|
80
|
+
# @param message Message to log
|
81
81
|
# @param attributes Attributes to tag the log with
|
82
82
|
# @return [void]
|
83
83
|
def info(message = nil, attributes = {})
|
@@ -90,7 +90,7 @@ module Appsignal
|
|
90
90
|
end
|
91
91
|
|
92
92
|
# Log a warn level message
|
93
|
-
# @param message
|
93
|
+
# @param message Message to log
|
94
94
|
# @param attributes Attributes to tag the log with
|
95
95
|
# @return [void]
|
96
96
|
def warn(message = nil, attributes = {})
|
@@ -103,7 +103,7 @@ module Appsignal
|
|
103
103
|
end
|
104
104
|
|
105
105
|
# Log an error level message
|
106
|
-
# @param message
|
106
|
+
# @param message Message to log
|
107
107
|
# @param attributes Attributes to tag the log with
|
108
108
|
# @return [void]
|
109
109
|
def error(message = nil, attributes = {})
|
@@ -116,7 +116,7 @@ module Appsignal
|
|
116
116
|
end
|
117
117
|
|
118
118
|
# Log a fatal level message
|
119
|
-
# @param message
|
119
|
+
# @param message Message to log
|
120
120
|
# @param attributes Attributes to tag the log with
|
121
121
|
# @return [void]
|
122
122
|
def fatal(message = nil, attributes = {})
|
data/lib/appsignal/version.rb
CHANGED
@@ -18,7 +18,7 @@ Puma::Plugin.create do # rubocop:disable Metrics/BlockLength
|
|
18
18
|
|
19
19
|
loop do
|
20
20
|
# Implement similar behavior to minutely probes.
|
21
|
-
# Initial sleep to wait until the app is fully
|
21
|
+
# Initial sleep to wait until the app is fully initialized.
|
22
22
|
# Then loop every 60 seconds and collect the Puma stats as AppSignal
|
23
23
|
# metrics.
|
24
24
|
sleep sleep_time
|
@@ -160,7 +160,7 @@ if DependencyHelper.capistrano2_present?
|
|
160
160
|
run
|
161
161
|
end
|
162
162
|
|
163
|
-
it "transmits the
|
163
|
+
it "transmits the overridden revision" do
|
164
164
|
expect(output).to include \
|
165
165
|
"Notifying AppSignal of deploy with: revision: abc123, user: batman",
|
166
166
|
"AppSignal has been notified of this deploy!"
|
@@ -174,7 +174,7 @@ if DependencyHelper.capistrano2_present?
|
|
174
174
|
run
|
175
175
|
end
|
176
176
|
|
177
|
-
it "transmits the
|
177
|
+
it "transmits the overridden deploy user" do
|
178
178
|
expect(output).to include \
|
179
179
|
"Notifying AppSignal of deploy with: revision: 503ce0923ed177a3ce000005," \
|
180
180
|
" user: robin",
|
@@ -172,7 +172,7 @@ if DependencyHelper.capistrano3_present?
|
|
172
172
|
run
|
173
173
|
end
|
174
174
|
|
175
|
-
it "transmits the
|
175
|
+
it "transmits the overridden revision" do
|
176
176
|
expect(output).to include \
|
177
177
|
"Notifying AppSignal of deploy with: revision: abc123, user: batman",
|
178
178
|
"AppSignal has been notified of this deploy!"
|
@@ -186,7 +186,7 @@ if DependencyHelper.capistrano3_present?
|
|
186
186
|
run
|
187
187
|
end
|
188
188
|
|
189
|
-
it "transmits the
|
189
|
+
it "transmits the overridden deploy user" do
|
190
190
|
expect(output).to include \
|
191
191
|
"Notifying AppSignal of deploy with: revision: 503ce0923ed177a3ce000005, " \
|
192
192
|
"user: robin",
|
@@ -466,7 +466,7 @@ describe Appsignal::CLI::Diagnose, :api_stub => true, :send_report => :yes_cli_i
|
|
466
466
|
end
|
467
467
|
end
|
468
468
|
|
469
|
-
context "when the
|
469
|
+
context "when the extension returns invalid JSON" do
|
470
470
|
before do
|
471
471
|
expect(Appsignal::Extension).to receive(:diagnose).and_return("invalid agent\njson")
|
472
472
|
run
|
@@ -6,7 +6,8 @@ describe Appsignal::Config do
|
|
6
6
|
configured_env_keys = (
|
7
7
|
config::ENV_STRING_KEYS +
|
8
8
|
config::ENV_BOOLEAN_KEYS +
|
9
|
-
config::ENV_ARRAY_KEYS
|
9
|
+
config::ENV_ARRAY_KEYS +
|
10
|
+
config::ENV_FLOAT_KEYS
|
10
11
|
).sort
|
11
12
|
|
12
13
|
expect(mapped_env_keys).to eql(configured_env_keys)
|
@@ -264,7 +265,7 @@ describe Appsignal::Config do
|
|
264
265
|
end
|
265
266
|
end
|
266
267
|
|
267
|
-
context "with an
|
268
|
+
context "with an overridden config file" do
|
268
269
|
let(:config) do
|
269
270
|
project_fixture_config("production", {}, Appsignal.internal_logger,
|
270
271
|
File.join(project_fixture_path, "config", "appsignal.yml"))
|
@@ -275,7 +276,7 @@ describe Appsignal::Config do
|
|
275
276
|
expect(config.active?).to be_truthy
|
276
277
|
end
|
277
278
|
|
278
|
-
context "with an invalid
|
279
|
+
context "with an invalid overridden config file" do
|
279
280
|
let(:config) do
|
280
281
|
project_fixture_config("production", {}, Appsignal.internal_logger,
|
281
282
|
File.join(project_fixture_path, "config", "missing.yml"))
|
@@ -300,7 +301,7 @@ describe Appsignal::Config do
|
|
300
301
|
stdout = std_stream
|
301
302
|
stderr = std_stream
|
302
303
|
log = capture_logs { capture_std_streams(stdout, stderr) { config } }
|
303
|
-
message = "An error
|
304
|
+
message = "An error occurred while loading the AppSignal config file. " \
|
304
305
|
"Skipping file config. " \
|
305
306
|
"In future versions AppSignal will not start on a config file " \
|
306
307
|
"error. To opt-in to this new behavior set " \
|
@@ -326,7 +327,7 @@ describe Appsignal::Config do
|
|
326
327
|
ENV["APPSIGNAL_PUSH_API_KEY"] = "something valid"
|
327
328
|
ENV["APPSIGNAL_INACTIVE_ON_CONFIG_FILE_ERROR"] = "1"
|
328
329
|
log = capture_logs { capture_std_streams(stdout, stderr) { config } }
|
329
|
-
message = "An error
|
330
|
+
message = "An error occurred while loading the AppSignal config file. " \
|
330
331
|
"Not starting AppSignal because APPSIGNAL_INACTIVE_ON_CONFIG_FILE_ERROR is set.\n" \
|
331
332
|
"File: #{File.join(config_path, "config", "appsignal.yml").inspect}\n" \
|
332
333
|
"KeyError: key not found"
|
@@ -414,6 +415,7 @@ describe Appsignal::Config do
|
|
414
415
|
:push_api_key => "aaa-bbb-ccc",
|
415
416
|
:active => true,
|
416
417
|
:bind_address => "0.0.0.0",
|
418
|
+
:cpu_count => 1.5,
|
417
419
|
:name => "App name",
|
418
420
|
:debug => true,
|
419
421
|
:dns_servers => ["8.8.8.8", "8.8.4.4"],
|
@@ -436,6 +438,7 @@ describe Appsignal::Config do
|
|
436
438
|
ENV["APPSIGNAL_ACTIVE"] = "true"
|
437
439
|
ENV["APPSIGNAL_APP_NAME"] = "App name"
|
438
440
|
ENV["APPSIGNAL_BIND_ADDRESS"] = "0.0.0.0"
|
441
|
+
ENV["APPSIGNAL_CPU_COUNT"] = "1.5"
|
439
442
|
ENV["APPSIGNAL_DEBUG"] = "true"
|
440
443
|
ENV["APPSIGNAL_DNS_SERVERS"] = "8.8.8.8,8.8.4.4"
|
441
444
|
ENV["APPSIGNAL_IGNORE_ACTIONS"] = "action1,action2"
|
@@ -631,6 +634,7 @@ describe Appsignal::Config do
|
|
631
634
|
let(:config) { project_fixture_config(:production) }
|
632
635
|
before do
|
633
636
|
config[:bind_address] = "0.0.0.0"
|
637
|
+
config[:cpu_count] = 1.5
|
634
638
|
config[:logging_endpoint] = "http://localhost:123"
|
635
639
|
config[:http_proxy] = "http://localhost"
|
636
640
|
config[:ignore_actions] = %w[action1 action2]
|
@@ -654,6 +658,7 @@ describe Appsignal::Config do
|
|
654
658
|
.to end_with("spec/support/fixtures/projects/valid")
|
655
659
|
expect(ENV.fetch("_APPSIGNAL_AGENT_PATH", nil)).to end_with("/ext")
|
656
660
|
expect(ENV.fetch("_APPSIGNAL_BIND_ADDRESS", nil)).to eq("0.0.0.0")
|
661
|
+
expect(ENV.fetch("_APPSIGNAL_CPU_COUNT", nil)).to eq("1.5")
|
657
662
|
expect(ENV.fetch("_APPSIGNAL_DEBUG_LOGGING", nil)).to eq "false"
|
658
663
|
expect(ENV.fetch("_APPSIGNAL_LOG", nil)).to eq "stdout"
|
659
664
|
expect(ENV.fetch("_APPSIGNAL_LOG_FILE_PATH", nil)).to end_with("/tmp/appsignal.log")
|
@@ -90,7 +90,7 @@ describe Appsignal::Environment do
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
-
context "when something
|
93
|
+
context "when something unforeseen errors" do
|
94
94
|
it "does not re-raise the error and writes it to the log" do
|
95
95
|
klass = Class.new do
|
96
96
|
def inspect
|
@@ -127,7 +127,7 @@ describe Appsignal::Environment do
|
|
127
127
|
expect(rake_spec.version.to_s).to_not be_empty
|
128
128
|
end
|
129
129
|
|
130
|
-
context "when something
|
130
|
+
context "when something unforeseen errors" do
|
131
131
|
it "does not re-raise the error and writes it to the log" do
|
132
132
|
expect(Bundler).to receive(:rubygems).and_raise(RuntimeError, "bundler error")
|
133
133
|
|
@@ -148,7 +148,7 @@ describe Appsignal::Environment do
|
|
148
148
|
expect_environment_metadata("ruby_a_test_enabled", "true")
|
149
149
|
end
|
150
150
|
|
151
|
-
context "when something
|
151
|
+
context "when something unforeseen errors" do
|
152
152
|
it "does not re-raise the error and writes it to the log" do
|
153
153
|
klass = Class.new do
|
154
154
|
def to_s
|
@@ -21,7 +21,7 @@ describe Appsignal::EventFormatter::MongoRubyDriver::QueryFormatter do
|
|
21
21
|
formatter.format(strategy, command)
|
22
22
|
end
|
23
23
|
|
24
|
-
context "when strategy is
|
24
|
+
context "when strategy is unknown" do
|
25
25
|
let(:strategy) { :bananas }
|
26
26
|
|
27
27
|
it "should return an empty hash" do
|
@@ -160,7 +160,7 @@ describe Appsignal::Hooks::ResqueHook do
|
|
160
160
|
end
|
161
161
|
after { Object.send(:remove_const, :ActiveJobMock) }
|
162
162
|
|
163
|
-
it "does not set arguments but lets the ActiveJob
|
163
|
+
it "does not set arguments but lets the ActiveJob integration handle it" do
|
164
164
|
perform_job(
|
165
165
|
ResqueTestJob,
|
166
166
|
"class" => "ActiveJob::QueueAdapters::ResqueAdapter::JobWrapper",
|
@@ -47,7 +47,7 @@ describe Appsignal::Hooks do
|
|
47
47
|
Appsignal::Hooks.hooks.delete(:mock_present_hook)
|
48
48
|
end
|
49
49
|
|
50
|
-
it "should not install if
|
50
|
+
it "should not install if dependencies are not present" do
|
51
51
|
Appsignal::Hooks::Hook.register(:mock_not_present_hook, MockNotPresentHook)
|
52
52
|
|
53
53
|
expect(Appsignal::Hooks.hooks[:mock_not_present_hook]).to be_instance_of(MockNotPresentHook)
|
@@ -256,10 +256,28 @@ if DependencyHelper.rails_present?
|
|
256
256
|
end
|
257
257
|
|
258
258
|
context "when no transaction is active" do
|
259
|
+
class ExampleRailsRequestMock
|
260
|
+
def path
|
261
|
+
"path"
|
262
|
+
end
|
263
|
+
|
264
|
+
def method
|
265
|
+
"GET"
|
266
|
+
end
|
267
|
+
|
268
|
+
def filtered_parameters
|
269
|
+
{ :user_id => 123, :password => "[FILTERED]" }
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
259
273
|
class ExampleRailsControllerMock
|
260
274
|
def action_name
|
261
275
|
"index"
|
262
276
|
end
|
277
|
+
|
278
|
+
def request
|
279
|
+
@request ||= ExampleRailsRequestMock.new
|
280
|
+
end
|
263
281
|
end
|
264
282
|
|
265
283
|
class ExampleRailsJobMock
|
@@ -275,7 +293,7 @@ if DependencyHelper.rails_present?
|
|
275
293
|
clear_current_transaction!
|
276
294
|
end
|
277
295
|
|
278
|
-
it "fetches the action from the controller in the context" do
|
296
|
+
it "fetches the action, path and method from the controller in the context" do
|
279
297
|
# The controller key is set by Rails when raised in a controller
|
280
298
|
given_context = { :controller => ExampleRailsControllerMock.new }
|
281
299
|
with_rails_error_reporter do
|
@@ -285,7 +303,14 @@ if DependencyHelper.rails_present?
|
|
285
303
|
transaction = last_transaction
|
286
304
|
transaction_hash = transaction.to_h
|
287
305
|
expect(transaction_hash).to include(
|
288
|
-
"action" => "ExampleRailsControllerMock#index"
|
306
|
+
"action" => "ExampleRailsControllerMock#index",
|
307
|
+
"metadata" => hash_including(
|
308
|
+
"path" => "path",
|
309
|
+
"method" => "GET"
|
310
|
+
),
|
311
|
+
"sample_data" => hash_including(
|
312
|
+
"params" => { "user_id" => 123, "password" => "[FILTERED]" }
|
313
|
+
)
|
289
314
|
)
|
290
315
|
end
|
291
316
|
|
@@ -8,7 +8,7 @@ describe Appsignal::Integrations::SidekiqErrorHandler do
|
|
8
8
|
end
|
9
9
|
around { |example| keep_transactions { example.run } }
|
10
10
|
|
11
|
-
context "without a current
|
11
|
+
context "without a current transaction" do
|
12
12
|
let(:exception) do
|
13
13
|
raise ExampleStandardError, "uh oh"
|
14
14
|
rescue => error
|
@@ -303,7 +303,7 @@ describe Appsignal::Transaction do
|
|
303
303
|
context "with overridden options" do
|
304
304
|
let(:options) { { :params_method => :filtered_params } }
|
305
305
|
|
306
|
-
it "sets the
|
306
|
+
it "sets the overridden :params_method" do
|
307
307
|
expect(subject[:params_method]).to eq :filtered_params
|
308
308
|
end
|
309
309
|
end
|
@@ -751,7 +751,7 @@ describe Appsignal::Transaction do
|
|
751
751
|
e
|
752
752
|
end
|
753
753
|
|
754
|
-
it "should also respond to add_exception for
|
754
|
+
it "should also respond to add_exception for backwards compatibility" do
|
755
755
|
expect(transaction).to respond_to(:add_exception)
|
756
756
|
end
|
757
757
|
|
data/spec/lib/appsignal_spec.rb
CHANGED
@@ -204,7 +204,7 @@ RSpec.describe "Puma plugin" do
|
|
204
204
|
}
|
205
205
|
end
|
206
206
|
|
207
|
-
it "collects puma stats as
|
207
|
+
it "collects puma stats as gauge metrics with the (summed) worker metrics" do
|
208
208
|
run_plugin(stats_data, appsignal_plugin) do
|
209
209
|
expect(logs).to_not include([:error, kind_of(String)])
|
210
210
|
expect_gauge(:workers, 2, "type" => "count")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appsignal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.6.
|
4
|
+
version: 3.6.3
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Robert Beekman
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2024-03-
|
13
|
+
date: 2024-03-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rack
|