data_collector 0.18.0 → 0.19.0

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: 9b2dda800a0c468ee0db8c4a4546f98c8baa005f0cff2df603e613d404021315
4
- data.tar.gz: c505eb5354999645eb5ea9fbb5200ce100a37d9f3e0eac85bf9416d21cd3514a
3
+ metadata.gz: 35d57ff2998ab1343a4d6e906bcd76bd67951a0eae9a6db69387e4de7dbba285
4
+ data.tar.gz: 702a6447c28533d2dcdce237cc209417963ea2827eaed4f4ad0ab56a62c42783
5
5
  SHA512:
6
- metadata.gz: a44557a687028b74b495236a47b4d802a4a6e130526a639ddf63b7b6a8a07b090f5197c23a36b2b4c9628bcfa33a0d38e2451c1a3224a45fa63d388f6922624e
7
- data.tar.gz: b98a223f063f24b8f78e1358faeb02e33e365edd77b0fba2d28649fa0ad17d79f386ff216326040f3ec87390cb595f41382733ea042c5357c9cf48a23481d8c7
6
+ metadata.gz: 80e487e0d8bfa19cec43a607b3c58698c37e23fd6385be3102d3ca87584348d585241f1794f848c460c02751f29f3a28d1365c472b8e3a532a922f9104fb2e06
7
+ data.tar.gz: 0366f4350e54e1bf985f68d3d0532b6fb00394aad23a3641b07fd65594e7e0b16ddf5da90574251c75b83c63fe09455aa988b7395706fe76e995b17fc79cb2fe
data/README.md CHANGED
@@ -269,8 +269,11 @@ Log to stdout
269
269
  ```ruby
270
270
  log("hello world")
271
271
  ```
272
-
273
-
272
+ #### error
273
+ Log an error
274
+ ```ruby
275
+ error("if you have an issue take a tissue")
276
+ ```
274
277
  ## Example
275
278
  Input data ___test.csv___
