logstash-output-charrington 0.3.12 → 0.3.13

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: 3e19aa1ec683b1b07dd8bd6cb7b715e382d9bcf97f839339be15c47e49749db3
4
- data.tar.gz: 845b806354d17539f84b7b3b31c6925a1c5220d85364a89d61086e3734fa7084
3
+ metadata.gz: 9bb02ce087011aef5d96e4a5ea26e7151ff87d185e24b2812a24c95319c322b0
4
+ data.tar.gz: 6a5ea166ed113d948d766339f35f049e68bd2309e23899e25c7ae5e9345dce33
5
5
  SHA512:
6
- metadata.gz: f3f61f69b23d8a28db703c1ca76952056953cd223a715322db5b0f422a1ad18d561e0d28dacb2518eaaa8799c3a9b08b718818129a41a5cd54e430dbd33c11fc
7
- data.tar.gz: 6dff6e868f6264a77c70af63f018f8ab150f8097e03acf4521b2e068e61dce49baa3dc520aabc71be60bcf276bf33f90a8d5271d2f5e7b360c7a265b8b1e5f84
6
+ metadata.gz: 1a963e2a2c2a6e182fcb63c202b857e55814e7dc4cf7983bc7e34e3f3af7141ecb9c7bd656c52d15559905f978993cc9442e33ce29f927e0140e0fc2553fadf1
7
+ data.tar.gz: e257a03e1a42b74c14b01b0a4cd5e67ad285e8a8de9e3a3b7f5bd934c8c97c228149808e1d429bf17d3f1ee3658ba9b84bc326a16b163f0212a1a9f9abe14c28
@@ -85,6 +85,8 @@ class LogStash::Outputs::Charrington < LogStash::Outputs::Base
85
85
  # The database schema
86
86
  config :schema, validate: :string, required: false
87
87
 
88
+ config :transformer, validate: :string, default: 'redshift'
89
+
88
90
  def register
89
91
  @logger.info('JDBC - Starting up')
90
92
 
@@ -105,7 +107,8 @@ class LogStash::Outputs::Charrington < LogStash::Outputs::Base
105
107
  schema: schema,
106
108
  max_retries: @max_flush_exceptions,
107
109
  retry_initial_interval: @retry_initial_interval,
108
- driver: driver }
110
+ driver: driver,
111
+ transformer: @transformer }
109
112
  Charrington::Process.call(connection, event, opts)
110
113
  rescue => e
111
114
  @logger.error("Unable to process event. Event dropped. #{e.message}")
@@ -7,18 +7,19 @@ module Charrington
7
7
 
8
8
  include Service
9
9
  include LogStash::Util::Loggable
10
- attr_reader :connection, :event, :table_name, :columns, :schema
10
+ attr_reader :connection, :event, :table_name, :columns, :schema, :opts, :transformer
11
11
  attr_accessor :column_types
12
12
 
13
13
  Error = Class.new(StandardError)
14
14
  CreateFailed = Class.new(Error)
15
15
 
16
- def initialize(connection, event, schema, table_name, columns)
16
+ def initialize(connection, event, schema, table_name, columns, opts = {})
17
17
  @connection = connection
18
18
  @event = event.to_hash
19
19
  @table_name = table_name
20
20
  @schema = schema
21
21
  @columns = columns
22
+ @transformer = opts[:transformer]
22
23
  @column_types = initial_columns
23
24
  end
24
25
 
@@ -61,8 +62,19 @@ module Charrington
61
62
  end
62
63
 
63
64
  def initial_columns
64
- # Postgres
65
- ["id SERIAL PRIMARY KEY", "inserted_at TIMESTAMP DEFAULT NOW()"]
65
+ if transformer == "postgres"
66
+ [
67
+ "id SERIAL PRIMARY KEY",
68
+ "inserted_at TIMESTAMP DEFAULT NOW()"
69
+ ]
70
+ else
71
+ [
72
+ "original_timestamp TIMESTAMP DEFAULT NOW()",
73
+ "received_at TIMESTAMP DEFAULT NOW()",
74
+ "timestamp TIMESTAMP DEFAULT NOW()",
75
+ "uuid_ts TIMESTAMP DEFAULT NOW()"
76
+ ]
77
+ end
66
78
  end
