kubernetes-health 3.8.0 → 3.10.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 +4 -4
- data/README.md +10 -0
- data/config/initializers/enable_rack_on_sidekiq.rb +1 -1
- data/kubernetes-health.gemspec +1 -1
- data/lib/kubernetes/health/config.rb +4 -4
- data/lib/kubernetes/health/rack_on_sidekiq.rb +15 -12
- data/lib/kubernetes/health/sidekiq_options_resolver.rb +13 -0
- data/lib/kubernetes/health/version.rb +1 -1
- data/lib/kubernetes/health.rb +1 -0
- metadata +11 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: f3ad95fa7855c4e929a649861a3b8e76c4c5178d4f0a9d15d4f59dbecd412d05
         | 
| 4 | 
            +
              data.tar.gz: 8ddc6657bc1625af9a8397717a5c624363117396aa9f356d686d020753925a29
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 0b50588ad78d95dc0bb29ca932062eaf30ed6fdc5174e6e5a1c158d8c97494315ecde1bc1a67ebf4b53cb769dbabdbf8e8e998a78592a62a41cd108f36ee5f79
         | 
| 7 | 
            +
              data.tar.gz: 707b24d2add09186c55db3899765b3ef560c55d8941785ea6b0a727189305dfe178885839f14ce498da1fa070fff67a38c8f42e925c7f927cb2193483c616815
         | 
    
        data/README.md
    CHANGED
    
    | @@ -131,6 +131,12 @@ Kubernetes::Health::Config.route_liveness = '/liveness' | |
| 131 131 | 
             
            Kubernetes::Health::Config.route_readiness = '/readiness'
         | 
| 132 132 | 
             
            Kubernetes::Health::Config.route_metrics = '/metrics'
         | 
| 133 133 | 
             
            ```
         | 
| 134 | 
            +
            or using env
         | 
| 135 | 
            +
            ```
         | 
| 136 | 
            +
            KUBERNETES_HEALTH_LIVENESS_ROUTE='/liveness'
         | 
| 137 | 
            +
            KUBERNETES_HEALTH_READINESS_ROUTE='/readiness'
         | 
| 138 | 
            +
            KUBERNETES_HEALTH_RESPONSE_FORMAT='/metrics'
         | 
| 139 | 
            +
            ```
         | 
| 134 140 |  | 
| 135 141 | 
             
            ## Response format
         | 
| 136 142 | 
             
            If you are using `https://github.com/zalando-incubator/kube-metrics-adapter` you will want to use `json` format.
         | 
| @@ -139,6 +145,10 @@ Default is `prometheus`. | |
| 139 145 | 
             
            ```
         | 
| 140 146 | 
             
            Kubernetes::Health::Config.response_format = 'json'
         | 
| 141 147 | 
             
            ```
         | 
| 148 | 
            +
            or using env
         | 
| 149 | 
            +
            ```
         | 
| 150 | 
            +
            KUBERNETES_HEALTH_RESPONSE_FORMAT=json
         | 
| 151 | 
            +
            ```
         | 
| 142 152 |  | 
| 143 153 | 
             
            ## Customizing requests logs
         | 
| 144 154 |  | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            require 'kubernetes/health/rack_on_sidekiq'
         | 
| 2 2 |  | 
| 3 | 
            -
            if Kubernetes::Health::Config.enable_rack_on_sidekiq &&  | 
| 3 | 
            +
            if Kubernetes::Health::Config.enable_rack_on_sidekiq && Kubernetes::Health::SidekiqOptionsResolver[:concurrency].positive?
         | 
| 4 4 | 
             
              Thread.new do
         | 
| 5 5 | 
             
                Rack::Handler.default.run Kubernetes::Health::RackOnSidekiq.new
         | 
| 6 6 | 
             
              end
         | 
    
        data/kubernetes-health.gemspec
    CHANGED
    
    | @@ -31,6 +31,6 @@ Gem::Specification.new do |spec| | |
| 31 31 | 
             
              spec.add_development_dependency "rspec"
         | 
| 32 32 | 
             
              spec.add_dependency "rack"
         | 
| 33 33 | 
             
              spec.add_dependency "rails"
         | 
| 34 | 
            -
              spec.add_runtime_dependency 'prometheus-client', ' | 
| 34 | 
            +
              spec.add_runtime_dependency 'prometheus-client', '>= 1.0', '< 5'
         | 
| 35 35 | 
             
              spec.add_runtime_dependency 'puma', '>= 5.0'
         | 
| 36 36 | 
             
            end
         | 
