app_profiler 0.1.6 → 0.1.8

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: 443e88eecba7bccc081c2b44d2a0840570c54793025251e960242bd76dc86090
4
- data.tar.gz: fcc47ff7544b73faa76160212b1ef0134b2f7239de758ec8af86887abe41ef59
3
+ metadata.gz: 5a4f543410317515564af0f46a5f437e33af8a7c66334e6cfd42830e37dfb89c
4
+ data.tar.gz: bb37127c11ae94eade6d736d14d3609e7e99854709659dd9b7bb081e8cbb86b3
5
5
  SHA512:
6
- metadata.gz: 7fda25b4c3e449d7f8c35341649c96679e299dbc3110e44911dcd1e970bce64b0abf2aaf3fe4830ba729fdac3780477ff626b6451579a74bdd2ceac6cf9c866b
7
- data.tar.gz: 3f5020c4c4a5c817c4692a622001fa7ad851316b20cfdb0ad0057a04ab2e0d6736d1dae17e397d5a7d6aa9b2eab464c1dc39f3e0e653dc46530e96ec7eaf86c6
6
+ metadata.gz: 5a6da942b841feddb9b78d8a212b4c546b89e4966130419c87ad167f5c698301753fa4c14c4a6548338b341b217fed8418a71e9ceb2dc3a9289211436c036bd8
7
+ data.tar.gz: bdb22060ba83526a177c34302e731960d4eff6c563efe313f19e8282535632fa61c71ba269ce90700066166b6102244b1b1cdf6463b97d877fc45deb27828127
@@ -37,6 +37,9 @@ module AppProfiler
37
37
  AppProfiler.upload_queue_max_length = app.config.app_profiler.upload_queue_max_length || 10
38
38
  AppProfiler.upload_queue_interval_secs = app.config.app_profiler.upload_queue_interval_secs || 5
39
39
  AppProfiler.profile_file_prefix = app.config.app_profiler.profile_file_prefix || DefaultProfilePrefix
40
+ AppProfiler.profile_enqueue_success = app.config.app_profiler.profile_enqueue_success
41
+ AppProfiler.profile_enqueue_failure = app.config.app_profiler.profile_enqueue_failure
42
+ AppProfiler.after_process_queue = app.config.app_profiler.after_process_queue
40
43
  end
41
44
 
42
45
  initializer "app_profiler.add_middleware" do |app|
@@ -225,8 +225,10 @@ module AppProfiler
225
225
  end
226
226
 
227
227
  def stop
228
- File.unlink(@socket_file) if File.exist?(@socket_file) && File.socket?(@socket_file)
229
228
  @socket.close
229
+ File.unlink(@socket_file) if File.exist?(@socket_file) && File.socket?(@socket_file)
230
+ ObjectSpace.undefine_finalizer(self)
231
+ nil
230
232
  end
231
233
 
232
234
  def abandon
@@ -25,6 +25,8 @@ module AppProfiler
25
25
  content_type: "application/json",
26
26
  content_encoding: "gzip",
27
27
  )
28
+ ensure
29
+ profile.file.unlink
28
30
  end
29
31
  end
30
32
 
@@ -35,8 +37,10 @@ module AppProfiler
35
37
  @queue ||= init_queue
36
38
  begin
37
39
  @queue.push(profile, true) # non-blocking push, raises ThreadError if queue is full
40
+ AppProfiler.profile_enqueue_success&.call
38
41
  rescue ThreadError
39
42
  AppProfiler.logger.info("[AppProfiler] upload queue is full, profile discarded")
43
+ AppProfiler.profile_enqueue_failure&.call(profile)
40
44
  end
41
45
  end
42
46
  end
@@ -78,7 +82,12 @@ module AppProfiler
78
82
 
79
83
  return unless queue
80
84
 
81
- queue.size.times { queue.pop(false).upload }
85
+ num_success = 0
86
+ num_failures = 0
87
+ queue.size.times do
88
+ queue.pop(false).upload ? num_success += 1 : num_failures += 1
89
+ end
90
+ AppProfiler.after_process_queue&.call(num_success, num_failures)
82
91
  end
83
92
 
84
93
  def gcs_filename(profile)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppProfiler
4
- VERSION = "0.1.6"
4
+ VERSION = "0.1.8"
5
5
  end
data/lib/app_profiler.rb CHANGED
@@ -55,6 +55,9 @@ module AppProfiler
55
55
  mattr_accessor :upload_queue_max_length, default: 10
56
56
  mattr_accessor :upload_queue_interval_secs, default: 5
57
57
  mattr_accessor :profile_file_prefix, default: DefaultProfilePrefix
58
+ mattr_reader :profile_enqueue_success, default: nil
59
+ mattr_reader :profile_enqueue_failure, default: nil
60
+ mattr_reader :after_process_queue, default: nil
58
61
 
59
62
  class << self
60
63
  def run(*args, &block)
@@ -88,6 +91,30 @@ module AppProfiler
88
91
  @@profile_url_formatter = block # rubocop:disable Style/ClassVars
89
92
  end
90
93
 
94
+ def profile_enqueue_success=(handler)
95
+ if handler && (!handler.is_a?(Proc) || (handler.lambda? && handler.arity != 0))
96
+ raise ArgumentError, "profile_enqueue_success must be proc or a lambda that accepts no argument"
97
+ end
98
+
99
+ @@profile_enqueue_success = handler # rubocop:disable Style/ClassVars
100
+ end
101
+
102
+ def profile_enqueue_failure=(handler)
103
+ if handler && (!handler.is_a?(Proc) || (handler.lambda? && handler.arity != 1))
104
+ raise ArgumentError, "profile_enqueue_failure must be a proc or a lambda that accepts one argument"
105
+ end
106
+
107
+ @@profile_enqueue_failure = handler # rubocop:disable Style/ClassVars
108
+ end
109
+
110
+ def after_process_queue=(handler)
111
+ if handler && (!handler.is_a?(Proc) || (handler.lambda? && handler.arity != 2))
112
+ raise ArgumentError, "after_process_queue must be a proc or a lambda that accepts two arguments"
113
+ end
114
+
115
+ @@after_process_queue = handler # rubocop:disable Style/ClassVars
116
+ end
117
+
91
118
  def profile_url(upload)
92
119
  return unless AppProfiler.profile_url_formatter
93
120
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: app_profiler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gannon McGibbon
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2023-10-18 00:00:00.000000000 Z
16
+ date: 2023-11-06 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: activesupport