67
79
 
68
80
  def create_table
@@ -7,13 +7,13 @@ module Charrington
7
7
 
8
8
  include Service
9
9
  include LogStash::Util::Loggable
10
- attr_reader :connection, :event, :table_name, :columns, :schema
10
+ attr_reader :connection, :event, :table_name, :columns, :schema, :opts
11
11
  attr_accessor :column_types
12
12
 
13
13
  Error = Class.new(StandardError)
14
14
  CreateFailed = Class.new(Error)
15
15
 
16
- def initialize(connection, event, schema, table_name, columns)
16
+ def initialize(connection, event, schema, table_name, columns, opts = {})
17
17
  @connection = connection
18
18
  @event = event.to_hash
19
19
  @schema = schema
@@ -12,7 +12,7 @@ module Charrington
12
12
  include Service
13
13
  include LogStash::Util::Loggable
14
14
  attr_accessor :event, :should_retry
15
- attr_reader :connection, :schema, :table_name, :columns, :driver
15
+ attr_reader :connection, :schema, :table_name, :columns, :driver, :opts
16
16
  attr_reader :event_as_json_keyword, :enable_event_as_json_keyword
17
17
 
18
18
  Error = Class.new(StandardError)
@@ -36,6 +36,7 @@ module Charrington
36
36
  @enable_event_as_json_keyword = opts[:enable_event_as_json_keyword]
37
37
  @event_as_json_keyword = opts[:event_as_json_keyword]
38
38
  @driver = opts[:driver]
39
+ @opts = opts
39
40
  end
40
41
 
41
42
  def call
@@ -72,9 +73,9 @@ module Charrington
72
73
 
73
74
  def create_table
74
75
  if driver == "postgres"
75
- Charrington::CreatePostgresTable.call(connection, event, schema, table_name, columns)
76
+ Charrington::CreatePostgresTable.call(connection, event, schema, table_name, columns, opts)
76
77
  elsif driver == "redshift"
77
- Charrington::CreateRedshiftTable.call(connection, event, schema, table_name, columns)
78
+ Charrington::CreateRedshiftTable.call(connection, event, schema, table_name, columns, opts)
78
79
  end
79
80
  end
80
81
 
@@ -7,7 +7,7 @@ module Charrington
7
7
 
8
8
  include Service
9
9
  include LogStash::Util::Loggable
10
- attr_reader :event, :connection, :opts, :max_retries, :schema, :retry_max_interval, :driver
10
+ attr_reader :event, :connection, :opts, :max_retries, :schema, :retry_max_interval, :driver, :transformer
11
11
  attr_accessor :retry_interval, :should_retry
12
12
 
13
13
  Error = Class.new(StandardError)
@@ -24,6 +24,7 @@ module Charrington
24
24
  @retry_max_interval = opts[:retry_max_interval] || 2
25
25
  @retry_interval = opts[:retry_initial_interval] || 2
26
26
  @driver = opts[:driver]
27
+ @transformer = opts[:transformer]
27
28
 
28
29
  @attempts = 1
29
30
  @should_retry = true
@@ -31,12 +32,12 @@ module Charrington
31
32
 
32
33
  def call
33
34
  while should_retry do
34
- transformed = case driver
35
+ transformed = case transformer
35
36
  when "redshift"
36
- self.logger.info "Found driver for redshift with event of: #{event}"
37
+ self.logger.info "Found transformer of #{transformer} for driver of #{driver} with event of: #{event}"
37
38
  Charrington::TransformRedshift.call(event)
38
39
  else
39
- self.logger.info "Found driver for postgres with event of: #{event}"
40
+ self.logger.info "Found transformer of #{transformer} for driver of #{driver} with event of: #{event}"
40
41
  Charrington::TransformPostgres.call(event)
