logstash-output-scalyr 0.1.25.beta → 0.2.1.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -0
  3. data/Gemfile +4 -0
  4. data/README.md +127 -4
  5. data/lib/logstash/outputs/scalyr.rb +205 -39
  6. data/lib/scalyr/common/client.rb +10 -1
  7. data/lib/scalyr/common/util.rb +28 -1
  8. data/lib/scalyr/constants.rb +4 -1
  9. data/logstash-output-scalyr.gemspec +3 -2
  10. data/spec/benchmarks/bignum_fixing.rb +2 -5
  11. data/spec/benchmarks/flattening_and_serialization.rb +2 -27
  12. data/spec/benchmarks/json_serialization.rb +85 -0
  13. data/spec/benchmarks/set_session_level_serverhost_on_events.rb +107 -0
  14. data/spec/benchmarks/util.rb +24 -0
  15. data/spec/logstash/outputs/scalyr_integration_spec.rb +63 -16
  16. data/spec/logstash/outputs/scalyr_spec.rb +523 -15
  17. data/spec/scalyr/common/util_spec.rb +4 -0
  18. data/vendor/bundle/jruby/2.5.0/cache/jrjackson-0.4.14-java.gem +0 -0
  19. data/vendor/bundle/jruby/2.5.0/cache/json-1.8.6-java.gem +0 -0
  20. data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/Gemfile +0 -0
  21. data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/Mavenfile +1 -7
  22. data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/README.md +0 -0
  23. data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/Rakefile +8 -2
  24. data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/alt_bench.rb +0 -0
  25. data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/changelog.md +25 -2
  26. data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/jrjackson.gemspec +2 -1
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/lib/jrjackson/jrjackson.rb +0 -0
  34. data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/lib/jrjackson.rb +0 -0
  35. data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/lib/jrjackson_jars.rb +8 -8
  36. 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
  37. data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/pom.xml +8 -25
  38. data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/profiling/profiled.rb +0 -0
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  55. 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
  56. 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
  57. 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
  58. 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
  59. 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
  60. 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
  61. 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
  62. 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
  63. 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
  64. 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
  65. 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
  66. 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
  67. 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
  68. 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
  69. 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
  70. 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
  71. 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
  72. 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
  73. 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
  74. 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
  75. 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
  76. 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
  77. 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
  78. 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
  79. 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
  80. 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
  81. data/vendor/bundle/jruby/2.5.0/gems/{jrjackson-0.4.8-java → jrjackson-0.4.14-java}/test/jrjackson_test.rb +15 -0
  82. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/add/bigdecimal.rb +28 -0
  83. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/add/complex.rb +28 -0
  84. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/add/core.rb +11 -0
  85. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/add/date.rb +34 -0
  86. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/add/date_time.rb +50 -0
  87. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/add/exception.rb +31 -0
  88. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/add/ostruct.rb +31 -0
  89. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/add/range.rb +29 -0
  90. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/add/rational.rb +27 -0
  91. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/add/regexp.rb +30 -0
  92. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/add/struct.rb +30 -0
  93. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/add/symbol.rb +25 -0
  94. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/add/time.rb +38 -0
  95. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/common.rb +484 -0
  96. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/ext/generator.jar +0 -0
  97. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/ext/parser.jar +0 -0
  98. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/ext.rb +21 -0
  99. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/generic_object.rb +70 -0
  100. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/pure/generator.rb +530 -0
  101. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/pure/parser.rb +359 -0
  102. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/pure.rb +21 -0
  103. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json/version.rb +8 -0
  104. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/lib/json.rb +62 -0
  105. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail1.json +1 -0
  106. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail10.json +1 -0
  107. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail11.json +1 -0
  108. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail12.json +1 -0
  109. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail13.json +1 -0
  110. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail14.json +1 -0
  111. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail18.json +1 -0
  112. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail19.json +1 -0
  113. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail2.json +1 -0
  114. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail20.json +1 -0
  115. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail21.json +1 -0
  116. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail22.json +1 -0
  117. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail23.json +1 -0
  118. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail24.json +1 -0
  119. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail25.json +1 -0
  120. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail27.json +2 -0
  121. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail28.json +2 -0
  122. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail3.json +1 -0
  123. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail4.json +1 -0
  124. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail5.json +1 -0
  125. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail6.json +1 -0
  126. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail7.json +1 -0
  127. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail8.json +1 -0
  128. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/fail9.json +1 -0
  129. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/pass1.json +56 -0
  130. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/pass15.json +1 -0
  131. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/pass16.json +1 -0
  132. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/pass17.json +1 -0
  133. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/pass2.json +1 -0
  134. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/pass26.json +1 -0
  135. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/fixtures/pass3.json +6 -0
  136. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/setup_variant.rb +11 -0
  137. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/test_json.rb +519 -0
  138. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/test_json_addition.rb +196 -0
  139. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/test_json_encoding.rb +65 -0
  140. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/test_json_fixtures.rb +35 -0
  141. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/test_json_generate.rb +348 -0
  142. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/test_json_generic_object.rb +75 -0
  143. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/test_json_string_matching.rb +39 -0
  144. data/vendor/bundle/jruby/2.5.0/gems/json-1.8.6-java/tests/test_json_unicode.rb +72 -0
  145. data/vendor/bundle/jruby/2.5.0/specifications/{jrjackson-0.4.8-java.gemspec → jrjackson-0.4.14-java.gemspec} +7 -7
  146. data/vendor/bundle/jruby/2.5.0/specifications/json-1.8.6-java.gemspec +37 -0
  147. metadata +165 -66
  148. data/vendor/bundle/jruby/2.5.0/cache/jrjackson-0.4.8-java.gem +0 -0
  149. 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
  150. 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
  151. 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
  152. 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
