class Charrington::TransformRedshift
Constants
- ColumnBlacklist
- Error
- EventNil
- KEY_FILTER_BLACKLIST
- KEY_RAISE_BLACKLIST
- TableNameNil
Attributes
event[RW]
top_level_keys[R]
Public Class Methods
new(event)
click to toggle source
# File lib/logstash/outputs/charrington/transform_redshift.rb, line 18 def initialize(event) raise EventNil, "Event is nil" if event.nil? event = event.to_hash @event = drop_keys(event) @top_level_keys = @event.keys check_blacklist end
Public Instance Methods
call()
click to toggle source
# File lib/logstash/outputs/charrington/transform_redshift.rb, line 26 def call handle_event_key(event) add_id_to_event(event) handle_key_transform(event, "anonymous_id", "anonymous_user") handle_key_transform(event, "sent_at", "published_at") handle_key_transform(event, "original_timestamp", "sent_at") handle_key_transform(event, "received_at", "sent_at") handle_key_transform(event, "timestamp", "sent_at") handle_meta_section(event) transform_session_stuff(event) event.delete_if {|k, _v| ['session', 'meta', 'published_at', 'anonymous_user'].include?(k) } event end
Private Instance Methods
add_id_to_event(hash)
click to toggle source
# File lib/logstash/outputs/charrington/transform_redshift.rb, line 55 def add_id_to_event(hash) hash["id"] = SecureRandom.hex(10) end
check_blacklist()
click to toggle source
# File lib/logstash/outputs/charrington/transform_redshift.rb, line 99 def check_blacklist arr = [] KEY_RAISE_BLACKLIST.each { |k| arr << k if event.keys.include?(k) } raise ColumnBlacklist, "Event contains these blacklisted keys: #{arr.join(",")}" unless arr.empty? end
drop_keys(event)
click to toggle source
# File lib/logstash/outputs/charrington/transform_redshift.rb, line 105 def drop_keys(event) event.delete_if {|k, _v| k.start_with?("@") || KEY_FILTER_BLACKLIST.include?(k) } end
flatten_hash(hash)
click to toggle source
# File lib/logstash/outputs/charrington/transform_redshift.rb, line 109 def flatten_hash(hash) hash.each_with_object({}) do |(k, v), acc| if v.is_a? Hash flatten_hash(v).map do |h_k, h_v| acc["#{k}_#{h_k}"] = h_v end else acc[k] = v end end end
handle_event_key(hash)
click to toggle source
# File lib/logstash/outputs/charrington/transform_redshift.rb, line 59 def handle_event_key(hash) event_name = hash["event"] || "" hash["event_text"] = event_name hash["event"] = underscore_event_name(event_name) end
handle_key_transform(hash, key_that_should_be_there, key_to_take_value_from)
click to toggle source
# File lib/logstash/outputs/charrington/transform_redshift.rb, line 47 def handle_key_transform(hash, key_that_should_be_there, key_to_take_value_from) unless hash.has_key?(key_that_should_be_there) hash[key_that_should_be_there] = hash[key_to_take_value_from] || "" else hash end end
handle_meta_section(hash)
click to toggle source
# File lib/logstash/outputs/charrington/transform_redshift.rb, line 88 def handle_meta_section(hash) meta_section = hash["meta"] || {} meta_section.each {|k, v| next unless k.kind_of?(String) next if [Array, Hash].map { |type| v.kind_of?(type) }.any? hash[k] = v } end
transform_session_stuff(hash)
click to toggle source
# File lib/logstash/outputs/charrington/transform_redshift.rb, line 78 def transform_session_stuff(hash) session_stuff = hash["session"] || {} session_stuff.each {|k, v| next unless k.kind_of?(String) hash["context_#{k}"] = v } end
underscore_event_name(event_name)
click to toggle source
# File lib/logstash/outputs/charrington/transform_redshift.rb, line 67 def underscore_event_name(event_name) event_name. gsub(/::/, '/'). gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). gsub(/([a-z\d])([A-Z])/,'\1_\2'). downcase. gsub(/[^a-z0-9]+/, "_"). gsub(/\A_+/, ""). gsub(/_+\z/, "") end