prometheus-config-builder 0.0.39 → 0.0.41

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: 4afb62d72eff85bf6ad281d611a0d48ae28d5c1b57e17a79ee963319eb3125cc
4
- data.tar.gz: 88fdee96f062cb7ea2eee057608a7f5cef1ebbb8b5bd4e3fd7e234200b54e45d
3
+ metadata.gz: 3574ad59107c1c4fc456b503ff1bc457910fc03726415ac13a6e2c0758dff438
4
+ data.tar.gz: 46a9834fa8b808557b034494509af311492beb3b187f253fe6f6bc285e3d5058
5
5
  SHA512:
6
- metadata.gz: a1db288ac0799dc74d9fda64ea237cf3824ddd25191df03103a36f8c52bef400cfc122ade29137098920daf0299efd43a12c36e47897d91ec436aaf30b8e601a
7
- data.tar.gz: e63fecaf600a5280e2a114b093ef92a07932eebf3bf27c9c125b9279cbe950014ae548759b338d9fcc9c1c0b47cc02f3128cb3837ee9f272f4cce387032245bc
6
+ metadata.gz: 758050db5fa1ae8674fce4edeb778024f33e345240359b9ca8de5cb5b04a30b12a3c96fb6f35469425fcb22204523841e52f1d6e263531d9e6546f1f395c72b3
7
+ data.tar.gz: 1114ab1112acfeac569b950c939b1c9627783aeb3222380e88aa02b0fb3591d5d0dab4ef928acb4fb606d188063cdae30563403319b5f1fe915d41e8fb985096
data/README.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## Making changes.
2
+
3
+ The `master` banch lives in git.supercell.com/services/prometheus-config-builder and is mirrored as read-only branch to github.com/supercell/prometheus-config-builder
4
+
5
+ The releases must be done by juho.arenius as the public gem is under his account.
6
+
1
7
 
2
8
  ## Description
3
9
 
@@ -7,6 +7,7 @@ require 'optparse'
7
7
  require 'pp'
8
8
  require 'yaml'
9
9
  require 'json'
10
+ require 'httparty'
10
11
  require 'prometheus_exporter'
11
12
  require 'prometheus_exporter/client'
12
13
  require 'prometheus_exporter/server'
@@ -18,6 +19,7 @@ require 'prometheus-config-builder'
18
19
 
19
20
  config = {}
20
21
  config[:paths] ||= []
22
+ config[:bucket_region] ||= ''
21
23
  config[:root] ||= 'test/data'
22
24
  config[:every] = 60
23
25
  config[:pgrep] = nil
@@ -34,6 +36,9 @@ op = OptionParser.new do |o|
34
36
  o.on('--path=[PATH]', 'Directory or S3 location for individual config yaml files. Can be set multiple times') do |arg|
35
37
  config[:paths] << arg
36
38
  end
39
+ o.on('--bucket_region=[BUCKET_REGION]', 'Ther region where the s3 bucket exists') do |arg|
40
+ config[:bucket_region] << arg
41
+ end
37
42
  o.on('--http PORT', Integer,
38
43
  'Port to listen on for http for Prometheus /metrics api') do |port|
39
44
  abort 'Invalid port' if port < 1 || port > 65535
@@ -48,6 +53,9 @@ op = OptionParser.new do |o|
48
53
  o.on('--pgrep=[string]', 'pgrep -f [string] for finding Prometheus process for SIGHUP') do |str|
49
54
  config[:pgrep] = str
50
55
  end
56
+ o.on('--reload-url=[string]', 'Prometheus config reload endpoint') do |str|
57
+ config[:reload_url] = str
58
+ end
51
59
  o.on('--addlog=[FILE]', 'addlog -f [FILE] Log additionally to this file') do |str|
52
60
  config[:addlog] = str
53
61
  end
@@ -60,6 +68,7 @@ end
60
68
 