@@ -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[i]) }
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,107 @@
1
+ require 'benchmark'
2
+ require 'quantile'
3
+
4
+ require_relative '../../lib/scalyr/constants'
5
+ require_relative '../../lib/scalyr/common/util'
6
+ require_relative './util'
7
+
8
+ # Micro benchmark which measures how long "set_session_level_serverhost_on_events" takes
9
+
10
+ ITERATIONS = 100
11
+
12
+ def run_benchmark_and_print_results(data, run_benchmark_func)
13
+ puts ""
14
+ puts "Using %s total events in a batch" % [data[0].size]
15
+ puts ""
16
+
17
+ result = []
18
+ ITERATIONS.times do |i|
19
+ result << Benchmark.measure { run_benchmark_func.(data[i]) }
20
+ end
21
+
22
+ sum = result.inject(nil) { |sum, t| sum.nil? ? sum = t : sum += t }
23
+ avg = sum / result.size
24
+
25
+ Benchmark.bm(7, "sum:", "avg:") do |b|
26
+ [sum, avg]
27
+ end
28
+ puts ""
29
+ end
30
+
31
+ # Generate random event with only single event having special server host attribute set which
32
+ # represents a worst case scenario since we need to backfill rest of the events.
33
+ def generate_events(count)
34
+ result = []
35
+
36
+ ITERATIONS.times do |iteration|
37
+ events = []
38
+
39
+ count.times do |index|
40
+ event = generate_hash([2])
41
+ event[:attrs] = Hash.new
42
+ event[:log] = 1
43
+
44
+ if index == count - 1
45
+ event[:attrs][EVENT_LEVEL_SERVER_HOST_ATTRIBUTE_NAME] = format("test-host-%s", index)
46
+ end
47
+
48
+ events << event
49
+ end
50
+
51
+ raise "Assertion failed" unless events.size == count
52
+
53
+ result << events
54
+ end
55
+
56
+ raise "Assertion failed" unless result.size == ITERATIONS
57
+ result
58
+ end
59
+
60
+ def run_func(events)
61
+ # NOTE: This function manipulates events in place
62
+ events.each_with_index do |event, index|
63
+ if index < events.size - 1
64
+ # Last event will have _origServerHost set, but others won't
65
+ raise "Assertion failed" unless event[:attrs][EVENT_LEVEL_SERVER_HOST_ATTRIBUTE_NAME].nil?
66
+ end
67
+ end
68
+
69
+ Scalyr::Common::Util.set_session_level_serverhost_on_events("session-server-host-dummy", events, {}, true)
70
+
71
+ events.each do |event|
72
+ raise "Assertion failed" unless event[:attrs][EVENT_LEVEL_SERVER_HOST_ATTRIBUTE_NAME].nil? == false
73
+ end
74
+ end
75
+
76
+
77
+ puts "Using %s iterations" % [ITERATIONS]
78
+ puts ""
79
+
80
+ @value = Quantile::Estimator.new
81
+
82
+ puts "Util.set_session_level_serverhost_on_events()"
83
+ puts "==============================="
84
+
85
+ # 100 events in a batch
86
+ data = generate_events(100)
87
+ run_benchmark_and_print_results(data, method(:run_func))
88
+
89
+ # 500 events in a batch
90
+ data = generate_events(500)
91
+ run_benchmark_and_print_results(data, method(:run_func))
92
+
93
+ # 1000 events in a batch
94
+ data = generate_events(1000)
95
+ run_benchmark_and_print_results(data, method(:run_func))
96
+
97
+ # 2000 events in a batch
98
+ data = generate_events(2000)
99
+ run_benchmark_and_print_results(data, method(:run_func))
100
+
101
+ # 3000 events in a batch
102
+ data = generate_events(3000)
103
+ run_benchmark_and_print_results(data, method(:run_func))
104
+
105
+ # 5000 events in a batch
106
+ data = generate_events(5000)
107
+ run_benchmark_and_print_results(data, method(:run_func))
@@ -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
@@ -5,6 +5,11 @@ require "logstash/codecs/plain"
5
5
  require "logstash/event"
