vmpooler 1.0.0 → 1.1.0

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: 277212a5ca26187ed46a4e6d0ef0716511a3b63097deab1485908c95bb437c5e
4
- data.tar.gz: 36272bc0744f943d88ca3eb0a33a070268f2a0fa45e130a7ee8abb04d4d0243e
3
+ metadata.gz: 9f802530711b24fac0c8b34198895a2b4b5d18f32942bc4fb7b35d5756ead742
4
+ data.tar.gz: 31df1542e5d1c2441976780c10c523f95617a8d0ea57457e6c8afd3a488ef983
5
5
  SHA512:
6
- metadata.gz: 8bb11603444163deb47713be137b1da3234096c60c59cbedda58b35d5dafeef80a2f6f733ccd1c1d0eb4db39959f189183937a712139346ccd673a8d1ea7f8d0
7
- data.tar.gz: 4502d6509ac75fc693ca24c9defdb401fc00aff14f3cba2d39143786efe3b0aef6eed0bc3ab6a1adb9cdd925684aa39f8e84c999dbbdd88d121efc052ba6fd84
6
+ metadata.gz: 40705e369c0b5dcc9b5f8a9d1f30258586f6df66528421b054fb772d2a51a5bcbcb3795f23efa1239e9948322b807406cffef2107f741d5c1d713a0f0c125592
7
+ data.tar.gz: ef3eb7549072874d71c9ddb0e50913679f47006cdecff869a0db49e7cc8e7af00d4f4455a824e441fb93ef94999b81e411d06418ec5ce08481c9318b670a55aa
@@ -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,46 @@ module Vmpooler
235
236
  result
236
237
  end
237
238
 
239
+ def update_user_metrics(operation, vmname)
240
+ backend.multi
241
+ backend.hget("vmpooler__vm__#{vmname}", 'tag:jenkins_build_url')
242
+ backend.hget("vmpooler__vm__#{vmname}", 'token:user')
243
+ backend.hget("vmpooler__vm__#{vmname}", 'template')
244
+ jenkins_build_url, user, poolname = backend.exec
245
+
246
+ if user
247
+ user = user.gsub('.', '_')
248
+ else
249
+ user = 'unauthenticated'
250
+ end
251
+ metrics.increment("user.#{user}.#{operation}.#{poolname}")
252
+
253
+ if jenkins_build_url
254
+ if jenkins_build_url.include? 'litmus'
255
+ # Very simple filter for Litmus jobs - just count them coming through for the moment.
256
+ metrics.increment("usage_litmus.#{user}.#{operation}.#{poolname}")
257
+ return
258
+ end
259
+
260
+ url_parts = jenkins_build_url.split('/')[2..-1]
261
+ jenkins_instance = url_parts[0].gsub('.', '_')
262
+ value_stream_parts = url_parts[2].split('_')
263
+ value_stream_parts = value_stream_parts.map { |s| s.gsub('.', '_') }
264
+ value_stream = value_stream_parts.shift
265
+ branch = value_stream_parts.pop
266
+ project = value_stream_parts.shift
267
+ job_name = value_stream_parts.join('_')
268
+ build_metadata_parts = url_parts[3]
269
+ component_to_test = component_to_test('RMM_COMPONENT_TO_TEST_NAME', build_metadata_parts)
270
+
271
+ metrics.increment("usage_jenkins_instance.#{jenkins_instance}.#{value_stream}.#{operation}.#{poolname}")
272
+ metrics.increment("usage_branch_project.#{branch}.#{project}.#{operation}.#{poolname}")
273
+ metrics.increment("usage_job_component.#{job_name}.#{component_to_test}.#{operation}.#{poolname}")
274
+ end
275
+ rescue StandardError => e
276
+ puts 'd', "[!] [#{poolname}] failed while evaluating usage labels on '#{vmname}' with an error: #{e}"
277
+ end
278
+
238
279
  def update_pool_size(payload)
239
280
  result = { 'ok' => false }
240
281
 
@@ -1169,6 +1210,7 @@ module Vmpooler
1169
1210
  status 200
1170
1211
  result['ok'] = true
1171
1212
  metrics.increment('delete.success')
1213
+ update_user_metrics('destroy', params[:hostname]) if Vmpooler::API.settings.config[:config]['usage_stats']
1172
1214
  else
1173
1215
  metrics.increment('delete.failed')
1174
1216
  end
@@ -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,54 +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
481
  def component_to_test(match, labels_string)
525
482
  return if labels_string.nil?
526
483
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Vmpooler
4
- VERSION = '1.0.0'
4
+ VERSION = '1.1.0'
5
5
  end
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: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-02 00:00:00.000000000 Z
11
+ date: 2021-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -72,84 +72,84 @@ dependencies:
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 0.13.0
75
+ version: 0.15.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 0.13.0
82
+ version: 0.15.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: opentelemetry-instrumentation-concurrent_ruby
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 0.13.0
89
+ version: 0.15.0
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: 0.13.0
96
+ version: 0.15.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: opentelemetry-instrumentation-redis
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - '='
102
102
  - !ruby/object:Gem::Version
103
- version: 0.13.0
103
+ version: 0.15.0
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - '='
109
109
  - !ruby/object:Gem::Version
110
- version: 0.13.0
110
+ version: 0.15.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: opentelemetry-instrumentation-sinatra
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - '='
116
116
  - !ruby/object:Gem::Version
117
- version: 0.13.0
117
+ version: 0.15.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - '='
123
123
  - !ruby/object:Gem::Version
124
- version: 0.13.0
124
+ version: 0.15.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: opentelemetry-resource_detectors
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - '='
130
130
  - !ruby/object:Gem::Version
131
- version: 0.13.0
131
+ version: 0.15.0
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - '='
137
137
  - !ruby/object:Gem::Version
138
- version: 0.13.0
138
+ version: 0.15.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: opentelemetry-sdk
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - '='
144
144
  - !ruby/object:Gem::Version
145
- version: 0.13.1
145
+ version: 0.15.0
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - '='
151
151
  - !ruby/object:Gem::Version
152
- version: 0.13.1
152
+ version: 0.15.0
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: pickup
155
155
  requirement: !ruby/object:Gem::Requirement