Skip to content

Commit adb5a81

Browse files
committed
Allow Redis to config host url.
1 parent 6726be5 commit adb5a81

File tree

9 files changed

+54
-25
lines changed

9 files changed

+54
-25
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
0.1.4
2+
3+
- Allow Redis to config host url.
4+
- Update service options API in configure.
5+
16
0.1.3
27
-----
38

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ StatusPage.configure do
5252
self.use :database
5353
self.use :cache
5454
self.use :redis
55+
# Custom redis url
56+
self.use :redis, url: 'redis://you-redis-host:3306/1'
5557
self.use :sidekiq
5658
end
5759
```

lib/status-page/configuration.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,15 @@ def initialize
88
@interval = 10
99
end
1010

11-
def use(service_name)
11+
def use(service_name, opts = {})
1212
require "status-page/services/#{service_name}"
13-
add_service("StatusPage::Services::#{service_name.capitalize}".constantize)
13+
klass = "StatusPage::Services::#{service_name.capitalize}".constantize
14+
if klass.respond_to?(:configurable?) && klass.configurable?
15+
opts.each_key do |key|
16+
klass.config.send("#{key}=", opts[key])
17+
end
18+
end
19+
add_service(klass)
1420
end
1521

1622
def add_custom_service(custom_service_class)

lib/status-page/services/base.rb

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,29 @@ module StatusPage
22
module Services
33
class Base
44
attr_reader :request
5-
cattr_accessor :config
6-
7-
def self.service_name
8-
@name ||= name.demodulize
9-
end
10-
11-
def self.configure
12-
return unless configurable?
13-
14-
self.config ||= config_class.new
15-
16-
yield self.config if block_given?
17-
end
185

196
def initialize(request: nil)
207
@request = request
8+
end
219

22-
self.class.configure
10+
def self.service_name
11+
@name ||= name.demodulize
2312
end
2413

2514
# @abstract
2615
def check!
2716
raise NotImplementedError
2817
end
2918

19+
def self.config
20+
return nil if !self.configurable?
21+
@config ||= config_class.new
22+
end
23+
24+
def config
25+
self.class.config
26+
end
27+
3028
def self.configurable?
3129
config_class
3230
end

lib/status-page/services/redis.rb

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,32 @@ module Services
55
class RedisException < StandardError; end
66

77
class Redis < Base
8+
class Configuration
9+
attr_accessor :url
10+
11+
def initialize
12+
@url = "redis://127.0.0.1:3306/1"
13+
end
14+
end
15+
16+
class << self
17+
def config_class
18+
Redis::Configuration
19+
end
20+
end
21+
822
def check!
923
time = Time.now.to_s(:db)
1024

11-
redis = ::Redis.current
25+
redis = ::Redis.new(url: config.url)
1226
redis.set(key, time)
1327
fetched = redis.get(key)
1428

1529
raise "different values (now: #{time}, fetched: #{fetched})" if fetched != time
1630
rescue Exception => e
1731
raise RedisException.new(e.message)
1832
ensure
19-
redis.client.disconnect
33+
redis.disconnect
2034
end
2135

2236
private

lib/status-page/services/sidekiq.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class << self
2929
private
3030

3131
def config_class
32-
Configuration
32+
Sidekiq::Configuration
3333
end
3434
end
3535

@@ -44,7 +44,6 @@ def check_latency!
4444
latency = ::Sidekiq::Queue.new.latency
4545

4646
return unless latency > config.latency
47-
4847
raise "latency #{latency} is greater than #{config.latency}"
4948
end
5049

spec/lib/status-page/configuration_spec.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@
2727
end
2828
end
2929

30+
describe 'use with opts' do
31+
it 'should use redis with opts' do
32+
subject.use(:redis, url: 'redis://asdgas:3380')
33+
expect(StatusPage::Services::Redis.config.url).to eq 'redis://asdgas:3380'
34+
end
35+
end
36+
3037
describe '#add_custom_service' do
3138
before do
3239
subject.instance_variable_set('@providers', Set.new)

spec/lib/status-page/services/redis_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
end
2929

3030
describe '#configurable?' do
31-
it { expect(described_class).not_to be_configurable }
31+
it { expect(described_class).to be_configurable }
3232
end
3333

3434
describe '#key' do

spec/lib/status-page/services/sidekiq_spec.rb

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
describe StatusPage::Services::Sidekiq do
44
describe StatusPage::Services::Sidekiq::Configuration do
55
describe 'defaults' do
6-
it { expect(described_class.new.latency).to eq(StatusPage::Services::Sidekiq::Configuration::DEFAULT_LATENCY_TIMEOUT) }
6+
it { expect(described_class.new.latency).to eq(30) }
77
end
88
end
99

@@ -77,9 +77,7 @@
7777
latency = 123
7878

7979
expect {
80-
described_class.configure do |config|
81-
config.latency = latency
82-
end
80+
described_class.config.latency = latency
8381
}.to change { described_class.config.latency }.to(latency)
8482
end
8583
end

0 commit comments

Comments
 (0)