prom_multi_proc_rb 0.1.2 → 0.1.7

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: 8e9beb87a1474db97aa420d8d128b33fb06d0f5a
4
- data.tar.gz: b65f006fbfce11d43204ef85535fc276f4a7a0d6
2
+ SHA256:
3
+ metadata.gz: '0208f9f3b13f1d85eb96973791697f077ffa3f560bd843f863e1abbd440e2138'
4
+ data.tar.gz: '06955b253c46199a3ae8c39bbfd0a655bb790a0e4c50ae69ae46320d5022187d'
5
5
  SHA512:
6
- metadata.gz: 862350605d17009825e158f5ebc2ef34422e29f2e2c394e0abdbea1f668edda0577d228bf2577207dc4e674fb52791a4dd473b5b144fb4119b2818c09f5aebc0
7
- data.tar.gz: c60416e2cd9acbcd6477ab420e566b6a189832157d54592ea4e5bfd53564456e5e51ff755effde88285f81577994a9db1b07c4cf81f73fa7aecc3bc93de7010b
6
+ metadata.gz: 7a592243fc1fff0b882d7c97011c86f794f074526260c7854980b92d86f2742478f1e35ffa220ebf56dc44442f9a5ed4b4c65b29a8ca4651b9ff73ddd6c0ca52
7
+ data.tar.gz: fdd1ef7cbc98d639aabdedf249ab32224f55a6f253fd6c11958bead30ab6fcdcf4b639af0d17768193e3b69fddd42e54fffd82f0ad74737ab2f19d1259fc6793
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
@@ -1,5 +1,5 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.3.4
5
- before_install: gem install bundler -v 1.15.1
4
+ - 2.6.5
5
+ - 2.7.2
@@ -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)
@@ -80,6 +80,10 @@ module PromMultiProc
80
80
  end
81
81
  name = spec["name"].sub(/\A#{prefix}/, "").to_sym
82
82
 
83
+ unless spec["help"] && !spec["help"].strip.empty?
84
+ raise PromMultiProcError.new("Metric '#{spec['name']}' is missing help")
85
+ end
86
+
83
87
  labels = (spec["labels"] || []).map(&:to_sym)
84
88
  unless labels.all? { |l| valid_metric?(l) }
85
89
  raise PromMultiProcError.new("Invalid label: #{spec.inspect}")
@@ -21,7 +21,7 @@ module PromMultiProc
21
21
  raise PromMultiProcError.new("Invalid label cardinality (#{name}): #{labels.keys.inspect}, need keys: #{@label_keys.inspect}")
22
22
  end
23
23
  unless valid_label_values?(labels)
24
- raise PromMultiProcError.new("Invalid label values (#{name}): #{labels.values.inspect}")
24
+ raise PromMultiProcError.new("Invalid label values (#{name}): #{labels.values.inspect} (all values must be string or symbol)")
25
25
  end
26
26
  unless valid_value?(value)
27
27
  raise PromMultiProcError.new("Invalid value (#{name}): #{value.inspect} (must be numeric)")
@@ -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.info("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.2"
2
+ VERSION = "0.1.7"
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)
6
- if !batch_size.is_a?(Fixnum) || batch_size <= 0
5
+ def initialize(socket:, batch_size: 1, batch_timeout: 3, validate: false)
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
@@ -30,10 +30,10 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ["lib"]
32
32
 
33
- spec.add_development_dependency "bundler", "~> 1.15"
34
- spec.add_development_dependency "rake", "~> 10.0"
35
- spec.add_development_dependency "rspec", "~> 3.0"
36
- spec.add_development_dependency "rspec-collection_matchers", "~> 1.0"
33
+ spec.add_development_dependency "bundler", ">= 1.15"
34
+ spec.add_development_dependency "rake", ">= 12.3.3"
35
+ spec.add_development_dependency "rspec", "~> 3.9"
36
+ spec.add_development_dependency "rspec-collection_matchers", "~> 1.2"
37
37
 
38
- spec.add_dependency "concurrent-ruby", "~> 1.0", ">= 1.0.2"
38
+ spec.add_dependency "concurrent-ruby", "~> 1.1"
39
39
  end
metadata CHANGED
@@ -1,91 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prom_multi_proc_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.7
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-17 00:00:00.000000000 Z
11
+ date: 2020-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.15'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.15'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: 12.3.3
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: 12.3.3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: '3.9'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.0'
54
+ version: '3.9'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec-collection_matchers
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.0'
61
+ version: '1.2'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.0'
68
+ version: '1.2'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: concurrent-ruby
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.0'
76
- - - ">="
77
- - !ruby/object:Gem::Version
78
- version: 1.0.2
75
+ version: '1.1'
79
76
  type: :runtime
80
77
  prerelease: false
81
78
  version_requirements: !ruby/object:Gem::Requirement
82
79
  requirements:
83
80
  - - "~>"
84
81
  - !ruby/object:Gem::Version
85
- version: '1.0'
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: 1.0.2
82
+ version: '1.1'
89
83
  description: A ruby library for collecting prometheus metrics within forking servers
90
84
  email:
91
85
  - atongen@gmail.com
@@ -137,8 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
131
  - !ruby/object:Gem::Version
138
132
  version: '0'
139
133
  requirements: []
140
- rubyforge_project:
141
- rubygems_version: 2.5.2
134
+ rubygems_version: 3.1.2
142
135
  signing_key:
143
136
  specification_version: 4
144
137
  summary: A ruby library for collecting prometheus metrics within forking servers