logstash-lib 1.3.2

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.
Files changed (419) hide show
  1. data/.gitignore +24 -0
  2. data/.tailor +8 -0
  3. data/.travis.yml +12 -0
  4. data/CHANGELOG +1185 -0
  5. data/CONTRIBUTING.md +61 -0
  6. data/CONTRIBUTORS +79 -0
  7. data/LICENSE +14 -0
  8. data/Makefile +460 -0
  9. data/README.md +120 -0
  10. data/STYLE.md +96 -0
  11. data/bin/logstash +37 -0
  12. data/bin/logstash-test +4 -0
  13. data/bin/logstash-web +4 -0
  14. data/bin/logstash.lib.sh +78 -0
  15. data/bot/check_pull_changelog.rb +89 -0
  16. data/docs/configuration.md +260 -0
  17. data/docs/docgen.rb +242 -0
  18. data/docs/extending/example-add-a-new-filter.md +121 -0
  19. data/docs/extending/index.md +91 -0
  20. data/docs/flags.md +43 -0
  21. data/docs/generate_index.rb +28 -0
  22. data/docs/index.html.erb +56 -0
  23. data/docs/learn.md +46 -0
  24. data/docs/life-of-an-event.md +109 -0
  25. data/docs/logging-tool-comparisons.md +60 -0
  26. data/docs/plugin-doc.html.erb +91 -0
  27. data/docs/plugin-milestones.md +41 -0
  28. data/docs/plugin-synopsis.html.erb +24 -0
  29. data/docs/release-engineering.md +46 -0
  30. data/docs/release-test-results.md +14 -0
  31. data/docs/repositories.md +35 -0
  32. data/docs/tutorials/10-minute-walkthrough/apache-elasticsearch.conf +35 -0
  33. data/docs/tutorials/10-minute-walkthrough/apache-parse.conf +33 -0
  34. data/docs/tutorials/10-minute-walkthrough/apache_log.1 +1 -0
  35. data/docs/tutorials/10-minute-walkthrough/apache_log.2.bz2 +0 -0
  36. data/docs/tutorials/10-minute-walkthrough/hello-search.conf +25 -0
  37. data/docs/tutorials/10-minute-walkthrough/hello.conf +16 -0
  38. data/docs/tutorials/10-minute-walkthrough/index.md +124 -0
  39. data/docs/tutorials/10-minute-walkthrough/step-5-output.txt +17 -0
  40. data/docs/tutorials/getting-started-centralized-overview-diagram.png +0 -0
  41. data/docs/tutorials/getting-started-centralized-overview-diagram.xml +1 -0
  42. data/docs/tutorials/getting-started-centralized.md +217 -0
  43. data/docs/tutorials/getting-started-simple.md +200 -0
  44. data/docs/tutorials/just-enough-rabbitmq-for-logstash.md +201 -0
  45. data/docs/tutorials/media/frontend-response-codes.png +0 -0
  46. data/docs/tutorials/metrics-from-logs.md +84 -0
  47. data/docs/tutorials/zeromq.md +118 -0
  48. data/extract_services.rb +29 -0
  49. data/gembag.rb +64 -0
  50. data/lib/logstash-event.rb +2 -0
  51. data/lib/logstash.rb +4 -0
  52. data/lib/logstash/JRUBY-6970-openssl.rb +22 -0
  53. data/lib/logstash/JRUBY-6970.rb +102 -0
  54. data/lib/logstash/agent.rb +305 -0
  55. data/lib/logstash/certs/cacert.pem +3895 -0
  56. data/lib/logstash/codecs/base.rb +49 -0
  57. data/lib/logstash/codecs/compress_spooler.rb +50 -0
  58. data/lib/logstash/codecs/dots.rb +18 -0
  59. data/lib/logstash/codecs/edn.rb +28 -0
  60. data/lib/logstash/codecs/edn_lines.rb +36 -0
  61. data/lib/logstash/codecs/fluent.rb +55 -0
  62. data/lib/logstash/codecs/graphite.rb +114 -0
  63. data/lib/logstash/codecs/json.rb +41 -0
  64. data/lib/logstash/codecs/json_lines.rb +52 -0
  65. data/lib/logstash/codecs/json_spooler.rb +22 -0
  66. data/lib/logstash/codecs/line.rb +58 -0
  67. data/lib/logstash/codecs/msgpack.rb +43 -0
  68. data/lib/logstash/codecs/multiline.rb +189 -0
  69. data/lib/logstash/codecs/netflow.rb +342 -0
  70. data/lib/logstash/codecs/netflow/util.rb +212 -0
  71. data/lib/logstash/codecs/noop.rb +19 -0
  72. data/lib/logstash/codecs/oldlogstashjson.rb +56 -0
  73. data/lib/logstash/codecs/plain.rb +48 -0
  74. data/lib/logstash/codecs/rubydebug.rb +22 -0
  75. data/lib/logstash/codecs/spool.rb +38 -0
  76. data/lib/logstash/config/Makefile +4 -0
  77. data/lib/logstash/config/config_ast.rb +380 -0
  78. data/lib/logstash/config/file.rb +39 -0
  79. data/lib/logstash/config/grammar.rb +3504 -0
  80. data/lib/logstash/config/grammar.treetop +241 -0
  81. data/lib/logstash/config/mixin.rb +464 -0
  82. data/lib/logstash/config/registry.rb +13 -0
  83. data/lib/logstash/config/test.conf +18 -0
  84. data/lib/logstash/errors.rb +10 -0
  85. data/lib/logstash/event.rb +262 -0
  86. data/lib/logstash/filters/advisor.rb +178 -0
  87. data/lib/logstash/filters/alter.rb +173 -0
  88. data/lib/logstash/filters/anonymize.rb +93 -0
  89. data/lib/logstash/filters/base.rb +190 -0
  90. data/lib/logstash/filters/checksum.rb +50 -0
  91. data/lib/logstash/filters/cidr.rb +76 -0
  92. data/lib/logstash/filters/cipher.rb +145 -0
  93. data/lib/logstash/filters/clone.rb +35 -0
  94. data/lib/logstash/filters/collate.rb +114 -0
  95. data/lib/logstash/filters/csv.rb +94 -0
  96. data/lib/logstash/filters/date.rb +244 -0
  97. data/lib/logstash/filters/dns.rb +201 -0
  98. data/lib/logstash/filters/drop.rb +32 -0
  99. data/lib/logstash/filters/elapsed.rb +256 -0
  100. data/lib/logstash/filters/elasticsearch.rb +73 -0
  101. data/lib/logstash/filters/environment.rb +27 -0
  102. data/lib/logstash/filters/extractnumbers.rb +84 -0
  103. data/lib/logstash/filters/gelfify.rb +52 -0
  104. data/lib/logstash/filters/geoip.rb +145 -0
  105. data/lib/logstash/filters/grep.rb +153 -0
  106. data/lib/logstash/filters/grok.rb +425 -0
  107. data/lib/logstash/filters/grokdiscovery.rb +75 -0
  108. data/lib/logstash/filters/i18n.rb +51 -0
  109. data/lib/logstash/filters/json.rb +90 -0
  110. data/lib/logstash/filters/json_encode.rb +52 -0
  111. data/lib/logstash/filters/kv.rb +232 -0
  112. data/lib/logstash/filters/metaevent.rb +68 -0
  113. data/lib/logstash/filters/metrics.rb +237 -0
  114. data/lib/logstash/filters/multiline.rb +241 -0
  115. data/lib/logstash/filters/mutate.rb +399 -0
  116. data/lib/logstash/filters/noop.rb +21 -0
  117. data/lib/logstash/filters/prune.rb +149 -0
  118. data/lib/logstash/filters/punct.rb +32 -0
  119. data/lib/logstash/filters/railsparallelrequest.rb +86 -0
  120. data/lib/logstash/filters/range.rb +142 -0
  121. data/lib/logstash/filters/ruby.rb +42 -0
  122. data/lib/logstash/filters/sleep.rb +111 -0
  123. data/lib/logstash/filters/split.rb +64 -0
  124. data/lib/logstash/filters/sumnumbers.rb +73 -0
  125. data/lib/logstash/filters/syslog_pri.rb +107 -0
  126. data/lib/logstash/filters/translate.rb +121 -0
  127. data/lib/logstash/filters/unique.rb +29 -0
  128. data/lib/logstash/filters/urldecode.rb +57 -0
  129. data/lib/logstash/filters/useragent.rb +112 -0
  130. data/lib/logstash/filters/uuid.rb +58 -0
  131. data/lib/logstash/filters/xml.rb +139 -0
  132. data/lib/logstash/filters/zeromq.rb +123 -0
  133. data/lib/logstash/filterworker.rb +122 -0
  134. data/lib/logstash/inputs/base.rb +125 -0
  135. data/lib/logstash/inputs/collectd.rb +306 -0
  136. data/lib/logstash/inputs/drupal_dblog.rb +323 -0
  137. data/lib/logstash/inputs/drupal_dblog/jdbcconnection.rb +66 -0
  138. data/lib/logstash/inputs/elasticsearch.rb +140 -0
  139. data/lib/logstash/inputs/eventlog.rb +129 -0
  140. data/lib/logstash/inputs/eventlog/racob_fix.rb +44 -0
  141. data/lib/logstash/inputs/exec.rb +69 -0
  142. data/lib/logstash/inputs/file.rb +146 -0
  143. data/lib/logstash/inputs/ganglia.rb +127 -0
  144. data/lib/logstash/inputs/ganglia/gmondpacket.rb +146 -0
  145. data/lib/logstash/inputs/ganglia/xdr.rb +327 -0
  146. data/lib/logstash/inputs/gelf.rb +138 -0
  147. data/lib/logstash/inputs/gemfire.rb +222 -0
  148. data/lib/logstash/inputs/generator.rb +97 -0
  149. data/lib/logstash/inputs/graphite.rb +41 -0
  150. data/lib/logstash/inputs/heroku.rb +51 -0
  151. data/lib/logstash/inputs/imap.rb +136 -0
  152. data/lib/logstash/inputs/irc.rb +84 -0
  153. data/lib/logstash/inputs/log4j.rb +136 -0
  154. data/lib/logstash/inputs/lumberjack.rb +53 -0
  155. data/lib/logstash/inputs/pipe.rb +57 -0
  156. data/lib/logstash/inputs/rabbitmq.rb +126 -0
  157. data/lib/logstash/inputs/rabbitmq/bunny.rb +118 -0
  158. data/lib/logstash/inputs/rabbitmq/hot_bunnies.rb +1 -0
  159. data/lib/logstash/inputs/rabbitmq/march_hare.rb +129 -0
  160. data/lib/logstash/inputs/redis.rb +263 -0
  161. data/lib/logstash/inputs/relp.rb +106 -0
  162. data/lib/logstash/inputs/s3.rb +279 -0
  163. data/lib/logstash/inputs/snmptrap.rb +87 -0
  164. data/lib/logstash/inputs/sqlite.rb +185 -0
  165. data/lib/logstash/inputs/sqs.rb +172 -0
  166. data/lib/logstash/inputs/stdin.rb +46 -0
  167. data/lib/logstash/inputs/stomp.rb +84 -0
  168. data/lib/logstash/inputs/syslog.rb +237 -0
  169. data/lib/logstash/inputs/tcp.rb +231 -0
  170. data/lib/logstash/inputs/threadable.rb +18 -0
  171. data/lib/logstash/inputs/twitter.rb +82 -0
  172. data/lib/logstash/inputs/udp.rb +81 -0
  173. data/lib/logstash/inputs/unix.rb +163 -0
  174. data/lib/logstash/inputs/varnishlog.rb +48 -0
  175. data/lib/logstash/inputs/websocket.rb +50 -0
  176. data/lib/logstash/inputs/wmi.rb +72 -0
  177. data/lib/logstash/inputs/xmpp.rb +81 -0
  178. data/lib/logstash/inputs/zenoss.rb +143 -0
  179. data/lib/logstash/inputs/zeromq.rb +165 -0
  180. data/lib/logstash/kibana.rb +113 -0
  181. data/lib/logstash/loadlibs.rb +9 -0
  182. data/lib/logstash/logging.rb +89 -0
  183. data/lib/logstash/monkeypatches-for-bugs.rb +2 -0
  184. data/lib/logstash/monkeypatches-for-debugging.rb +47 -0
  185. data/lib/logstash/monkeypatches-for-performance.rb +66 -0
  186. data/lib/logstash/multiqueue.rb +53 -0
  187. data/lib/logstash/namespace.rb +16 -0
  188. data/lib/logstash/outputs/base.rb +120 -0
  189. data/lib/logstash/outputs/boundary.rb +116 -0
  190. data/lib/logstash/outputs/circonus.rb +78 -0
  191. data/lib/logstash/outputs/cloudwatch.rb +351 -0
  192. data/lib/logstash/outputs/csv.rb +55 -0
  193. data/lib/logstash/outputs/datadog.rb +93 -0
  194. data/lib/logstash/outputs/datadog_metrics.rb +123 -0
  195. data/lib/logstash/outputs/elasticsearch.rb +332 -0
  196. data/lib/logstash/outputs/elasticsearch/elasticsearch-template.json +44 -0
  197. data/lib/logstash/outputs/elasticsearch_http.rb +256 -0
  198. data/lib/logstash/outputs/elasticsearch_river.rb +214 -0
  199. data/lib/logstash/outputs/email.rb +299 -0
  200. data/lib/logstash/outputs/exec.rb +40 -0
  201. data/lib/logstash/outputs/file.rb +180 -0
  202. data/lib/logstash/outputs/ganglia.rb +75 -0
  203. data/lib/logstash/outputs/gelf.rb +208 -0
  204. data/lib/logstash/outputs/gemfire.rb +103 -0
  205. data/lib/logstash/outputs/google_bigquery.rb +570 -0
  206. data/lib/logstash/outputs/google_cloud_storage.rb +431 -0
  207. data/lib/logstash/outputs/graphite.rb +143 -0
  208. data/lib/logstash/outputs/graphtastic.rb +185 -0
  209. data/lib/logstash/outputs/hipchat.rb +80 -0
  210. data/lib/logstash/outputs/http.rb +142 -0
  211. data/lib/logstash/outputs/irc.rb +80 -0
  212. data/lib/logstash/outputs/jira.rb +109 -0
  213. data/lib/logstash/outputs/juggernaut.rb +105 -0
  214. data/lib/logstash/outputs/librato.rb +146 -0
  215. data/lib/logstash/outputs/loggly.rb +93 -0
  216. data/lib/logstash/outputs/lumberjack.rb +51 -0
  217. data/lib/logstash/outputs/metriccatcher.rb +103 -0
  218. data/lib/logstash/outputs/mongodb.rb +81 -0
  219. data/lib/logstash/outputs/nagios.rb +119 -0
  220. data/lib/logstash/outputs/nagios_nsca.rb +123 -0
  221. data/lib/logstash/outputs/null.rb +18 -0
  222. data/lib/logstash/outputs/opentsdb.rb +101 -0
  223. data/lib/logstash/outputs/pagerduty.rb +79 -0
  224. data/lib/logstash/outputs/pipe.rb +132 -0
  225. data/lib/logstash/outputs/rabbitmq.rb +96 -0
  226. data/lib/logstash/outputs/rabbitmq/bunny.rb +135 -0
  227. data/lib/logstash/outputs/rabbitmq/hot_bunnies.rb +1 -0
  228. data/lib/logstash/outputs/rabbitmq/march_hare.rb +143 -0
  229. data/lib/logstash/outputs/redis.rb +245 -0
  230. data/lib/logstash/outputs/riak.rb +152 -0
  231. data/lib/logstash/outputs/riemann.rb +109 -0
  232. data/lib/logstash/outputs/s3.rb +356 -0
  233. data/lib/logstash/outputs/sns.rb +124 -0
  234. data/lib/logstash/outputs/solr_http.rb +78 -0
  235. data/lib/logstash/outputs/sqs.rb +141 -0
  236. data/lib/logstash/outputs/statsd.rb +116 -0
  237. data/lib/logstash/outputs/stdout.rb +53 -0
  238. data/lib/logstash/outputs/stomp.rb +67 -0
  239. data/lib/logstash/outputs/syslog.rb +145 -0
  240. data/lib/logstash/outputs/tcp.rb +145 -0
  241. data/lib/logstash/outputs/udp.rb +38 -0
  242. data/lib/logstash/outputs/websocket.rb +46 -0
  243. data/lib/logstash/outputs/websocket/app.rb +29 -0
  244. data/lib/logstash/outputs/websocket/pubsub.rb +45 -0
  245. data/lib/logstash/outputs/xmpp.rb +78 -0
  246. data/lib/logstash/outputs/zabbix.rb +108 -0
  247. data/lib/logstash/outputs/zeromq.rb +125 -0
  248. data/lib/logstash/pipeline.rb +286 -0
  249. data/lib/logstash/plugin.rb +150 -0
  250. data/lib/logstash/plugin_mixins/aws_config.rb +93 -0
  251. data/lib/logstash/program.rb +15 -0
  252. data/lib/logstash/runner.rb +238 -0
  253. data/lib/logstash/sized_queue.rb +8 -0
  254. data/lib/logstash/test.rb +183 -0
  255. data/lib/logstash/threadwatchdog.rb +37 -0
  256. data/lib/logstash/time_addon.rb +33 -0
  257. data/lib/logstash/util.rb +106 -0
  258. data/lib/logstash/util/buftok.rb +139 -0
  259. data/lib/logstash/util/charset.rb +39 -0
  260. data/lib/logstash/util/fieldreference.rb +50 -0
  261. data/lib/logstash/util/password.rb +25 -0
  262. data/lib/logstash/util/prctl.rb +11 -0
  263. data/lib/logstash/util/relp.rb +326 -0
  264. data/lib/logstash/util/require-helper.rb +18 -0
  265. data/lib/logstash/util/socket_peer.rb +7 -0
  266. data/lib/logstash/util/zenoss.rb +566 -0
  267. data/lib/logstash/util/zeromq.rb +47 -0
  268. data/lib/logstash/version.rb +6 -0
  269. data/locales/en.yml +170 -0
  270. data/logstash-event.gemspec +29 -0
  271. data/logstash.gemspec +128 -0
  272. data/patterns/firewalls +60 -0
  273. data/patterns/grok-patterns +91 -0
  274. data/patterns/haproxy +37 -0
  275. data/patterns/java +3 -0
  276. data/patterns/linux-syslog +14 -0
  277. data/patterns/mcollective +1 -0
  278. data/patterns/mcollective-patterns +4 -0
  279. data/patterns/nagios +108 -0
  280. data/patterns/postgresql +3 -0
  281. data/patterns/redis +3 -0
  282. data/patterns/ruby +2 -0
  283. data/pkg/build.sh +135 -0
  284. data/pkg/centos/after-install.sh +1 -0
  285. data/pkg/centos/before-install.sh +10 -0
  286. data/pkg/centos/before-remove.sh +11 -0
  287. data/pkg/centos/sysconfig +15 -0
  288. data/pkg/debian/after-install.sh +5 -0
  289. data/pkg/debian/before-install.sh +13 -0
  290. data/pkg/debian/before-remove.sh +13 -0
  291. data/pkg/debian/build.sh +34 -0
  292. data/pkg/debian/debian/README +6 -0
  293. data/pkg/debian/debian/changelog +17 -0
  294. data/pkg/debian/debian/compat +1 -0
  295. data/pkg/debian/debian/control +16 -0
  296. data/pkg/debian/debian/copyright +27 -0
  297. data/pkg/debian/debian/dirs +19 -0
  298. data/pkg/debian/debian/docs +0 -0
  299. data/pkg/debian/debian/logstash.default +39 -0
  300. data/pkg/debian/debian/logstash.init +201 -0
  301. data/pkg/debian/debian/logstash.install +1 -0
  302. data/pkg/debian/debian/logstash.logrotate +9 -0
  303. data/pkg/debian/debian/logstash.postinst +68 -0
  304. data/pkg/debian/debian/logstash.postrm +23 -0
  305. data/pkg/debian/debian/manpage.1.ex +59 -0
  306. data/pkg/debian/debian/preinst.ex +37 -0
  307. data/pkg/debian/debian/prerm.ex +40 -0
  308. data/pkg/debian/debian/release.conf +5 -0
  309. data/pkg/debian/debian/rules +80 -0
  310. data/pkg/debian/debian/watch.ex +22 -0
  311. data/pkg/logrotate.conf +8 -0
  312. data/pkg/logstash-web.default +41 -0
  313. data/pkg/logstash-web.sysv.debian +201 -0
  314. data/pkg/logstash-web.upstart.ubuntu +18 -0
  315. data/pkg/logstash.default +45 -0
  316. data/pkg/logstash.sysv.debian +202 -0
  317. data/pkg/logstash.sysv.redhat +158 -0
  318. data/pkg/logstash.upstart.ubuntu +20 -0
  319. data/pkg/rpm/SOURCES/logstash.conf +26 -0
  320. data/pkg/rpm/SOURCES/logstash.init +80 -0
  321. data/pkg/rpm/SOURCES/logstash.logrotate +8 -0
  322. data/pkg/rpm/SOURCES/logstash.sysconfig +3 -0
  323. data/pkg/rpm/SOURCES/logstash.wrapper +105 -0
  324. data/pkg/rpm/SPECS/logstash.spec +180 -0
  325. data/pkg/rpm/readme.md +4 -0
  326. data/pkg/ubuntu/after-install.sh +7 -0
  327. data/pkg/ubuntu/before-install.sh +12 -0
  328. data/pkg/ubuntu/before-remove.sh +13 -0
  329. data/pull_release_note.rb +25 -0
  330. data/require-analyze.rb +22 -0
  331. data/spec/README.md +14 -0
  332. data/spec/codecs/edn.rb +40 -0
  333. data/spec/codecs/edn_lines.rb +53 -0
  334. data/spec/codecs/graphite.rb +96 -0
  335. data/spec/codecs/json.rb +57 -0
  336. data/spec/codecs/json_lines.rb +51 -0
  337. data/spec/codecs/json_spooler.rb +43 -0
  338. data/spec/codecs/msgpack.rb +39 -0
  339. data/spec/codecs/multiline.rb +60 -0
  340. data/spec/codecs/oldlogstashjson.rb +55 -0
  341. data/spec/codecs/plain.rb +35 -0
  342. data/spec/codecs/spool.rb +35 -0
  343. data/spec/conditionals/test.rb +323 -0
  344. data/spec/config.rb +31 -0
  345. data/spec/event.rb +165 -0
  346. data/spec/examples/fail2ban.rb +28 -0
  347. data/spec/examples/graphite-input.rb +41 -0
  348. data/spec/examples/mysql-slow-query.rb +70 -0
  349. data/spec/examples/parse-apache-logs.rb +66 -0
  350. data/spec/examples/parse-haproxy-logs.rb +115 -0
  351. data/spec/examples/syslog.rb +48 -0
  352. data/spec/filters/alter.rb +96 -0
  353. data/spec/filters/anonymize.rb +189 -0
  354. data/spec/filters/checksum.rb +41 -0
  355. data/spec/filters/clone.rb +67 -0
  356. data/spec/filters/collate.rb +122 -0
  357. data/spec/filters/csv.rb +174 -0
  358. data/spec/filters/date.rb +285 -0
  359. data/spec/filters/date_performance.rb +31 -0
  360. data/spec/filters/dns.rb +159 -0
  361. data/spec/filters/drop.rb +19 -0
  362. data/spec/filters/elapsed.rb +294 -0
  363. data/spec/filters/environment.rb +43 -0
  364. data/spec/filters/geoip.rb +62 -0
  365. data/spec/filters/grep.rb +342 -0
  366. data/spec/filters/grok.rb +473 -0
  367. data/spec/filters/grok/timeout2.rb +56 -0
  368. data/spec/filters/grok/timeouts.rb +39 -0
  369. data/spec/filters/i18n.rb +25 -0
  370. data/spec/filters/json.rb +72 -0
  371. data/spec/filters/json_encode.rb +37 -0
  372. data/spec/filters/kv.rb +403 -0
  373. data/spec/filters/metrics.rb +212 -0
  374. data/spec/filters/multiline.rb +119 -0
  375. data/spec/filters/mutate.rb +180 -0
  376. data/spec/filters/noop.rb +221 -0
  377. data/spec/filters/prune.rb +441 -0
  378. data/spec/filters/punct.rb +18 -0
  379. data/spec/filters/railsparallelrequest.rb +112 -0
  380. data/spec/filters/range.rb +169 -0
  381. data/spec/filters/split.rb +58 -0
  382. data/spec/filters/translate.rb +70 -0
  383. data/spec/filters/unique.rb +25 -0
  384. data/spec/filters/useragent.rb +42 -0
  385. data/spec/filters/xml.rb +157 -0
  386. data/spec/inputs/file.rb +107 -0
  387. data/spec/inputs/gelf.rb +52 -0
  388. data/spec/inputs/generator.rb +30 -0
  389. data/spec/inputs/imap.rb +60 -0
  390. data/spec/inputs/redis.rb +63 -0
  391. data/spec/inputs/relp.rb +70 -0
  392. data/spec/inputs/tcp.rb +101 -0
  393. data/spec/jar.rb +21 -0
  394. data/spec/outputs/csv.rb +266 -0
  395. data/spec/outputs/elasticsearch.rb +161 -0
  396. data/spec/outputs/elasticsearch_http.rb +240 -0
  397. data/spec/outputs/email.rb +173 -0
  398. data/spec/outputs/file.rb +82 -0
  399. data/spec/outputs/graphite.rb +236 -0
  400. data/spec/outputs/redis.rb +127 -0
  401. data/spec/speed.rb +20 -0
  402. data/spec/sqlite-test.rb +81 -0
  403. data/spec/support/LOGSTASH-733.rb +21 -0
  404. data/spec/support/LOGSTASH-820.rb +25 -0
  405. data/spec/support/akamai-grok.rb +26 -0
  406. data/spec/support/date-http.rb +17 -0
  407. data/spec/support/postwait1.rb +26 -0
  408. data/spec/support/pull375.rb +21 -0
  409. data/spec/test_utils.rb +125 -0
  410. data/spec/util/fieldeval_spec.rb +44 -0
  411. data/test/jenkins/config.xml.erb +74 -0
  412. data/test/jenkins/create-jobs.rb +23 -0
  413. data/test/jenkins/generatorjob.config.xml +66 -0
  414. data/tools/Gemfile +14 -0
  415. data/tools/Gemfile.jruby-1.9.lock +322 -0
  416. data/tools/Gemfile.rbx-2.1.lock +516 -0
  417. data/tools/Gemfile.ruby-1.9.1.lock +310 -0
  418. data/tools/Gemfile.ruby-2.0.0.lock +310 -0
  419. metadata +629 -0
