fluent-plugin-label-router 0.2.4 → 0.2.5
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 +4 -4
- data/fluent-plugin-label-router.gemspec +2 -1
- data/lib/fluent/plugin/out_label_router.rb +26 -8
- data/test/plugin/test_out_label_router.rb +4 -4
- metadata +16 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7f98b66b8fcb6667342e2c8e30b1c20eaa07f949eab93514cceba98872502d7f
         | 
| 4 | 
            +
              data.tar.gz: 7316dcea967a1dc2160b7996fdd8718d307809e86ab7900f5195b7b7f8e57b3e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c180a282410db01da6f356598cda074390bcfa56e02fa53d8197605228a5b20679f17af766054de9109906829f6bb8efd43d46a968d8f7ad5a05618a0d41c539
         | 
| 7 | 
            +
              data.tar.gz: 2b74fcc7c70de9fd1cd06ff9f2d070befebc48544962e2eba828c72a131f79358d2f0f877af332f236da18c409cce52425babf24853af706cacbcafc3d68ddf2
         | 
| @@ -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-label-router"
         | 
| 6 | 
            -
              spec.version = "0.2. | 
| 6 | 
            +
              spec.version = "0.2.5"
         | 
| 7 7 | 
             
              spec.authors = ["Banzai Cloud"]
         | 
| 8 8 | 
             
              spec.email   = ["info@banzaicloud.com"]
         | 
| 9 9 |  | 
| @@ -23,5 +23,6 @@ Gem::Specification.new do |spec| | |
| 23 23 | 
             
              spec.add_development_dependency "bundler", "~> 1.14"
         | 
| 24 24 | 
             
              spec.add_development_dependency "rake", "~> 12.0"
         | 
| 25 25 | 
             
              spec.add_development_dependency "test-unit", "~> 3.0"
         | 
| 26 | 
            +
              spec.add_dependency "prometheus-client", ">= 2.1.0"
         | 
| 26 27 | 
             
              spec.add_runtime_dependency "fluentd", [">= 0.14.10", "< 2"]
         | 
| 27 28 | 
             
            end
         | 
| @@ -11,10 +11,11 @@ | |
| 11 11 | 
             
            # distributed under the License is distributed on an "AS IS" BASIS,
         | 
| 12 12 | 
             
            # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         | 
| 13 13 | 
             
            # See the License for the specific language governing permissions and
         | 
| 14 | 
            -
            # limitations under the License | 
| 14 | 
            +
            # limitations under the License
         | 
| 15 15 |  | 
| 16 16 | 
             
            require "fluent/plugin/output"
         | 
| 17 | 
            -
            require ' | 
| 17 | 
            +
            require 'prometheus/client'
         | 
| 18 | 
            +
             | 
| 18 19 |  | 
| 19 20 | 
             
            module Fluent
         | 
| 20 21 | 
             
              module Plugin
         | 
| @@ -40,6 +41,8 @@ module Fluent | |
| 40 41 | 
             
                    config_param :@label, :string, :default => nil
         | 
| 41 42 | 
             
                    desc "New tag if selectors matched"
         | 
| 42 43 | 
             
                    config_param :tag, :string, :default => ""
         | 
| 44 | 
            +
                    desc "Extra labels for metrics"
         | 
| 45 | 
            +
                    config_param :metrics_labels, :hash, :default => {}
         | 
| 43 46 |  | 
| 44 47 | 
             
                    config_section :match, param_name: :matches, multi: true do
         | 
| 45 48 | 
             
                      desc "Label definition to match record. Example: app:nginx. You can specify more values as comma separated list: key1:value1,key2:value2"
         | 
| @@ -56,10 +59,22 @@ module Fluent | |
| 56 59 | 
             
                  end
         | 
| 57 60 |  | 
| 58 61 | 
             
                  class Route
         | 