276
279
  ```csv
@@ -37,8 +37,10 @@ module DataCollector
37
37
  data = from_https(uri, options)
38
38
  when 'file'
39
39
  if File.directory?("#{uri.host}/#{uri.path}")
40
+ raise DataCollector::Error, "#{uri.host}/#{uri.path} not found" unless File.exist?("#{uri.host}/#{uri.path}")
40
41
  return from_dir(uri, options)
41
42
  else
43
+ raise DataCollector::Error, "#{uri.host}/#{uri.path} not found" unless File.exist?("#{uri.host}/#{uri.path}")
42
44
  data = from_file(uri, options)
43
45
  end
44
46
  when 'amqp'
@@ -13,6 +13,8 @@ module DataCollector
13
13
 
14
14
  @schedule = options[:schedule] || {}
15
15
  @name = options[:name] || "#{Time.now.to_i}-#{rand(10000)}"
16
+ @options = options
17
+ @listeners = []
16
18
  end
17
19
 
18
20
  def on_message(&block)
@@ -22,6 +24,9 @@ module DataCollector
22
24
  def run
23
25
  if paused? && @running
24
26
  @paused = false
27
+ @listeners.each do |listener|
28
+ listener.run if listener.paused?
29
+ end
25
30
  end
26
31
 
27
32
  @running = true
@@ -42,8 +47,20 @@ module DataCollector
42
47
  end
43
48
  else # run once
44
49
  @run_count += 1
45
- DataCollector::Core.log("PIPELINE running once")
46
- handle_on_message(@input, @output)
50
+ if @options.key?(:uri)
51
+ listener = Input.new.from_uri(@options[:uri], @options)
52
+ listener.on_message do |input, output, filename|
53
+ DataCollector::Core.log("PIPELINE triggered by #{filename}")
54
+ handle_on_message(@input, @output, filename)
55
+ end
56
+ @listeners << listener
57
+
58
+ listener.run(true)
59
+
60
+ else
61
+ DataCollector::Core.log("PIPELINE running once")
62
+ handle_on_message(@input, @output)
63
+ end
47
64
  end
48
65
  rescue StandardError => e
49
66
  DataCollector::Core.error("PIPELINE run failed: #{e.message}")
@@ -54,10 +71,18 @@ module DataCollector
54
71
  def stop
55
72
  @running = false
56
73
  @paused = false
74
+ @listeners.each do |listener|
75
+ listener.stop if listener.running?
76
+ end
57
77
  end
58
78
 
59
79
  def pause
60
- @paused = !@paused if @running
80
+ if @running
81
+ @paused = !@paused
82
+ @listeners.each do |listener|
83
+ listener.pause if listener.running?
84
+ end
85
+ end
61
86
  end
62
87
 
63
88
  def running?
@@ -74,11 +99,11 @@ module DataCollector
74
99
 
75
100
  private
76
101
 
77
- def handle_on_message(input, output)
102
+ def handle_on_message(input, output, filename = nil)
78
103
  if (callback = @on_message_callback)
79
104
  timing = Time.now
80
105
  begin
81
- callback.call(input, output)
106
+ callback.call(input, output, filename)
82
107
  rescue StandardError => e
83
108
  DataCollector::Core.error("PIPELINE #{e.message}")
84
109
  ensure
@@ -51,7 +51,7 @@ module DataCollector
51
51
 
52
52
  data = apply_filtered_data_on_payload(data, rule_payload, options)
53
53
 
54
- output_data << {tag.to_sym => data} unless data.nil? || (data.is_a?(Array) && data.empty?)
54
+ output_data << { tag.to_sym => data } unless data.nil? || (data.is_a?(Array) && data.empty?)
55
55
  rescue StandardError => e
56
56
  # puts "error running rule '#{tag}'\n\t#{e.message}"
57
57
  # puts e.backtrace.join("\n")
@@ -61,15 +61,26 @@ module DataCollector
61
61
  def apply_filtered_data_on_payload(input_data, payload, options = {})
62
62
  return nil if input_data.nil?
63
63
 
64
- normalized_options = options.select{|k,v| k !~ /^_/ }.with_indifferent_access
64
+ normalized_options = options.select { |k, v| k !~ /^_/ }.with_indifferent_access
65
65
  output_data = nil
66
66
  case payload.class.name
67
67
  when 'Proc'
68
68
  data = input_data.is_a?(Array) ? input_data : [input_data]
69
69
  output_data = if normalized_options.empty?
70
- data.map { |d| payload.call(d) }
70
+ # data.map { |d| payload.curry.call(d).call(d) }
71
+ data.map { |d|
72
+ loop do
73
+ payload_result = payload.curry.call(d)
74
+ break payload_result unless payload_result.is_a?(Proc)
75
+ end
76
+ }
71
77
  else
72
- data.map { |d| payload.call(d, normalized_options) }
78
+ data.map { |d|
79
+ loop do
80
+ payload_result = payload.curry.call(d, normalized_options)
81
+ break payload_result unless payload_result.is_a?(Proc)
82
+ end
83
+ }
73
84
  end
74
85
  when 'Hash'
75
86
  input_data = [input_data] unless input_data.is_a?(Array)
@@ -77,9 +88,9 @@ module DataCollector
77
88
  output_data = input_data.map do |m|
78
89
  if payload.key?('suffix')
79
90
  if (m.is_a?(Hash))
80
- m.transform_values{|v| v.is_a?(String) ? "#{v}#{payload['suffix']}" : v}
91
+ m.transform_values { |v| v.is_a?(String) ? "#{v}#{payload['suffix']}" : v }
81
92
  elsif m.is_a?(Array)
82
- m.map{|n| n.is_a?(String) ? "#{n}#{payload['suffix']}": n}
93
+ m.map { |n| n.is_a?(String) ? "#{n}#{payload['suffix']}" : n }
83
94
  elsif m.methods.include?(:to_s)
84
95
  "#{m}#{payload['suffix']}"
85
96
  else
@@ -102,8 +113,8 @@ module DataCollector
102
113
  output_data.compact! if output_data.is_a?(Array)
103
114
  output_data.flatten! if output_data.is_a?(Array)
104
115
  if output_data.is_a?(Array) &&
105
- output_data.size == 1 &&
106
- (output_data.first.is_a?(Array) || output_data.first.is_a?(Hash))
116
+ output_data.size == 1 &&
117
+ (output_data.first.is_a?(Array) || output_data.first.is_a?(Hash))
107
118
  output_data = output_data.first
108
119
  end
109
120
 
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module DataCollector
3
- VERSION = "0.18.0"
3
+ VERSION = "0.19.0"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: data_collector
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.0
4
+ version: 0.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mehmet Celik
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-04-18 00:00:00.000000000 Z
11
+ date: 2023-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport