vmpooler 0.18.2 → 1.1.2

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: 9c5b00eb18e417b534119f23d2e5e8127469b345906327a1ea6d0223851c113f
4
- data.tar.gz: edd62d5343f0a569a9ef905f31fc4d5f14c0dc0d55644d285e9ab40a5403ff2d
3
+ metadata.gz: 0e7864a4052aa108e7946af16f5388c43d2f755b55a45cd04e5c1aa808209fe7
4
+ data.tar.gz: b11cc686a8f1ea02551ee874b67f98d70b621848865fdde8acdb6bb1b43e716e
5
5
  SHA512:
6
- metadata.gz: 6514b53e6ff62b228c696dd195d941f217eba85cdc8b97f8eedad81800d359d598d591f2840538f4d52d48cc54f50e75a8bbbf1cf080d25e23cbf216cd1dc16f
7
- data.tar.gz: 4c1acb611e7213419302563e7327226e688fa024168c052bb8a374375fe3cb92dca90e15748ab42de9cd87877d209d1738b2a77607ced3a924a46eb336777be7
6
+ metadata.gz: 6e20f396405f1eaad295555312603977242b5803466ef0049de517efae3d0098edda2d51bf85e1168e9b5c188364b8fdab8c9e8b5197bd5e2970109d148f838c
7
+ data.tar.gz: 54c61501623bee35381b7e4241d98b00ad0cee8f8904d5ba20edabd6bc942a69c6cfcc11e8bbc8e23429da661ccb0f027e13e83452ad98327c48a210075b3ce8
@@ -210,6 +210,7 @@ module Vmpooler
210
210
  account_for_starting_vm(vmpool, vmname)
211
211
  vms << [vmpool, vmname, vmtemplate]
212
212
  metrics.increment("checkout.success.#{vmpool}")
213
+ update_user_metrics('allocate', vmname) if Vmpooler::API.settings.config[:config]['usage_stats']
213
214
  else
214
215
  failed = true
215
216
  metrics.increment("checkout.empty.#{requested}")
@@ -235,6 +236,59 @@ module Vmpooler
235
236
  result
236
237
  end
237
238
 
239
+ def component_to_test(match, labels_string)
240
+ return if labels_string.nil?
241
+
242
+ labels_string_parts = labels_string.split(',')
243
+ labels_string_parts.each do |part|
244
+ key, value = part.split('=')
245
+ next if value.nil?
246
+ return value if key == match
247
+ end
248
+ 'none'
249
+ end
250
+
251
+ def update_user_metrics(operation, vmname)
252
+ backend.multi
253
+ backend.hget("vmpooler__vm__#{vmname}", 'tag:jenkins_build_url')
254
+ backend.hget("vmpooler__vm__#{vmname}", 'token:user')
255
+ backend.hget("vmpooler__vm__#{vmname}", 'template')
256
+ jenkins_build_url, user, poolname = backend.exec
257
+ poolname = poolname.gsub('.', '_')
258
+
259
+ if user
260
+ user = user.gsub('.', '_')
261
+ else
262
+ user = 'unauthenticated'
263
+ end
264
+ metrics.increment("user.#{user}.#{operation}.#{poolname}")
265
+
266
+ if jenkins_build_url
267
+ if jenkins_build_url.include? 'litmus'
268
+ # Very simple filter for Litmus jobs - just count them coming through for the moment.
269
+ metrics.increment("usage_litmus.#{user}.#{operation}.#{poolname}")
270
+ return
271
+ end
272
+
273
+ url_parts = jenkins_build_url.split('/')[2..-1]
274
+ jenkins_instance = url_parts[0].gsub('.', '_')
275
+ value_stream_parts = url_parts[2].split('_')
276
+ value_stream_parts = value_stream_parts.map { |s| s.gsub('.', '_') }
277
+ value_stream = value_stream_parts.shift
278
+ branch = value_stream_parts.pop
279
+ project = value_stream_parts.shift
280
+ job_name = value_stream_parts.join('_')
281
+ build_metadata_parts = url_parts[3]
282
+ component_to_test = component_to_test('RMM_COMPONENT_TO_TEST_NAME', build_metadata_parts)
283
+
284
+ metrics.increment("usage_jenkins_instance.#{jenkins_instance}.#{value_stream}.#{operation}.#{poolname}")
285
+ metrics.increment("usage_branch_project.#{branch}.#{project}.#{operation}.#{poolname}")
286
+ metrics.increment("usage_job_component.#{job_name}.#{component_to_test}.#{operation}.#{poolname}")
287
+ end
288
+ rescue StandardError => e
289
+ puts 'd', "[!] [#{poolname}] failed while evaluating usage labels on '#{vmname}' with an error: #{e}"
290
+ end
291
+
238
292
  def update_pool_size(payload)
