prometheus-client-mmap 0.12.0 → 0.13.0

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
2
  SHA256:
3
- metadata.gz: 3fec107115b6e90ebfbc109f0603bb44ca7d7165e637a2e6448ce463ab54c3c7
4
- data.tar.gz: 9e9e0382069f57aebe0fb35508a1b82a8e1c61b4b228be573807241b2a434fb8
3
+ metadata.gz: 77dda8e211c5981651a160500f0332b886e124935e969136abe4fd234ae311e1
4
+ data.tar.gz: 4ba3176b93611a3bcf63b0aed029408a5f22f33ca16635d05c9c244e33b0bfaa
5
5
  SHA512:
6
- metadata.gz: 6747ece05958e5b65a92e7305e8edb167e7ffafa84d5f0b24ccc56e8c8977add781f7c88eab1ecca117ae88bb0bbd7150273307f0c5314f33249246cef317dbf
7
- data.tar.gz: 7454daa53c15a7cf57e359ebec87dda164609ad43620ebf8a72e287cac4113caba08de8ca3ba2d1efdcf1c0a05f2bdbfb7c2b524d8eb27e63444844f06469ed5
6
+ metadata.gz: 75cbb10eed65af805c4cccda2e91783ec0ce0987150881ecc763d8de07ea3af150eb20bc41fbaf414dc66d4341141d163cf83514f7f4c913aaf1fdb0efc99dad
7
+ data.tar.gz: d4b2e4e7a3a78a315cb490a5d07125eaeb2782c6e7c0cb1cbfa0ff302d44ca343b752a29912d3f46b2acc7a6999d84ffe5ee3903d2004a501c2d4dac62f93846
@@ -31,6 +31,10 @@ module Prometheus
31
31
  def increment(labels, value)
32
32
  @values[label_set_for(labels)].increment(value)
33
33
  end
34
+
35
+ def decrement(labels, value)
36
+ @values[label_set_for(labels)].decrement(value)
37
+ end
34
38
  end
35
39
  end
36
40
  end
@@ -36,6 +36,10 @@ module Prometheus
36
36
  end
37
37
  end
38
38
 
39
+ def decrement(amount = 1)
40
+ increment(-amount)
41
+ end
42
+
39
43
  def set(value)
40
44
  @mutex.synchronize do
41
45
  initialize_file if pid_changed?
@@ -1,7 +1,9 @@
1
1
  # encoding: UTF-8
2
2
 
3
+ require 'thread'
3
4
  require 'net/http'
4
5
  require 'uri'
6
+ require 'erb'
5
7
 
6
8
  require 'prometheus/client'
7
9
  require 'prometheus/client/formats/text'
@@ -13,31 +15,45 @@ module Prometheus
13
15
  # Pushgateway.
14
16
  class Push
15
17
  DEFAULT_GATEWAY = 'http://localhost:9091'.freeze
16
- PATH = '/metrics/jobs/%s'.freeze
17
- INSTANCE_PATH = '/metrics/jobs/%s/instances/%s'.freeze
18
- HEADER = { 'Content-Type' => Formats::Text::CONTENT_TYPE }.freeze
18
+ PATH = '/metrics/job/%s'.freeze
19
+ INSTANCE_PATH = '/metrics/job/%s/instance/%s'.freeze
20
+ SUPPORTED_SCHEMES = %w(http https).freeze
19
21
 
20
22
  attr_reader :job, :instance, :gateway, :path
21
23
 
22
- def initialize(job, instance = nil, gateway = nil)
24
+ def initialize(job:, instance: nil, gateway: DEFAULT_GATEWAY, **kwargs)
25
+ raise ArgumentError, "job cannot be nil" if job.nil?
26
+ raise ArgumentError, "job cannot be empty" if job.empty?
27
+
28
+ @mutex = Mutex.new
23
29
  @job = job
24
30
  @instance = instance
25
31
  @gateway = gateway || DEFAULT_GATEWAY
26
- @uri = parse(@gateway)
27
32
  @path = build_path(job, instance)
33
+ @uri = parse("#{@gateway}#{@path}")
34
+
28
35
  @http = Net::HTTP.new(@uri.host, @uri.port)
36
+ @http.use_ssl = (@uri.scheme == 'https')
37
+ @http.open_timeout = kwargs[:open_timeout] if kwargs[:open_timeout]
38
+ @http.read_timeout = kwargs[:read_timeout] if kwargs[:read_timeout]
29
39
  end
30
40
 
31
41
  def add(registry)
32
- request('POST', registry)
42
+ synchronize do
43
+ request(Net::HTTP::Post, registry)
44
+ end
33
45
  end
34
46
 
35
47
  def replace(registry)
36
- request('PUT', registry)
48
+ synchronize do
49
+ request(Net::HTTP::Put, registry)
50
+ end
37
51
  end
38
52
 
39
53
  def delete
40
- @http.send_request('DELETE', path)
54
+ synchronize do
55
+ request(Net::HTTP::Delete)
56
+ end
41
57
  end
42
58
 
43
59
  private
@@ -45,27 +61,34 @@ module Prometheus
45
61
  def parse(url)
46
62
  uri = URI.parse(url)
47
63
 
48
- if uri.scheme == 'http'
49
- uri
50
- else
64
+ unless SUPPORTED_SCHEMES.include?(uri.scheme)
51
65
  raise ArgumentError, 'only HTTP gateway URLs are supported currently.'
52
66
  end
67
+
68
+ uri
53
69
  rescue URI::InvalidURIError => e
54
70
  raise ArgumentError, "#{url} is not a valid URL: #{e}"
55
71
  end
56
72
 
57
73
  def build_path(job, instance)
58
- if instance
59
- format(INSTANCE_PATH, URI.escape(job), URI.escape(instance))
74
+ if instance && !instance.empty?
75
+ format(INSTANCE_PATH, ERB::Util::url_encode(job), ERB::Util::url_encode(instance))
60
76
  else
61
- format(PATH, URI.escape(job))
77
+ format(PATH, ERB::Util::url_encode(job))
62
78
  end
63
79
  end
64
80
 
65
- def request(method, registry)
66
- data = Formats::Text.marshal(registry)
81
+ def request(req_class, registry = nil)
82
+ req = req_class.new(@uri)
83
+ req.content_type = Formats::Text::CONTENT_TYPE
84
+ req.basic_auth(@uri.user, @uri.password) if @uri.user
85
+ req.body = Formats::Text.marshal(registry) if registry
86
+
87
+ @http.request(req)
88
+ end
67
89
 
68
- @http.send_request(method, path, data, HEADER)
90
+ def synchronize
91
+ @mutex.synchronize { yield }
69
92
  end
70
93
  end
71
94
  end
@@ -15,6 +15,10 @@ module Prometheus
15
15
  @value += by
16
16
  end
17
17
 
18
+ def decrement(by = 1)
19
+ @value -= by
20
+ end
21
+
18
22
  def get
19
23
  @value
20
24
  end
@@ -1,5 +1,5 @@
1
1
  module Prometheus
2
2
  module Client
3
- VERSION = '0.12.0'.freeze
3
+ VERSION = '0.13.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prometheus-client-mmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Schmidt
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-09-22 00:00:00.000000000 Z
12
+ date: 2021-07-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fuzzbert
@@ -181,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
181
  - !ruby/object:Gem::Version
182
182
  version: '0'
183
183
  requirements: []
184
- rubygems_version: 3.0.3
184
+ rubygems_version: 3.1.4
185
185
  signing_key:
186
186
  specification_version: 4
187
187
  summary: A suite of instrumentation metric primitivesthat can be exposed through a