pulse-meter-rails 0.0.1 → 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.
@@ -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