6
6
  require "json"
7
7
  require 'webmock/rspec'
8
+
9
+ # Require the specific version of `json` used in logstash
10
+ gem 'json', '1.8.6'
11
+ require 'json'
12
+
8
13
  WebMock.allow_net_connect!
9
14
 
10
15
  RSpec.configure do |rspec|
@@ -31,7 +36,10 @@ describe LogStash::Outputs::Scalyr do
31
36
  describe "#ssl_tests" do
32
37
  context "with default SSL configuration" do
33
38
  it "throws a ServerError due to fake api key" do
34
- plugin = LogStash::Outputs::Scalyr.new({'api_write_token' => '1234'})
39
+ plugin = LogStash::Outputs::Scalyr.new({
40
+ 'api_write_token' => '1234',
41
+ 'perform_connectivity_check' => false,
42
+ })
35
43
  plugin.register
36
44
  plugin.instance_variable_set(:@running, false)
37
45
  allow(plugin.instance_variable_get(:@logger)).to receive(:error)
@@ -42,7 +50,7 @@ describe LogStash::Outputs::Scalyr do
42
50
  :batch_num=>1,
43
51
  :code=>401,
44
52
  :message=>"error/client/badParam",
45
- :payload_size=>781,
53
+ :payload_size=>737,
46
54
  :record_count=>3,
47
55
  :total_batches=>1,
48
56
  :url=>"https://agent.scalyr.com/addEvents",
@@ -55,7 +63,12 @@ describe LogStash::Outputs::Scalyr do
55
63
 
56
64
  context "when pointing at a location without any valid certs and not using builtin" do
57
65
  it "throws an SSLError" do
58
- plugin = LogStash::Outputs::Scalyr.new({'api_write_token' => '1234', 'ssl_ca_bundle_path' => '/fakepath/nocerts', 'append_builtin_cert' => false})
66
+ plugin = LogStash::Outputs::Scalyr.new({
67
+ 'api_write_token' => '1234',
68
+ 'perform_connectivity_check' => false,
69
+ 'ssl_ca_bundle_path' => '/fakepath/nocerts',
70
+ 'append_builtin_cert' => false,
71
+ })
59
72
  plugin.register
60
73
  plugin.instance_variable_set(:@running, false)
61
74
  allow(plugin.instance_variable_get(:@logger)).to receive(:error)
@@ -65,7 +78,7 @@ describe LogStash::Outputs::Scalyr do
65
78
  :error_class=>"Manticore::UnknownException",
66
79
  :batch_num=>1,
67
80
  :message=>"java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty",
68
- :payload_size=>781,
81
+ :payload_size=>737,
69
82
  :record_count=>3,
70
83
  :total_batches=>1,
71
84
  :url=>"https://agent.scalyr.com/addEvents",
