dataoperations-aggregate 0.0.6 → 0.0.7

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dataoperations-aggregate.rb +79 -11
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e2cf76bae5e748e46672c8d59f8859358452f2fca813499b148e85dfa61f38c9
4
- data.tar.gz: 7a9fbbd0115edefa597b9d374407576f4dfedb133da781dffe066c3e4ba6f73a
3
+ metadata.gz: 88229d7d1a3eb43c59f593c15ed5350189f534927d849b8bb75e70583610bdb6
4
+ data.tar.gz: 812bea576d59f4211e659c6e6da8f37cdabbac7a01faadc9e8f09e3512f0ea7b
5
5
  SHA512:
6
- metadata.gz: 403435362bd15744b154604e6322dcbba89ea9952e36d82ffe3ac3299f3ad28cd5c29187843e780cf149dabf2abdb4fbb6700f1e8ddce8e792ab033adf174255
7
- data.tar.gz: f883f091f074ebbe48e18c46790ceb37c5ba98d7a879ec8259f69c88a19225130864897ab8bb63e47c7ab31dbcc5a400ae6c7fe68f3b8a27abec476c6e34123d
6
+ metadata.gz: dabc7016ecefa788042959f1184b258fe70d2468ed5e72e9a675902c1f2f53941559fe5e5083887f131662daf65e4f6339bf788269509f41da3093dd090b68e2
7
+ data.tar.gz: d0da00e819b18b73d0a942e2b8b871af276300936043cb09ebec48e0277bd1eb283ffbc57fdee3e73c1d400aae0149d7cfc9634dc45bf7533a9f68daa18f730f
@@ -12,7 +12,7 @@ module DataOperations
12
12
  DEFAULT_TIME_STARTED_MODE = :first_message
13
13
  DEFAULT_FIELD_NO_DATA_VALUE = 'no_data'.freeze
14
14
  DEFAULT_AGGREGATIONS = %w[sum min max mean median variance standard_deviation].freeze
15
- VALID_AGGREGATIONS = %w[sum min max mean median variance standard_deviation].freeze
15
+ VALID_AGGREGATIONS = %w[sum min max mean median variance standard_deviation bucket].freeze
16
16
  DEFAULT_HASH_TIME_FORMAT = '%Y-%m-%dT%H'.freeze
17
17
  DEFAULT_INERVAL_SECONDS = 3600
18
18
 
@@ -30,7 +30,9 @@ module DataOperations
30
30
  log: Logger.new(STDOUT),
31
31
  aggregation_names:,
32
32
  group_field_names:,
33
- aggregate_field_names:
33
+ aggregate_field_names:,
34
+ buckets:[],
35
+ bucket_metrics:[]
34
36
  )
35
37
  @aggregator = aggregator
36
38
  @time_format = time_format
@@ -43,6 +45,8 @@ module DataOperations
43
45
  @processing_mode = processing_mode
44
46
  @time_started_mode = time_started_mode
45
47
  @aggregator_name = aggregator_name
48
+ @buckets = buckets
49
+ @bucket_metrics = bucket_metrics
46
50
 
47
51
 
48
52
  if aggregation_names.nil? || !aggregation_names.is_a?(Array)
@@ -219,16 +223,51 @@ module DataOperations
219
223
  # Aggregate data
220
224
  if aggregate_field_value.is_a?(Array)
221
225
  @aggregation_names.each do |operation|