| @@ -6,10 +6,10 @@ module Kubernetes | |
| 6 6 | 
             
                  @@enable_lock_on_migrate = [true, 'true'].include? ENV['KUBERNETES_HEALTH_ENABLE_LOCK_ON_MIGRATE']
         | 
| 7 7 | 
             
                  @@enable_rack_on_migrate = [true, 'true'].include? ENV['KUBERNETES_HEALTH_ENABLE_RACK_ON_MIGRATE']
         | 
| 8 8 | 
             
                  @@enable_rack_on_sidekiq = [true, 'true'].include? ENV['KUBERNETES_HEALTH_ENABLE_RACK_ON_SIDEKIQ']
         | 
| 9 | 
            -
                  @@route_liveness = '/_liveness'
         | 
| 10 | 
            -
                  @@route_readiness = '/_readiness'
         | 
| 11 | 
            -
                  @@route_metrics = '/_metrics'
         | 
| 12 | 
            -
                  @@response_format = 'prometheus'
         | 
| 9 | 
            +
                  @@route_liveness = ENV['KUBERNETES_HEALTH_LIVENESS_ROUTE']  || '/_liveness'
         | 
| 10 | 
            +
                  @@route_readiness = ENV['KUBERNETES_HEALTH_READINESS_ROUTE'] || '/_readiness'
         | 
| 11 | 
            +
                  @@route_metrics = ENV['KUBERNETES_HEALTH_METRICS_ROUTE'] || '/_metrics'
         | 
| 12 | 
            +
                  @@response_format = ENV['KUBERNETES_HEALTH_RESPONSE_FORMAT'] || 'prometheus'
         | 
