fluent-plugin-sumologic_output 0.0.6 → 0.0.7

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
  SHA1:
3
- metadata.gz: 0b2260d6a95c18397cc58bb448924c2a24f3c28c
4
- data.tar.gz: 1276401aa4df5460ee70dfb4424202874800e997
3
+ metadata.gz: 49e311e7b4512f25f99942f69fdf4c90405d2351
4
+ data.tar.gz: ff095f8c1176898c8a7f97c65abc5a0c816f88db
5
5
  SHA512:
6
- metadata.gz: '09326bd5f95564b91f9d124ce397c292d2069734e3e75bd0d2b73de4cb09389ee903dbbbbad177d299d527d6c8c68dc723fd5d69727f7eaa92ffef223b610b07'
7
- data.tar.gz: 80c274b634f568abe34b5eaaeb9521b6407181af7244229fd2c0f5bd28eb58e7ed1435348c67603fcf21dce6d773758d0508da4402ad4d24733d44a19221f058
6
+ metadata.gz: 7c2c9c4a24a557cecb6e426b5069d5dfa6f6750996a262f8448cd5d79ec7192836ee1c9a0c332c93b2cd54596d48f01e0d032c8ff9b7777ca2ba939d7ba1c20e
7
+ data.tar.gz: 472fb4fa5312d2734704164e49b073a1b44e378690c9471c95be6f7696103f4e1daf6304c124353c6de128cd46986eda808fa91e41cecab154da1ceab5efc76c
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/README.md CHANGED
@@ -21,6 +21,7 @@ Configuration options for fluent.conf are:
21
21
  * json - Logs will appear in SumoLogic in json format.
22
22
  * json_merge - Same as json but merge content of `log_key` into the top level and strip `log_key`
23
23
  * `log_key` - Used to specify the key when merging json or sending logs in text format (default `message`)
24
+ * `open_timeout` - Set timeout seconds to wait until connection is opened.
24
25
 
25
26
  Reading from the JSON formatted log files with `in_tail` and wildcard filenames:
26
27
  ```
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new(:test) do |test|
5
+ test.libs << 'test'
6
+ test.pattern = 'test/**/test_*.rb'
7
+ test.verbose = true
8
+ test.warning = false
9
+ end
10
+
11
+ task :default => :test
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = "fluent-plugin-sumologic_output"
7
- gem.version = "0.0.6"
7
+ gem.version = "0.0.7"
8
8
  gem.authors = ["Steven Adams"]
9
9
  gem.email = ["stevezau@gmail.com"]
10
10
  gem.description = %q{Output plugin to SumoLogic HTTP Endpoint}
@@ -23,4 +23,5 @@ Gem::Specification.new do |gem|
23
23
  gem.add_development_dependency "bundler", "~> 1.3"
24
24
  gem.add_development_dependency "rake"
25
25
  gem.add_runtime_dependency "fluentd"
26
+ gem.add_development_dependency 'test-unit', '~> 3.1.0'
26
27
  end
@@ -3,9 +3,10 @@ require 'net/https'
3
3
  require 'yajl'
4
4
 
5
5
  class SumologicConnection
6
- def initialize(endpoint, verify_ssl)
6
+ def initialize(endpoint, verify_ssl, open_timeout)
7
7
  @endpoint_uri = URI.parse(endpoint.strip)
8
8
  @verify_ssl = verify_ssl
9
+ @open_timeout = open_timeout
9
10
  end
10
11
 
11
12
  def publish(raw_data, source_host=nil, source_category=nil, source_name=nil)
@@ -30,6 +31,7 @@ class SumologicConnection
30
31
  client = Net::HTTP.new(@endpoint_uri.host, @endpoint_uri.port)
31
32
  client.use_ssl = true
32
33
  client.verify_mode = @verify_ssl ? OpenSSL::SSL::VERIFY_PEER : OpenSSL::SSL::VERIFY_NONE
34
+ client.open_timeout = @open_timeout
33
35
  client
34
36
  end
35
37
  end
@@ -47,6 +49,8 @@ class Sumologic < Fluent::BufferedOutput
47
49
  config_param :source_name_key, :string, :default => 'source_name'
48
50
  config_param :source_host, :string, :default => nil
49
51
  config_param :verify_ssl, :bool, :default => true
52
+ config_param :delimiter, :string, :default => "."
53
+ config_param :open_timeout, :integer, :default => 60
50
54
 
51
55
  # This method is called before starting.
52
56
  def configure(conf)
@@ -58,7 +62,7 @@ class Sumologic < Fluent::BufferedOutput
58
62
  raise Fluent::ConfigError, "Invalid log_format #{conf['log_format']} must be text, json or json_merge"
59
63
  end
60
64
 
61
- @sumo_conn = SumologicConnection.new(conf['endpoint'], @verify_ssl)
65
+ @sumo_conn = SumologicConnection.new(conf['endpoint'], conf['verify_ssl'], conf['open_timeout'].to_i)
62
66
  super
63
67
  end
64
68
 
@@ -98,10 +102,16 @@ class Sumologic < Fluent::BufferedOutput
98
102
  [tag, time, record].to_msgpack
99
103
  end
100
104
 
101
- def sumo_key(sumo)
102
- source_name = sumo['source'] || @source_name
103
- source_category = sumo['category'] || @source_category
104
- source_host = sumo['host'] || @source_host
105
+ def sumo_key(sumo_metadata, record, tag)
106
+ source_name = sumo_metadata['source'] || @source_name
107
+ source_name = expand_param(source_name, tag, nil, record)
108
+
109
+ source_category = sumo_metadata['category'] || @source_category
110
+ source_category = expand_param(source_category, tag, nil, record)
111
+
112
+ source_host = sumo_metadata['host'] || @source_host
113
+ source_host = expand_param(source_host, tag, nil, record)
114
+
105
115
  "#{source_name}:#{source_category}:#{source_host}"
106
116
  end
107
117
 
@@ -110,6 +120,35 @@ class Sumologic < Fluent::BufferedOutput
110
120
  time.to_s.length == 13 ? time : time * 1000
111
121
  end
112
122
 
123
+ # copy from https://github.com/uken/fluent-plugin-elasticsearch/commit/1722c58758b4da82f596ecb0a5075d3cb6c99b2e#diff-33bfa932bf1443760673c69df745272eR221
124
+ def expand_param(param, tag, time, record)
125
+ # check for '${ ... }'
126
+ # yes => `eval`
127
+ # no => return param
128
+ return param if (param =~ /\${.+}/).nil?
129
+
130
+ # check for 'tag_parts[]'
131
+ # separated by a delimiter (default '.')
132
+ tag_parts = tag.split(@delimiter) unless (param =~ /tag_parts\[.+\]/).nil? || tag.nil?
133
+
134
+ # pull out section between ${} then eval
135
+ inner = param.clone
136
+ while inner.match(/\${.+}/)
137
+ to_eval = inner.match(/\${(.+?)}/){$1}
138
+
139
+ if !(to_eval =~ /record\[.+\]/).nil? && record.nil?
140
+ return to_eval
141
+ elsif !(to_eval =~/tag_parts\[.+\]/).nil? && tag_parts.nil?
142
+ return to_eval
143
+ elsif !(to_eval =~/time/).nil? && time.nil?
144
+ return to_eval
145
+ else
146
+ inner.sub!(/\${.+?}/, eval( to_eval ))
147
+ end
148
+ end
149
+ inner
150
+ end
151
+
113
152
  # This method is called every flush interval. Write the buffer chunk
114
153
  def write(chunk)
115
154
  messages_list = {}
@@ -120,7 +159,7 @@ class Sumologic < Fluent::BufferedOutput
120
159
  # https://github.com/uken/fluent-plugin-elasticsearch/commit/8597b5d1faf34dd1f1523bfec45852d380b26601#diff-ae62a005780cc730c558e3e4f47cc544R94
121
160
  next unless record.is_a? Hash
122
161
  sumo_metadata = record.fetch('_sumo_metadata', {'source' => record[@source_name_key]})
123
- key = sumo_key(sumo_metadata)
162
+ key = sumo_key(sumo_metadata, record, tag)
124
163
  log_format = sumo_metadata['log_format'] || @log_format
125
164
 
126
165
  # Strip any unwanted newlines
data/test/helper.rb ADDED
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require 'fluent/test'
@@ -0,0 +1,41 @@
1
+ require 'helper'
2
+ require 'fluent/test/driver/output'
3
+
4
+ class SumologicOutput < Test::Unit::TestCase
5
+ def setup
6
+ Fluent::Test.setup
7
+ require 'fluent/plugin/out_sumologic'
8
+ @driver = nil
9
+ log = Fluent::Engine.log
10
+ log.out.logs.slice!(0, log.out.logs.length)
11
+ end
12
+
13
+ def driver(conf='')
14
+ @driver ||= Fluent::Test::Driver::Output.new(Sumologic).configure(conf)
15
+ end
16
+
17
+ def test_configure
18
+ config = %{
19
+ endpoint https://SUMOLOGIC_URL
20
+ log_format text
21
+ log_key LOG_KEY
22
+ source_category SOURCE_CATEGORY
23
+ source_name SOURCE_NAME
24
+ source_name_key SOURCE_NAME_KEY
25
+ source_host SOURCE_HOST
26
+ verify_ssl false
27
+ open_timeout 10
28
+ }
29
+ instance = driver(config).instance
30
+
31
+ assert_equal instance.endpoint, 'https://SUMOLOGIC_URL'
32
+ assert_equal instance.log_format, 'text'
33
+ assert_equal instance.log_key, 'LOG_KEY'
34
+ assert_equal instance.source_category, 'SOURCE_CATEGORY'
35
+ assert_equal instance.source_name, 'SOURCE_NAME'
36
+ assert_equal instance.source_name_key, 'SOURCE_NAME_KEY'
37
+ assert_equal instance.source_host, 'SOURCE_HOST'
38
+ assert_equal instance.verify_ssl, false
39
+ assert_equal instance.open_timeout, 10
40
+ end
41
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-sumologic_output
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Adams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-23 00:00:00.000000000 Z
11
+ date: 2017-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: test-unit
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 3.1.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 3.1.0
55
69
  description: Output plugin to SumoLogic HTTP Endpoint
56
70
  email:
57
71
  - stevezau@gmail.com
@@ -60,10 +74,14 @@ extensions: []
60
74
  extra_rdoc_files: []
61
75
  files:
62
76
  - ".gitignore"
77
+ - Gemfile
63
78
  - LICENSE
64
79
  - README.md
80
+ - Rakefile
65
81
  - fluent-plugin-sumologic_output.gemspec
66
82
  - lib/fluent/plugin/out_sumologic.rb
83
+ - test/helper.rb
84
+ - test/plugin/test_out_sumologic.rb
67
85
  homepage: https://github.com/SumoLogic/fluentd-output-sumologic
68
86
  licenses:
69
87
  - Apache-2.0
@@ -88,4 +106,6 @@ rubygems_version: 2.6.12
88
106
  signing_key:
89
107
  specification_version: 4
90
108
  summary: Output plugin to SumoLogic HTTP Endpoint
91
- test_files: []
109
+ test_files:
110
+ - test/helper.rb
111
+ - test/plugin/test_out_sumologic.rb