222
- data = aggregate_field_value.method(operation).call
223
- aggregator_data["#{aggregate_field_key}_#{operation}"] = data
224
-
225
- # Add aggregated data to interval
226
- group_item_value['intervals'].keys[1..-1].each do |interval_secs|
227
- interval_aggregator_item_key = (aggregator_item_key / interval_secs.to_i) * interval_secs.to_i
228
- interval_aggregator_item_value = group_item_value['intervals'][interval_secs][interval_aggregator_item_key]
229
- interval_aggregator_item_value['aggregate_fields'][aggregate_field_key][operation] << data
226
+
227
+ #If bucket, calculate bucket for metric
228
+ if operation == 'bucket'
229
+ #If set buckets and set metrics to calculate (bucket values depends of ranges based in metric activity)
230
+ if !@buckets.nil? && !@bucket_metrics.nil? && @bucket_metrics.include?(aggregate_field_key)
231
+ data_bucket = calculate_buckets(aggregate_field_value, @buckets)
232
+
233
+ data_bucket.each {|bucket,bucket_count|
234
+ #@log.info("#{aggregate_field_key}_#{bucket} = #{bucket_count}")
235
+ aggregator_data["#{aggregate_field_key}_bucket#{bucket}"] = bucket_count
236
+ }
237
+
238
+ # Add aggregated data to interval
239
+ group_item_value['intervals'].keys[1..-1].each do |interval_secs|
240
+
241
+ interval_aggregator_item_key = (aggregator_item_key / interval_secs.to_i) * interval_secs.to_i
242
+ interval_aggregator_item_value = group_item_value['intervals'][interval_secs][interval_aggregator_item_key]
243
+ data_bucket.each {|bucket,bucket_count|
244
+ #@log.info("#{aggregate_field_key}_#{bucket} = #{bucket_count}")
245
+ interval_aggregator_item_value['aggregate_fields'][aggregate_field_key]["bucket#{bucket}"] = [] if interval_aggregator_item_value['aggregate_fields'][aggregate_field_key]["bucket#{bucket}"].nil?
246
+ interval_aggregator_item_value['aggregate_fields'][aggregate_field_key]["bucket#{bucket}"] << bucket_count
247
+ }
248
+
249
+ end
250
+
251
+ end
252
+ else
253
+ data = aggregate_field_value.method(operation).call
254
+ aggregator_data["#{aggregate_field_key}_#{operation}"] = data
255
+
256
+ # Add aggregated data to interval
257
+ group_item_value['intervals'].keys[1..-1].each do |interval_secs|
258
+ interval_aggregator_item_key = (aggregator_item_key / interval_secs.to_i) * interval_secs.to_i
259
+ interval_aggregator_item_value = group_item_value['intervals'][interval_secs][interval_aggregator_item_key]
260
+ interval_aggregator_item_value['aggregate_fields'][aggregate_field_key][operation] << data
261
+ end
230
262
  end
263
+
264
+
265
+ end
266
+
267
+ if !@buckets.nil? && ! @bucket_metrics.nil?
268
+ #data = calculate_buckets(data, @buckets)
231
269
  end
270
+
232
271
  end
233
272
  end
234
273
 
@@ -244,6 +283,9 @@ module DataOperations
244
283
  @aggregation_names.each do |operation|
245
284
  interval_aggregator_item_value['aggregate_fields'][aggregate_field_key][operation] = []
246
285
  end
286
+
287
+ ##Add buckets metadata (empty hash)
288
+ ##interval_aggregator_item_value['aggregate_fields'][aggregate_field_key]['buckets']={}
247
289
  end
248
290
  end
249
291
 
@@ -297,10 +339,17 @@ module DataOperations
297
339
  case operation
298
340
  when 'max', 'min', 'mean', 'median'
299
341
  data = vector.method(operation).call
342
+ when 'bucket'
343
+ #Bucket operation generate bucket[\d]+
344
+ data = nil
345
+ when /^bucket[\d]+/
346
+ #For buckets sum accumulations for internvals
347
+ data = vector.method('sum').call
300
348
  else
301
349
  data = vector.median
302
350
  end
303
- aggregator_data["#{field_name}_#{operation}"] = data
351
+ #Nil data is avoid (for example for 'bucket' name operation)
352
+ aggregator_data["#{field_name}_#{operation}"] = data unless data.nil?
304
353
  end
305
354
  end
306
355
  # @log.debug aggregator_item_value
@@ -310,5 +359,24 @@ module DataOperations
310
359
  aggregate_data[s_interval] << aggregator_data
311
360
  end
312
361
  end
362
+
363
+ #Return Array with count by each bucket
364
+ def calculate_buckets(data, buckets_config)
365
+ buckets_config.sort!.uniq!
366
+ buckets = {}
367
+
368
+ buckets_config.each {|bucket| buckets[bucket] = 0}
369
+
370
+ data.each {|item|
371
+ buckets_config.each {|bucket|
372
+ if item <= bucket
373
+ buckets[bucket] += 1
374
+ next
375
+ end
376
+ }
377
+ }
378
+ return buckets
379
+ end
380
+
313
381
  end
314
382
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dataoperations-aggregate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Guillen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-19 00:00:00.000000000 Z
11
+ date: 2022-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: descriptive_statistics
@@ -50,7 +50,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
50
50
  - !ruby/object:Gem::Version
51
51
  version: '0'
52
52
  requirements: []
53
- rubygems_version: 3.0.3
53
+ rubygems_version: 3.0.3.1
54
54
  signing_key:
55
55
  specification_version: 4
56
56
  summary: Aggregate data