appsignal 3.1.1-java → 3.1.2-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: be534a2bce153240d9a00c15ee4f177cec58a0a40df738ddd66e7afba50a1d0c
4
- data.tar.gz: 0d9c3820cfe794ccabbcc1cda65fafec925cda36690b4caa179170e07a38a25c
3
+ metadata.gz: 2509a780468f8298d79de2f28fd1ccf7ea5318a059d42edc6f719446cbcaa99f
4
+ data.tar.gz: 2e39e33bc84d311184d446d24adf10629e3c62adde66e832cc64870504b1c6d0
5
5
  SHA512:
6
- metadata.gz: 4dd0efe8930f19068dbf54ab0709f3bed422ac67bd2974b348f5d6eddcb054da09df59fb992a41802ddb0e7ed0de986a6b67f484779409d7b227c32451f3b6f0
7
- data.tar.gz: 0167fd0f1bfa054e46f20ab12680529913da7b5b702fc119cbdb43e78e2e8cf3f459e7b4236413f394e51a0ed935e597806b8836b20d702ede7d0f26780f2590
6
+ metadata.gz: b25fd36dad63cc9bc8a39c04f81aebfad62ca322d54e94778a6c8480660749930076f36f92c686ecd9bf212e4092a9290dd916f1af2580af1502543333a2a373
7
+ data.tar.gz: 2a8b44f0c4c1a7828a6679000ed90a1f143a957757ee842fb59d078134502d88bb7dbc453a5dcf80e55ccaf7e265c191f6a2425853d570a6a48820c9972554f7
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # AppSignal for Ruby gem Changelog
2
2
 
