fluent-plugin-http-pull 0.4.0 → 0.5.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 533830e127ee4cbc297f6dcfd1c4a3a08882ca9d
4
- data.tar.gz: a689af041c24cc88e64fd61b14c54b42dbfe6450
3
+ metadata.gz: 56348b6b227f806a70821eaed3fafddcdc94ee6c
4
+ data.tar.gz: 34e8e11a24b5b2dac781f4556f0e534b08e403fc
5
5
  SHA512:
6
- metadata.gz: a813fd4dbee8607a9188676e0fa01f477aee8747064f848767a06949825973a09c1f233d767dd410911d6471c0d73714d586cf6cc2d0d518a9e63adb6342de5d
7
- data.tar.gz: 616f089b1f0ebacc78fe871c21f4ee9131c6746e1bc88a905dee489f835f8cb5ffac409863b0f930b0235099926a9b115b8def19deb8c8a78585b3d6cf44f002
6
+ metadata.gz: 0b5aeea895ccc1cfaf7923f8c21c9bdb54328677d384e66c508c289b0da9f8a7ab23778eb8097323e18822f493a7f1ad491544750d1230e2597910620d90e129
7
+ data.tar.gz: b0b8ced808f05bdb9c0804af5dad1c7b171c6f6e096d5eab29d840ad6305ec079276692eea1a45b875629ed26cb82650be4462c7912c8831eb96145b222fb9d5
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source "https://rubygems.org"
2
-
3
- gemspec
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = "fluent-plugin-http-pull"
6
- spec.version = "0.4.0"
6
+ spec.version = "0.5.0"
7
7
  spec.authors = ["filepang"]
8
8
  spec.email = ["filepang@gmail.com"]
9
9
 
@@ -45,11 +45,30 @@ module Fluent
45
45
  desc 'password of basic auth'
46
46
  config_param :password, :string, default: nil
47
47
 
48
+ config_section :response_header, param_name: :response_headers, multi: true do
49
+ desc 'The name of header to cature from response'
50
+ config_param :header, :string
51
+ end
52
+
53
+ config_section :request_header, param_name: :request_headers, multi: true do
54
+ desc 'The name of request header'
55
+ config_param :header, :string
56
+
57
+ desc 'The value of request header'
58
+ config_param :value, :string
59
+ end
60
+
48
61
  def configure(conf)
49
62
  compat_parameters_convert(conf, :parser)
50
63
  super
51
64
 
52
65
  @parser = parser_create unless @status_only
66
+ @_request_headers = @request_headers.map do |section|
67
+ header = section["header"]
68
+ value = section["value"]
69
+
70
+ [header.to_sym, value]
71
+ end.to_h
53
72
  end
54
73
 
55
74
  def start
@@ -67,10 +86,20 @@ module Fluent
67
86
  request_options[:proxy] = @proxy if @proxy
68
87
  request_options[:user] = @user if @user
69
88
  request_options[:password] = @password if @password
89
+ request_options[:headers] = @_request_headers unless @request_headers.empty?
70
90
 
71
91
  res = RestClient::Request.execute request_options
92
+
72
93
  record["status"] = res.code
73
94
  record["body"] = res.body
95
+
96
+ record["header"] = {} unless @response_headers.empty?
97
+ @response_headers.each do |section|
98
+ name = section["header"]
99
+ symbolize_name = name.downcase.gsub(/-/, '_').to_sym
100
+
101
+ record["header"][name] = res.headers[symbolize_name]
102
+ end
74
103
  rescue StandardError => err
75
104
  if err.respond_to? :http_code
76
105
  record["status"] = err.http_code || 0
@@ -11,6 +11,7 @@ class StubServer
11
11
  @server.mount_proc '/internal_error', &method(:internal_error)
12
12
  @server.mount_proc '/redirect', &method(:redirect)
13
13
  @server.mount_proc '/protected', &method(:protected)
14
+ @server.mount_proc '/custom_header', &method(:custom_header)
14
15
  end
15
16
 
16
17
  def start
@@ -81,4 +82,12 @@ class StubServer
81
82
  res['Content-Type'] = 'application/json'
82
83
  res.body = '{ "status": "OK" }'
83
84
  end
85
+
86
+ def custom_header(req, res)
87
+ res.header["HATSUNE-MIKU"] = req["HATSUNE-MIKU"] if req["HATSUNE-MIKU"]
88
+
89
+ res.status = 200
90
+ res['Content-Type'] = 'application/json'
91
+ res.body = '{ "status": "OK" }'
92
+ end
84
93
  end
