Class: LogStash::Codecs::CSV
- Inherits:
-
Base
- Object
- Base
- LogStash::Codecs::CSV
- Defined in:
- lib/logstash/codecs/csv.rb
Constant Summary collapse
- VALID_CONVERT_TYPES =
List of valid conversion types used for the convert option
[ "integer", "float", "date", "date_time", "boolean" ].freeze
Instance Method Summary collapse
Instance Method Details
#decode(data) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/logstash/codecs/csv.rb', line 79 def decode(data) data = @converter.convert(data) begin values = CSV.parse_line(data, @options) if @include_headers && !@headers @headers = true @options[:headers] = values else decoded = {} values.each_with_index do |fields, index| field_name, value = nil, nil if fields.is_a?(String) && !( @skip_empty_columns && fields.nil?) # No headers next if ignore_field?(index) field_name = ( !@columns[index].nil? ? @columns[index] : "column#{(index+1)}") value = fields elsif fields.is_a?(Array) # Got headers field_name = fields[0] value = fields[1] end next unless field_name decoded[field_name] = if should_transform?(field_name) transform(field_name, value) else value end end yield LogStash::Event.new(decoded) if block_given? end rescue CSV::MalformedCSVError => e @logger.info("CSV parse failure. Falling back to plain-text", :error => e, :data => data) yield LogStash::Event.new("message" => data, "tags" => ["_csvparsefailure"]) if block_given? end end |
#encode(event) ⇒ Object
113 114 115 116 |
# File 'lib/logstash/codecs/csv.rb', line 113 def encode(event) csv_data = CSV.generate_line(event.to_hash.values, @options) @on_event.call(event, csv_data) end |
#register ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/logstash/codecs/csv.rb', line 64 def register @converter = LogStash::Util::Charset.new(@charset) @converter.logger = @logger # validate conversion types to be the valid ones. @convert.each_pair do |column, type| if !VALID_CONVERT_TYPES.include?(type) raise LogStash::ConfigurationError, "#{type} is not a valid conversion type." end end @headers = false @options = { :col_sep => @separator, :quote_char => @quote_char } end |
#reset ⇒ Object
118 119 120 121 |
# File 'lib/logstash/codecs/csv.rb', line 118 def reset @headers = false @options.delete(:headers) end |