239
293
  result = { 'ok' => false }
240
294
 
@@ -1169,6 +1223,7 @@ module Vmpooler
1169
1223
  status 200
1170
1224
  result['ok'] = true
1171
1225
  metrics.increment('delete.success')
1226
+ update_user_metrics('destroy', params[:hostname]) if Vmpooler::API.settings.config[:config]['usage_stats']
1172
1227
  else
1173
1228
  metrics.increment('delete.failed')
1174
1229
  end
@@ -113,7 +113,7 @@ module Vmpooler
113
113
  # Similarly, request IDs are also stripped from the /ondemand path.
114
114
  path
115
115
  .gsub(%r{/vm/.+$}, '/vm')
116
- .gsub(%r{/ondemand/.+$}, '/ondemand')
116
+ .gsub(%r{/ondemandvm/.+$}, '/ondemandvm')
117
117
  .gsub(%r{/token/.+$}, '/token')
118
118
  .gsub(%r{/lib/.+$}, '/lib')
119
119
  .gsub(%r{/img/.+$}, '/img')
@@ -165,33 +165,33 @@ module Vmpooler
165
165
  },
166
166
  user: {
167
167
  mtype: M_COUNTER,
168
- torun: %i[manager],
169
- docstring: 'Number of pool instances this user created created',
170
- param_labels: %i[user poolname]
168
+ torun: %i[api],
169
+ docstring: 'Number of pool instances and the operation performed by a user',
170
+ param_labels: %i[user operation poolname]
171
171
  },
172
172
  usage_litmus: {
173
173
  mtype: M_COUNTER,
174
- torun: %i[manager],
175
- docstring: 'Pools by Litmus job usage',
176
- param_labels: %i[user poolname]
174
+ torun: %i[api],
175
+ docstring: 'Number of pool instances and the operation performed by Litmus jobs',
176
+ param_labels: %i[user operation poolname]
177
177
  },
178
178
  usage_jenkins_instance: {
179
179
  mtype: M_COUNTER,
180
- torun: %i[manager],
181
- docstring: 'Pools by Jenkins instance usage',
182
- param_labels: %i[jenkins_instance value_stream poolname]
180
+ torun: %i[api],
181
+ docstring: 'Number of pool instances and the operation performed by Jenkins instances',
182
+ param_labels: %i[jenkins_instance value_stream operation poolname]
183
183
  },
184
184
  usage_branch_project: {
185
185
  mtype: M_COUNTER,
186
- torun: %i[manager],
187
- docstring: 'Pools by branch/project usage',
188
- param_labels: %i[branch project poolname]
186
+ torun: %i[api],
187
+ docstring: 'Number of pool instances and the operation performed by Jenkins branch/project',
188
+ param_labels: %i[branch project operation poolname]
189
189
  },
190
190
  usage_job_component: {
191
191
  mtype: M_COUNTER,
192
- torun: %i[manager],
193
- docstring: 'Pools by job/component usage',
194
- param_labels: %i[job_name component_to_test poolname]
192
+ torun: %i[api],
193
+ docstring: 'Number of pool instances and the operation performed by Jenkins job/component',
194
+ param_labels: %i[job_name component_to_test operation poolname]
195
195
  },
196
196
  checkout: {
197
197
  mtype: M_COUNTER,
@@ -473,66 +473,11 @@ module Vmpooler
473
473
  finish = format('%<time>.2f', time: Time.now - start)
474
474
  $logger.log('s', "[-] [#{pool}] '#{vm}' destroyed in #{finish} seconds")
475
475
  $metrics.timing("destroy.#{pool}", finish)
476
- get_vm_usage_labels(vm, redis)
477
476
  end
478
477
  end
479
478
  dereference_mutex(vm)
480
479
  end
481
480
 
482
- def get_vm_usage_labels(vm, redis)
483
- return unless $config[:config]['usage_stats']
484
-
485
- redis.multi
486
- redis.hget("vmpooler__vm__#{vm}", 'checkout')
487
- redis.hget("vmpooler__vm__#{vm}", 'tag:jenkins_build_url')
488
- redis.hget("vmpooler__vm__#{vm}", 'token:user')
489
- redis.hget("vmpooler__vm__#{vm}", 'template')
490
- checkout, jenkins_build_url, user, poolname = redis.exec
491
- return if checkout.nil?
492
-
493
- user ||= 'unauthenticated'
494
- user = user.gsub('.', '_')
495
- $metrics.increment("user.#{user}.#{poolname}")
496
-
497
- return unless jenkins_build_url
498
-
499
- if jenkins_build_url.include? 'litmus'
500
- # Very simple filter for Litmus jobs - just count them coming through for the moment.
501
- $metrics.increment("usage_litmus.#{user}.#{poolname}")
502
- return
503
- end
504
-
505
- url_parts = jenkins_build_url.split('/')[2..-1]
506
- jenkins_instance = url_parts[0].gsub('.', '_')
507
- value_stream_parts = url_parts[2].split('_')
508
- value_stream_parts = value_stream_parts.map { |s| s.gsub('.', '_') }
509
- value_stream = value_stream_parts.shift
510
- branch = value_stream_parts.pop
511
- project = value_stream_parts.shift
512
- job_name = value_stream_parts.join('_')
513
- build_metadata_parts = url_parts[3]
514
- component_to_test = component_to_test('RMM_COMPONENT_TO_TEST_NAME', build_metadata_parts)
515
-
516
- $metrics.increment("usage_jenkins_instance.#{jenkins_instance}.#{value_stream}.#{poolname}")
517
- $metrics.increment("usage_branch_project.#{branch}.#{project}.#{poolname}")
518
- $metrics.increment("usage_job_component.#{job_name}.#{component_to_test}.#{poolname}")
519
- rescue StandardError => e
520
- $logger.log('d', "[!] [#{poolname}] failed while evaluating usage labels on '#{vm}' with an error: #{e}")
521
- raise
522
- end
523
-
524
- def component_to_test(match, labels_string)
525
- return if labels_string.nil?
526
-
527
- labels_string_parts = labels_string.split(',')
528
- labels_string_parts.each do |part|
529
- key, value = part.split('=')
530
- next if value.nil?
531
- return value if key == match
532
- end
533
- 'none'
534
- end
535
-
536
481
  def purge_unused_vms_and_folders
537
482
  global_purge = $config[:config]['purge_unconfigured_folders']
538
483
  providers = $config[:providers].keys
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Vmpooler
4
- VERSION = '0.18.2'
4
+ VERSION = '1.1.2'
5
5
  end
data/lib/vmpooler.rb CHANGED
@@ -16,7 +16,6 @@ module Vmpooler
16
16
  require 'yaml'
17
17
 
18
18
  # Dependencies for tracing
19
- require 'opentelemetry-api'
20
19
  require 'opentelemetry-instrumentation-concurrent_ruby'
21
20
  require 'opentelemetry-instrumentation-redis'
22
21
  require 'opentelemetry-instrumentation-sinatra'
@@ -237,12 +236,12 @@ module Vmpooler
237
236
  if tracing_enabled.eql?('false')
238
237
  puts "Exporting of traces has been disabled so the span processor has been se to a 'NoopSpanExporter'"
239
238
  span_processor = OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
240
- exporter: OpenTelemetry::SDK::Trace::Export::NoopSpanExporter.new
239
+ OpenTelemetry::SDK::Trace::Export::NoopSpanExporter.new
241
240
  )
242
241
  else
243
242
  puts "Exporting of traces will be done over HTTP in binary Thrift format to #{tracing_jaeger_host}"