@@ -81,7 +94,11 @@ describe LogStash::Outputs::Scalyr do
81
94
  `sudo mv #{OpenSSL::X509::DEFAULT_CERT_DIR} /tmp/system_certs`
82
95
 
83
96
  begin
84
- plugin = LogStash::Outputs::Scalyr.new({'api_write_token' => '1234', 'append_builtin_cert' => false})
97
+ plugin = LogStash::Outputs::Scalyr.new({
98
+ 'api_write_token' => '1234',
99
+ 'perform_connectivity_check' => false,
100
+ 'append_builtin_cert' => false,
101
+ })
85
102
  plugin.register
86
103
  plugin.instance_variable_set(:@running, false)
87
104
  allow(plugin.instance_variable_get(:@logger)).to receive(:error)
@@ -91,7 +108,7 @@ describe LogStash::Outputs::Scalyr do
91
108
  :error_class=>"Manticore::UnknownException",
92
109
  :batch_num=>1,
93
110
  :message=>"java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty",
94
- :payload_size=>781,
111
+ :payload_size=>737,
95
112
  :record_count=>3,
96
113
  :total_batches=>1,
97
114
  :url=>"https://agent.scalyr.com/addEvents",
@@ -120,7 +137,11 @@ describe LogStash::Outputs::Scalyr do
120
137
  `echo "#{etc_hosts_entry}" | sudo tee -a /etc/hosts`
121
138
 
122
139
  begin
123
- plugin = LogStash::Outputs::Scalyr.new({'api_write_token' => '1234', 'scalyr_server' => 'https://invalid.mitm.should.fail.test.agent.scalyr.com:443'})
140
+ plugin = LogStash::Outputs::Scalyr.new({
141
+ 'api_write_token' => '1234',
142
+ 'perform_connectivity_check' => false,
143
+ 'scalyr_server' => 'https://invalid.mitm.should.fail.test.agent.scalyr.com:443',
144
+ })
124
145
  plugin.register
125
146
  plugin.instance_variable_set(:@running, false)
126
147
  allow(plugin.instance_variable_get(:@logger)).to receive(:error)
@@ -130,7 +151,7 @@ describe LogStash::Outputs::Scalyr do
130
151
  :error_class=>"Manticore::UnknownException",
131
152
  :batch_num=>1,
132
153
  :message=>"Host name 'invalid.mitm.should.fail.test.agent.scalyr.com' does not match the certificate subject provided by the peer (CN=*.scalyr.com)",
133
- :payload_size=>781,
154
+ :payload_size=>737,
134
155
  :record_count=>3,
135
156
  :total_batches=>1,
136
157
  :url=>"https://invalid.mitm.should.fail.test.agent.scalyr.com/addEvents",
@@ -147,7 +168,13 @@ describe LogStash::Outputs::Scalyr do
147
168
 
148
169
  context "when an error occurs with retries at 5" do
149
170
  it "exits after 5 retries and emits a log" do
150
- plugin = LogStash::Outputs::Scalyr.new({'retry_initial_interval' => 0.1, 'api_write_token' => '1234', 'ssl_ca_bundle_path' => '/fakepath/nocerts', 'append_builtin_cert' => false})
171
+ plugin = LogStash::Outputs::Scalyr.new({
172
+ 'api_write_token' => '1234',
173
+ 'perform_connectivity_check' => false,
174
+ 'retry_initial_interval' => 0.1,
175
+ 'ssl_ca_bundle_path' => '/fakepath/nocerts',
176
+ 'append_builtin_cert' => false
177
+ })
151
178
  plugin.register
152
179
  allow(plugin.instance_variable_get(:@logger)).to receive(:error)
153
180
  plugin.multi_receive(sample_events)
@@ -163,7 +190,12 @@ describe LogStash::Outputs::Scalyr do
163
190
  stub_request(:post, "https://agent.scalyr.com/addEvents").
164
191
  to_return(status: 503, body: "stubbed response", headers: {})
165
192
 
166
- plugin = LogStash::Outputs::Scalyr.new({'api_write_token' => '1234', 'ssl_ca_bundle_path' => '/fakepath/nocerts', 'append_builtin_cert' => false})
193
+ plugin = LogStash::Outputs::Scalyr.new({
194
+ 'api_write_token' => '1234',
195
+ 'perform_connectivity_check' => false,
196
+ 'ssl_ca_bundle_path' => '/fakepath/nocerts',
197
+ 'append_builtin_cert' => false
198
+ })
167
199
  plugin.register