| 59 | 
            -
                    def initialize( | 
| 62 | 
            +
                    def initialize(rule, router, registry)
         | 
| 60 63 | 
             
                      @router = router
         | 
| 61 | 
            -
                      @matches = matches
         | 
| 62 | 
            -
                      @tag = tag
         | 
| 64 | 
            +
                      @matches = rule['matches']
         | 
| 65 | 
            +
                      @tag = rule['tag'].to_s
         | 
| 66 | 
            +
                      @label = rule['@label']
         | 
| 67 | 
            +
                      @metrics_labels = (rule['metrics_labels'].map { |k, v| [k.to_sym, v] }.to_h if rule['metrics_labels'])
         | 
| 68 | 
            +
                      @counter = nil
         | 
| 69 | 
            +
                      unless registry.nil?
         | 
| 70 | 
            +
                          @counter = registry.counter(:fluentd_router_records_total, "Total number of events router for the flow")
         | 
| 71 | 
            +
                      end
         | 
| 72 | 
            +
                    end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                    def get_labels
         | 
| 75 | 
            +
                      default = { 'flow': @label }
         | 
| 76 | 
            +
                      labels = default.merge(@metrics_labels)
         | 
| 77 | 
            +
                      labels
         | 
| 63 78 | 
             
                    end
         | 
| 64 79 |  | 
| 65 80 | 
             
                    # Evaluate selectors
         | 
| @@ -113,6 +128,8 @@ module Fluent | |
| 113 128 | 
             
                      else
         | 
| 114 129 | 
             
                        @router.emit_stream(@tag, es)
         | 
| 115 130 | 
             
                      end
         | 
| 131 | 
            +
                      # increment the counter for a given label set
         | 
| 132 | 
            +
                      @counter&.increment(by: es.size, labels: get_labels)
         | 
| 116 133 | 
             
                    end
         | 
| 117 134 |  | 
| 118 135 | 
             
                    def match_labels(input, match)
         | 
| @@ -176,18 +193,19 @@ module Fluent | |
| 176 193 |  | 
| 177 194 | 
             
                  def configure(conf)
         | 
| 178 195 | 
             
                    super
         | 
| 196 | 
            +
                    @registry = (::Prometheus::Client.registry if @metrics)
         | 
| 179 197 | 
             
                    @route_map = Hash.new { |h, k| h[k] = Set.new }
         | 
| 180 198 | 
             
                    @mutex = Mutex.new
         | 
| 181 199 | 
             
                    @routers = []
         | 
| 182 200 | 
             
                    @default_router = nil
         | 
| 183 201 | 
             
                    @routes.each do |rule|
         | 
| 184 202 | 
             
                      route_router = event_emitter_router(rule['@label'])
         | 
| 185 | 
            -
                       | 
| 186 | 
            -
                      @routers << Route.new(rule.matches, rule.tag.to_s, route_router)
         | 
| 203 | 
            +
                      @routers << Route.new(rule, route_router, @registry)
         | 
| 187 204 | 
             
                    end
         | 
| 188 205 |  | 
| 189 206 | 
             
                    if @default_route != '' or @default_tag != ''
         | 
| 190 | 
            -
                       | 
| 207 | 
            +
                      default_rule = { 'matches' => nil, 'tag' => @default_tag, '@label' => @default_route}
         | 
| 208 | 
            +
                      @default_router = Route.new(default_rule, event_emitter_router(@default_route), @registry)
         | 
| 191 209 | 
             
                    end
         | 
| 192 210 |  | 
| 193 211 | 
             
                    @access_to_labels = record_accessor_create("$.kubernetes.labels")
         | 
| @@ -76,7 +76,7 @@ class LabelRouterOutputTest < Test::Unit::TestCase | |
| 76 76 | 
             
                  d = Fluent::Test::Driver::BaseOwner.new(Fluent::Plugin::LabelRouterOutput)
         | 
| 77 77 | 
             
                  d.configure(routing_conf)
         | 
| 78 78 |  | 
| 79 | 
            -
                  r1 = Fluent::Plugin::LabelRouterOutput::Route.new(d.instance.routes[0] | 
| 79 | 
            +
                  r1 = Fluent::Plugin::LabelRouterOutput::Route.new(d.instance.routes[0], nil,nil)
         | 
| 80 80 | 
             
                  # Selector matched: GO
         | 
| 81 81 | 
             
                  assert_equal(true, r1.match?(labels: { 'app' => 'app1' }, namespace: ''))
         | 
| 82 82 | 
             
                  # Exclude match: NO GO
         | 
| @@ -84,7 +84,7 @@ class LabelRouterOutputTest < Test::Unit::TestCase | |
| 84 84 | 
             
                  # Nothing matched: NO GO
         | 
| 85 85 | 
             
                  assert_equal(false, r1.match?(labels: { 'app3' => 'app2' }, namespace: ''))
         | 
| 86 86 |  | 
| 87 | 
            -
                  r2 = Fluent::Plugin::LabelRouterOutput::Route.new(d.instance.routes[1] | 
| 87 | 
            +
                  r2 = Fluent::Plugin::LabelRouterOutput::Route.new(d.instance.routes[1], nil,nil)
         | 
| 88 88 | 
             
                  # Match selector and namespace: GO
         | 
| 89 89 | 
             
                  assert_equal(true, r2.match?(labels: { 'app' => 'app1' }, namespace: 'test'))
         | 
| 90 90 | 
             
                  # Exclude via namespace
         | 
| @@ -92,12 +92,12 @@ class LabelRouterOutputTest < Test::Unit::TestCase | |
| 92 92 | 
             
                  # Nothing matched: NO GO
         | 
| 93 93 | 
             
                  assert_equal(false, r2.match?(labels: { 'app3' => 'app' }, namespace: 'system'))
         | 
| 94 94 |  | 
| 95 | 
            -
                  r3 = Fluent::Plugin::LabelRouterOutput::Route.new(d.instance.routes[2] | 
| 95 | 
            +
                  r3 = Fluent::Plugin::LabelRouterOutput::Route.new(d.instance.routes[2], nil,nil)
         | 
| 96 96 | 
             
                  assert_equal(true, r3.match?(labels: { 'app' => 'nginx' }, namespace: 'dev'))
         | 
| 97 97 | 
             
                  assert_equal(true, r3.match?(labels: { 'app' => 'nginx' }, namespace: 'sandbox'))
         | 
| 98 98 | 
             
                  assert_equal(false, r3.match?(labels: { 'app' => 'nginx2' }, namespace: 'sandbox'))
         | 
| 99 99 |  | 
| 100 | 
            -
                  r4 = Fluent::Plugin::LabelRouterOutput::Route.new(d.instance.routes[3] | 
| 100 | 
            +
                  r4 = Fluent::Plugin::LabelRouterOutput::Route.new(d.instance.routes[3], nil,nil)
         | 
| 101 101 | 
             
                  # Matching container name
         | 
| 102 102 | 
             
                  assert_equal(true, r4.match?(labels: { 'app' => 'nginx' }, namespace: 'dev', container: 'mycontainer'))
         | 
| 103 103 | 
             
                  # Missing container name is equal to wrong container
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: fluent-plugin-label-router
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.5
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Banzai Cloud
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2021-05-13 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -52,6 +52,20 @@ dependencies: | |
| 52 52 | 
             
                - - "~>"
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 54 | 
             
                    version: '3.0'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: prometheus-client
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - ">="
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: 2.1.0
         | 
| 62 | 
            +
              type: :runtime
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - ">="
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: 2.1.0
         | 
| 55 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 70 | 
             
              name: fluentd
         | 
| 57 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         |