@@ -0,0 +1,31 @@
1
+ require "test_utils"
2
+ require "logstash/filters/date"
3
+
4
+ puts "Skipping date tests because this ruby is not jruby" if RUBY_ENGINE != "jruby"
5
+ describe LogStash::Filters::Date, :if => RUBY_ENGINE == "jruby" do
6
+ extend LogStash::RSpec
7
+
8
+ describe "speed test of date parsing", :if => ENV["SPEEDTEST"] do
9
+ it "should be fast" do
10
+ event_count = 100000
11
+ min_rate = 4000
12
+ max_duration = event_count / min_rate
13
+ input = "Nov 24 01:29:01 -0800"
14
+
15
+ filter = LogStash::Filters::Date.new("match" => [ "mydate", "MMM dd HH:mm:ss Z" ])
16
+ filter.register
17
+ duration = 0
18
+ # 10000 for warmup
19
+ [10000, event_count].each do |iterations|
20
+ start = Time.now
21
+ iterations.times do
22
+ event = LogStash::Event.new("mydate" => input)
23
+ filter.execute(event)
24
+ end
25
+ duration = Time.now - start
26
+ end
27
+ puts "date parse rate: #{event_count / duration}"
28
+ insist { duration } < max_duration
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,159 @@
1
+ require "test_utils"
2
+ require "logstash/filters/dns"
3
+ require "resolv"
4
+
5
+ describe LogStash::Filters::DNS do
6
+ extend LogStash::RSpec
7
+
8
+ describe "dns reverse lookup, replace" do
9
+ config <<-CONFIG
10
+ filter {
11
+ dns {
12
+ reverse => "host"
13
+ action => "replace"
14
+ }
15
+ }
16
+ CONFIG
17
+
18
+ address = Resolv.new.getaddress("aspmx.l.google.com")
19
+ expected = Resolv.new.getname(address)
20
+ sample("host" => address) do
21
+ insist { subject["host"] } == expected
22
+ end
23
+ end
24
+
25
+ describe "dns reverse lookup, replace (on a field)" do
26
+ config <<-CONFIG
27
+ filter {
28
+ dns {
29
+ reverse => "foo"
30
+ action => "replace"
31
+ }
32
+ }
33
+ CONFIG
34
+
35
+ sample("foo" => "199.192.228.250") do
36
+ insist { subject["foo"] } == "carrera.databits.net"
37
+ end
38
+ end
39
+
40
+ describe "dns reverse lookup, append" do
41
+ config <<-CONFIG
42
+ filter {
43
+ dns {
44
+ reverse => "foo"
45
+ action => "append"
46
+ }
47
+ }
48
+ CONFIG
49
+
50
+ sample("foo" => "199.192.228.250") do
51
+ insist { subject["foo"][0] } == "199.192.228.250"
52
+ insist { subject["foo"][1] } == "carrera.databits.net"
53
+ end
54
+ end
55
+
56
+ describe "dns reverse lookup, not an IP" do
57
+ config <<-CONFIG
58
+ filter {
59
+ dns {
60
+ reverse => "foo"
61
+ }
62
+ }
63
+ CONFIG
64
+
65
+ sample("foo" => "not.an.ip") do
66
+ insist { subject["foo"] } == "not.an.ip"
67
+ end
68
+ end
69
+
70
+ describe "dns resolve lookup, replace" do
71
+ config <<-CONFIG
72
+ filter {
73
+ dns {
74
+ resolve => "host"
75
+ action => "replace"
76
+ }
77
+ }
78
+ CONFIG
79
+
80
+ sample("host" => "carrera.databits.net") do
81
+ insist { subject["host"] } == "199.192.228.250"
82
+ end
83
+ end
84
+
85
+ describe "dns resolve lookup, replace (on a field)" do
86
+ config <<-CONFIG
87
+ filter {
88
+ dns {
89
+ resolve => "foo"
90
+ action => "replace"
91
+ }
92
+ }
93
+ CONFIG
94
+
95
+ sample("foo" => "carrera.databits.net") do
96
+ insist { subject["foo"] } == "199.192.228.250"
97
+ end
98
+ end
99
+
100
+ describe "dns resolve lookup, skip multi-value" do
101
+ config <<-CONFIG
102
+ filter {
103
+ dns {
104
+ resolve => "foo"
105
+ action => "replace"
106
+ }
107
+ }
108
+ CONFIG
109
+
110
+ sample("foo" => ["carrera.databits.net", "foo.databits.net"]) do
111
+ insist { subject["foo"] } == ["carrera.databits.net", "foo.databits.net"]
112
+ end
113
+ end
114
+
115
+ describe "dns resolve lookup, append" do
116
+ config <<-CONFIG
117
+ filter {
118
+ dns {
119
+ resolve => "foo"
120
+ action => "append"
121
+ }
122
+ }
123
+ CONFIG
124
+
125
+ sample("foo" => "carrera.databits.net") do
126
+ insist { subject["foo"][0] } == "carrera.databits.net"
127
+ insist { subject["foo"][1] } == "199.192.228.250"
128
+ end
129
+ end
130
+
131
+ describe "dns resolve lookup, append with multi-value does nothing" do
132
+ config <<-CONFIG
133
+ filter {
134
+ dns {
135
+ resolve => "foo"
136
+ action => "append"
137
+ }
138
+ }
139
+ CONFIG
140
+
141
+ sample("foo" => ["carrera.databits.net", "foo.databits.net"]) do
142
+ insist { subject["foo"] } == ["carrera.databits.net", "foo.databits.net"]
143
+ end
144
+ end
145
+
146
+ describe "dns resolve lookup, not a valid hostname" do
147
+ config <<-CONFIG
148
+ filter {
149
+ dns {
150
+ resolve=> "foo"
151
+ }
152
+ }
153
+ CONFIG
154
+
155
+ sample("foo" => "does.not.exist") do
156
+ insist { subject["foo"] } == "does.not.exist"
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,19 @@
1
+ require "test_utils"
2
+ require "logstash/filters/drop"
3
+
4
+ describe LogStash::Filters::Drop do
5
+ extend LogStash::RSpec
6
+
7
+ describe "drop the event" do
8
+ config <<-CONFIG
9
+ filter {
10
+ drop { }
11
+ }
12
+ CONFIG
13
+
14
+ sample "hello" do
15
+ insist { subject }.nil?
16
+ end
17
+ end
18
+
19
+ end
@@ -0,0 +1,294 @@
1
+ require 'socket'
2
+ require "logstash/filters/elapsed"
3
+
4
+ describe LogStash::Filters::Elapsed do
5
+ START_TAG = "startTag"
6
+ END_TAG = "endTag"
7
+ ID_FIELD = "uniqueIdField"
8
+
9
+ def event(data)
10
+ data["message"] ||= "Log message"
11
+ LogStash::Event.new(data)
12
+ end
13
+
14
+ def start_event(data)
15
+ data["tags"] ||= []
16
+ data["tags"] << START_TAG
17
+ event(data)
18
+ end
19
+
20
+ def end_event(data = {})
21
+ data["tags"] ||= []
22
+ data["tags"] << END_TAG
23
+ event(data)
24
+ end
25
+
26
+ before(:each) do
27
+ setup_filter()
28
+ end
29
+
30
+ def setup_filter(config = {})
31
+ @config = {"start_tag" => START_TAG, "end_tag" => END_TAG, "unique_id_field" => ID_FIELD}
32
+ @config.merge!(config)
33
+ @filter = LogStash::Filters::Elapsed.new(@config)
34
+ @filter.register
35
+ end
36
+
37
+ context "General validation" do
38
+ describe "receiving an event without start or end tag" do
39
+ it "does not record it" do
40
+ @filter.filter(event("message" => "Log message"))
41
+ insist { @filter.start_events.size } == 0
42
+ end
43
+ end
44
+
45
+ describe "receiving an event with a different start/end tag from the ones specified in the configuration" do
46
+ it "does not record it" do
47
+ @filter.filter(event("tags" => ["tag1", "tag2"]))
48
+ insist { @filter.start_events.size } == 0
49
+ end
50
+ end
51
+ end
52
+
53
+ context "Start event" do
54
+ describe "receiving an event with a valid start tag" do
55
+ describe "but without an unique id field" do
56
+ it "does not record it" do
57
+ @filter.filter(event("tags" => ["tag1", START_TAG]))
58
+ insist { @filter.start_events.size } == 0
59
+ end
60
+ end
61
+
62
+ describe "and a valid id field" do
63
+ it "records it" do
64
+ event = start_event(ID_FIELD => "id123")
65
+ @filter.filter(event)
66
+
67
+ insist { @filter.start_events.size } == 1
68
+ insist { @filter.start_events["id123"].event } == event
69
+ end
70
+ end
71
+ end
72
+
73
+ describe "receiving two 'start events' for the same id field" do
74
+ it "keeps the first one and does not save the second one" do
75
+ args = {"tags" => [START_TAG], ID_FIELD => "id123"}
76
+ first_event = event(args)
77
+ second_event = event(args)
78
+
79
+ @filter.filter(first_event)
80
+ @filter.filter(second_event)
81
+
82
+ insist { @filter.start_events.size } == 1
83
+ insist { @filter.start_events["id123"].event } == first_event
84
+ end
85
+ end
86
+ end
87
+
88
+ context "End event" do
89
+ describe "receiving an event with a valid end tag" do
90
+ describe "and without an id" do
91
+ it "does nothing" do
92
+ insist { @filter.start_events.size } == 0
93
+ @filter.filter(end_event())
94
+ insist { @filter.start_events.size } == 0
95
+ end
96
+ end
97
+
98
+ describe "and with an id" do
99
+ describe "but without a previous 'start event'" do
100
+ it "adds a tag 'elapsed.end_witout_start' to the 'end event'" do
101
+ end_event = end_event(ID_FIELD => "id_123")
102
+
103
+ @filter.filter(end_event)
104
+
105
+ insist { end_event["tags"].include?("elapsed.end_wtihout_start") } == true
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
111
+
112
+ context "Start/end events interaction" do
113
+ describe "receiving a 'start event'" do
114
+ before(:each) do
115
+ @id_value = "id_123"
116
+ @start_event = start_event(ID_FIELD => @id_value)
117
+ @filter.filter(@start_event)
118
+ end
119
+
120
+ describe "and receiving an event with a valid end tag" do
121
+ describe "and without an id" do
122
+ it "does nothing" do
123
+ @filter.filter(end_event())
124
+ insist { @filter.start_events.size } == 1
125
+ insist { @filter.start_events[@id_value].event } == @start_event
126
+ end
127
+ end
128
+
129
+ describe "and an id different from the one of the 'start event'" do
130
+ it "does nothing" do
131
+ different_id_value = @id_value + "_different"
132
+ @filter.filter(end_event(ID_FIELD => different_id_value))
133
+
134
+ insist { @filter.start_events.size } == 1
135
+ insist { @filter.start_events[@id_value].event } == @start_event
136
+ end
137
+ end
138
+
139
+ describe "and the same id of the 'start event'" do
140
+ it "deletes the recorded 'start event'" do
141
+ insist { @filter.start_events.size } == 1
142
+
143
+ @filter.filter(end_event(ID_FIELD => @id_value))
144
+
145
+ insist { @filter.start_events.size } == 0
146
+ end
147
+
148
+ shared_examples_for "match event" do
149
+ it "contains the tag 'elapsed'" do
150
+ insist { @match_event["tags"].include?("elapsed") } == true
151
+ end
152
+
153
+ it "contains the tag tag 'elapsed.match'" do
154
+ insist { @match_event["tags"].include?("elapsed.match") } == true
155
+ end
156
+
157
+ it "contains an 'elapsed.time field' with the elapsed time" do
158
+ insist { @match_event["elapsed.time"] } == 10
159
+ end
160
+
161
+ it "contains an 'elapsed.timestamp_start field' with the timestamp of the 'start event'" do
162
+ insist { @match_event["elapsed.timestamp_start"] } == @start_event["@timestamp"]
163
+ end
164
+
165
+ it "contains an 'id field'" do
166
+ insist { @match_event[ID_FIELD] } == @id_value
167
+ end
168
+ end
169
+
170
+ context "if 'new_event_on_match' is set to 'true'" do
171
+ before(:each) do
172
+ # I need to create a new filter because I need to set
173
+ # the config property 'new_event_on_match" to 'true'.
174
+ setup_filter("new_event_on_match" => true)
175
+ @start_event = start_event(ID_FIELD => @id_value)
176
+ @filter.filter(@start_event)
177
+
178
+ end_timestamp = @start_event["@timestamp"] + 10
179
+ end_event = end_event(ID_FIELD => @id_value, "@timestamp" => end_timestamp)
180
+ @filter.filter(end_event) do |new_event|
181
+ @match_event = new_event
182
+ end
183
+ end
184
+
185
+ context "creates a new event that" do
186
+ it_behaves_like "match event"
187
+
188
+ it "contains the 'host field'" do
189
+ insist { @match_event["host"] } == Socket.gethostname
190
+ end
191
+ end
192
+ end
193
+
194
+ context "if 'new_event_on_match' is set to 'false'" do
195
+ before(:each) do
196
+ end_timestamp = @start_event["@timestamp"] + 10
197
+ end_event = end_event(ID_FIELD => @id_value, "@timestamp" => end_timestamp)
198
+ @filter.filter(end_event)
199
+
200
+ @match_event = end_event
201
+ end
202
+
203
+ context "modifies the 'end event' that" do
204
+ it_behaves_like "match event"
205
+ end
206
+ end
207
+
208
+ end
209
+ end
210
+ end
211
+ end
212
+
213
+ describe "#flush" do
214
+ def setup(timeout = 1000)
215
+ @config["timeout"] = timeout
216
+ @filter = LogStash::Filters::Elapsed.new(@config)
217
+ @filter.register
218
+
219
+ @start_event_1 = start_event(ID_FIELD => "1")
220
+ @start_event_2 = start_event(ID_FIELD => "2")
221
+ @start_event_3 = start_event(ID_FIELD => "3")
222
+
223
+ @filter.filter(@start_event_1)
224
+ @filter.filter(@start_event_2)
225
+ @filter.filter(@start_event_3)
226
+
227
+ # Force recorded events to different ages
228
+ @filter.start_events["2"].age = 25
229
+ @filter.start_events["3"].age = 26
230
+ end
231
+
232
+ it "increments the 'age' of all the recorded 'start events' by 5 seconds" do
233
+ setup()
234
+ old_age = ages()
235
+
236
+ @filter.flush()
237
+
238
+ ages().each_with_index do |new_age, i|
239
+ insist { new_age } == (old_age[i] + 5)
240
+ end
241
+ end
242
+
243
+ def ages()
244
+ @filter.start_events.each_value.map{|element| element.age }
245
+ end
246
+
247
+ context "if the 'timeout interval' is set to 30 seconds" do
248
+ before(:each) do
249
+ setup(30)
250
+
251
+ @expired_events = @filter.flush()
252
+
253
+ insist { @filter.start_events.size } == 1
254
+ insist { @expired_events.size } == 2
255
+ end
256
+
257
+ it "deletes the recorded 'start events' with 'age' greater, or equal to, the timeout" do
258
+ insist { @filter.start_events.key?("1") } == true
259
+ insist { @filter.start_events.key?("2") } == false
260
+ insist { @filter.start_events.key?("3") } == false
261
+ end
262
+
263
+ it "creates a new event with tag 'elapsed.expired_error' for each expired 'start event'" do
264
+ insist { @expired_events[0]["tags"].include?("elapsed.expired_error") } == true
265
+ insist { @expired_events[1]["tags"].include?("elapsed.expired_error") } == true
266
+ end
267
+
268
+ it "creates a new event with tag 'elapsed' for each expired 'start event'" do
269
+ insist { @expired_events[0]["tags"].include?("elapsed") } == true
270
+ insist { @expired_events[1]["tags"].include?("elapsed") } == true
271
+ end
272
+
273
+ it "creates a new event containing the 'id field' of the expired 'start event'" do
274
+ insist { @expired_events[0][ID_FIELD] } == "2"
275
+ insist { @expired_events[1][ID_FIELD] } == "3"
276
+ end
277
+
278
+ it "creates a new event containing an 'elapsed.time field' with the age of the expired 'start event'" do
279
+ insist { @expired_events[0]["elapsed.time"] } == 30
280
+ insist { @expired_events[1]["elapsed.time"] } == 31
281
+ end
282
+
283
+ it "creates a new event containing an 'elapsed.timestamp_start field' with the timestamp of the expired 'start event'" do
284
+ insist { @expired_events[0]["elapsed.timestamp_start"] } == @start_event_2["@timestamp"]
285
+ insist { @expired_events[1]["elapsed.timestamp_start"] } == @start_event_3["@timestamp"]
286
+ end
287
+
288
+ it "creates a new event containing a 'host field' for each expired 'start event'" do
289
+ insist { @expired_events[0]["host"] } == Socket.gethostname
290
+ insist { @expired_events[1]["host"] } == Socket.gethostname
291
+ end
292
+ end
293
+ end
294
+ end