168
200
  plugin.instance_variable_set(:@running, false)
169
201
 
@@ -175,7 +207,7 @@ describe LogStash::Outputs::Scalyr do
175
207
  :batch_num=>1,
176
208
  :code=>503,
177
209
  :message=>"Invalid JSON response from server",
178
- :payload_size=>781,
210
+ :payload_size=>737,
179
211
  :record_count=>3,
180
212
  :total_batches=>1,
181
213
  :url=>"https://agent.scalyr.com/addEvents",
@@ -191,7 +223,12 @@ describe LogStash::Outputs::Scalyr do
191
223
  stub_request(:post, "https://agent.scalyr.com/addEvents").
192
224
  to_return(status: 500, body: "stubbed response", headers: {})
193
225
 
194
- plugin = LogStash::Outputs::Scalyr.new({'api_write_token' => '1234', 'ssl_ca_bundle_path' => '/fakepath/nocerts', 'append_builtin_cert' => false})
226
+ plugin = LogStash::Outputs::Scalyr.new({
227
+ 'api_write_token' => '1234',
228
+ 'perform_connectivity_check' => false,
229
+ 'ssl_ca_bundle_path' => '/fakepath/nocerts',
230
+ 'append_builtin_cert' => false
231
+ })
195
232
  plugin.register
196
233
  plugin.instance_variable_set(:@running, false)
197
234
 
@@ -203,7 +240,7 @@ describe LogStash::Outputs::Scalyr do
203
240
  :batch_num=>1,
204
241
  :code=>500,
205
242
  :message=>"Invalid JSON response from server",
206
- :payload_size=>781,
243
+ :payload_size=>737,
207
244
  :record_count=>3,
208
245
  :total_batches=>1,
209
246
  :url=>"https://agent.scalyr.com/addEvents",
@@ -219,7 +256,12 @@ describe LogStash::Outputs::Scalyr do
219
256
  stub_request(:post, "https://agent.scalyr.com/addEvents").
220
257
  to_return(status: 500, body: "0123456789" * 52, headers: {})
221
258
 
222
- plugin = LogStash::Outputs::Scalyr.new({'api_write_token' => '1234', 'ssl_ca_bundle_path' => '/fakepath/nocerts', 'append_builtin_cert' => false})
259
+ plugin = LogStash::Outputs::Scalyr.new({
260
+ 'api_write_token' => '1234',
261
+ 'perform_connectivity_check' => false,
262
+ 'ssl_ca_bundle_path' => '/fakepath/nocerts',
263
+ 'append_builtin_cert' => false
264
+ })
223
265
  plugin.register
224
266
  plugin.instance_variable_set(:@running, false)
225
267
 
@@ -231,7 +273,7 @@ describe LogStash::Outputs::Scalyr do
231
273
  :batch_num=>1,
232
274
  :code=>500,
233
275
  :message=>"Invalid JSON response from server",
234
- :payload_size=>781,
276
+ :payload_size=>737,
235
277
  :record_count=>3,
236
278
  :total_batches=>1,
237
279
  :url=>"https://agent.scalyr.com/addEvents",
@@ -248,7 +290,12 @@ describe LogStash::Outputs::Scalyr do
248
290
  stub_request(:post, "https://agent.scalyr.com/addEvents").
249
291
  to_return(status: 500, body: "stubbed response", headers: {})
250
292
 
251
- plugin = LogStash::Outputs::Scalyr.new({'api_write_token' => '1234', 'ssl_ca_bundle_path' => '/fakepath/nocerts', 'append_builtin_cert' => false})
293
+ plugin = LogStash::Outputs::Scalyr.new({
294
+ 'api_write_token' => '1234',
295
+ 'perform_connectivity_check' => false,
296
+ 'ssl_ca_bundle_path' => '/fakepath/nocerts',
297
+ 'append_builtin_cert' => false
298
+ })
252
299
  plugin.register
253
300
  plugin.instance_variable_set(:@running, false)
254
301
  plugin.instance_variable_set('@dlq_writer', dlq_writer)