41
42
  end
42
43
  self.logger.info "Transformed event into: #{transformed}"
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-charrington'
3
- s.version = '0.3.12'
3
+ s.version = '0.3.13'
4
4
 
5
5
  s.licenses = ['Apache-2.0']
6
6
  s.homepage = 'https://gitlab.podium.com/engineering/analytics/logstash-output-charrington'
@@ -20,6 +20,7 @@ describe LogStash::Outputs::Charrington do
20
20
  connection_string => '#{@url}'
21
21
  driver_jar_path => '#{driver_path}'
22
22
  schema => ''
23
+ transformer => 'postgres'
23
24
  }
24
25
  }
25
26
  CONFIG
@@ -49,6 +50,7 @@ describe LogStash::Outputs::Charrington do
49
50
  connection_string => '#{@url}'
50
51
  driver_jar_path => '#{driver_path}'
51
52
  schema => ''
53
+ transformer => 'postgres'
52
54
  }
53
55
  }
54
56
  CONFIG
@@ -81,6 +83,7 @@ describe LogStash::Outputs::Charrington do
81
83
  connection_string => '#{@url}'
82
84
  driver_jar_path => '#{driver_path}'
83
85
  schema => ''
86
+ transformer => 'postgres'
84
87
  }
85
88
  }
86
89
  CONFIG
@@ -113,6 +116,7 @@ describe LogStash::Outputs::Charrington do
113
116
  connection_string => '#{@url}'
114
117
  driver_jar_path => '#{driver_path}'
115
118
  schema => ''
119
+ transformer => 'postgres'
116
120
  }
117
121
  }
118
122
  CONFIG
@@ -153,6 +157,7 @@ describe LogStash::Outputs::Charrington do
153
157
  connection_string => '#{@url}'
154
158
  driver_jar_path => '#{driver_path}'
155
159
  schema => '#{schema}'
160
+ transformer => 'postgres'
156
161
  }
157
162
  }
158
163
  CONFIG
@@ -186,6 +191,7 @@ describe LogStash::Outputs::Charrington do
186
191
  connection_string => '#{@url}'
187
192
  driver_jar_path => '#{driver_path}'
188
193
  schema => ''
194
+ transformer => 'postgres'
189
195
  }
190
196
  }
191
197
  CONFIG
@@ -199,4 +205,36 @@ describe LogStash::Outputs::Charrington do
199
205
  end
200
206
  end
201
207
 
208
+ describe 'a new payload with one event transformed to be redshift shape' do
209
+ let(:config) do
210
+ <<-CONFIG
211
+ input {
212
+ generator {
213
+ message => '{"app_name": "Web App", "event": "schemaless", "meta": { "type": "XML" }, "published_at": "2019-07-29T20:09:18Z" }'
214
+ codec => 'json'
215
+ count => 1
216
+ }
217
+ }
218
+
219
+ output {
220
+ charrington {
221
+ connection_string => '#{@url}'
222
+ driver_jar_path => '#{driver_path}'
223
+ schema => ''
224
+ transformer => 'redshift'
225
+ }
226
+ }
227
+ CONFIG
228
+ end
229
+
230
+ it 'creates a table and inserts a record with data the shape of redshift' do
231
+ drop_table('schemaless')
232
+ run_pipeline
233
+ expect(query('SELECT * FROM schemaless')).to match_array([
234
+ {:anonymous_id=>"", :app_name=>"Web App", :event=>"schemaless", :event_text=>"schemaless", :id=>a_kind_of(String), :original_timestamp=>a_kind_of(String), :received_at=>a_kind_of(String), :sent_at=>"2019-07-29 20:09:18", :timestamp=>a_kind_of(String), :type=>"XML", :uuid_ts=>a_kind_of(String)}
235
+ ])
236
+ expect(query('SELECT COUNT(1) FROM schemaless').first[:count]).to eq("1")
237
+ end
238
+ end
239
+
202
240
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-charrington
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.12
4
+ version: 0.3.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - dconger