vmpooler 0.18.2 → 1.1.2

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: 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