prom_multi_proc_rb 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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