pingable 0.0.8 → 0.0.9
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.
- data/README.md +38 -28
 - data/lib/pingable/common_checks.rb +39 -38
 - data/lib/pingable/version.rb +1 -1
 - metadata +4 -4
 
    
        data/README.md
    CHANGED
    
    | 
         @@ -5,18 +5,22 @@ Pingable is a simple framework to implement a 'ping' URL in Rack-based web appli 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            For example, a Rails or Sinatra app's `config.ru` may look like this (Rack 1.4.0 and later):
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 8 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 9 
     | 
    
         
            +
            map '/ping' do
         
     | 
| 
      
 10 
     | 
    
         
            +
              run Pingable::Handler
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
      
 12 
     | 
    
         
            +
            run MyApp
         
     | 
| 
      
 13 
     | 
    
         
            +
            ```
         
     | 
| 
       12 
14 
     | 
    
         | 
| 
       13 
15 
     | 
    
         
             
            Now you can add checks in a modular fashion:
         
     | 
| 
       14 
16 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 18 
     | 
    
         
            +
            Pingable.add_check lambda {
         
     | 
| 
      
 19 
     | 
    
         
            +
              unless check_something
         
     | 
| 
      
 20 
     | 
    
         
            +
                "Oh noes, something failed"
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
            }
         
     | 
| 
      
 23 
     | 
    
         
            +
            ```
         
     | 
| 
       20 
24 
     | 
    
         | 
| 
       21 
25 
     | 
    
         
             
            Checks
         
     | 
| 
       22 
26 
     | 
    
         
             
            ------
         
     | 
| 
         @@ -32,27 +36,31 @@ A check is simply an object which: 
     | 
|
| 
       32 
36 
     | 
    
         | 
| 
       33 
37 
     | 
    
         
             
            Something a bit more complex:
         
     | 
| 
       34 
38 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
      
 39 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 40 
     | 
    
         
            +
            class TwitterCheck
         
     | 
| 
      
 41 
     | 
    
         
            +
              def initialize(url)
         
     | 
| 
      
 42 
     | 
    
         
            +
                @url = url
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
       39 
44 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
      
 45 
     | 
    
         
            +
              def call
         
     | 
| 
      
 46 
     | 
    
         
            +
                # ... check the URL ...
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
            end
         
     | 
| 
       44 
49 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
      
 50 
     | 
    
         
            +
            Pingable.add_check TwitterCheck.new(:url => "http://twitter.com/")
         
     | 
| 
      
 51 
     | 
    
         
            +
            ```
         
     | 
| 
       46 
52 
     | 
    
         | 
| 
       47 
53 
     | 
    
         
             
            Configuration
         
     | 
| 
       48 
54 
     | 
    
         
             
            -------------
         
     | 
| 
       49 
55 
     | 
    
         | 
| 
       50 
56 
     | 
    
         
             
            To set the name that a successful ping check will return, provide a name in the rackup file:
         
     | 
| 
       51 
57 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
      
 58 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 59 
     | 
    
         
            +
            map '/ping' do
         
     | 
| 
      
 60 
     | 
    
         
            +
              use Pingable::Handler.new('my fancy app')
         
     | 
| 
      
 61 
     | 
    
         
            +
            end
         
     | 
| 
      
 62 
     | 
    
         
            +
            run MyApp
         
     | 
| 
      
 63 
     | 
    
         
            +
            ```
         
     | 
| 
       56 
64 
     | 
    
         | 
| 
       57 
65 
     | 
    
         
             
            Ping check
         
     | 
| 
       58 
66 
     | 
    
         
             
            ----------
         
     | 
| 
         @@ -66,16 +74,18 @@ On success, a `200 OK` is returned, with either the application's name as the bo 
     | 
|
| 
       66 
74 
     | 
    
         
             
            Common checks
         
     | 
| 
       67 
75 
     | 
    
         
             
            -------------
         
     | 
| 
       68 
76 
     | 
    
         | 
| 
       69 
     | 
    
         
            -
            Pingable comes with a set of checks that are commonly needed for web applications 
     | 
| 
      
 77 
     | 
    
         
            +
            Pingable comes with a set of checks that are commonly needed for web applications:
         
     | 
| 
       70 
78 
     | 
    
         | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
      
 79 
     | 
    
         
            +
            * `Pingable.active_record_checks!`: Checks ActiveRecord.
         
     | 
| 
      
 80 
     | 
    
         
            +
            * `Pingable.rails_cache_checks!`: Checks Rails cache.
         
     | 
| 
       72 
81 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
      
 82 
     | 
    
         
            +
            To install all common checks based on available dependencies:
         
     | 
| 
       74 
83 
     | 
    
         | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
      
 84 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 85 
     | 
    
         
            +
            Pingable.common_checks!
         
     | 
| 
      
 86 
     | 
    
         
            +
            ```
         
     | 
| 
       77 
87 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
      
 88 
     | 
    
         
            +
            For example, if ActiveRecord has not been `require`d, then the ActiveRecord check is not included.
         
     | 
| 
       79 
89 
     | 
    
         | 
| 
       80 
90 
     | 
    
         
             
            License
         
     | 
| 
       81 
91 
     | 
    
         
             
            -------
         
     | 
| 
         @@ -3,53 +3,54 @@ module Pingable 
     | 
|
| 
       3 
3 
     | 
    
         
             
              class << self
         
     | 
| 
       4 
4 
     | 
    
         
             
                @@common_checks_added ||= false
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
                # Add checks for standard gems such as Active Record 
     | 
| 
      
 6 
     | 
    
         
            +
                # Add checks for standard gems such as Active Record, based on
         
     | 
| 
      
 7 
     | 
    
         
            +
                # what is currently available.
         
     | 
| 
       7 
8 
     | 
    
         
             
                def common_checks!
         
     | 
| 
       8 
9 
     | 
    
         
             
                  unless @@common_checks_added
         
     | 
| 
       9 
     | 
    
         
            -
                     
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
      
 10 
     | 
    
         
            +
                    if defined?(ActiveRecord)
         
     | 
| 
      
 11 
     | 
    
         
            +
                      active_record_checks!
         
     | 
| 
      
 12 
     | 
    
         
            +
                    end
         
     | 
| 
      
 13 
     | 
    
         
            +
                    if defined?(Rails) and Rails.respond_to?(:cache)
         
     | 
| 
      
 14 
     | 
    
         
            +
                      rails_cache_checks!
         
     | 
| 
      
 15 
     | 
    
         
            +
                    end
         
     | 
| 
       11 
16 
     | 
    
         
             
                    @@common_checks_added = true
         
     | 
| 
       12 
17 
     | 
    
         
             
                  end
         
     | 
| 
       13 
18 
     | 
    
         
             
                end
         
     | 
| 
       14 
19 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                 
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                   
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                       
     | 
| 
       21 
     | 
    
         
            -
                         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                            "ActiveRecord: #{e.class}: #{e.message}"
         
     | 
| 
       34 
     | 
    
         
            -
                          end
         
     | 
| 
       35 
     | 
    
         
            -
                        end
         
     | 
| 
       36 
     | 
    
         
            -
                      }
         
     | 
| 
      
 20 
     | 
    
         
            +
                # Add checks for ActiveRecord.
         
     | 
| 
      
 21 
     | 
    
         
            +
                def active_record_checks!
         
     | 
| 
      
 22 
     | 
    
         
            +
                  require 'timeout'
         
     | 
| 
      
 23 
     | 
    
         
            +
                  add_check lambda {
         
     | 
| 
      
 24 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 25 
     | 
    
         
            +
                      timeout(10) do
         
     | 
| 
      
 26 
     | 
    
         
            +
                        ActiveRecord::Base.verify_active_connections!
         
     | 
| 
      
 27 
     | 
    
         
            +
                      end
         
     | 
| 
      
 28 
     | 
    
         
            +
                      ActiveRecord::Base.connection.execute('select 1')
         
     | 
| 
      
 29 
     | 
    
         
            +
                      nil
         
     | 
| 
      
 30 
     | 
    
         
            +
                    rescue Timeout::Error
         
     | 
| 
      
 31 
     | 
    
         
            +
                      "ActiveRecord: Timed out"
         
     | 
| 
      
 32 
     | 
    
         
            +
                    rescue Exception => e
         
     | 
| 
      
 33 
     | 
    
         
            +
                      if e.class.name == e.message
         
     | 
| 
      
 34 
     | 
    
         
            +
                        "ActiveRecord: #{e}"
         
     | 
| 
      
 35 
     | 
    
         
            +
                      else
         
     | 
| 
      
 36 
     | 
    
         
            +
                        "ActiveRecord: #{e.class}: #{e.message}"
         
     | 
| 
      
 37 
     | 
    
         
            +
                      end
         
     | 
| 
       37 
38 
     | 
    
         
             
                    end
         
     | 
| 
       38 
     | 
    
         
            -
                   
     | 
| 
      
 39 
     | 
    
         
            +
                  }
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
       39 
41 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                        end
         
     | 
| 
       50 
     | 
    
         
            -
                      }
         
     | 
| 
      
 42 
     | 
    
         
            +
                # Add Rails cache checks.
         
     | 
| 
      
 43 
     | 
    
         
            +
                def rails_cache_checks!
         
     | 
| 
      
 44 
     | 
    
         
            +
                  add_check lambda {
         
     | 
| 
      
 45 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 46 
     | 
    
         
            +
                      Rails.cache.read('ping_check')
         
     | 
| 
      
 47 
     | 
    
         
            +
                      Rails.cache.write('ping_check', 'ok')
         
     | 
| 
      
 48 
     | 
    
         
            +
                      nil
         
     | 
| 
      
 49 
     | 
    
         
            +
                    rescue Exception => e
         
     | 
| 
      
 50 
     | 
    
         
            +
                      "Rails cache: #{e.class}: #{e.message}"
         
     | 
| 
       51 
51 
     | 
    
         
             
                    end
         
     | 
| 
       52 
     | 
    
         
            -
                   
     | 
| 
      
 52 
     | 
    
         
            +
                  }
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
       53 
54 
     | 
    
         | 
| 
       54 
55 
     | 
    
         
             
              end
         
     | 
| 
       55 
56 
     | 
    
         | 
    
        data/lib/pingable/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,13 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: pingable
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              hash:  
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 13
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 0
         
     | 
| 
       8 
8 
     | 
    
         
             
              - 0
         
     | 
| 
       9 
     | 
    
         
            -
              -  
     | 
| 
       10 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 9 
     | 
    
         
            +
              - 9
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.0.9
         
     | 
| 
       11 
11 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       12 
12 
     | 
    
         
             
            authors: 
         
     | 
| 
       13 
13 
     | 
    
         
             
            - Alexander Staubo
         
     | 
| 
         @@ -15,7 +15,7 @@ autorequire: 
     | 
|
| 
       15 
15 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       16 
16 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            date: 2012- 
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2012-02-07 00:00:00 Z
         
     | 
| 
       19 
19 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       20 
20 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       21 
21 
     | 
    
         
             
              name: rspec
         
     |