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,221 @@
1
+ require "test_utils"
2
+ require "logstash/filters/noop"
3
+
4
+ #NOOP filter is perfect for testing Filters::Base features with minimal overhead
5
+ describe LogStash::Filters::NOOP do
6
+ extend LogStash::RSpec
7
+
8
+ describe "adding multiple value to one field" do
9
+ config <<-CONFIG
10
+ filter {
11
+ noop {
12
+ add_field => ["new_field", "new_value"]
13
+ add_field => ["new_field", "new_value_2"]
14
+ }
15
+ }
16
+ CONFIG
17
+
18
+ sample "example" do
19
+ insist { subject["new_field"] } == ["new_value", "new_value_2"]
20
+ end
21
+ end
22
+
23
+ describe "type parsing" do
24
+ config <<-CONFIG
25
+ filter {
26
+ noop {
27
+ type => "noop"
28
+ add_tag => ["test"]
29
+ }
30
+ }
31
+ CONFIG
32
+
33
+ sample("type" => "noop") do
34
+ insist { subject["tags"] } == ["test"]
35
+ end
36
+
37
+ sample("type" => "not_noop") do
38
+ insist { subject["tags"] }.nil?
39
+ end
40
+ end
41
+
42
+ describe "tags parsing with one tag" do
43
+ config <<-CONFIG
44
+ filter {
45
+ noop {
46
+ type => "noop"
47
+ tags => ["t1"]
48
+ add_tag => ["test"]
49
+ }
50
+ }
51
+ CONFIG
52
+
53
+ sample("type" => "noop") do
54
+ insist { subject["tags"] }.nil?
55
+ end
56
+
57
+ sample("type" => "noop", "tags" => ["t1", "t2"]) do
58
+ insist { subject["tags"] } == ["t1", "t2", "test"]
59
+ end
60
+ end
61
+
62
+ describe "tags parsing with multiple tags" do
63
+ config <<-CONFIG
64
+ filter {
65
+ noop {
66
+ type => "noop"
67
+ tags => ["t1", "t2"]
68
+ add_tag => ["test"]
69
+ }
70
+ }
71
+ CONFIG
72
+
73
+ sample("type" => "noop") do
74
+ insist { subject["tags"] }.nil?
75
+ end
76
+
77
+ sample("type" => "noop", "tags" => ["t1"]) do
78
+ insist { subject["tags"] } == ["t1"]
79
+ end
80
+
81
+ sample("type" => "noop", "tags" => ["t1", "t2"]) do
82
+ insist { subject["tags"] } == ["t1", "t2", "test"]
83
+ end
84
+
85
+ sample("type" => "noop", "tags" => ["t1", "t2", "t3"]) do
86
+ insist { subject["tags"] } == ["t1", "t2", "t3", "test"]
87
+ end
88
+ end
89
+
90
+ describe "exclude_tags with 1 tag" do
91
+ config <<-CONFIG
92
+ filter {
93
+ noop {
94
+ type => "noop"
95
+ tags => ["t1"]
96
+ add_tag => ["test"]
97
+ exclude_tags => ["t2"]
98
+ }
99
+ }
100
+ CONFIG
101
+
102
+ sample("type" => "noop") do
103
+ insist { subject["tags"] }.nil?
104
+ end
105
+
106
+ sample("type" => "noop", "tags" => ["t1"]) do
107
+ insist { subject["tags"] } == ["t1", "test"]
108
+ end
109
+
110
+ sample("type" => "noop", "tags" => ["t1", "t2"]) do
111
+ insist { subject["tags"] } == ["t1", "t2"]
112
+ end
113
+ end
114
+
115
+ describe "exclude_tags with >1 tags" do
116
+ config <<-CONFIG
117
+ filter {
118
+ noop {
119
+ type => "noop"
120
+ tags => ["t1"]
121
+ add_tag => ["test"]
122
+ exclude_tags => ["t2", "t3"]
123
+ }
124
+ }
125
+ CONFIG
126
+
127
+ sample("type" => "noop", "tags" => ["t1", "t2", "t4"]) do
128
+ insist { subject["tags"] } == ["t1", "t2", "t4"]
129
+ end
130
+
131
+ sample("type" => "noop", "tags" => ["t1", "t3", "t4"]) do
132
+ insist { subject["tags"] } == ["t1", "t3", "t4"]
133
+ end
134
+
135
+ sample("type" => "noop", "tags" => ["t1", "t4", "t5"]) do
136
+ insist { subject["tags"] } == ["t1", "t4", "t5", "test"]
137
+ end
138
+ end
139
+
140
+ describe "remove_tag" do
141
+ config <<-CONFIG
142
+ filter {
143
+ noop {
144
+ type => "noop"
145
+ tags => ["t1"]
146
+ remove_tag => ["t2", "t3"]
147
+ }
148
+ }
149
+ CONFIG
150
+
151
+ sample("type" => "noop", "tags" => ["t4"]) do
152
+ insist { subject["tags"] } == ["t4"]
153
+ end
154
+
155
+ sample("type" => "noop", "tags" => ["t1", "t2", "t3"]) do
156
+ insist { subject["tags"] } == ["t1"]
157
+ end
158
+
159
+ sample("type" => "noop", "tags" => ["t1", "t2"]) do
160
+ insist { subject["tags"] } == ["t1"]
161
+ end
162
+ end
163
+
164
+ describe "remove_tag with dynamic value" do
165
+ config <<-CONFIG
166
+ filter {
167
+ noop {
168
+ type => "noop"
169
+ tags => ["t1"]
170
+ remove_tag => ["%{blackhole}"]
171
+ }
172
+ }
173
+ CONFIG
174
+
175
+ sample("type" => "noop", "tags" => ["t1", "goaway", "t3"], "blackhole" => "goaway") do
176
+ insist { subject["tags"] } == ["t1", "t3"]
177
+ end
178
+ end
179
+
180
+ describe "remove_field" do
181
+ config <<-CONFIG
182
+ filter {
183
+ noop {
184
+ type => "noop"
185
+ remove_field => ["t2", "t3"]
186
+ }
187
+ }
188
+ CONFIG
189
+
190
+ sample("type" => "noop", "t4" => "four") do
191
+ insist { subject }.include?("t4")
192
+ end
193
+
194
+ sample("type" => "noop", "t1" => "one", "t2" => "two", "t3" => "three") do
195
+ insist { subject }.include?("t1")
196
+ reject { subject }.include?("t2")
197
+ reject { subject }.include?("t3")
198
+ end
199
+
200
+ sample("type" => "noop", "t1" => "one", "t2" => "two") do
201
+ insist { subject }.include?("t1")
202
+ reject { subject }.include?("t2")
203
+ end
204
+ end
205
+
206
+ describe "remove_field with dynamic value in field name" do
207
+ config <<-CONFIG
208
+ filter {
209
+ noop {
210
+ type => "noop"
211
+ remove_field => ["%{blackhole}"]
212
+ }
213
+ }
214
+ CONFIG
215
+
216
+ sample("type" => "noop", "blackhole" => "go", "go" => "away") do
217
+ insist { subject }.include?("blackhole")
218
+ reject { subject }.include?("go")
219
+ end
220
+ end
221
+ end
@@ -0,0 +1,441 @@
1
+ require "test_utils"
2
+ require "logstash/filters/prune"
3
+
4
+ # Currently the prune filter has bugs and I can't really tell what the intended
5
+ # behavior is.
6
+ #
7
+ # See the 'whitelist field values with interpolation' test for a commented
8
+ # explanation of my confusion.
9
+ describe LogStash::Filters::Prune, :if => false do
10
+ extend LogStash::RSpec
11
+
12
+ describe "defaults" do
13
+
14
+ config <<-CONFIG
15
+ filter {
16
+ prune { }
17
+ }
18
+ CONFIG
19
+
20
+ sample(
21
+ "firstname" => "Borat",
22
+ "lastname" => "Sagdiyev",
23
+ "fullname" => "Borat Sagdiyev",
24
+ "country" => "Kazakhstan",
25
+ "location" => "Somethere in Kazakhstan",
26
+ "hobby" => "Cloud",
27
+ "status" => "200",
28
+ "Borat_saying" => "Cloud is not ready for enterprise if is not integrate with single server running Active Directory.",
29
+ "%{hmm}" => "doh"
30
+ ) do
31
+ insist { subject["firstname"] } == "Borat"
32
+ insist { subject["lastname"] } == "Sagdiyev"
33
+ insist { subject["fullname"] } == "Borat Sagdiyev"
34
+ insist { subject["country"] } == "Kazakhstan"
35
+ insist { subject["location"] } == "Somethere in Kazakhstan"
36
+ insist { subject["hobby"] } == "Cloud"
37
+ insist { subject["status"] } == "200"
38
+ insist { subject["Borat_saying"] } == "Cloud is not ready for enterprise if is not integrate with single server running Active Directory."
39
+ insist { subject["%{hmm}"] } == nil
40
+ end
41
+ end
42
+
43
+ describe "whitelist field names" do
44
+
45
+ config <<-CONFIG
46
+ filter {
47
+ prune {
48
+ whitelist_names => [ "firstname", "(hobby|status)", "%{firstname}_saying" ]
49
+ }
50
+ }
51
+ CONFIG
52
+
53
+ sample(
54
+ "firstname" => "Borat",
55
+ "lastname" => "Sagdiyev",
56
+ "fullname" => "Borat Sagdiyev",
57
+ "country" => "Kazakhstan",
58
+ "location" => "Somethere in Kazakhstan",
59
+ "hobby" => "Cloud",
60
+ "status" => "200",
61
+ "Borat_saying" => "Cloud is not ready for enterprise if is not integrate with single server running Active Directory.",
62
+ "%{hmm}" => "doh"
63
+ ) do
64
+ insist { subject["firstname"] } == "Borat"
65
+ insist { subject["lastname"] } == nil
66
+ insist { subject["fullname"] } == nil
67
+ insist { subject["country"] } == nil
68
+ insist { subject["location"] } == nil
69
+ insist { subject["hobby"] } == "Cloud"
70
+ insist { subject["status"] } == "200"
71
+ insist { subject["Borat_saying"] } == nil
72
+ insist { subject["%{hmm}"] } == nil
73
+ end
74
+ end
75
+
76
+ describe "whitelist field names with interpolation" do
77
+
78
+ config <<-CONFIG
79
+ filter {
80
+ prune {
81
+ whitelist_names => [ "firstname", "(hobby|status)", "%{firstname}_saying" ]
82
+ interpolate => true
83
+ }
84
+ }
85
+ CONFIG
86
+
87
+ sample(
88
+ "firstname" => "Borat",
89
+ "lastname" => "Sagdiyev",
90
+ "fullname" => "Borat Sagdiyev",
91
+ "country" => "Kazakhstan",
92
+ "location" => "Somethere in Kazakhstan",
93
+ "hobby" => "Cloud",
94
+ "status" => "200",
95
+ "Borat_saying" => "Cloud is not ready for enterprise if is not integrate with single server running Active Directory.",
96
+ "%{hmm}" => "doh"
97
+ ) do
98
+ insist { subject["firstname"] } == "Borat"
99
+ insist { subject["lastname"] } == nil
100
+ insist { subject["fullname"] } == nil
101
+ insist { subject["country"] } == nil
102
+ insist { subject["location"] } == nil
103
+ insist { subject["hobby"] } == "Cloud"
104
+ insist { subject["status"] } == "200"
105
+ insist { subject["Borat_saying"] } == "Cloud is not ready for enterprise if is not integrate with single server running Active Directory."
106
+ insist { subject["%{hmm}"] } == nil
107
+ end
108
+ end
109
+
110
+ describe "blacklist field names" do
111
+
112
+ config <<-CONFIG
113
+ filter {
114
+ prune {
115
+ blacklist_names => [ "firstname", "(hobby|status)", "%{firstname}_saying" ]
116
+ }
117
+ }
118
+ CONFIG
119
+
120
+ sample(
121
+ "firstname" => "Borat",
122
+ "lastname" => "Sagdiyev",
123
+ "fullname" => "Borat Sagdiyev",
124
+ "country" => "Kazakhstan",
125
+ "location" => "Somethere in Kazakhstan",
126
+ "hobby" => "Cloud",
127
+ "status" => "200",
128
+ "Borat_saying" => "Cloud is not ready for enterprise if is not integrate with single server running Active Directory.",
129
+ "%{hmm}" => "doh"
130
+ ) do
131
+ insist { subject["firstname"] } == nil
132
+ insist { subject["lastname"] } == "Sagdiyev"
133
+ insist { subject["fullname"] } == "Borat Sagdiyev"
134
+ insist { subject["country"] } == "Kazakhstan"
135
+ insist { subject["location"] } == "Somethere in Kazakhstan"
136
+ insist { subject["hobby"] } == nil
137
+ insist { subject["status"] } == nil
138
+ insist { subject["Borat_saying"] } == "Cloud is not ready for enterprise if is not integrate with single server running Active Directory."
139
+ insist { subject["%{hmm}"] } == "doh"
140
+ end
141
+ end
142
+
143
+ describe "blacklist field names with interpolation" do
144
+
145
+ config <<-CONFIG
146
+ filter {
147
+ prune {
148
+ blacklist_names => [ "firstname", "(hobby|status)", "%{firstname}_saying" ]
149
+ interpolate => true
150
+ }
151
+ }
152
+ CONFIG
153
+
154
+ sample(
155
+ "firstname" => "Borat",
156
+ "lastname" => "Sagdiyev",
157
+ "fullname" => "Borat Sagdiyev",
158
+ "country" => "Kazakhstan",
159
+ "location" => "Somethere in Kazakhstan",
160
+ "hobby" => "Cloud",
161
+ "status" => "200",
162
+ "Borat_saying" => "Cloud is not ready for enterprise if is not integrate with single server running Active Directory.",
163
+ "%{hmm}" => "doh"
164
+ ) do
165
+ insist { subject["firstname"] } == nil
166
+ insist { subject["lastname"] } == "Sagdiyev"
167
+ insist { subject["fullname"] } == "Borat Sagdiyev"
168
+ insist { subject["country"] } == "Kazakhstan"
169
+ insist { subject["location"] } == "Somethere in Kazakhstan"
170
+ insist { subject["hobby"] } == nil
171
+ insist { subject["status"] } == nil
172
+ insist { subject["Borat_saying"] } == nil
173
+ insist { subject["%{hmm}"] } == "doh"
174
+ end
175
+ end
176
+
177
+ describe "whitelist field values" do
178
+
179
+ config <<-CONFIG
180
+ filter {
181
+ prune {
182
+ # This should only permit fields named 'firstname', 'fullname',
183
+ # 'location', 'status', etc.
184
+ whitelist_values => [ "firstname", "^Borat$",
185
+ "fullname", "%{firstname} Sagdiyev",
186
+ "location", "no no no",
187
+ "status", "^2",
188
+ "%{firstname}_saying", "%{hobby}.*Active" ]
189
+ }
190
+ }
191
+ CONFIG
192
+
193
+ sample(
194
+ "firstname" => "Borat",
195
+ "lastname" => "Sagdiyev",
196
+ "fullname" => "Borat Sagdiyev",
197
+ "country" => "Kazakhstan",
198
+ "location" => "Somethere in Kazakhstan",
199
+ "hobby" => "Cloud",
200
+ "status" => "200",
201
+ "Borat_saying" => "Cloud is not ready for enterprise if is not integrate with single server running Active Directory.",
202
+ "%{hmm}" => "doh"
203
+ ) do
204
+ insist { subject["firstname"] } == "Borat"
205
+
206
+ # TODO(sissel): According to the config above, this should be nil because
207
+ # it is not in the list of whitelisted fields, but we expect it to be
208
+ # "Sagdiyev" ? I am confused.
209
+ insist { subject["lastname"] } == "Sagdiyev"
210
+ insist { subject["fullname"] } == nil
211
+ insist { subject["country"] } == "Kazakhstan"
212
+ insist { subject["location"] } == nil
213
+ insist { subject["hobby"] } == "Cloud"
214
+ insist { subject["status"] } == "200"
215
+ insist { subject["Borat_saying"] } == "Cloud is not ready for enterprise if is not integrate with single server running Active Directory."
216
+
217
+ # TODO(sissel): Contrary to the 'lastname' check, we expect %{hmm} field
218
+ # to be nil because it is not whitelisted, yes? Contradictory insists
219
+ # here. I don't know what the intended behavior is... Seems like
220
+ # whitelist means 'anything not here' but since this test is written
221
+ # confusingly, I dont' know how to move forward.
222
+ insist { subject["%{hmm}"] } == nil
223
+ end
224
+ end
225
+
226
+ describe "whitelist field values with interpolation" do
227
+
228
+ config <<-CONFIG
229
+ filter {
230
+ prune {
231
+ whitelist_values => [ "firstname", "^Borat$",
232
+ "fullname", "%{firstname} Sagdiyev",
233
+ "location", "no no no",
234
+ "status", "^2",
235
+ "%{firstname}_saying", "%{hobby}.*Active" ]
236
+ interpolate => true
237
+ }
238
+ }
239
+ CONFIG
240
+
241
+ sample(
242
+ "firstname" => "Borat",
243
+ "lastname" => "Sagdiyev",
244
+ "fullname" => "Borat Sagdiyev",
245
+ "country" => "Kazakhstan",
246
+ "location" => "Somethere in Kazakhstan",
247
+ "hobby" => "Cloud",
248
+ "status" => "200",
249
+ "Borat_saying" => "Cloud is not ready for enterprise if is not integrate with single server running Active Directory.",
250
+ "%{hmm}" => "doh"
251
+ ) do
252
+ insist { subject["firstname"] } == "Borat"
253
+ insist { subject["lastname"] } == "Sagdiyev"
254
+ insist { subject["fullname"] } == "Borat Sagdiyev"
255
+ insist { subject["country"] } == "Kazakhstan"
256
+ insist { subject["location"] } == nil
257
+ insist { subject["hobby"] } == "Cloud"
258
+ insist { subject["status"] } == "200"
259
+ insist { subject["Borat_saying"] } == "Cloud is not ready for enterprise if is not integrate with single server running Active Directory."
260
+ insist { subject["%{hmm}"] } == nil
261
+ end
262
+ end
263
+
264
+ describe "blacklist field values" do
265
+
266
+ config <<-CONFIG
267
+ filter {
268
+ prune {
269
+ blacklist_values => [ "firstname", "^Borat$",
270
+ "fullname", "%{firstname} Sagdiyev",
271
+ "location", "no no no",
272
+ "status", "^2",
273
+ "%{firstname}_saying", "%{hobby}.*Active" ]
274
+ }
275
+ }
276
+ CONFIG
277
+
278
+ sample(
279
+ "firstname" => "Borat",
280
+ "lastname" => "Sagdiyev",
281
+ "fullname" => "Borat Sagdiyev",
282
+ "country" => "Kazakhstan",
283
+ "location" => "Somethere in Kazakhstan",
284
+ "hobby" => "Cloud",
285
+ "status" => "200",
286
+ "Borat_saying" => "Cloud is not ready for enterprise if is not integrate with single server running Active Directory.",
287
+ "%{hmm}" => "doh"
288
+ ) do
289
+ insist { subject["firstname"] } == nil
290
+ insist { subject["lastname"] } == "Sagdiyev"
291
+ insist { subject["fullname"] } == "Borat Sagdiyev"
292
+ insist { subject["country"] } == "Kazakhstan"
293
+ insist { subject["location"] } == "Somethere in Kazakhstan"
294
+ insist { subject["hobby"] } == "Cloud"
295
+ insist { subject["status"] } == nil
296
+ insist { subject["Borat_saying"] } == "Cloud is not ready for enterprise if is not integrate with single server running Active Directory."
297
+ insist { subject["%{hmm}"] } == nil
298
+ end
299
+ end
300
+
301
+ describe "blacklist field values with interpolation" do
302
+
303
+ config <<-CONFIG
304
+ filter {
305
+ prune {
306
+ blacklist_values => [ "firstname", "^Borat$",
307
+ "fullname", "%{firstname} Sagdiyev",
308
+ "location", "no no no",
309
+ "status", "^2",
310
+ "%{firstname}_saying", "%{hobby}.*Active" ]
311
+ interpolate => true
312
+ }
313
+ }
314
+ CONFIG
315
+
316
+ sample(
317
+ "firstname" => "Borat",
318
+ "lastname" => "Sagdiyev",
319
+ "fullname" => "Borat Sagdiyev",
320
+ "country" => "Kazakhstan",
321
+ "location" => "Somethere in Kazakhstan",
322
+ "hobby" => "Cloud",
323
+ "status" => "200",
324
+ "Borat_saying" => "Cloud is not ready for enterprise if is not integrate with single server running Active Directory.",
325
+ "%{hmm}" => "doh"
326
+ ) do
327
+ insist { subject["firstname"] } == nil
328
+ insist { subject["lastname"] } == "Sagdiyev"
329
+ insist { subject["fullname"] } == nil
330
+ insist { subject["country"] } == "Kazakhstan"
331
+ insist { subject["location"] } == "Somethere in Kazakhstan"
332
+ insist { subject["hobby"] } == "Cloud"
333
+ insist { subject["status"] } == nil
334
+ insist { subject["Borat_saying"] } == nil
335
+ insist { subject["%{hmm}"] } == nil
336
+ end
337
+ end
338
+
339
+ describe "whitelist field values on fields witn array values" do
340
+
341
+ config <<-CONFIG
342
+ filter {
343
+ prune {
344
+ whitelist_values => [ "status", "^(1|2|3)",
345
+ "xxx", "3",
346
+ "error", "%{blah}" ]
347
+ }
348
+ }
349
+ CONFIG
350
+
351
+ sample(
352
+ "blah" => "foo",
353
+ "xxx" => [ "1 2 3", "3 4 5" ],
354
+ "status" => [ "100", "200", "300", "400", "500" ],
355
+ "error" => [ "This is foolish" , "Need smthing smart too" ]
356
+ ) do
357
+ insist { subject["blah"] } == "foo"
358
+ insist { subject["error"] } == nil
359
+ insist { subject["xxx"] } == [ "1 2 3", "3 4 5" ]
360
+ insist { subject["status"] } == [ "100", "200", "300" ]
361
+ end
362
+ end
363
+
364
+ describe "blacklist field values on fields witn array values" do
365
+
366
+ config <<-CONFIG
367
+ filter {
368
+ prune {
369
+ blacklist_values => [ "status", "^(1|2|3)",
370
+ "xxx", "3",
371
+ "error", "%{blah}" ]
372
+ }
373
+ }
374
+ CONFIG
375
+
376
+ sample(
377
+ "blah" => "foo",
378
+ "xxx" => [ "1 2 3", "3 4 5" ],
379
+ "status" => [ "100", "200", "300", "400", "500" ],
380
+ "error" => [ "This is foolish", "Need smthing smart too" ]
381
+ ) do
382
+ insist { subject["blah"] } == "foo"
383
+ insist { subject["error"] } == [ "This is foolish", "Need smthing smart too" ]
384
+ insist { subject["xxx"] } == nil
385
+ insist { subject["status"] } == [ "400", "500" ]
386
+ end
387
+ end
388
+
389
+ describe "whitelist field values with interpolation on fields witn array values" do
390
+
391
+ config <<-CONFIG
392
+ filter {
393
+ prune {
394
+ whitelist_values => [ "status", "^(1|2|3)",
395
+ "xxx", "3",
396
+ "error", "%{blah}" ]
397
+ interpolate => true
398
+ }
399
+ }
400
+ CONFIG
401
+
402
+ sample(
403
+ "blah" => "foo",
404
+ "xxx" => [ "1 2 3", "3 4 5" ],
405
+ "status" => [ "100", "200", "300", "400", "500" ],
406
+ "error" => [ "This is foolish" , "Need smthing smart too" ]
407
+ ) do
408
+ insist { subject["blah"] } == "foo"
409
+ insist { subject["error"] } == [ "This is foolish" ]
410
+ insist { subject["xxx"] } == [ "1 2 3", "3 4 5" ]
411
+ insist { subject["status"] } == [ "100", "200", "300" ]
412
+ end
413
+ end
414
+
415
+ describe "blacklist field values with interpolation on fields witn array values" do
416
+
417
+ config <<-CONFIG
418
+ filter {
419
+ prune {
420
+ blacklist_values => [ "status", "^(1|2|3)",
421
+ "xxx", "3",
422
+ "error", "%{blah}" ]
423
+ interpolate => true
424
+ }
425
+ }
426
+ CONFIG
427
+
428
+ sample(
429
+ "blah" => "foo",
430
+ "xxx" => [ "1 2 3", "3 4 5" ],
431
+ "status" => [ "100", "200", "300", "400", "500" ],
432
+ "error" => [ "This is foolish" , "Need smthing smart too" ]
433
+ ) do
434
+ insist { subject["blah"] } == "foo"
435
+ insist { subject["error"] } == [ "Need smthing smart too" ]
436
+ insist { subject["xxx"] } == nil
437
+ insist { subject["status"] } == [ "400", "500" ]
438
+ end
439
+ end
440
+
441
+ end