61
69
  abort "You need to set --prometheus-src" if !config[:prometheus_src]
62
70
  abort "You need to set --dst-dir" if !config[:dst_dir]
71
+ abort "You need to set either --pgrep or --reload-url, not both" if config[:pgrep] && config[:reload_url]
63
72
 
64
73
  if config[:addlog]
65
74
  filelog = File.open(config[:addlog], 'w')
@@ -98,7 +107,7 @@ config[:paths].each do |path|
98
107
  log.info("Adding path #{path} to config discovery list")
99
108
  builder.add_path(path)
100
109
  end
101
-
110
+ builder.add_bucket_region(config[:bucket_region])
102
111
 
103
112
  loop do
104
113
  starting = Time.now
@@ -133,8 +142,25 @@ loop do
133
142
  rescue Exception => e
134
143
  log.warn("Unable to send SIGHUP signal to Prometheus: #{e}")
135
144
  puts e.backtrace
145
+ error_count.increment
136
146
  end
137
147
 
148
+ begin
149
+ if something_changed && config[:reload_url] != nil
150
+ log.info("Sending reload request to Prometheus at #{config[:reload_url]}")
151
+ response = HTTParty.post(config[:reload_url])
152
+
153
+ if response.code != 200
154
+ log.warn("Prometheus returned #{response.code} when reloading config. Response body: #{response.body}")
155
+ error_count.increment
156
+ end
157
+ end
158
+ rescue HTTParty::Error => e
159
+ log.warn("Unable to send reload request to Prometheus: #{e}")
160
+ puts e.backtrace
161
+ error_count.increment
162
+ end
163
+
138
164
  log.info("Sleeping for #{config[:every]} second and starting then again.")
139
165
  if log.level == Logger::INFO
140
166
  log.info("Setting log level to WARN for the rest of the program execution. Use -v to overwrite this.")
@@ -72,6 +72,11 @@ module PrometheusConfigBuilder
72
72
  def get_scrape_configs(dst_prefix)
73
73
  configs = []
74
74
 
75
+ if !@data.key?('scrape_configs')
76
+ logger.debug("File #{dst_prefix} does not contain any scrape configs.")
77
+ return []
78
+ end
79
+
75
80
  @data['scrape_configs'].each do |config|
76
81
  case config["type"]
77
82
  when "passthrough"
@@ -103,7 +108,7 @@ module PrometheusConfigBuilder
103
108
 
104
109
  class ConfigDiscover
105
110
  include PrometheusConfigBuilderLogger
106
- def discover(glob)
111
+ def discover(glob, bucket_region)
107
112
 
108
113
  files = []
109
114
  if m = glob.match(/s3:\/\/([^\/]+)\/(.*)/)
@@ -113,7 +118,13 @@ module PrometheusConfigBuilder
113
118
  x = $VERBOSE
114
119
  $VERBOSE = nil
115
120
  require 'aws-sdk'
116
- s3 = Aws::S3::Client.new
121
+ s3 = nil
122
+ if !bucket_region.empty?
123
+ logger.debug("bucket_region set as >#{bucket_region}<")
124
+ s3 = Aws::S3::Client.new(region: bucket_region)
125
+ else
126
+ s3 = Aws::S3::Client.new
127
+ end
117
128
  $VERBOSE = x
118
129
  key = []
