pulse-meter-rails 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -28,11 +28,39 @@ module PulseToolbox
28
28
  end
29
29
  end
30
30
 
31
- def self.redis=(redis)
32
- PulseMeter.redis = redis
33
- end
31
+ class << self
32
+ @@pid = nil
33
+ @@redis_config = {}
34
+
35
+ def redis=(redis)
36
+ PulseMeter.redis = redis
37
+ @@pid = Process.pid
38
+ @@redis_config = {
39
+ :host => redis.client.host,
40
+ :port => redis.client.port,
41
+ :db => redis.client.db
42
+ }
43
+ end
44
+
45
+ def redis
46
+ reconnect if pid_changed
47
+ PulseMeter.redis
48
+ end
34
49
 
35
- def self.redis
36
- PulseMeter.redis
50
+ def reconnect
51
+ PulseMeter.redis = Redis.new(
52
+ :host => @@redis_config[:host],
53
+ :port => @@redis_config[:port],
54
+ :db => @@redis_config[:db]
55
+ )
56
+ end
57
+
58
+ def maybe_reconnect
59
+ reconnect if pid_changed
60
+ end
61
+
62
+ def pid_changed
63
+ @@pid && @@pid != Process.pid
64
+ end
37
65
  end
38
66
  end
@@ -7,7 +7,6 @@ module PulseToolbox
7
7
  class Initializer < ::Rails::Railtie
8
8
  initializer "register_request_sensors", :after => :load_config_initializers do
9
9
  if PulseToolbox.redis
10
- PulseToolbox::Sensor::Manager.create_sensors
11
10
  ActiveSupport::Notifications.subscribe "process_action.action_controller" do |name, start, finish, id, payload|
12
11
  total_time = (finish - start) * 1000
13
12
  view_time = payload[:view_runtime]
@@ -94,6 +94,7 @@ module PulseToolbox
94
94
 
95
95
  # Creates all sensors from sensors_config
96
96
  def self.create_sensors
97
+ PulseToolbox.maybe_reconnect
97
98
  config = cfg
98
99
  self.configurator = PulseMeter::Sensor::Configuration.new(cfg)
99
100
  each_sensor do |s|
@@ -121,7 +122,7 @@ module PulseToolbox
121
122
  # @param sensor [Symbol] sensor name
122
123
  # @param value [Float] event value
123
124
  def event(sensor, value)
124
- configurator.sensor(sensor).event(value.to_i)
125
+ lazy_configurator.sensor(sensor).event(value.to_i)
125
126
  end
126
127
 
127
128
  # Adds group to config
@@ -172,7 +173,12 @@ module PulseToolbox
172
173
  end
173
174
 
174
175
  def get_sensor(group, name)
175
- configurator.sensor(name_in_group(group, name))
176
+ lazy_configurator.sensor(name_in_group(group, name))
177
+ end
178
+
179
+ def lazy_configurator
180
+ create_sensors unless configurator
181
+ configurator
176
182
  end
177
183
 
178
184
  end
@@ -1,3 +1,3 @@
1
1
  module PulseToolbox
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -1,19 +1,61 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe PulseToolbox do
4
- let(:redis) {"redis"}
4
+ let(:redis) {Redis.new}
5
5
 
6
6
  describe ".redis=" do
7
- it "should set PulseMeter redis" do
7
+ it "sets PulseMeter redis" do
8
8
  described_class.redis = redis
9
9
  PulseMeter.redis.should == redis
10
10
  end
11
11
  end
12
12
 
13
13
  describe ".redis" do
14
- it "should retrieve redis" do
14
+ before do
15
15
  described_class.redis = redis
16
+ end
17
+
18
+ it "retrieves redis" do
16
19
  described_class.redis.should == redis
17
20
  end