| 13 13 |  | 
| 14 14 | 
             
                  @@request_log_callback = lambda { |req, http_code, content|
         | 
| 15 15 | 
             
                    Rails.logger.debug "Kubernetes Health - Request: Path: #{req.path_info} / Params: #{req.params} /  HTTP Code: #{http_code}\n#{content}"  rescue nil
         | 
| @@ -5,6 +5,7 @@ require 'prometheus/client/formats/text' | |
| 5 5 | 
             
            module Kubernetes
         | 
| 6 6 | 
             
              module Health
         | 
| 7 7 | 
             
                class RackOnSidekiq
         | 
| 8 | 
            +
                  
         | 
| 8 9 | 
             
                  def call(env)
         | 
| 9 10 | 
             
                    req = ::Rack::Request.new(env)
         | 
| 10 11 | 
             
                    content = ''
         | 
| @@ -18,10 +19,9 @@ module Kubernetes | |
| 18 19 | 
             
                      if ::Kubernetes::Health::Config.response_format == 'json'
         | 
| 19 20 | 
             
                        content = sidekiq_metrics.to_json
         | 
| 20 21 | 
             
                      else
         | 
| 21 | 
            -
                        prometheus_registry | 
| 22 | 
            -
                        prometheus_registry.get(: | 
| 23 | 
            -
                        prometheus_registry.get(: | 
| 24 | 
            -
                        prometheus_registry.get(:sidekiq_usage).set({}, sidekiq_metrics[:sidekiq_usage])
         | 
| 22 | 
            +
                        prometheus_registry.get(:sidekiq_capacity).set(sidekiq_metrics[:sidekiq_capacity])
         | 
| 23 | 
            +
                        prometheus_registry.get(:sidekiq_busy).set(sidekiq_metrics[:sidekiq_busy])
         | 
| 24 | 
            +
                        prometheus_registry.get(:sidekiq_usage).set(sidekiq_metrics[:sidekiq_usage])
         | 
| 25 25 | 
             
                        content = Prometheus::Client::Formats::Text.marshal(prometheus_registry)
         | 
| 26 26 | 
             
                      end
         | 
| 27 27 | 
             
                    else
         | 
| @@ -32,25 +32,28 @@ module Kubernetes | |
| 32 32 | 
             
                    [http_code, type, [content]]
         | 
| 33 33 | 
             
                  end
         | 
| 34 34 |  | 
| 35 | 
            -
                  def  | 
| 36 | 
            -
                    prometheus_registry  | 
| 37 | 
            -
             | 
| 38 | 
            -
                    prometheus_registry | 
| 39 | 
            -
                    prometheus_registry.gauge(: | 
| 40 | 
            -
                    prometheus_registry
         | 
| 35 | 
            +
                  def prometheus_registry
         | 
| 36 | 
            +
                    return @prometheus_registry unless @prometheus_registry.nil?
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                    @prometheus_registry = Prometheus::Client.registry
         | 
| 39 | 
            +
                    @prometheus_registry.gauge(:sidekiq_capacity, docstring: 'Sidekiq Threads Number')
         | 
| 40 | 
            +
                    @prometheus_registry.gauge(:sidekiq_busy, docstring: 'Sidekiq Busy Threads')
         | 
| 41 | 
            +
                    @prometheus_registry.gauge(:sidekiq_usage, docstring: 'Result of sidekiq_busy/sidekiq_capacity')
         | 
| 42 | 
            +
                    @prometheus_registry
         | 
| 41 43 | 
             
                  end
         | 
| 42 44 |  | 
| 43 45 | 
             
                  def generate_sidekiq_metrics
         | 
| 44 | 
            -
                    sidekiq_info = Sidekiq::ProcessSet.new.to_a.filter { |p| p.identity ==  | 
| 46 | 
            +
                    sidekiq_info = Sidekiq::ProcessSet.new.to_a.filter { |p| p.identity == SidekiqOptionsResolver[:identity] }
         | 
| 45 47 |  | 
| 46 48 | 
             
                    stats = {
         | 
| 47 | 
            -
                      sidekiq_capacity:  | 
| 49 | 
            +
                      sidekiq_capacity: SidekiqOptionsResolver[:concurrency],
         | 
| 48 50 | 
             
                      sidekiq_busy: sidekiq_info.size.zero? ? 0 : sidekiq_info[0]['busy']
         | 
| 49 51 | 
             
                    }
         | 
| 50 52 |  | 
| 51 53 | 
             
                    stats[:sidekiq_usage] = (stats[:sidekiq_busy] / stats[:sidekiq_capacity].to_f).round(2)
         | 
| 52 54 | 
             
                    stats
         | 
| 53 55 | 
             
                  end
         | 
| 56 | 
            +
             | 
| 54 57 | 
             
                end
         | 
| 55 58 | 
             
              end
         | 
| 56 59 | 
             
            end
         | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            module Kubernetes
         | 
| 2 | 
            +
              module Health
         | 
| 3 | 
            +
                class SidekiqOptionsResolver
         | 
| 4 | 
            +
                  def self.[](key)
         | 
| 5 | 
            +
                    return Sidekiq[key] if Sidekiq.respond_to?('[]')
         | 
| 6 | 
            +
                    return Sidekiq.options[key] if Sidekiq.respond_to?('options') # Sidekiq ~> 6.0
         | 
| 7 | 
            +
                    return Sidekiq::Config.new[key] if defined?(Sidekiq::Config) # Sidekiq ~> 7.0
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                    raise 'Sidekiq version not supported'
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
    
        data/lib/kubernetes/health.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: kubernetes-health
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 3. | 
| 4 | 
            +
              version: 3.10.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Wagner Caixeta
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023- | 
| 11 | 
            +
            date: 2023-10-27 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -84,16 +84,22 @@ dependencies: | |
| 84 84 | 
             
              name: prometheus-client
         | 
| 85 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 86 | 
             
                requirements:
         | 
| 87 | 
            -
                - - " | 
| 87 | 
            +
                - - ">="
         | 
| 88 88 | 
             
                  - !ruby/object:Gem::Version
         | 
| 89 89 | 
             
                    version: '1.0'
         | 
| 90 | 
            +
                - - "<"
         | 
| 91 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 92 | 
            +
                    version: '5'
         | 
| 90 93 | 
             
              type: :runtime
         | 
| 91 94 | 
             
              prerelease: false
         | 
| 92 95 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 96 | 
             
                requirements:
         | 
| 94 | 
            -
                - - " | 
| 97 | 
            +
                - - ">="
         | 
| 95 98 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 99 | 
             
                    version: '1.0'
         | 
| 100 | 
            +
                - - "<"
         | 
| 101 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 102 | 
            +
                    version: '5'
         | 
| 97 103 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 98 104 | 
             
              name: puma
         | 
| 99 105 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -139,6 +145,7 @@ files: | |
| 139 145 | 
             
            - lib/kubernetes/health/rack_on_migrate.rb
         | 
| 140 146 | 
             
            - lib/kubernetes/health/rack_on_sidekiq.rb
         | 
| 141 147 | 
             
            - lib/kubernetes/health/railtie.rb
         | 
| 148 | 
            +
            - lib/kubernetes/health/sidekiq_options_resolver.rb
         | 
| 142 149 | 
             
            - lib/kubernetes/health/version.rb
         | 
| 143 150 | 
             
            - lib/puma/kubernetes/app.rb
         | 
| 144 151 | 
             
            - lib/puma/kubernetes/dsl.rb
         |