3
+ ## 3.1.2
4
+
5
+ ### Changed
6
+
7
+ - [1b95bb4c](https://github.com/appsignal/appsignal-ruby/commit/1b95bb4c8df08128cfa2db0d918ffcb909e5ee4c) patch - Report Garbage Collection total time metric as the delta between measurements. This reports a more user friendly metric that doesn't always goes up until the app restarts or gets a new deploy. This metric is reported 0 by default without `GC::Profiler.enable` having been called.
8
+ - [61a78fb0](https://github.com/appsignal/appsignal-ruby/commit/61a78fb028b04ae6f0a4ca1fc469d744f23c5029) patch - Bump agent to 06391fb
9
+
10
+ - Accept "warning" value for the `log_level` config option.
11
+ - Add aarch64 Linux musl build.
12
+ - Improve debug logging from the extension.
13
+ - Fix high CPU issue for appsignal-agent when nothing could be read from the socket.
14
+
3
15
  ## 3.1.1
4
16
 
5
17
  ### Changed
data/appsignal.gemspec CHANGED
@@ -39,12 +39,16 @@ Gem::Specification.new do |gem| # rubocop:disable Metrics/BlockLength
39
39
  gem.add_development_dependency "rake", ">= 12"
40
40
  gem.add_development_dependency "rspec", "~> 3.8"
41
41
  gem.add_development_dependency "timecop"
42
- gem.add_development_dependency "webmock"
43
42
  gem.add_development_dependency "yard", ">= 0.9.20"
44
43
  gem.add_development_dependency "pry"
45
44
 
46
45
  # Dependencies that need to be locked to a specific version in developement
47
46
  ruby_version = Gem::Version.new(RUBY_VERSION)
47
+ if ruby_version < Gem::Version.new("2.3.0")
48
+ gem.add_development_dependency "webmock", "3.14.0"
49
+ else
50
+ gem.add_development_dependency "webmock"
51
+ end
48
52
  if ruby_version > Gem::Version.new("2.5.0")
49
53
  # RuboCop dependency parallel depends on Ruby > 2.4
50
54
  gem.add_development_dependency "rubocop", "0.50.0"
data/ext/agent.yml CHANGED
@@ -3,92 +3,99 @@
3
3
  # appsignal-agent repository.
4
4
  # Modifications to this file will be overwritten with the next agent release.
5
5
  ---
6
- version: d573c9b
6
+ version: '06391fb'
7
7
  mirrors:
8
8
  - https://appsignal-agent-releases.global.ssl.fastly.net
9
9
  - https://d135dj0rjqvssy.cloudfront.net
10
10
  triples:
11
11
  x86_64-darwin:
12
12
  static:
13
- checksum: a9a86594e50f22e7f7fd93a050e334048248a6dc971015e66c26150c4a689345
13
+ checksum: 9bf41c183d94c80e980f57ea2e29d08bae97e8097b5284a2b91a5484bf866f8c
14
14
  filename: appsignal-x86_64-darwin-all-static.tar.gz
15
15
  dynamic:
16
- checksum: 04a69d0b608aa0e834c96c75a3bb226e7ca252fd2c74e439fdd43bf297d6bde2
16
+ checksum: 4d3789e65cf00e446600e883d95d097323ebb3835703c67c8d09f434f09ab496
17
17
  filename: appsignal-x86_64-darwin-all-dynamic.tar.gz
18
18
  universal-darwin:
19
19
  static:
20
- checksum: a9a86594e50f22e7f7fd93a050e334048248a6dc971015e66c26150c4a689345
20
+ checksum: 9bf41c183d94c80e980f57ea2e29d08bae97e8097b5284a2b91a5484bf866f8c
21
21
  filename: appsignal-x86_64-darwin-all-static.tar.gz
22
22
  dynamic:
23
- checksum: 04a69d0b608aa0e834c96c75a3bb226e7ca252fd2c74e439fdd43bf297d6bde2
23
+ checksum: 4d3789e65cf00e446600e883d95d097323ebb3835703c67c8d09f434f09ab496
24
24
  filename: appsignal-x86_64-darwin-all-dynamic.tar.gz
25
25
  aarch64-darwin:
26
26
  static:
27
- checksum: 92f7f71b685985b310a9f3693a96a5db6b9133b0af807d000b90248e097063c7
27
+ checksum: 74edd7b97995f3314c10e3d84fc832c1b842c236c331ed4f2f77146ad004d179
28
28
  filename: appsignal-aarch64-darwin-all-static.tar.gz
29
29
  dynamic:
30
- checksum: ffb54af4c35dd281a4735b57d8e537b8b08e87e08841e5d344caff325948a9e8
30
+ checksum: 7165bb164a9cd7a2a5f97897d954390412f7034c667e5826b3307ffbd848bff9
31
31
  filename: appsignal-aarch64-darwin-all-dynamic.tar.gz
32
32
  arm64-darwin:
33
33
  static:
34
- checksum: 92f7f71b685985b310a9f3693a96a5db6b9133b0af807d000b90248e097063c7
34
+ checksum: 74edd7b97995f3314c10e3d84fc832c1b842c236c331ed4f2f77146ad004d179
35
35
  filename: appsignal-aarch64-darwin-all-static.tar.gz
36
36
  dynamic:
37
- checksum: ffb54af4c35dd281a4735b57d8e537b8b08e87e08841e5d344caff325948a9e8
37
+ checksum: 7165bb164a9cd7a2a5f97897d954390412f7034c667e5826b3307ffbd848bff9
38
38
  filename: appsignal-aarch64-darwin-all-dynamic.tar.gz
39
39
  arm-darwin:
40
40
  static:
41
- checksum: 92f7f71b685985b310a9f3693a96a5db6b9133b0af807d000b90248e097063c7
41
+ checksum: 74edd7b97995f3314c10e3d84fc832c1b842c236c331ed4f2f77146ad004d179
42
42
  filename: appsignal-aarch64-darwin-all-static.tar.gz
43
43
  dynamic:
44
- checksum: ffb54af4c35dd281a4735b57d8e537b8b08e87e08841e5d344caff325948a9e8
44
+ checksum: 7165bb164a9cd7a2a5f97897d954390412f7034c667e5826b3307ffbd848bff9
45
45
  filename: appsignal-aarch64-darwin-all-dynamic.tar.gz
46
46
  aarch64-linux:
47
47
  static:
48
- checksum: 79f1e7f9c34ab36c06d5c3d676173ee7c1219af2f51dc77865897598dc01349a
48
+ checksum: 0f2430e637eb77ce2093f021777087e87cb1e7be7c86a53771172696791c4879
49
49
  filename: appsignal-aarch64-linux-all-static.tar.gz
50
50
  dynamic:
51
- checksum: cfd8e98238e2c7cdb10c0e136c47ab8e2dacab0a14d8ccf0e4c6c14946e325f1
51
+ checksum: 0e4f9305aeaaa2d7847e83be04227b865723a0591574108d78040b5921a677a7
52
52
  filename: appsignal-aarch64-linux-all-dynamic.tar.gz
53
53
  i686-linux:
54
54
  static:
55
- checksum: 835c6f823a2c6e9f8fa12704bf0953e3610dc9836355b57d2d6981e6ae412fb4
55
+ checksum: 449ba623aaa1853c2d211bf1e2d3a14e5ae09225a62457cbdbcc0983a5713a52
56
56
  filename: appsignal-i686-linux-all-static.tar.gz
57
57
  dynamic:
58
- checksum: febc5d80a7b0fd9644e2d68d068d28c66359bbef9473f01e9f71fb07fd73bcb8
58
+ checksum: dae994292d602eaf0910bd2ce53f0163e19767a4cbb8e5d0db99c0010d6df486
59
59
  filename: appsignal-i686-linux-all-dynamic.tar.gz
60
60
  x86-linux:
61
61
  static:
62
- checksum: 835c6f823a2c6e9f8fa12704bf0953e3610dc9836355b57d2d6981e6ae412fb4
62
+ checksum: 449ba623aaa1853c2d211bf1e2d3a14e5ae09225a62457cbdbcc0983a5713a52
63
63
  filename: appsignal-i686-linux-all-static.tar.gz
64
64
  dynamic:
65
- checksum: febc5d80a7b0fd9644e2d68d068d28c66359bbef9473f01e9f71fb07fd73bcb8
65
+ checksum: dae994292d602eaf0910bd2ce53f0163e19767a4cbb8e5d0db99c0010d6df486
66
66
  filename: appsignal-i686-linux-all-dynamic.tar.gz
67
67
  x86_64-linux:
68
68
  static:
69
- checksum: 6eb6f0df2f8c62a29769bf7f21cefaec92a24ee0ab363acc5bd4f9c2d1241c53
69
+ checksum: 394796c0ddeb4881c9f2e6ce82f840e66bcb69e027324f6c04f6671067445fbb
70
70
  filename: appsignal-x86_64-linux-all-static.tar.gz
71
71
  dynamic:
72
- checksum: ce710ff2edea2fc7b3b6bafd10af849e95f513abf5d775b9a8361ffed45b70c3
72
+ checksum: 9ca4762c464482b0a5a89898a839388597dd57a17a21527a67f3e3db0e540a03
73
73
  filename: appsignal-x86_64-linux-all-dynamic.tar.gz
74
74
  x86_64-linux-musl:
75
75
  static:
76
- checksum: b16d46074527da5700e10e5a8b176aeb46b7bbb19431653029eda04437bef918
76
+ checksum: 673271c8c5fd55053d8a719bcd307f787db4ca4633baf8cf961c442bf1805614
77
77
  filename: appsignal-x86_64-linux-musl-all-static.tar.gz
78
78
  dynamic:
79
- checksum: 261b79ab790e6a12a748d4649a4389e96d5cf7d1f981c3b56ed331f164d1627b
79
+ checksum: 609d59376d6633652015e838eb649229fe2523d443a5471232b869f48eb99640
80
80
  filename: appsignal-x86_64-linux-musl-all-dynamic.tar.gz
81
+ aarch64-linux-musl:
82
+ static:
83
+ checksum: e90ca19bf61596be022ba04897e8902b3401add58f351a40a3d3a7af241d0bbb
84
+ filename: appsignal-aarch64-linux-musl-all-static.tar.gz
85
+ dynamic:
86
+ checksum: afb66c65fb82b672887bc6b6e82d82f09d9855a5497a7abb06b438dadea97aca
87
+ filename: appsignal-aarch64-linux-musl-all-dynamic.tar.gz
81
88
  x86_64-freebsd:
82
89
  static:
83
- checksum: e7bfc1dc355ce1237aaee6fdf967c78ecca533db41b09c2b10716e7f8593dbe0
90
+ checksum: cb45da91c51123859e5ef5cea850460c28d6e77dfa08b90375178d9017162ba8
84
91
  filename: appsignal-x86_64-freebsd-all-static.tar.gz
85
92
  dynamic:
86
- checksum: 97af9419cf00e22ea544a2365785a6b5df2a990f17e7735b3bbec1a690b68f0b
93
+ checksum: 6a03e02c2526e05edaa7fa932b2e764318c63ec93d517c6c00f6b7541bfe71f3
87
94
  filename: appsignal-x86_64-freebsd-all-dynamic.tar.gz
88
95
  amd64-freebsd:
89
96
  static:
90
- checksum: e7bfc1dc355ce1237aaee6fdf967c78ecca533db41b09c2b10716e7f8593dbe0
97
+ checksum: cb45da91c51123859e5ef5cea850460c28d6e77dfa08b90375178d9017162ba8
91
98
  filename: appsignal-x86_64-freebsd-all-static.tar.gz
92
99
  dynamic:
93
- checksum: 97af9419cf00e22ea544a2365785a6b5df2a990f17e7735b3bbec1a690b68f0b
100
+ checksum: 6a03e02c2526e05edaa7fa932b2e764318c63ec93d517c6c00f6b7541bfe71f3
94
101
  filename: appsignal-x86_64-freebsd-all-dynamic.tar.gz
@@ -7,22 +7,35 @@ module Appsignal
7
7
  @gauge_delta_cache ||= {}
8
8
  end
9
9
 
10
- # Calculate the delta of two values for a gauge metric
10
+ # Calculate the delta of two values for a gauge metric.
11
11
  #
12
- # First call will store the data for the metric in the cache and the
13
- # second call will return the delta of the gauge metric. This is used for
14
- # absolute counter values which we want to track as gauges.
12
+ # When this method is called, the given value is stored in a cache
13
+ # under the given cache key.
14
+ #
15
+ # A block must be passed to this method. The first time the method
16
+ # is called for a given cache key, the block will not be yielded to.
17
+ # In subsequent calls, the delta between the previously stored value
18
+ # in the cache for that key and the value given in this invocation
19
+ # will be yielded to the block.
20
+ #
21
+ # This is used for absolute counter values which we want to track as
22
+ # gauges.
15
23
  #
16
24
  # @example
17
- # gauge_delta :my_cache_key, 10
18
- # gauge_delta :my_cache_key, 15
19
- # # Returns a value of `5`
25
+ # gauge_delta :with_block, 10 do |delta|
26
+ # puts "this block will not be yielded to"
27
+ # end
28
+ # gauge_delta :with_block, 15 do |delta|
29
+ # # `delta` has a value of `5`
30
+ # puts "this block will be yielded to with delta = #{delta}"
31
+ # end
32
+ #
20
33
  def gauge_delta(cache_key, value)
21
34
  previous_value = gauge_delta_cache[cache_key]
22
35
  gauge_delta_cache[cache_key] = value
23
36
  return unless previous_value
24
37
 
25
- value - previous_value
38
+ yield value - previous_value
26
39
  end
27
40
  end
28
41
  end
@@ -8,13 +8,10 @@ module Appsignal
8
8
  defined?(::RubyVM) && ::RubyVM.respond_to?(:stat)
9
9
  end
10
10
 
11
- def self.garbage_collection_profiler
12
- @garbage_collection_profiler ||= Appsignal::GarbageCollectionProfiler.new
13
- end
14
-
15
- def initialize(appsignal = Appsignal)
11
+ def initialize(appsignal: Appsignal, gc_profiler: Appsignal::GarbageCollectionProfiler.new)
16
12
  Appsignal.logger.debug("Initializing VM probe")
17
13
  @appsignal = appsignal
14
+ @gc_profiler = gc_profiler
18
15
  end
19
16
 
20
17
  # @api private
@@ -34,24 +31,25 @@ module Appsignal
34
31
  )
35
32
 
36
33
  set_gauge("thread_count", Thread.list.size)
37
- set_gauge("gc_total_time", MriProbe.garbage_collection_profiler.total_time)
34
+ gauge_delta(:gc_total_time, @gc_profiler.total_time) do |total_time|
35
+ set_gauge("gc_total_time", total_time) if total_time > 0
36
+ end
38
37
 
39
38
  gc_stats = GC.stat
40
- allocated_objects =
41
- gauge_delta(
42
- :allocated_objects,
43
- gc_stats[:total_allocated_objects] || gc_stats[:total_allocated_object]
44
- )
45
- set_gauge("allocated_objects", allocated_objects) if allocated_objects
39
+ gauge_delta(
40
+ :allocated_objects,
41
+ gc_stats[:total_allocated_objects] || gc_stats[:total_allocated_object]
42
+ ) do |allocated_objects|
43
+ set_gauge("allocated_objects", allocated_objects)
44
+ end
46
45
 
47
- gc_count = gauge_delta(:gc_count, GC.count)
48
- set_gauge("gc_count", gc_count, :metric => :gc_count) if gc_count
49
- minor_gc_count = gauge_delta(:minor_gc_count, gc_stats[:minor_gc_count])
50
- if minor_gc_count
46
+ gauge_delta(:gc_count, GC.count) do |gc_count|
47
+ set_gauge("gc_count", gc_count, :metric => :gc_count)
48
+ end
49
+ gauge_delta(:minor_gc_count, gc_stats[:minor_gc_count]) do |minor_gc_count|
51
50
  set_gauge("gc_count", minor_gc_count, :metric => :minor_gc_count)
52
51
  end
53
- major_gc_count = gauge_delta(:major_gc_count, gc_stats[:major_gc_count])
54
- if major_gc_count
52
+ gauge_delta(:major_gc_count, gc_stats[:major_gc_count]) do |major_gc_count|
55
53
  set_gauge("gc_count", major_gc_count, :metric => :major_gc_count)
56
54
  end
57
55
 
@@ -44,15 +44,16 @@ module Appsignal
44
44
 
45
45
  gauge "worker_count", stats.workers_size
46
46
  gauge "process_count", stats.processes_size
47
- jobs_processed = gauge_delta :jobs_processed, stats.processed
48
- if jobs_processed
47
+ gauge_delta :jobs_processed, stats.processed do |jobs_processed|
49
48
  gauge "job_count", jobs_processed, :status => :processed
50
49
  end
51
- jobs_failed = gauge_delta :jobs_failed, stats.failed
52
- gauge "job_count", jobs_failed, :status => :failed if jobs_failed
50
+ gauge_delta :jobs_failed, stats.failed do |jobs_failed|
51
+ gauge "job_count", jobs_failed, :status => :failed
52
+ end
53
53
  gauge "job_count", stats.retry_size, :status => :retry_queue
54
- jobs_dead = gauge_delta :jobs_dead, stats.dead_size
55
- gauge "job_count", jobs_dead, :status => :died if jobs_dead
54
+ gauge_delta :jobs_dead, stats.dead_size do |jobs_dead|
55
+ gauge "job_count", jobs_dead, :status => :died
56
+ end
56
57
  gauge "job_count", stats.scheduled_size, :status => :scheduled
57
58
  gauge "job_count", stats.enqueued, :status => :enqueued
58
59
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Appsignal
4
- VERSION = "3.1.1".freeze
4
+ VERSION = "3.1.2".freeze
5
5
  end
@@ -19,7 +19,8 @@ end
19
19
 
20
20
  describe Appsignal::Probes::MriProbe do
21
21
  let(:appsignal_mock) { AppsignalMock.new(:hostname => hostname) }
22
- let(:probe) { described_class.new(appsignal_mock) }
22
+ let(:gc_profiler_mock) { instance_double("Appsignal::GarbageCollectionProfiler") }
23
+ let(:probe) { described_class.new(:appsignal => appsignal_mock, :gc_profiler => gc_profiler_mock) }
23
24
 
24
25
  describe ".dependencies_present?" do
25
26
  if DependencyHelper.running_jruby? || DependencyHelper.running_ruby_2_0?
@@ -36,6 +37,9 @@ describe Appsignal::Probes::MriProbe do
36
37
  unless DependencyHelper.running_jruby? || DependencyHelper.running_ruby_2_0?
37
38
  describe "#call" do
38
39
  let(:hostname) { nil }
40
+ before do
41
+ allow(gc_profiler_mock).to receive(:total_time)
42
+ end
39
43
 
40
44
  it "should track vm metrics" do
41
45
  probe.call
@@ -49,8 +53,21 @@ describe Appsignal::Probes::MriProbe do
49
53
  end
50
54
 
51
55
  it "tracks GC total time" do
56
+ expect(gc_profiler_mock).to receive(:total_time).and_return(10, 15)
57
+ probe.call
52
58
  probe.call
53
- expect_gauge_value("gc_total_time")
59
+ expect_gauge_value("gc_total_time", 5)
60
+ end
61
+
62
+ context "when GC total time overflows" do
63
+ it "skips one report" do
64
+ expect(gc_profiler_mock).to receive(:total_time).and_return(10, 15, 0, 10)
65
+ probe.call # Normal call, create a cache
66
+ probe.call # Report delta value based on cached value
67
+ probe.call # The value overflows and reports no value. Then stores 0 in the cache
68
+ probe.call # Report new value based on cache of 0
69
+ expect_gauges([["gc_total_time", 5], ["gc_total_time", 10]])
70
+ end
54
71
  end
55
72
 
56
73
  it "tracks GC run count" do
@@ -107,4 +124,15 @@ describe Appsignal::Probes::MriProbe do
107
124
  end
108
125
  end
109
126
  end
127
+
128
+ def expect_gauges(expected_metrics)
129
+ default_tags = { :hostname => Socket.gethostname }
130
+ keys = expected_metrics.map { |(key)| key }
131
+ metrics = expected_metrics.map do |metric|
132
+ key, value, tags = metric
133
+ [key, value, default_tags.merge(tags || {})]
134
+ end
135
+ found_gauges = appsignal_mock.gauges.select { |(key)| keys.include? key }
136
+ expect(found_gauges).to eq(metrics)
137
+ end
110
138
  end
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.1.1
4
+ version: 3.1.2
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: 2022-07-28 00:00:00.000000000 Z
13
+ date: 2022-08-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rack
@@ -69,35 +69,35 @@ dependencies:
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  - !ruby/object:Gem::Dependency
72
- name: webmock
72
+ name: yard
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
75
  - - ">="
76
76
  - !ruby/object:Gem::Version
77
- version: '0'
77
+ version: 0.9.20
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - ">="
83
83
  - !ruby/object:Gem::Version
84
- version: '0'
84
+ version: 0.9.20
85
85
  - !ruby/object:Gem::Dependency
86
- name: yard
86
+ name: pry
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
89
  - - ">="
90
90
  - !ruby/object:Gem::Version
91
- version: 0.9.20
91
+ version: '0'
92
92
  type: :development
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
96
  - - ">="
97
97
  - !ruby/object:Gem::Version
98
- version: 0.9.20
98
+ version: '0'
99
99
  - !ruby/object:Gem::Dependency
100
- name: pry
100
+ name: webmock
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
103
  - - ">="