logstash-output-scalyr 0.1.25.beta → 0.1.26.beta
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile +1 -0
- data/README.md +1 -2
- data/lib/logstash/outputs/scalyr.rb +26 -7
- data/lib/scalyr/constants.rb +1 -1
- data/logstash-output-scalyr.gemspec +3 -2
- data/spec/benchmarks/flattening_and_serialization.rb +1 -26
- data/spec/benchmarks/json_serialization.rb +85 -0
- data/spec/benchmarks/util.rb +24 -0
- data/spec/logstash/outputs/scalyr_spec.rb +54 -0
- data/vendor/bundle/jruby/2.5.0/cache/jrjackson-0.4.14-java.gem +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/Gemfile +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/Mavenfile +1 -7
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/README.md +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/Rakefile +8 -2
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/alt_bench.rb +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/changelog.md +25 -2
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/jrjackson.gemspec +2 -1
- data/vendor/bundle/jruby/2.5.0/gems/jrjackson-0.4.14-java/lib/com/fasterxml/jackson/core/jackson-annotations/2.9.10/jackson-annotations-2.9.10.jar +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/jrjackson-0.4.14-java/lib/com/fasterxml/jackson/core/jackson-core/2.9.10/jackson-core-2.9.10.jar +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/jrjackson-0.4.14-java/lib/com/fasterxml/jackson/core/jackson-databind/2.9.10.8/jackson-databind-2.9.10.8.jar +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/jrjackson-0.4.14-java/lib/com/fasterxml/jackson/module/jackson-module-afterburner/2.9.10/jackson-module-afterburner-2.9.10.jar +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/lib/jrjackson/build_info.rb +9 -5
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java/lib/jrjackson/jars/jrjackson-1.2.26.jar → jrjackson-0.4.14-java/lib/jrjackson/jars/jrjackson-1.2.32.jar} +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/lib/jrjackson/jrjackson.rb +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/lib/jrjackson.rb +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/lib/jrjackson_jars.rb +8 -8
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/lib/require_relative_patch.rb +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/pom.xml +8 -25
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/profiling/profiled.rb +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/run_all_individual_bench.sh +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/run_jruby_individual_bench.sh +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/run_mri_individual_bench.sh +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/IParseHandler.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/JavaBigDecimalValueConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/JavaBigIntValueConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/JavaConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/JavaFloatValueConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/JavaHandler.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/JavaLongValueConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/JjParse.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/JrJacksonBase.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/JrJacksonJava.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/JrJacksonRaw.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/JrJacksonRuby.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/JrJacksonSaj.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/JrJacksonSch.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/JrJacksonService.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/JrParse.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/ParseError.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyAnySerializer.java +4 -4
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyBigDecimalValueConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyBigIntValueConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyDateFormat.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyFloatValueConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyHandler.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyIntValueConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyJacksonModule.java +18 -6
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyKeyConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyNameConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyObjectDeserializer.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyStringConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyStringKeyConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyStringNameConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubySymbolKeyConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubySymbolNameConverter.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/RubyUtils.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/SajParse.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/SchParse.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/main/java/com/jrjackson/StreamParse.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/src/test/java/com/jrjackson/RubyAnySerializerTest.java +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/test/jrjackson_test.rb +15 -0
- data/vendor/bundle/jruby/2.5.0/specifications/{jrjackson-0.4.8-java.gemspec → jrjackson-0.4.14-java.gemspec} +7 -7
- metadata +97 -65
- data/vendor/bundle/jruby/2.5.0/cache/jrjackson-0.4.8-java.gem +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/jrjackson-0.4.8-java/lib/com/fasterxml/jackson/core/jackson-annotations/2.9.7/jackson-annotations-2.9.7.jar +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/jrjackson-0.4.8-java/lib/com/fasterxml/jackson/core/jackson-core/2.9.7/jackson-core-2.9.7.jar +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/jrjackson-0.4.8-java/lib/com/fasterxml/jackson/core/jackson-databind/2.9.7/jackson-databind-2.9.7.jar +0 -0
- data/vendor/bundle/jruby/2.5.0/gems/jrjackson-0.4.8-java/lib/com/fasterxml/jackson/module/jackson-module-afterburner/2.9.7/jackson-module-afterburner-2.9.7.jar +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5593e93dedad0ddb545f8911e7f1cd8cabde4043a6a76b8c5b78d99c0c4d12a5
|
4
|
+
data.tar.gz: 6c821768c3d780529d00bc1f58c4ec8841ecba2758a46c71ecf17201fb8ba3d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57901dc94f49aa844130f4b2a7ac084c95d473c1a948902b699cbaba8d63049d1e960b69b49b20cf8ffa8b2c1f5f68a53ad9687b72867799f113a384f490e01d
|
7
|
+
data.tar.gz: 329f985e8121d49bab836381861ca878c229f2b316e160792263461900a8fc4cf7f46bdc2aba889174a0f35b0c67f567b0e5a09d429f888948b788707ab3c0b7
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Beta
|
2
2
|
|
3
|
+
## 0.1.26.beta
|
4
|
+
- Add support for new ``json_library`` config option. Valid values are ``stdlib`` (default) are ``jrjackson``. The later may offer 2-4x faster JSON serialization.
|
5
|
+
|
6
|
+
|
3
7
|
## 0.1.23.beta
|
4
8
|
- Add testing support for disabling estimation of serialized event size for each event in the batch.
|
5
9
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
[![CircleCI](https://circleci.com/gh/scalyr/logstash-output-scalyr.svg?style=svg)](https://circleci.com/gh/scalyr/logstash-output-scalyr)
|
3
2
|
|
4
3
|
# [Scalyr output plugin for Logstash (Beta release)]
|
@@ -10,7 +9,7 @@ You can view documentation for this plugin [on the Scalyr website](https://app.s
|
|
10
9
|
# Quick start
|
11
10
|
|
12
11
|
1. Build the gem, run `gem build logstash-output-scalyr.gemspec`
|
13
|
-
2. Install the gem into a Logstash installation, run `/usr/share/logstash/bin/logstash-plugin install logstash-output-scalyr-0.1.
|
12
|
+
2. Install the gem into a Logstash installation, run `/usr/share/logstash/bin/logstash-plugin install logstash-output-scalyr-0.1.25.beta.gem` or follow the latest official instructions on working with plugins from Logstash.
|
14
13
|
3. Configure the output plugin (e.g. add it to a pipeline .conf)
|
15
14
|
4. Restart Logstash
|
16
15
|
|
@@ -13,6 +13,7 @@ require 'rbzip2'
|
|
13
13
|
require 'zlib'
|
14
14
|
require 'stringio'
|
15
15
|
require 'quantile'
|
16
|
+
require 'jrjackson'
|
16
17
|
|
17
18
|
require 'scalyr/common/client'
|
18
19
|
require "scalyr/common/util"
|
@@ -151,6 +152,10 @@ class LogStash::Outputs::Scalyr < LogStash::Outputs::Base
|
|
151
152
|
# Scalyr single request limit won't be reached.
|
152
153
|
config :estimate_each_event_size, :validate => :boolean, :default => true
|
153
154
|
|
155
|
+
# Library to use for JSON serialization. Valid values are "stdlib" and "jrjackson". The later may offer 2-4 performance
|
156
|
+
# improvements on serialization.
|
157
|
+
config :json_library, :validate => :string, :default => "stdlib"
|
158
|
+
|
154
159
|
# Manticore related options
|
155
160
|
config :http_connect_timeout, :validate => :number, :default => 10
|
156
161
|
config :http_socket_timeout, :validate => :number, :default => 10
|
@@ -194,6 +199,20 @@ class LogStash::Outputs::Scalyr < LogStash::Outputs::Base
|
|
194
199
|
@logger.warn("estimate_each_event_size config option is false, this means very large batches may be rejected or partially processed by the server")
|
195
200
|
end
|
196
201
|
|
202
|
+
if @json_library != "stdlib" and @json_library != "jrjackson"
|
203
|
+
raise LogStash::ConfigurationError, "json_library config option needs to be either stdlib or jrjackson"
|
204
|
+
end
|
205
|
+
|
206
|
+
if @json_library == "stdlib"
|
207
|
+
define_singleton_method "json_encode" do |data|
|
208
|
+
data.to_json
|
209
|
+
end
|
210
|
+
elsif @json_library == "jrjackson"
|
211
|
+
define_singleton_method "json_encode" do |data|
|
212
|
+
JrJackson::Json.dump(data)
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
197
216
|
@dlq_writer = dlq_enabled? ? execution_context.dlq_writer : nil
|
198
217
|
|
199
218
|
@message_encoding = nil
|
@@ -685,10 +704,10 @@ class LogStash::Outputs::Scalyr < LogStash::Outputs::Base
|
|
685
704
|
if @estimate_each_event_size
|
686
705
|
# get json string of event to keep track of how many bytes we are sending
|
687
706
|
begin
|
688
|
-
event_json = scalyr_event
|
707
|
+
event_json = self.json_encode(scalyr_event)
|
689
708
|
log_json = nil
|
690
709
|
if add_log
|
691
|
-
log_json = logs[log_identifier]
|
710
|
+
log_json = self.json_encode(logs[log_identifier])
|
692
711
|
end
|
693
712
|
rescue JSON::GeneratorError, Encoding::UndefinedConversionError => e
|
694
713
|
@logger.warn "#{e.class}: #{e.message}"
|
@@ -704,7 +723,7 @@ class LogStash::Outputs::Scalyr < LogStash::Outputs::Base
|
|
704
723
|
"UTF-8", :invalid => :replace, :undef => :replace, :replace => "<?>"
|
705
724
|
).force_encoding('UTF-8')
|
706
725
|
end
|
707
|
-
event_json = scalyr_event
|
726
|
+
event_json = self.json_encode(scalyr_event)
|
708
727
|
rescue Java::JavaLang::ClassCastException => e
|
709
728
|
# Most likely we ran into the issue described here: https://github.com/flori/json/issues/336
|
710
729
|
# Because of the version of jruby logstash works with we don't have the option to just update this away,
|
@@ -715,10 +734,10 @@ class LogStash::Outputs::Scalyr < LogStash::Outputs::Base
|
|
715
734
|
@multi_receive_statistics[:total_java_class_cast_errors] += 1
|
716
735
|
end
|
717
736
|
Scalyr::Common::Util.convert_bignums(scalyr_event)
|
718
|
-
event_json = scalyr_event
|
737
|
+
event_json = self.json_encode(scalyr_event)
|
719
738
|
log_json = nil
|
720
739
|
if add_log
|
721
|
-
log_json = logs[log_identifier]
|
740
|
+
log_json = self.json_encode(logs[log_identifier])
|
722
741
|
end
|
723
742
|
end
|
724
743
|
|
@@ -819,14 +838,14 @@ class LogStash::Outputs::Scalyr < LogStash::Outputs::Base
|
|
819
838
|
# We time serialization to get some insight on how long it takes to serialize the request body
|
820
839
|
start_time = Time.now.to_f
|
821
840
|
begin
|
822
|
-
serialized_body = body
|
841
|
+
serialized_body = self.json_encode(body)
|
823
842
|
rescue Java::JavaLang::ClassCastException => e
|
824
843
|
@logger.warn("Error serializing events to JSON, likely due to the presence of Bignum values. Converting Bignum values to strings.")
|
825
844
|
@stats_lock.synchronize do
|
826
845
|
@multi_receive_statistics[:total_java_class_cast_errors] += 1
|
827
846
|
end
|
828
847
|
Scalyr::Common::Util.convert_bignums(body)
|
829
|
-
serialized_body = body
|
848
|
+
serialized_body = self.json_encode(body)
|
830
849
|
end
|
831
850
|
end_time = Time.now.to_f
|
832
851
|
serialization_duration = end_time - start_time
|
data/lib/scalyr/constants.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
PLUGIN_VERSION = "v0.1.
|
2
|
+
PLUGIN_VERSION = "v0.1.26.beta"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-output-scalyr'
|
3
|
-
s.version = '0.1.
|
3
|
+
s.version = '0.1.26.beta'
|
4
4
|
s.licenses = ['Apache-2.0']
|
5
5
|
s.summary = "Scalyr output plugin for Logstash"
|
6
6
|
s.description = "Sends log data collected by Logstash to Scalyr (https://www.scalyr.com)"
|
@@ -18,11 +18,12 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.metadata = { "logstash_plugin" => "true", "logstash_group" => "output" }
|
19
19
|
|
20
20
|
# Gem dependencies
|
21
|
-
#
|
22
21
|
s.add_runtime_dependency 'net-http-persistent'
|
23
22
|
s.add_runtime_dependency 'logstash-core-plugin-api', '>= 1.60', '<= 2.99'
|
24
23
|
s.add_runtime_dependency 'logstash-codec-plain'
|
25
24
|
s.add_runtime_dependency 'quantile'
|
25
|
+
s.add_runtime_dependency 'jrjackson'
|
26
|
+
s.add_runtime_dependency 'manticore'
|
26
27
|
s.add_runtime_dependency 'ffi', '>= 1.9.18'
|
27
28
|
s.add_runtime_dependency 'rbzip2', '0.3.0'
|
28
29
|
s.add_development_dependency 'logstash-devutils'
|
@@ -2,6 +2,7 @@ require 'benchmark'
|
|
2
2
|
require 'json'
|
3
3
|
|
4
4
|
require_relative '../../lib/scalyr/common/util'
|
5
|
+
require_relative './util'
|
5
6
|
|
6
7
|
# NOTE: When using jRuby using multiple iterations with the same dataset doesn't make
|
7
8
|
# sense since it will just use JITed version of the code which will be very fast. If we
|
@@ -9,31 +10,6 @@ require_relative '../../lib/scalyr/common/util'
|
|
9
10
|
# input data for each iteration.
|
10
11
|
ITERATIONS = 500
|
11
12
|
|
12
|
-
def rand_str(len)
|
13
|
-
return (0...len).map { (65 + rand(26)).chr }.join
|
14
|
-
end
|
15
|
-
|
16
|
-
def generate_hash(widths)
|
17
|
-
result = {}
|
18
|
-
if widths.empty?
|
19
|
-
return rand_str(20)
|
20
|
-
else
|
21
|
-
widths[0].times do
|
22
|
-
result[rand_str(9)] = generate_hash(widths[1..widths.length])
|
23
|
-
end
|
24
|
-
return result
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def generate_data_array_for_spec(spec)
|
29
|
-
data = []
|
30
|
-
ITERATIONS.times do
|
31
|
-
data << generate_hash(spec)
|
32
|
-
end
|
33
|
-
|
34
|
-
data
|
35
|
-
end
|
36
|
-
|
37
13
|
def run_benchmark_and_print_results(data, run_benchmark_func)
|
38
14
|
puts ""
|
39
15
|
puts "Using %s total keys in a hash" % [Scalyr::Common::Util.flatten(data[0]).count]
|
@@ -70,7 +46,6 @@ DATASETS = {
|
|
70
46
|
:keys_2700 => generate_data_array_for_spec([14, 8, 6, 4])
|
71
47
|
}
|
72
48
|
|
73
|
-
|
74
49
|
puts "Using %s iterations" % [ITERATIONS]
|
75
50
|
puts ""
|
76
51
|
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'benchmark'
|
2
|
+
require 'json'
|
3
|
+
require 'jrjackson'
|
4
|
+
|
5
|
+
require_relative '../../lib/scalyr/common/util'
|
6
|
+
require_relative './util'
|
7
|
+
|
8
|
+
ITERATIONS = 500
|
9
|
+
|
10
|
+
def json_serialize_data_native(data)
|
11
|
+
data.to_json
|
12
|
+
end
|
13
|
+
|
14
|
+
def json_serialize_data_jrjackson(data)
|
15
|
+
JrJackson::Json.dump(data)
|
16
|
+
end
|
17
|
+
|
18
|
+
DATASETS = {
|
19
|
+
:keys_50 => generate_data_array_for_spec([3, 3, 3, 2]),
|
20
|
+
:keys_200 => generate_data_array_for_spec([4, 4, 3, 4]),
|
21
|
+
:keys_200_flat => generate_data_array_for_spec([200]),
|
22
|
+
:keys_512 => generate_data_array_for_spec([8, 4, 4, 4]),
|
23
|
+
:keys_960 => generate_data_array_for_spec([12, 5, 4, 4]),
|
24
|
+
:keys_2700 => generate_data_array_for_spec([14, 8, 6, 4])
|
25
|
+
}
|
26
|
+
|
27
|
+
def run_benchmark_and_print_results(data, run_benchmark_func)
|
28
|
+
puts ""
|
29
|
+
puts "Using %s total keys in a hash" % [Scalyr::Common::Util.flatten(data[0]).count]
|
30
|
+
puts ""
|
31
|
+
|
32
|
+
result = []
|
33
|
+
ITERATIONS.times do |i|
|
34
|
+
result << Benchmark.measure { run_benchmark_func.(data[0]) }
|
35
|
+
end
|
36
|
+
|
37
|
+
sum = result.inject(nil) { |sum, t| sum.nil? ? sum = t : sum += t }
|
38
|
+
avg = sum / result.size
|
39
|
+
|
40
|
+
Benchmark.bm(7, "sum:", "avg:") do |b|
|
41
|
+
[sum, avg]
|
42
|
+
end
|
43
|
+
puts ""
|
44
|
+
end
|
45
|
+
|
46
|
+
puts "Using %s iterations" % [ITERATIONS]
|
47
|
+
puts ""
|
48
|
+
|
49
|
+
puts "native"
|
50
|
+
puts "==============================="
|
51
|
+
|
52
|
+
# Around ~50 keys in a hash
|
53
|
+
data = DATASETS[:keys_50]
|
54
|
+
run_benchmark_and_print_results(data, method(:json_serialize_data_native))
|
55
|
+
|
56
|
+
# Around ~200 keys in a hash
|
57
|
+
data = DATASETS[:keys_200]
|
58
|
+
run_benchmark_and_print_results(data, method(:json_serialize_data_native))
|
59
|
+
|
60
|
+
# Around ~200 keys in a hash (single level)
|
61
|
+
data = DATASETS[:keys_200_flat]
|
62
|
+
run_benchmark_and_print_results(data, method(:json_serialize_data_native))
|
63
|
+
|
64
|
+
# Around ~2700 keys in a hash
|
65
|
+
data = DATASETS[:keys_2700]
|
66
|
+
run_benchmark_and_print_results(data, method(:json_serialize_data_native))
|
67
|
+
|
68
|
+
puts "jrjackson"
|
69
|
+
puts "==============================="
|
70
|
+
|
71
|
+
# Around ~50 keys in a hash
|
72
|
+
data = DATASETS[:keys_50]
|
73
|
+
run_benchmark_and_print_results(data, method(:json_serialize_data_jrjackson))
|
74
|
+
|
75
|
+
# Around ~200 keys in a hash
|
76
|
+
data = DATASETS[:keys_200]
|
77
|
+
run_benchmark_and_print_results(data, method(:json_serialize_data_jrjackson))
|
78
|
+
|
79
|
+
# Around ~200 keys in a hash (single level)
|
80
|
+
data = DATASETS[:keys_200_flat]
|
81
|
+
run_benchmark_and_print_results(data, method(:json_serialize_data_jrjackson))
|
82
|
+
|
83
|
+
# Around ~2700 keys in a hash
|
84
|
+
data = DATASETS[:keys_2700]
|
85
|
+
run_benchmark_and_print_results(data, method(:json_serialize_data_jrjackson))
|
@@ -0,0 +1,24 @@
|
|
1
|
+
def rand_str(len)
|
2
|
+
return (0...len).map { (65 + rand(26)).chr }.join
|
3
|
+
end
|
4
|
+
|
5
|
+
def generate_hash(widths)
|
6
|
+
result = {}
|
7
|
+
if widths.empty?
|
8
|
+
return rand_str(20)
|
9
|
+
else
|
10
|
+
widths[0].times do
|
11
|
+
result[rand_str(9)] = generate_hash(widths[1..widths.length])
|
12
|
+
end
|
13
|
+
return result
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def generate_data_array_for_spec(spec)
|
18
|
+
data = []
|
19
|
+
ITERATIONS.times do
|
20
|
+
data << generate_hash(spec)
|
21
|
+
end
|
22
|
+
|
23
|
+
data
|
24
|
+
end
|
@@ -60,6 +60,7 @@ describe LogStash::Outputs::Scalyr do
|
|
60
60
|
'log_constants' => ['tags'],
|
61
61
|
'flatten_nested_values' => true,
|
62
62
|
})
|
63
|
+
plugin.register
|
63
64
|
|
64
65
|
mock_client_session = MockClientSession.new
|
65
66
|
|
@@ -75,6 +76,7 @@ describe LogStash::Outputs::Scalyr do
|
|
75
76
|
'log_constants' => ['tags'],
|
76
77
|
'flatten_nested_values' => false,
|
77
78
|
})
|
79
|
+
plugin1.register()
|
78
80
|
mock_client_session = MockClientSession.new
|
79
81
|
plugin1.instance_variable_set(:@last_status_transmit_time, 100)
|
80
82
|
plugin1.instance_variable_set(:@client_session, mock_client_session)
|
@@ -582,5 +584,57 @@ describe LogStash::Outputs::Scalyr do
|
|
582
584
|
expect(plugin.instance_variable_get(:@logger)).to_not receive(:error)
|
583
585
|
end
|
584
586
|
end
|
587
|
+
|
588
|
+
context "when using custom json library" do
|
589
|
+
it "stdlib (implicit)" do
|
590
|
+
config = {
|
591
|
+
'api_write_token' => '1234',
|
592
|
+
}
|
593
|
+
plugin = LogStash::Outputs::Scalyr.new(config)
|
594
|
+
|
595
|
+
allow(plugin).to receive(:send_status).and_return(nil)
|
596
|
+
plugin.register
|
597
|
+
e = LogStash::Event.new
|
598
|
+
e.set('bignumber', 20)
|
599
|
+
result = plugin.build_multi_event_request_array([e])
|
600
|
+
body = JSON.parse(result[0][:body])
|
601
|
+
expect(result[0][:body]).to include('{"monitor":"pluginLogstash"}')
|
602
|
+
expect(body['events'].size).to eq(1)
|
603
|
+
end
|
604
|
+
|
605
|
+
it "stdlib (explicit)" do
|
606
|
+
config = {
|
607
|
+
'api_write_token' => '1234',
|
608
|
+
'json_library' => 'stdlib'
|
609
|
+
}
|
610
|
+
plugin = LogStash::Outputs::Scalyr.new(config)
|
611
|
+
|
612
|
+
allow(plugin).to receive(:send_status).and_return(nil)
|
613
|
+
plugin.register
|
614
|
+
e = LogStash::Event.new
|
615
|
+
e.set('bignumber', 20)
|
616
|
+
result = plugin.build_multi_event_request_array([e])
|
617
|
+
body = JSON.parse(result[0][:body])
|
618
|
+
expect(result[0][:body]).to include('{"monitor":"pluginLogstash"}')
|
619
|
+
expect(body['events'].size).to eq(1)
|
620
|
+
end
|
621
|
+
|
622
|
+
it "jrjackson" do
|
623
|
+
config = {
|
624
|
+
'api_write_token' => '1234',
|
625
|
+
'json_library' => 'jrjackson'
|
626
|
+
}
|
627
|
+
plugin = LogStash::Outputs::Scalyr.new(config)
|
628
|
+
|
629
|
+
allow(plugin).to receive(:send_status).and_return(nil)
|
630
|
+
plugin.register
|
631
|
+
e = LogStash::Event.new
|
632
|
+
e.set('bignumber', 20)
|
633
|
+
result = plugin.build_multi_event_request_array([e])
|
634
|
+
body = JSON.parse(result[0][:body])
|
635
|
+
expect(result[0][:body]).to include('{"monitor":"pluginLogstash"}')
|
636
|
+
expect(body['events'].size).to eq(1)
|
637
|
+
end
|
638
|
+
end
|
585
639
|
end
|
586
640
|
end
|
Binary file
|
File without changes
|
data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/Mavenfile
RENAMED
@@ -14,7 +14,7 @@ properties 'project.build.sourceEncoding' => 'UTF-8',
|
|
14
14
|
|
15
15
|
jar 'junit:junit', '4.11', :scope => :test
|
16
16
|
|
17
|
-
jar 'org.jruby:jruby', '9.2.
|
17
|
+
jar 'org.jruby:jruby', '9.2.13.0', :scope => :provided
|
18
18
|
|
19
19
|
plugin :compiler, '3.1', :source => '1.8', :target => '1.8',
|
20
20
|
:showDeprecation => false,
|
@@ -23,9 +23,3 @@ plugin :compiler, '3.1', :source => '1.8', :target => '1.8',
|
|
23
23
|
:fork => true
|
24
24
|
|
25
25
|
plugin :surefire, '2.17', :skipTests => true
|
26
|
-
|
27
|
-
# since bundle install does not vendor our jars we need to it manually
|
28
|
-
plugin 'org.torquebox.mojo:jruby9-exec-maven-plugin', '0.3.1' do
|
29
|
-
execute_goal :exec, :id => 'vendor-jars', :phase => 'prepare-package',
|
30
|
-
:script => "require 'jars/installer';Jars::Installer.vendor_jars!"
|
31
|
-
end
|
data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/README.md
RENAMED
File without changes
|
@@ -10,12 +10,19 @@ end
|
|
10
10
|
|
11
11
|
desc "Run benchmarks"
|
12
12
|
task :benchmark do
|
13
|
-
load 'benchmarking/
|
13
|
+
load 'benchmarking/benchmark_threaded.rb'
|
14
14
|
end
|
15
15
|
|
16
16
|
desc "Pack jar after compiling classes, use this to rebuild the pom.xml"
|
17
17
|
task :compile do
|
18
18
|
RubyMaven.exec('prepare-package')
|
19
|
+
# after packaging the jrjackson-x.y.z.jar vendor jar dependencies
|
20
|
+
Rake::Task['vendor_jars'].invoke
|
21
|
+
end
|
22
|
+
|
23
|
+
task :vendor_jars do
|
24
|
+
require 'jars/installer'
|
25
|
+
Jars::Installer.vendor_jars!
|
19
26
|
end
|
20
27
|
|
21
28
|
desc "Clean build"
|
@@ -30,4 +37,3 @@ Gem::PackageTask.new( eval File.read( 'jrjackson.gemspec' ) ) do
|
|
30
37
|
desc 'Pack gem'
|
31
38
|
task :package => [:compile]
|
32
39
|
end
|
33
|
-
|