@@ -453,6 +453,109 @@ class HttpPullInputTest < Test::Unit::TestCase
453
453
  end
454
454
  end
455
455
 
456
+ sub_test_case "capture response header" do
457
+ TEST_INTERVAL_3_RES_HEADER_CONFIG = %[
458
+ tag test
459
+ url http://127.0.0.1:3939
460
+
461
+ interval 3s
462
+ format json
463
+
464
+ <response_header>
465
+ header Content-Type
466
+ </response_header>
467
+ ]
468
+
469
+ TEST_INTERVAL_3_RES_MULTI_HEADER_CONFIG = %[
470
+ tag test
471
+ url http://127.0.0.1:3939
472
+
473
+ interval 3s
474
+ format json
475
+
476
+ <response_header>
477
+ header Content-Type
478
+ </response_header>
479
+
480
+ <response_header>
481
+ header Content-Length
482
+ </response_header>
483
+ ]
484
+
485
+ test 'interval 3 with single header' do
486
+ d = create_driver TEST_INTERVAL_3_RES_HEADER_CONFIG
487
+ assert_equal("test", d.instance.tag)
488
+ assert_equal(3, d.instance.interval)
489
+
490
+ d.run(timeout: 8) do
491
+ sleep 7
492
+ end
493
+ assert_equal(2, d.events.size)
494
+
495
+ d.events.each do |tag, time, record|
496
+ assert_equal("test", tag)
497
+
498
+ assert_equal({"url"=>"http://127.0.0.1:3939","status"=>200,"message"=>{"status"=>"OK"},"header"=>{"Content-Type"=>"application/json"}}, record)
499
+ assert(time.is_a?(Fluent::EventTime))
500
+ end
501
+ end
502
+
503
+ test 'interval 3 with multiple header' do
504
+ d = create_driver TEST_INTERVAL_3_RES_MULTI_HEADER_CONFIG
505
+ assert_equal("test", d.instance.tag)
506
+ assert_equal(3, d.instance.interval)
507
+
508
+ d.run(timeout: 8) do
509
+ sleep 7
510
+ end
511
+ assert_equal(2, d.events.size)
512
+
513
+ d.events.each do |tag, time, record|
514
+ assert_equal("test", tag)
515
+
516
+ assert_equal({"url"=>"http://127.0.0.1:3939","status"=>200,"message"=>{"status"=>"OK"},"header"=>{"Content-Type"=>"application/json","Content-Length"=>"18"}}, record)
517
+ assert(time.is_a?(Fluent::EventTime))
518
+ end
519
+ end
520
+ end
521
+
522
+ sub_test_case "custom request header" do
523
+ TEST_INTERVAL_3_CUSTOM_HEADER_CONFIG = %[
524
+ tag test
525
+ url http://127.0.0.1:3939/custom_header
526
+
527
+ interval 3s
528
+ format json
529
+
530
+ <request_header>
531
+ header HATSUNE-MIKU
532
+ value 3939
533
+ </request_header>
534
+
535
+ <response_header>
536
+ header HATSUNE-MIKU
537
+ </response_header>
538
+ ]
539
+
540
+ test 'interval 3 with single header' do
541
+ d = create_driver TEST_INTERVAL_3_CUSTOM_HEADER_CONFIG
542
+ assert_equal("test", d.instance.tag)
543
+ assert_equal(3, d.instance.interval)
544
+
545
+ d.run(timeout: 8) do
546
+ sleep 7
547
+ end
548
+ assert_equal(2, d.events.size)
549
+
550
+ d.events.each do |tag, time, record|
551
+ assert_equal("test", tag)
552
+
553
+ assert_equal({"url"=>"http://127.0.0.1:3939/custom_header","status"=>200,"message"=>{"status"=>"OK"},"header"=>{"HATSUNE-MIKU"=>"3939"}}, record)
554
+ assert(time.is_a?(Fluent::EventTime))
555
+ end
556
+ end
557
+ end
558
+
456
559
  private
457
560
 
458
561
  def create_driver(conf)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-http-pull
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - filepang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-01 00:00:00.000000000 Z
11
+ date: 2017-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -167,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
167
  version: '0'
168
168
  requirements: []
169
169
  rubyforge_project:
170
- rubygems_version: 2.5.2
170
+ rubygems_version: 2.6.13
171
171
  signing_key:
172
172
  specification_version: 4
173
173
  summary: fluent-plugin-http-pull