fluent-plugin-mule 1.0
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 +7 -0
- data/lib/fluent/plugin/filter_mule.rb +106 -0
- metadata +46 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e8ee78dafd7dd6aa40cebba7db6fa251ddb0469d
|
4
|
+
data.tar.gz: 3793bbea0b21e20c4b45ed5fcf5cc605cd29f2ee
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3b23f82d97aba5426f345e16d3674d288e74fd4c4c887c45f5da3714ffb39ebf8ce4413450a52ff4199aa11dc72d554b2904c96142771d7992d23c28c7379d23
|
7
|
+
data.tar.gz: eabb9dc283fdbb8b5c15062a0ae5fd8d15957df9c1ff9243010da435b4af89653636c02106afbaa67e875f2359bec53084edbb938e122195d758ddb014b4af1a
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'fluent/filter'
|
2
|
+
|
3
|
+
module Fluent
|
4
|
+
class MuleFilter < Filter
|
5
|
+
# Register this filter as "passthru"
|
6
|
+
Fluent::Plugin.register_filter('mule', self)
|
7
|
+
|
8
|
+
# config_param works like other plugins
|
9
|
+
config_param :kv_delimiter, :string, :default => ' '
|
10
|
+
config_param :kv_char, :string, :default => '='
|
11
|
+
config_param :time_parse, :bool, :default => false
|
12
|
+
# 2016-12-09 14:50:51,330
|
13
|
+
config_param :time_format, :string, :default => '%Y-%m-%d %H:%M:%S,%L'
|
14
|
+
|
15
|
+
def configure(conf)
|
16
|
+
super
|
17
|
+
# TimeParser class is already given. It takes a single argument as the time format
|
18
|
+
# to parse the time string with.
|
19
|
+
@time_parser = Fluent::TextParser::TimeParser.new(@time_format)
|
20
|
+
end
|
21
|
+
|
22
|
+
def start
|
23
|
+
super
|
24
|
+
# This is the first method to be called when it starts running
|
25
|
+
# Use it to allocate resources, etc.
|
26
|
+
end
|
27
|
+
|
28
|
+
def shutdown
|
29
|
+
super
|
30
|
+
# This method is called when Fluentd is shutting down.
|
31
|
+
# Use it to free up resources, etc.
|
32
|
+
end
|
33
|
+
|
34
|
+
def filter(tag, time, record)
|
35
|
+
# This method implements the filtering logic for individual filters
|
36
|
+
# It is internal to this class and called by filter_stream unless
|
37
|
+
# the user overrides filter_stream.
|
38
|
+
#
|
39
|
+
# Since our example is a pass-thru filter, it does nothing and just
|
40
|
+
# returns the record as-is.
|
41
|
+
# If returns nil, that records are ignored.
|
42
|
+
text = record['message']
|
43
|
+
puts "TEXT: " + text
|
44
|
+
|
45
|
+
match = text.match(/^(?<log_level>[\w]+)\s(?<log_time>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\s\[(?<thread>.+)\]\s(?<position>[^:]+):\s(?<kv_pairs>.*?)\s?(?<payload>payload=.*)?$/)
|
46
|
+
|
47
|
+
if match.nil?
|
48
|
+
puts 'match is nil'
|
49
|
+
return record
|
50
|
+
end
|
51
|
+
|
52
|
+
puts '1'
|
53
|
+
if match.names.include? 'log_level'
|
54
|
+
record['mule_log_level'] = match['log_level']
|
55
|
+
end
|
56
|
+
puts '2'
|
57
|
+
if match.names.include? 'log_time'
|
58
|
+
record['mule_log_time'] = match['log_time']
|
59
|
+
end
|
60
|
+
puts '3'
|
61
|
+
if match.names.include? 'thread'
|
62
|
+
record['mule_thread'] = match['thread']
|
63
|
+
end
|
64
|
+
puts '4'
|
65
|
+
if match.names.include? 'position'
|
66
|
+
record['mule_position'] = match['position']
|
67
|
+
end
|
68
|
+
puts '5'
|
69
|
+
if match.names.include? 'kv_pairs'
|
70
|
+
kv_match = match['kv_pairs'].match(/(\w+)=([\w|-]+)\s/)
|
71
|
+
if kv_match == nil
|
72
|
+
puts 'Couldn\'t find kv pairs'
|
73
|
+
return record
|
74
|
+
end
|
75
|
+
|
76
|
+
match['kv_pairs'].split(@kv_delimiter).each { |kv|
|
77
|
+
k, v = kv.split(@kv_char, 2)
|
78
|
+
record['mule_' + k] = v
|
79
|
+
}
|
80
|
+
end
|
81
|
+
puts '6'
|
82
|
+
|
83
|
+
if (match.names.include? 'payload') && !match['payload'].nil?
|
84
|
+
puts '6.1'
|
85
|
+
k, v = match['payload'].split('=', 2)
|
86
|
+
puts '6.2'
|
87
|
+
record['mule_' + k] = v
|
88
|
+
end
|
89
|
+
|
90
|
+
puts '7'
|
91
|
+
puts 'record[log_time]: ' + record['mule_log_time']
|
92
|
+
puts 'record[log_time].nil?: ' + record['mule_log_time'].nil?.to_s
|
93
|
+
puts 'timeParse?: ' + @time_parse.to_s
|
94
|
+
if @time_parse && !record['log_time'].nil?
|
95
|
+
puts '7.1'
|
96
|
+
new_time = @time_parser.parse(record['mule_log_time'])
|
97
|
+
record.delete('time')
|
98
|
+
record['time'] = current_time
|
99
|
+
end
|
100
|
+
puts '8'
|
101
|
+
record.delete('message')
|
102
|
+
puts '9'
|
103
|
+
record
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
metadata
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fluent-plugin-mule
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.0'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rodrigo Martinez
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-12-15 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Extract entries from Mule log4j key-value pairs
|
14
|
+
email:
|
15
|
+
- rodmartinez@deloitte.com.au
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/fluent/plugin/filter_mule.rb
|
21
|
+
homepage:
|
22
|
+
licenses:
|
23
|
+
- MIT
|
24
|
+
metadata: {}
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubyforge_project:
|
41
|
+
rubygems_version: 2.0.14.1
|
42
|
+
signing_key:
|
43
|
+
specification_version: 4
|
44
|
+
summary: Fluentd filter plugin. Extract fields from Mule/Log4j formatted entries containing
|
45
|
+
key value pairs
|
46
|
+
test_files: []
|