119
130
  resp = s3.list_objects_v2({
@@ -210,8 +221,11 @@ module PrometheusConfigBuilder
210
221
  labels[:runbook_url] = file.runbook_url if file.runbook_url
211
222
  begin
212
223
  configs = file.get_scrape_configs(scrape_files_dir + "/" + File.basename(file.basename, ".*"))
213
- data["scrape_configs"].push(*configs)
214
- $config_file_status.observe(1, labels)
224
+ if configs.length > 0
225
+ puts "Generated data for file #{scrape_files_dir + "/" + File.basename(file.basename, ".*")}"
226
+ data["scrape_configs"].push(*configs)
227
+ $config_file_status.observe(1, labels)
228
+ end
215
229
  rescue Exception => e
216
230
  logger.error("Unable to get scrape configs correctly from file #{file.source}. Error: #{e}")
217
231
  $config_file_status.observe(0, labels)
@@ -252,6 +266,7 @@ module PrometheusConfigBuilder
252
266
 
253
267
  @discoverer = ConfigDiscover.new
254
268
  @paths = []
269
+ @bucket_region = ""
255
270
  @last_hash = ""
256
271
 
257
272
  @@config_files = PrometheusExporter::Client.default.register(:gauge, "prometheusconfigbuilder_config_files", "Number of found config files")
@@ -262,12 +277,17 @@ module PrometheusConfigBuilder
262
277
  @paths << path
263
278
  end
264
279
 
280
+ def add_bucket_region(bucket_region)
281
+ @bucket_region << bucket_region
282
+ end
283
+
265
284
  def write_out
266
285
  hash = ""
267
286
  cfs = ConfigFiles.new(@prometheus_src)
287
+ bucket_region = @bucket_region
268
288
  files = []
269
289
  @paths.each do |path|
270
- found_files = @discoverer.discover(path)
290
+ found_files = @discoverer.discover(path, bucket_region)
271
291
  logger.info("Found #{found_files.length} files from path #{path}")
272
292
  files.push(*found_files)
273
293
  end
@@ -3,7 +3,7 @@
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'prometheus-config-builder'
6
- s.version = '0.0.39'
6
+ s.version = '0.0.41'
7
7
  s.date = Time.now
8
8
 
9
9
  s.summary = %q{Template based config generation}
@@ -16,11 +16,13 @@ Gem::Specification.new do |s|
16
16
  s.required_ruby_version = '>= 2.0.0'
17
17
 
18
18
  s.add_dependency 'aws-sdk', '~> 3'
19
+ s.add_dependency 'httparty', '~> 0.17.3'
19
20
  s.add_dependency 'prometheus_exporter', '>= 0.4.13'
20
21
 
21
22
  s.add_development_dependency 'rubygems-tasks', '~> 0.2'
22
23
  s.add_development_dependency 'minitest', '~> 5.4'
23
24
  s.add_development_dependency 'minitest-reporters'
24
25
  s.add_development_dependency 'rake', '~> 12.3.3'
26
+ s.add_development_dependency 'yard', '~> 0.9.5'
25
27
 
26
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prometheus-config-builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.39
4
+ version: 0.0.41
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juho Mäkinen juho.makinen@gmail.com
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-21 00:00:00.000000000 Z
11
+ date: 2024-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: httparty
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.17.3
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.17.3
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: prometheus_exporter
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -94,8 +108,22 @@ dependencies:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
110
  version: 12.3.3
97
- description:
98
- email:
111
+ - !ruby/object:Gem::Dependency
112
+ name: yard
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.9.5
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.9.5
125
+ description:
126
+ email:
99
127
  executables:
100
128
  - prometheus-config-builder
101
129
  extensions: []
@@ -118,10 +146,10 @@ files:
118
146
  - test/data/test1.yaml
119
147
  - test/data/test2.yaml
120
148
  - test/test_helper.rb
121
- homepage:
149
+ homepage:
122
150
  licenses: []
123
151
  metadata: {}
124
- post_install_message:
152
+ post_install_message:
125
153
  rdoc_options: []
126
154
  require_paths:
127
155
  - lib
@@ -136,8 +164,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
164
  - !ruby/object:Gem::Version
137
165
  version: '0'
138
166
  requirements: []
139
- rubygems_version: 3.3.26
140
- signing_key:
167
+ rubygems_version: 3.0.3.1
168
+ signing_key:
141
169
  specification_version: 4
142
170
  summary: Template based config generation
143
171
  test_files: