rails-health-checker 0.1.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 +7 -0
- data/CHANGELOG.md +37 -0
- data/COMMANDS.md +118 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +222 -0
- data/LICENSE +21 -0
- data/README.md +174 -0
- data/Rakefile +6 -0
- data/SECURITY.md +41 -0
- data/TESTING.md +64 -0
- data/TEST_RESULTS.md +51 -0
- data/example_usage.rb +23 -0
- data/lib/rails_health_checker/checker.rb +88 -0
- data/lib/rails_health_checker/dashboard_middleware.rb +503 -0
- data/lib/rails_health_checker/gem_analyzer.rb +39 -0
- data/lib/rails_health_checker/health_middleware.rb +53 -0
- data/lib/rails_health_checker/job_analyzer.rb +108 -0
- data/lib/rails_health_checker/railtie.rb +11 -0
- data/lib/rails_health_checker/report_generator.rb +499 -0
- data/lib/rails_health_checker/system_analyzer.rb +182 -0
- data/lib/rails_health_checker/tasks.rb +63 -0
- data/lib/rails_health_checker/version.rb +3 -0
- data/lib/rails_health_checker.rb +17 -0
- data/rails_health_checker.gemspec +33 -0
- data/simple_test.rb +52 -0
- data/test_gem.rb +100 -0
- metadata +117 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
namespace :health do
|
|
2
|
+
desc "Run comprehensive health check"
|
|
3
|
+
task check: :environment do
|
|
4
|
+
RailsHealthChecker.check
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
desc "Check gem dependencies"
|
|
8
|
+
task gems: :environment do
|
|
9
|
+
analyzer = RailsHealthChecker::GemAnalyzer.new
|
|
10
|
+
results = analyzer.analyze
|
|
11
|
+
|
|
12
|
+
puts "=== Gem Health Report ==="
|
|
13
|
+
puts "Total gems: #{results[:total]}"
|
|
14
|
+
puts "Outdated gems: #{results[:outdated]}"
|
|
15
|
+
puts "Vulnerable gems: #{results[:vulnerable]}"
|
|
16
|
+
puts "========================="
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
desc "Check database connectivity"
|
|
20
|
+
task database: :environment do
|
|
21
|
+
begin
|
|
22
|
+
ActiveRecord::Base.connection.active?
|
|
23
|
+
puts "ā Database connection: healthy"
|
|
24
|
+
rescue => e
|
|
25
|
+
puts "ā Database connection: failed (#{e.message})"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
desc "Check background jobs health"
|
|
30
|
+
task jobs: :environment do
|
|
31
|
+
analyzer = RailsHealthChecker::JobAnalyzer.new
|
|
32
|
+
results = analyzer.analyze
|
|
33
|
+
|
|
34
|
+
puts "=== Background Jobs Health ==="
|
|
35
|
+
puts "Overall Status: #{results[:status]}"
|
|
36
|
+
|
|
37
|
+
if results[:sidekiq][:available]
|
|
38
|
+
sidekiq = results[:sidekiq]
|
|
39
|
+
puts "\nSidekiq:"
|
|
40
|
+
puts " Status: #{sidekiq[:status]}"
|
|
41
|
+
puts " Enqueued: #{sidekiq[:enqueued]}" unless sidekiq[:error]
|
|
42
|
+
puts " Failed: #{sidekiq[:failed]}" unless sidekiq[:error]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
if results[:resque][:available]
|
|
46
|
+
resque = results[:resque]
|
|
47
|
+
puts "\nResque:"
|
|
48
|
+
puts " Status: #{resque[:status]}"
|
|
49
|
+
puts " Pending: #{resque[:pending]}" unless resque[:error]
|
|
50
|
+
puts " Failed: #{resque[:failed]}" unless resque[:error]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
puts "============================="
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
desc "Generate detailed health report file"
|
|
57
|
+
task report: :environment do
|
|
58
|
+
results = RailsHealthChecker::Checker.new.run
|
|
59
|
+
report_generator = RailsHealthChecker::ReportGenerator.new(results)
|
|
60
|
+
filename = report_generator.save_to_file
|
|
61
|
+
puts "š Health report updated: #{filename}"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require_relative "rails_health_checker/version"
|
|
2
|
+
require_relative "rails_health_checker/checker"
|
|
3
|
+
require_relative "rails_health_checker/gem_analyzer"
|
|
4
|
+
require_relative "rails_health_checker/job_analyzer"
|
|
5
|
+
require_relative "rails_health_checker/system_analyzer"
|
|
6
|
+
require_relative "rails_health_checker/health_middleware"
|
|
7
|
+
require_relative "rails_health_checker/dashboard_middleware"
|
|
8
|
+
require_relative "rails_health_checker/report_generator"
|
|
9
|
+
require_relative "rails_health_checker/railtie" if defined?(Rails)
|
|
10
|
+
|
|
11
|
+
module RailsHealthChecker
|
|
12
|
+
class Error < StandardError; end
|
|
13
|
+
|
|
14
|
+
def self.check
|
|
15
|
+
Checker.new.run
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require_relative "lib/rails_health_checker/version"
|
|
2
|
+
|
|
3
|
+
Gem::Specification.new do |spec|
|
|
4
|
+
spec.name = "rails-health-checker"
|
|
5
|
+
spec.version = RailsHealthChecker::VERSION
|
|
6
|
+
spec.authors = ["Arshdeep Singh"]
|
|
7
|
+
spec.email = ["arsh199820@gmail.com"]
|
|
8
|
+
|
|
9
|
+
spec.summary = "Comprehensive health checker for Rails applications and dependencies"
|
|
10
|
+
spec.description = "A Ruby gem that provides comprehensive health checking for Rails applications, including database connectivity, gem dependencies, security vulnerabilities, and system health monitoring with a web dashboard."
|
|
11
|
+
spec.homepage = "https://rails-health-checker.netlify.app"
|
|
12
|
+
spec.license = "MIT"
|
|
13
|
+
spec.required_ruby_version = ">= 2.6.0"
|
|
14
|
+
|
|
15
|
+
spec.metadata["homepage_uri"] = "https://rails-health-checker.netlify.app"
|
|
16
|
+
spec.metadata["source_code_uri"] = "https://github.com/ArshdeepGrover/rails-health-checker"
|
|
17
|
+
spec.metadata["changelog_uri"] = "https://github.com/ArshdeepGrover/rails-health-checker/blob/main/CHANGELOG.md"
|
|
18
|
+
spec.metadata["documentation_uri"] = "https://rails-health-checker.netlify.app"
|
|
19
|
+
spec.metadata["bug_tracker_uri"] = "https://github.com/ArshdeepGrover/rails-health-checker/issues"
|
|
20
|
+
|
|
21
|
+
spec.files = Dir.chdir(__dir__) do
|
|
22
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
|
23
|
+
(f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
spec.bindir = "exe"
|
|
27
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
|
28
|
+
spec.require_paths = ["lib"]
|
|
29
|
+
|
|
30
|
+
spec.add_dependency "rails", ">= 6.0"
|
|
31
|
+
spec.add_dependency "bundler", ">= 2.0"
|
|
32
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
|
33
|
+
end
|
data/simple_test.rb
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require_relative 'lib/rails_health_checker/version'
|
|
4
|
+
require_relative 'lib/rails_health_checker/gem_analyzer'
|
|
5
|
+
|
|
6
|
+
puts "=== Simple Gem Test ==="
|
|
7
|
+
puts "Version: #{RailsHealthChecker::VERSION}"
|
|
8
|
+
|
|
9
|
+
# Test gem analyzer with mocked Bundler
|
|
10
|
+
module Bundler
|
|
11
|
+
def self.load
|
|
12
|
+
MockBundler.new
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class MockBundler
|
|
17
|
+
def specs
|
|
18
|
+
[
|
|
19
|
+
MockGem.new('rails', '7.0.0'),
|
|
20
|
+
MockGem.new('rspec', '3.12.0')
|
|
21
|
+
]
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class MockGem
|
|
26
|
+
attr_reader :name, :version
|
|
27
|
+
|
|
28
|
+
def initialize(name, version)
|
|
29
|
+
@name = name
|
|
30
|
+
@version = MockVersion.new(version)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def gem_dir
|
|
34
|
+
"/path/to/#{name}"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
class MockVersion
|
|
39
|
+
def initialize(version)
|
|
40
|
+
@version = version
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def to_s
|
|
44
|
+
@version
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
analyzer = RailsHealthChecker::GemAnalyzer.new
|
|
49
|
+
results = analyzer.analyze
|
|
50
|
+
|
|
51
|
+
puts "ā Gem analysis: #{results[:total]} gems, #{results[:outdated]} outdated"
|
|
52
|
+
puts "ā
Basic functionality works!"
|
data/test_gem.rb
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
# Simple test script to verify gem functionality
|
|
4
|
+
require_relative 'lib/rails_health_checker'
|
|
5
|
+
|
|
6
|
+
# Mock Rails and ActiveRecord for testing
|
|
7
|
+
module Rails
|
|
8
|
+
def self.version
|
|
9
|
+
"7.0.0"
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
module ActiveRecord
|
|
14
|
+
class Base
|
|
15
|
+
def self.connection
|
|
16
|
+
MockConnection.new
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class MockConnection
|
|
22
|
+
def active?
|
|
23
|
+
true
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class Time
|
|
28
|
+
def self.current
|
|
29
|
+
Time.now
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Mock Bundler
|
|
34
|
+
module Bundler
|
|
35
|
+
def self.load
|
|
36
|
+
MockBundler.new
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
class MockBundler
|
|
41
|
+
def specs
|
|
42
|
+
[
|
|
43
|
+
MockGem.new('rails', '7.0.0'),
|
|
44
|
+
MockGem.new('rspec', '3.12.0')
|
|
45
|
+
]
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
class MockGem
|
|
50
|
+
attr_reader :name, :version
|
|
51
|
+
|
|
52
|
+
def initialize(name, version)
|
|
53
|
+
@name = name
|
|
54
|
+
@version = MockVersion.new(version)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def gem_dir
|
|
58
|
+
"/path/to/#{name}"
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
class MockVersion
|
|
63
|
+
def initialize(version)
|
|
64
|
+
@version = version
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def to_s
|
|
68
|
+
@version
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Test the gem
|
|
73
|
+
puts "Testing RailsHealthChecker gem..."
|
|
74
|
+
|
|
75
|
+
begin
|
|
76
|
+
# Test version
|
|
77
|
+
puts "ā Version: #{RailsHealthChecker::VERSION}"
|
|
78
|
+
|
|
79
|
+
# Test checker
|
|
80
|
+
checker = RailsHealthChecker::Checker.new
|
|
81
|
+
results = checker.run
|
|
82
|
+
puts "ā Health check completed"
|
|
83
|
+
|
|
84
|
+
# Test gem analyzer
|
|
85
|
+
analyzer = RailsHealthChecker::GemAnalyzer.new
|
|
86
|
+
gem_results = analyzer.analyze
|
|
87
|
+
puts "ā Gem analysis completed: #{gem_results[:total]} gems found"
|
|
88
|
+
|
|
89
|
+
# Test middleware
|
|
90
|
+
middleware = RailsHealthChecker::HealthMiddleware.new(nil)
|
|
91
|
+
env = { 'PATH_INFO' => '/health' }
|
|
92
|
+
response = middleware.call(env)
|
|
93
|
+
puts "ā Health endpoint returns: #{response[0]} status"
|
|
94
|
+
|
|
95
|
+
puts "\nā
All tests passed!"
|
|
96
|
+
|
|
97
|
+
rescue => e
|
|
98
|
+
puts "ā Test failed: #{e.message}"
|
|
99
|
+
puts e.backtrace.first(3)
|
|
100
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rails-health-checker
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Arshdeep Singh
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: exe
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2025-11-09 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: rails
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '6.0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '6.0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: bundler
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '2.0'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '2.0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rspec
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '3.0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '3.0'
|
|
55
|
+
description: A Ruby gem that provides comprehensive health checking for Rails applications,
|
|
56
|
+
including database connectivity, gem dependencies, security vulnerabilities, and
|
|
57
|
+
system health monitoring with a web dashboard.
|
|
58
|
+
email:
|
|
59
|
+
- arsh199820@gmail.com
|
|
60
|
+
executables: []
|
|
61
|
+
extensions: []
|
|
62
|
+
extra_rdoc_files: []
|
|
63
|
+
files:
|
|
64
|
+
- CHANGELOG.md
|
|
65
|
+
- COMMANDS.md
|
|
66
|
+
- Gemfile
|
|
67
|
+
- Gemfile.lock
|
|
68
|
+
- LICENSE
|
|
69
|
+
- README.md
|
|
70
|
+
- Rakefile
|
|
71
|
+
- SECURITY.md
|
|
72
|
+
- TESTING.md
|
|
73
|
+
- TEST_RESULTS.md
|
|
74
|
+
- example_usage.rb
|
|
75
|
+
- lib/rails_health_checker.rb
|
|
76
|
+
- lib/rails_health_checker/checker.rb
|
|
77
|
+
- lib/rails_health_checker/dashboard_middleware.rb
|
|
78
|
+
- lib/rails_health_checker/gem_analyzer.rb
|
|
79
|
+
- lib/rails_health_checker/health_middleware.rb
|
|
80
|
+
- lib/rails_health_checker/job_analyzer.rb
|
|
81
|
+
- lib/rails_health_checker/railtie.rb
|
|
82
|
+
- lib/rails_health_checker/report_generator.rb
|
|
83
|
+
- lib/rails_health_checker/system_analyzer.rb
|
|
84
|
+
- lib/rails_health_checker/tasks.rb
|
|
85
|
+
- lib/rails_health_checker/version.rb
|
|
86
|
+
- rails_health_checker.gemspec
|
|
87
|
+
- simple_test.rb
|
|
88
|
+
- test_gem.rb
|
|
89
|
+
homepage: https://rails-health-checker.netlify.app
|
|
90
|
+
licenses:
|
|
91
|
+
- MIT
|
|
92
|
+
metadata:
|
|
93
|
+
homepage_uri: https://rails-health-checker.netlify.app
|
|
94
|
+
source_code_uri: https://github.com/ArshdeepGrover/rails-health-checker
|
|
95
|
+
changelog_uri: https://github.com/ArshdeepGrover/rails-health-checker/blob/main/CHANGELOG.md
|
|
96
|
+
documentation_uri: https://rails-health-checker.netlify.app
|
|
97
|
+
bug_tracker_uri: https://github.com/ArshdeepGrover/rails-health-checker/issues
|
|
98
|
+
post_install_message:
|
|
99
|
+
rdoc_options: []
|
|
100
|
+
require_paths:
|
|
101
|
+
- lib
|
|
102
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
103
|
+
requirements:
|
|
104
|
+
- - ">="
|
|
105
|
+
- !ruby/object:Gem::Version
|
|
106
|
+
version: 2.6.0
|
|
107
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
|
+
requirements:
|
|
109
|
+
- - ">="
|
|
110
|
+
- !ruby/object:Gem::Version
|
|
111
|
+
version: '0'
|
|
112
|
+
requirements: []
|
|
113
|
+
rubygems_version: 3.5.16
|
|
114
|
+
signing_key:
|
|
115
|
+
specification_version: 4
|
|
116
|
+
summary: Comprehensive health checker for Rails applications and dependencies
|
|
117
|
+
test_files: []
|