244
243
  span_processor = OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
245
- exporter: OpenTelemetry::Exporter::Jaeger::CollectorExporter.new(endpoint: tracing_jaeger_host)
244
+ OpenTelemetry::Exporter::Jaeger::CollectorExporter.new(endpoint: tracing_jaeger_host)
246
245
  )
247
246
  end
248
247
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmpooler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.2
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-10 00:00:00.000000000 Z
11
+ date: 2021-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -66,104 +66,90 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.10'
69
- - !ruby/object:Gem::Dependency
70
- name: opentelemetry-api
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - '='
74
- - !ruby/object:Gem::Version
75
- version: 0.8.0
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - '='
81
- - !ruby/object:Gem::Version
82
- version: 0.8.0
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: opentelemetry-exporter-jaeger
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - '='
88
74
  - !ruby/object:Gem::Version
89
- version: 0.8.0
75
+ version: 0.17.0
90
76
  type: :runtime
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - '='
95
81
  - !ruby/object:Gem::Version
96
- version: 0.8.0
82
+ version: 0.17.0
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: opentelemetry-instrumentation-concurrent_ruby
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - '='
102
88
  - !ruby/object:Gem::Version
103
- version: 0.8.0
89
+ version: 0.17.0
104
90
  type: :runtime
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - '='
109
95
  - !ruby/object:Gem::Version
110
- version: 0.8.0
96
+ version: 0.17.0
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: opentelemetry-instrumentation-redis
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
101
  - - '='
116
102
  - !ruby/object:Gem::Version
117
- version: 0.8.0
103
+ version: 0.17.0
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
108
  - - '='
123
109
  - !ruby/object:Gem::Version
124
- version: 0.8.0
110
+ version: 0.17.0
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: opentelemetry-instrumentation-sinatra
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
115
  - - '='
130
116
  - !ruby/object:Gem::Version
131
- version: 0.8.0
117
+ version: 0.17.0
132
118
  type: :runtime
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
122
  - - '='
137
123
  - !ruby/object:Gem::Version
138
- version: 0.8.0
124
+ version: 0.17.0
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: opentelemetry-resource_detectors
141
127
  requirement: !ruby/object:Gem::Requirement
142
128
  requirements:
143
129
  - - '='
144
130
  - !ruby/object:Gem::Version
145
- version: 0.8.0
131
+ version: 0.17.0
146
132
  type: :runtime
147
133
  prerelease: false
148
134
  version_requirements: !ruby/object:Gem::Requirement
149
135
  requirements:
150
136
  - - '='
151
137
  - !ruby/object:Gem::Version
152
- version: 0.8.0
138
+ version: 0.17.0
153
139
  - !ruby/object:Gem::Dependency
154
140
  name: opentelemetry-sdk
155
141
  requirement: !ruby/object:Gem::Requirement
156
142
  requirements:
157
143
  - - '='
158
144
  - !ruby/object:Gem::Version
159
- version: 0.8.0
145
+ version: 0.17.0
160
146
  type: :runtime
161
147
  prerelease: false
162
148
  version_requirements: !ruby/object:Gem::Requirement
163
149
  requirements:
164
150
  - - '='
165
151
  - !ruby/object:Gem::Version
166
- version: 0.8.0
152
+ version: 0.17.0
167
153
  - !ruby/object:Gem::Dependency
168
154
  name: pickup
169
155
  requirement: !ruby/object:Gem::Requirement
@@ -392,14 +378,14 @@ dependencies:
392
378
  requirements:
393
379
  - - "~>"
394
380
  - !ruby/object:Gem::Version
395
- version: '1.0'
381
+ version: 1.1.0
396
382
  type: :development
397
383
  prerelease: false
398
384
  version_requirements: !ruby/object:Gem::Requirement
399
385
  requirements:
400
386
  - - "~>"
401
387
  - !ruby/object:Gem::Version
402
- version: '1.0'
388
+ version: 1.1.0
403
389
  - !ruby/object:Gem::Dependency
404
390
  name: simplecov
405
391
  requirement: !ruby/object:Gem::Requirement