liveness 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +3 -2
- data/README.md +35 -2
- data/lib/liveness/dependencies/redis.rb +25 -0
- data/lib/liveness/dependencies.rb +1 -0
- data/lib/liveness/dependency.rb +25 -2
- data/lib/liveness/status.rb +5 -2
- data/lib/liveness/version.rb +1 -1
- metadata +3 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: d8c4374a066d22f71ed43d6cbef9d3e8fa84d91ee74f4dcd99420dc1f0f05232
         | 
| 4 | 
            +
              data.tar.gz: '0482fa040d357f8b4486576ababe08591dbc589a3e353bee9f0b4c9e332baf70'
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: f2f68bd1ee8ea102b3c8517f839e0d750ee6d9dc32487d8c9578ff31635eb5f1ae1b7eea39e1f0825438e9ff572824ee41d7dd49e8956ad938e7aa37d16dbdc9
         | 
| 7 | 
            +
              data.tar.gz: f0083b3f15da4d97f12561f29af8628bf0b02ea53cd083d98783e5d5b29fb4bffdd4de90672ef733bf5c92a464914cae543a86021d0b6bbbef6dffbc439f6ee7
         | 
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            PATH
         | 
| 2 2 | 
             
              remote: .
         | 
| 3 3 | 
             
              specs:
         | 
| 4 | 
            -
                liveness (0. | 
| 4 | 
            +
                liveness (0.2.2)
         | 
| 5 5 | 
             
                  rack (>= 1.0)
         | 
| 6 6 |  | 
| 7 7 | 
             
            GEM
         | 
| @@ -22,7 +22,7 @@ GEM | |
| 22 22 | 
             
                parallel (1.21.0)
         | 
| 23 23 | 
             
                parser (3.1.0.0)
         | 
| 24 24 | 
             
                  ast (~> 2.4.1)
         | 
| 25 | 
            -
                rack ( | 
| 25 | 
            +
                rack (2.2.3)
         | 
| 26 26 | 
             
                rainbow (3.1.1)
         | 
| 27 27 | 
             
                rake (13.0.6)
         | 
| 28 28 | 
             
                regexp_parser (2.2.0)
         | 
| @@ -67,6 +67,7 @@ GEM | |
| 67 67 |  | 
| 68 68 | 
             
            PLATFORMS
         | 
| 69 69 | 
             
              x86_64-darwin-20
         | 
| 70 | 
            +
              x86_64-linux
         | 
| 70 71 |  | 
| 71 72 | 
             
            DEPENDENCIES
         | 
| 72 73 | 
             
              bundler-audit
         | 
    
        data/README.md
    CHANGED
    
    | @@ -20,12 +20,44 @@ Liveness.config do |c| | |
| 20 20 | 
             
            end
         | 
| 21 21 | 
             
            ```
         | 
| 22 22 |  | 
| 23 | 
            +
            ### Named Dependency
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            ```ruby
         | 
| 26 | 
            +
            Liveness.config do |c|
         | 
| 27 | 
            +
              c.add :postgres, name: :primary_db, timeout: 10
         | 
| 28 | 
            +
              c.add :postgres, name: :read_replica, timeout: 10
         | 
| 29 | 
            +
            end
         | 
| 30 | 
            +
            ```
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            ### Customize Connector
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            ```ruby
         | 
| 35 | 
            +
            Liveness.config do |c|
         | 
| 36 | 
            +
              c.add :redis, timeout: 10 do
         | 
| 37 | 
            +
                Redis.new(url: 'redis://example:6379/15')
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
            end
         | 
| 40 | 
            +
            ```
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            ### Rails Application
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            Mount the `Liveness::Status` to `config/routes.rb`
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            ```ruby
         | 
| 47 | 
            +
            Rails.application.routes.draw do
         | 
| 48 | 
            +
              # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              mount Liveness::Status => '/health'
         | 
| 51 | 
            +
            end
         | 
| 52 | 
            +
            ```
         | 
| 53 | 
            +
             | 
| 23 54 | 
             
            ## Dependency Providers
         | 
| 24 55 |  | 
| 25 | 
            -
            | Name       |  | 
| 56 | 
            +
            | Name       | Description                                           |
         | 
| 26 57 | 
             
            |------------|-------------------------------------------------------|
         | 
| 27 58 | 
             
            | `postgres` | The PostgreSQL adapter which for `ActiveRecord::Base` |
         | 
| 28 59 | 
             
            | `mysql`    | The MySQL adapter which for `ActiveRecord::Base`      |
         | 
| 60 | 
            +
            | `redis`    | Test Redis via `redis-rb` gem via `#ping` method      |
         | 
| 29 61 |  | 
| 30 62 | 
             
            ## Roadmap
         | 
| 31 63 |  | 
| @@ -38,7 +70,8 @@ end | |
| 38 70 | 
             
              * [ ] MySQL
         | 
| 39 71 | 
             
                * [x] ActiveRecord
         | 
| 40 72 | 
             
                * [ ] Sequel
         | 
| 41 | 
            -
              * Redis
         | 
| 73 | 
            +
              * [x] Redis
         | 
| 74 | 
            +
              * [ ] HTTP Endpoint
         | 
| 42 75 |  | 
| 43 76 | 
             
            ## Development
         | 
| 44 77 |  | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Liveness
         | 
| 4 | 
            +
              # :nodoc:
         | 
| 5 | 
            +
              module Dependencies
         | 
| 6 | 
            +
                # The PostgreSQL Provider
         | 
| 7 | 
            +
                #
         | 
| 8 | 
            +
                # @since 0.2.0
         | 
| 9 | 
            +
                class Redis < Dependency
         | 
| 10 | 
            +
                  # @see [Liveness::Dependency#check!]
         | 
| 11 | 
            +
                  #
         | 
| 12 | 
            +
                  # @since 0.2.0
         | 
| 13 | 
            +
                  def check!
         | 
| 14 | 
            +
                    return false unless defined?(::Redis)
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    redis = connect || ::Redis.new
         | 
| 17 | 
            +
                    redis.ping == 'PONG'
         | 
| 18 | 
            +
                  rescue ::Redis::BaseError
         | 
| 19 | 
            +
                    false
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                Liveness.container.register(:redis, Redis)
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
    
        data/lib/liveness/dependency.rb
    CHANGED
    
    | @@ -14,8 +14,18 @@ module Liveness | |
| 14 14 | 
             
                def initialize(name: nil, timeout: 5, &block)
         | 
| 15 15 | 
             
                  @name = name
         | 
| 16 16 | 
             
                  @timeout = timeout
         | 
| 17 | 
            +
                  @connector = block
         | 
| 18 | 
            +
                end
         | 
| 17 19 |  | 
| 18 | 
            -
             | 
| 20 | 
            +
                # Return status
         | 
| 21 | 
            +
                #
         | 
| 22 | 
            +
                # @return [Hash]
         | 
| 23 | 
            +
                #
         | 
| 24 | 
            +
                # @since 0.2.0
         | 
| 25 | 
            +
                def status
         | 
| 26 | 
            +
                  {
         | 
| 27 | 
            +
                    status: alive? ? 'ok' : 'failed'
         | 
| 28 | 
            +
                  }
         | 
| 19 29 | 
             
                end
         | 
| 20 30 |  | 
| 21 31 | 
             
                # Check the dependency service alive
         | 
| @@ -25,10 +35,12 @@ module Liveness | |
| 25 35 | 
             
                # @since 0.1.0
         | 
| 26 36 | 
             
                def alive?
         | 
| 27 37 | 
             
                  Timeout.timeout(@timeout) do
         | 
| 28 | 
            -
                    check!
         | 
| 38 | 
            +
                    connect || check!
         | 
| 29 39 | 
             
                  rescue StandardError
         | 
| 30 40 | 
             
                    false
         | 
| 31 41 | 
             
                  end
         | 
| 42 | 
            +
                rescue Timeout::Error
         | 
| 43 | 
            +
                  false
         | 
| 32 44 | 
             
                end
         | 
| 33 45 |  | 
| 34 46 | 
             
                # Check the dependency service alive
         | 
| @@ -39,5 +51,16 @@ module Liveness | |
| 39 51 | 
             
                def check!
         | 
| 40 52 | 
             
                  raise NotImplementedError
         | 
| 41 53 | 
             
                end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                # Connect with connector
         | 
| 56 | 
            +
                #
         | 
| 57 | 
            +
                # @return [Object]
         | 
| 58 | 
            +
                #
         | 
| 59 | 
            +
                # @since 0.2.0
         | 
| 60 | 
            +
                def connect
         | 
| 61 | 
            +
                  return unless @connector.respond_to?(:call)
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  instance_exec(self, &@connector)
         | 
| 64 | 
            +
                end
         | 
| 42 65 | 
             
              end
         | 
| 43 66 | 
             
            end
         | 
    
        data/lib/liveness/status.rb
    CHANGED
    
    | @@ -27,7 +27,7 @@ module Liveness | |
| 27 27 | 
             
                # @since 0.1.0
         | 
| 28 28 | 
             
                def metrics
         | 
| 29 29 | 
             
                  @metrics ||= @config.dependencies.map do |dependency|
         | 
| 30 | 
            -
                    Thread.new { [dependency.name, dependency. | 
| 30 | 
            +
                    Thread.new { [dependency.name, dependency.status] }
         | 
| 31 31 | 
             
                  end.map(&:value).to_h
         | 
| 32 32 | 
             
                end
         | 
| 33 33 |  | 
| @@ -37,7 +37,10 @@ module Liveness | |
| 37 37 | 
             
                #
         | 
| 38 38 | 
             
                # @since 0.1.0
         | 
| 39 39 | 
             
                def live?
         | 
| 40 | 
            -
                  metrics | 
| 40 | 
            +
                  metrics
         | 
| 41 | 
            +
                    .values
         | 
| 42 | 
            +
                    .map { |service| service[:status] == 'ok' }
         | 
| 43 | 
            +
                    .reduce(true, :&)
         | 
| 41 44 | 
             
                end
         | 
| 42 45 |  | 
| 43 46 | 
             
                # @return [Rack::Response]
         | 
    
        data/lib/liveness/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: liveness
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.2.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - 蒼時弦也
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2022- | 
| 11 | 
            +
            date: 2022-04-08 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rack
         | 
| @@ -47,6 +47,7 @@ files: | |
| 47 47 | 
             
            - lib/liveness/dependencies.rb
         | 
| 48 48 | 
             
            - lib/liveness/dependencies/mysql.rb
         | 
| 49 49 | 
             
            - lib/liveness/dependencies/postgresql.rb
         | 
| 50 | 
            +
            - lib/liveness/dependencies/redis.rb
         | 
| 50 51 | 
             
            - lib/liveness/dependency.rb
         | 
| 51 52 | 
             
            - lib/liveness/status.rb
         | 
| 52 53 | 
             
            - lib/liveness/version.rb
         |