prom_multi_proc_rb 0.1.3 → 0.1.4

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
- SHA1:
3
- metadata.gz: 0a41c271141c863a9848cf0319e773e746ca32e7
4
- data.tar.gz: 421d3594be73c118e99bbf008cf68590ff6fc147
2
+ SHA256:
3
+ metadata.gz: fcb169453e4a402bbedb209e69f838be6292d2e37be4c66caa5525448b0bd801
4
+ data.tar.gz: 2844cc2b0241ef943bef5c07c2cca9410b74e37ab77fa5fd4b9d0fe7add85bf1
5
5
  SHA512:
6
- metadata.gz: d5050dfdb4de5614dc29051dd82e4415ab2f50ba1b559e5bb9645f7b749ccddc37f03d99db88dc7ad5db62058507f8bdd24805af7601e90edda81255260fc6c2
7
- data.tar.gz: cd50abf0e8fca5fa03c2af9d1360b2089bf03d2b7b7b2c1d488e888b793a0e9123e962cb02b381aaa4de511a7f8a9a1c299e6466b02654193c790f3a108d23fe
6
+ metadata.gz: 74244a6accefada48bc0e1b709daeafa84c1a9667c322b19a4448fc5319cf39e5cf253b6e9995c760546b15df4e4ff226b3f1a48a3461467d01ff06a4878c15f
7
+ data.tar.gz: 4b6bc06e65fcb11aef76c643561aa7073db3d98650b92fa2457f490e6d8cf23477cb6b52773740467c18c091c7d551709d51594d2cd968f4c6324678c1abb1be
data/.gitignore CHANGED
@@ -7,6 +7,7 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ /vendor/
10
11
 
11
12
  # rspec failure tracking
12
13
  .rspec_status
@@ -5,7 +5,7 @@ module PromMultiProc
5
5
  class Base
6
6
  attr_reader :logger, :prefix, :writer
7
7
 
8
- def initialize(socket:, metrics:, batch_size: 1, logger: nil, validate: false, prefix: "")
8
+ def initialize(socket:, metrics:, batch_size: 1, batch_timeout: 3, logger: nil, validate: false, prefix: "")
9
9
  @prefix = prefix
10
10
  @logger = logger || ::Logger.new(STDOUT)
11
11
 
@@ -14,7 +14,7 @@ module PromMultiProc
14
14
  end
15
15
 
16
16
  @metric_objects = Concurrent::Map.new
17
- @writer = Writer.new(socket: socket, batch_size: batch_size, validate: validate)
17
+ @writer = Writer.new(socket: socket, batch_size: batch_size, batch_timeout: batch_timeout, validate: validate)
18
18
  @multi_lock = Mutex.new
19
19
 
20
20
  specs = get_specs(metrics)
@@ -20,6 +20,12 @@ module PromMultiProc
20
20
  batch_size = 5
21
21
  end
22
22
 
23
+ if ENV.key?("PROM_MULTI_PROC_BATCH_TIMEOUT")
24
+ batch_timeout = ENV["PROM_MULTI_PROC_BATCH_TIMEOUT"].to_i
25
+ else
26
+ batch_timeout = 3
27
+ end
28
+
23
29
  if ::Rails.env.development? || ::Rails.env.test?
24
30
  validate = true
25
31
  else
@@ -32,13 +38,14 @@ module PromMultiProc
32
38
  logger = ::Logger.new(STDOUT)
33
39
  end
34
40
 
35
- logger.error("Setting up prom_multi_proc for #{app_name}-#{program_name}, batch size: #{batch_size}, validate: #{validate}")
41
+ logger.error("Setting up prom_multi_proc for #{app_name}-#{program_name}, batch size: #{batch_size}, batch timeout: #{batch_timeout} validate: #{validate}")
36
42
 
37
43
  Base.new(
38
44
  prefix: prefix,
39
45
  socket: socket,
40
46
  metrics: metrics,
41
47
  batch_size: batch_size,
48
+ batch_timeout: batch_timeout,
42
49
  validate: validate,
43
50
  logger: logger
44
51
  )
@@ -1,3 +1,3 @@
1
1
  module PromMultiProc
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -1,15 +1,25 @@
1
1
  module PromMultiProc
2
2
  class Writer
3
- attr_reader :socket, :batch_size
3
+ attr_reader :socket, :batch_size, :batch_timeout
4
4
 
5
- def initialize(socket:, batch_size: 1, validate: false)
5
+ def initialize(socket:, batch_size: 1, batch_timeout: 3, validate: false)
6
6
  if !batch_size.is_a?(Integer) || batch_size <= 0
7
7
  raise PromMultiProcError.new("Invalid batch size: #{batch_size}")
8
8
  end
9
+ if !batch_timeout.is_a?(Integer) || batch_timeout <= 0
10
+ raise PromMultiProcError.new("Invalid batch timeout: #{batch_timeout}")
11
+ end
9
12
  @batch_size = batch_size
13
+ @batch_timeout = batch_timeout
10
14
  @validate = !!validate
11
15
 
12
16
  @lock = Mutex.new
17
+ @thread = Thread.new {
18
+ loop do
19
+ sleep(batch_timeout)
20
+ flush(force: true)
21
+ end
22
+ }
13
23
  @messages = []
14
24
 
15
25
  @socket = socket
@@ -46,9 +56,9 @@ module PromMultiProc
46
56
  flush
47
57
  end
48
58
 
49
- def flush
59
+ def flush(force: false)
50
60
  @lock.synchronize do
51
- if @messages.length >= batch_size
61
+ if force && @messages.length > 0 || @messages.length >= batch_size
52
62
  begin
53
63
  write_socket(JSON.generate(@messages))
54
64
  ensure
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prom_multi_proc_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Tongen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-19 00:00:00.000000000 Z
11
+ date: 2019-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
138
  version: '0'
139
139
  requirements: []
140
140
  rubyforge_project:
141
- rubygems_version: 2.5.2
141
+ rubygems_version: 2.7.6
142
142
  signing_key:
143
143
  specification_version: 4
144
144
  summary: A ruby library for collecting prometheus metrics within forking servers