21
+
22
+ it "reconnects redis client when pid changes" do
23
+ old_object_id = described_class.redis.object_id
24
+ Process.stub(:pid).and_return(1)
25
+ described_class.redis.object_id.should_not == old_object_id
26
+ end
27
+ end
28
+
29
+ describe ".pid_changed" do
30
+ context "when pid is unchanged" do
31
+ it "returns false" do
32
+ described_class.pid_changed.should be_false
33
+ end
34
+ end
35
+
36
+ context "when pid changes" do
37
+ before do
38
+ described_class.redis = redis
39
+ Process.stub(:pid).and_return(1)
40
+ end
41
+
42
+ it "returns true" do
43
+ described_class.pid_changed.should be_true
44
+ end
45
+ end
46
+ end
47
+
48
+ describe ".reconnect" do
49
+ before do
50
+ described_class.redis = Redis.new :db => 2
51
+ end
52
+
53
+ it "recreates redis client" do
54
+ expect {described_class.reconnect}.to change {described_class.redis.object_id}
55
+ end
56
+
57
+ it "recreates redis client with same connection options" do
58
+ expect {described_class.reconnect}.not_to change {described_class.redis.client.id}
59
+ end
18
60
  end
19
61
  end
@@ -27,7 +27,7 @@ module Helpers
27
27
  end
28
28
 
29
29
  def and_run_generator(name)
30
- system("cd " + RAILS_APP_PATH + " && rails g #{name} > /dev/null 2>&1").should be_true
30
+ system("cd " + RAILS_APP_PATH + " && rails g #{name} > /dev/null 2>&1").should be_true
31
31
  end
32
32
 
33
33
  def i_should_see_route(route)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pulse-meter-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-15 00:00:00.000000000Z
12
+ date: 2012-06-16 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pulse-meter
16
- requirement: &70271865769100 !ruby/object:Gem::Requirement
16
+ requirement: &70310319442960 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70271865769100
24
+ version_requirements: *70310319442960
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activesupport
27
- requirement: &70271865767600 !ruby/object:Gem::Requirement
27
+ requirement: &70310319442180 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '3.0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70271865767600
35
+ version_requirements: *70310319442180
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rails
38
- requirement: &70271865766700 !ruby/object:Gem::Requirement
38
+ requirement: &70310319441220 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '3.0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70271865766700
46
+ version_requirements: *70310319441220
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: capybara
49
- requirement: &70271865765740 !ruby/object:Gem::Requirement
49
+ requirement: &70310319440520 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70271865765740
57
+ version_requirements: *70310319440520
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rack-test
60
- requirement: &70271865764820 !ruby/object:Gem::Requirement
60
+ requirement: &70310319439560 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70271865764820
68
+ version_requirements: *70310319439560
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rails
71
- requirement: &70271865764200 !ruby/object:Gem::Requirement
71
+ requirement: &70310319438540 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70271865764200
79
+ version_requirements: *70310319438540
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rake
82
- requirement: &70271865763240 !ruby/object:Gem::Requirement
82
+ requirement: &70310319437940 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70271865763240
90
+ version_requirements: *70310319437940
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: redcarpet
93
- requirement: &70271865762540 !ruby/object:Gem::Requirement
93
+ requirement: &70310319437020 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70271865762540
101
+ version_requirements: *70310319437020
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: rspec
104
- requirement: &70271865761820 !ruby/object:Gem::Requirement
104
+ requirement: &70310319436520 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70271865761820
112
+ version_requirements: *70310319436520
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rspec-rails
115
- requirement: &70271865760920 !ruby/object:Gem::Requirement
115
+ requirement: &70310319435580 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *70271865760920
123
+ version_requirements: *70310319435580
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: simplecov
126
- requirement: &70271865760060 !ruby/object:Gem::Requirement
126
+ requirement: &70310319434660 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *70271865760060
134
+ version_requirements: *70310319434660
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: yard
137
- requirement: &70271865758880 !ruby/object:Gem::Requirement
137
+ requirement: &70310319433960 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,7 +142,7 @@ dependencies:
142
142
  version: '0'
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *70271865758880
145
+ version_requirements: *70310319433960
146
146
  description: Pulse meter toolbox
147
147
  email:
148
148
  - averyanov@gmail.com
@@ -208,7 +208,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
208
208
  version: '0'
209
209
  segments:
210
210
  - 0
211
- hash: 4152249781938887414
211
+ hash: 422521729533414755
212
212
  required_rubygems_version: !ruby/object:Gem::Requirement
213
213
  none: false
214
214
  requirements:
@@ -217,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
217
217
  version: '0'
218
218
  segments:
219
219
  - 0
220
- hash: 4152249781938887414
220
+ hash: 422521729533414755
221
221
  requirements: []
222
222
  rubyforge_project:
223
223
  rubygems_version: 1.8.10