pulse-meter-rails 0.1.1 → 0.1.2

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/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ /.idea
data/README.md CHANGED
@@ -86,6 +86,10 @@ Default layout can be easily exteneded in initializer by standart pulse-meter [D
86
86
  end
87
87
  end
88
88
 
89
+ ## Data isolation
90
+
91
+ To avoid collisions between multiple rails applications with monitoring enabled use separate Redis DB for each of them
92
+
89
93
  ## Contributing
90
94
 
91
95
  1. Fork it
@@ -36,9 +36,9 @@ module PulseToolbox
36
36
  PulseMeter.redis = redis
37
37
  @@pid = Process.pid
38
38
  @@redis_config = {
39
- :host => redis.client.host,
40
- :port => redis.client.port,
41
- :db => redis.client.db
39
+ host: redis.client.host,
40
+ port: redis.client.port,
41
+ db: redis.client.db
42
42
  }
43
43
  end
44
44
 
@@ -49,9 +49,9 @@ module PulseToolbox
49
49
 
50
50
  def reconnect
51
51
  PulseMeter.redis = Redis.new(
52
- :host => @@redis_config[:host],
53
- :port => @@redis_config[:port],
54
- :db => @@redis_config[:db]
52
+ host: @@redis_config[:host],
53
+ port: @@redis_config[:port],
54
+ db: @@redis_config[:db]
55
55
  )
56
56
  end
57
57
 
@@ -5,13 +5,11 @@ module PulseToolbox
5
5
  # Registeres an initializer which creates sensors and subscribes to
6
6
  # process_action.action_controller notification
7
7
  class Initializer < ::Rails::Railtie
8
- initializer "register_request_sensors", :after => :load_config_initializers do
8
+ initializer "register_request_sensors", after: :load_config_initializers do
9
9
  if PulseToolbox.redis
10
10
  ActiveSupport::Notifications.subscribe "process_action.action_controller" do |name, start, finish, id, payload|
11
11
  total_time = (finish - start) * 1000
12
- view_time = payload[:view_runtime]
13
- db_time = payload[:db_runtime]
14
- PulseToolbox::Sensor::Manager.log_request(total_time, view_time, db_time)
12
+ PulseToolbox::Sensor::Manager.log_request(total_time, payload)
15
13
  end
16
14
  else
17
15
  Rails.logger.error("PulseToolbox.redis is not defined. Sensors cannot be created")
@@ -28,64 +28,129 @@ module PulseToolbox
28
28
  self.monitoring_layout = PulseMeter::Visualize::DSL::Layout.new
29
29
 
30
30
  self.default_options = {
31
- :ttl => 1.day,
32
- :interval => 1.minute,
33
- :raw_data_ttl => 1.hour,
34
- :reduce_delay => 2.minutes
31
+ ttl: 7.days,
32
+ interval: 1.minute,
33
+ raw_data_ttl: 1.hour,
34
+ reduce_delay: 2.minutes
35
35
  }.freeze
36
36
 
37
37
  self.sensors_config = {
38
- :max => {
39
- :title => "Max times",
40
- :sensors => {
41
- :db_time => {
42
- :sensor_type => 'timelined/max',
43
- :color => '#0000FF',
44
- :args => {
45
- :annotation => "DB"
38
+ max: {
39
+ title: "Max times",
40
+ values: "Time, ms",
41
+ sensors: {
42
+ db_time: {
43
+ sensor_type: 'timelined/max',
44
+ color: '#0000FF',
45
+ args: {
46
+ annotation: "DB"
46
47
  }
47
48
  },
48
- :view_time => {
49
- :sensor_type => 'timelined/max',
50
- :color => '#00FF00',
51
- :args => {
52
- :annotation => "View"
49
+ view_time: {
50
+ sensor_type: 'timelined/max',
51
+ color: '#00FF00',
52
+ args: {
53
+ annotation: "View"
53
54
  }
54
55
  },
55
- :total_time => {
56
- :sensor_type => 'timelined/max',
57
- :color => '#FF0000',
58
- :args => {
59
- :annotation => "Total"
56
+ total_time: {
57
+ sensor_type: 'timelined/max',
58
+ color: '#FF0000',
59
+ args: {
60
+ annotation: "Total"
60
61
  }
61
62
  }
62
63
  }
63
64
  },
64
- :p95 => {
65
- :title => "95% percentile times",
66
- :sensors => {
67
- :db_time => {
68
- :sensor_type => 'timelined/percentile',
69
- :color => '#0000FF',
70
- :args => {
71
- :annotation => "DB",
72
- :p => 0.95
65
+ p95: {
66
+ title: "95% percentile times",
67
+ values: "Time, ms",
68
+ sensors: {
69
+ db_time: {
70
+ sensor_type: 'timelined/percentile',
71
+ color: '#0000FF',
72
+ args: {
73
+ annotation: "DB",
74
+ p: 0.95
73
75
  }
74
76
  },
75
- :view_time => {
76
- :sensor_type => 'timelined/percentile',
77
- :color => '#00FF00',
78
- :args => {
79
- :annotation => "View",
80
- :p => 0.95
77
+ view_time: {
78
+ sensor_type: 'timelined/percentile',
79
+ color: '#00FF00',
80
+ args: {
81
+ annotation: "View",
82
+ p: 0.95
81
83
  }
82
84
  },
83
- :total_time => {
84
- :sensor_type => 'timelined/percentile',
85
- :color => '#FF0000',
86
- :args => {
87
- :annotation => "Total",
88
- :p => 0.95
85
+ total_time: {
86
+ sensor_type: 'timelined/percentile',
87
+ color: '#FF0000',
88
+ args: {
89
+ annotation: "Total",
90
+ p: 0.95
91
+ }
92
+ }
93
+ }
94
+ },
95
+ p99: {
96
+ title: "99% percentile times",
97
+ values: "Time, ms",
98
+ sensors: {
99
+ db_time: {
100
+ sensor_type: 'timelined/percentile',
101
+ color: '#0000FF',
102
+ args: {
103
+ annotation: "DB",
104
+ p: 0.99
105
+ }
106
+ },
107
+ view_time: {
108
+ sensor_type: 'timelined/percentile',
109
+ color: '#00FF00',
110
+ args: {
111
+ annotation: "View",
112
+ p: 0.99
113
+ }
114
+ },
115
+ total_time: {
116
+ sensor_type: 'timelined/percentile',
117
+ color: '#FF0000',
118
+ args: {
119
+ annotation: "Total",
120
+ p: 0.99
121
+ }
122
+ }
123
+ }
124
+ },
125
+ status: {
126
+ title: 'Request count',
127
+ values: "Count",
128
+ sensors: {
129
+ total: {
130
+ sensor_type: 'timelined/counter',
131
+ color: '#FF0000',
132
+ args: {
133
+ annotation: "Total",
134
+ }
135
+ },
136
+ count: {
137
+ sensor_type: 'timelined/hashed_counter',
138
+ color: '#008800',
139
+ args: {
140
+ annotation: "Status"
141
+ }
142
+ }
143
+ }
144
+ },
145
+ action: {
146
+ title: 'Request count by action',
147
+ values: "Count",
148
+ sensors: {
149
+ count: {
150
+ sensor_type: 'timelined/hashed_counter',
151
+ color: '#008800',
152
+ args: {
153
+ annotation: "Action"
89
154
  }
90
155
  }
91
156
  }
@@ -107,22 +172,38 @@ module PulseToolbox
107
172
  # @param total_time [Float] total request time
108
173
  # @param view_time [Float] view time of request
109
174
  # @param db_time [Float] db time of request
110
- def log_request(total_time, view_time, db_time)
111
- [
112
- [:max_db_time, db_time],
113
- [:p95_db_time, db_time],
114
- [:max_view_time, view_time],
115
- [:p95_view_time, view_time],
116
- [:max_total_time, total_time],
117
- [:p95_total_time, total_time]
118
- ].each {|name, value = e| event(name, value)}
175
+ def log_request(total_time, payload)
176
+ view_time = payload[:view_runtime]
177
+ db_time = payload[:db_runtime]
178
+
179
+ lazy_configurator
180
+ PulseToolbox.redis.multi do
181
+ {
182
+ max_db_time: db_time,
183
+ max_view_time: view_time,
184
+ max_total_time: total_time,
185
+
186
+ p95_db_time: db_time,
187
+ p95_view_time: view_time,
188
+ p95_total_time: total_time,
189
+
190
+ p99_db_time: db_time,
191
+ p99_view_time: view_time,
192
+ p99_total_time: total_time,
193
+
194
+ status_count: {payload[:status].to_s => 1},
195
+ status_total: 1,
196
+
197
+ action_count: {"#{payload[:controller]}##{payload[:action]}" => 1}
198
+ }.each_pair {|name, value| event(name, value)}
199
+ end
119
200
  end
120
201
 
121
202
  # Sends value to sensor by name
122
203
  # @param sensor [Symbol] sensor name
123
204
  # @param value [Float] event value
124
205
  def event(sensor, value)
125
- lazy_configurator.sensor(sensor).event(value.to_i)
206
+ lazy_configurator.sensor(sensor).event(value)
126
207
  end
127
208
 
128
209
  # Adds group to config
@@ -14,9 +14,11 @@ module PulseToolbox
14
14
  # Executes block for each group
15
15
  # @yieldparam group [Symbol] group name
16
16
  # @yieldparam title [String] group title
17
+ # @yieldparam value_title [String] group sensor value meaning
17
18
  def each_group_with_title
18
- sensors_config.each_key do |group|
19
- yield(group, sensors_config[group][:title] || group)
19
+ sensors_config.each_key do |group_name|
20
+ group = sensors_config[group_name]
21
+ yield(group_name, group[:title] || group_name, group[:values] || '')
20
22
  end
21
23
  end
22
24
 
@@ -20,8 +20,14 @@ module PulseToolbox::Server
20
20
  })
21
21
 
22
22
  l.page "Requests" do |p|
23
+
24
+ p.highchart_options({
25
+ chart: {
26
+ height: 300
27
+ }
28
+ })
23
29
 
24
- PulseToolbox::Sensor::Manager.each_group_with_title do |group, title|
30
+ PulseToolbox::Sensor::Manager.each_group_with_title do |group, title, values_label|
25
31
  p.spline title do |w|
26
32
  PulseToolbox::Sensor::Manager.each_sensor_in_group(group) do |s|
27
33
  w.sensor s.name, :color => s.color
@@ -31,8 +37,8 @@ module PulseToolbox::Server
31
37
  w.redraw_interval 10
32
38
 
33
39
  w.show_last_point true
34
- w.values_label "Time"
35
- w.width 10
40
+ w.values_label values_label
41
+ w.width 5
36
42
  end
37
43
  end
38
44
 
@@ -1,3 +1,3 @@
1
1
  module PulseToolbox
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -1,16 +1,16 @@
1
1
  PulseToolbox.redis = Redis.new
2
2
 
3
3
  PulseMeter::Sensor::Timelined::Counter.new(:custom_sensor,
4
- :ttl => 1.hour,
5
- :interval => 1.minute,
6
- :raw_data_ttl => 10.minutes,
7
- :reduce_delay => 2.minutes
4
+ ttl: 1.hour,
5
+ interval: 1.minute,
6
+ raw_data_ttl: 10.minutes,
7
+ reduce_delay: 2.minutes
8
8
  )
9
9
 
10
10
  PulseToolbox::Sensor::Manager.layout do |l|
11
11
  l.page "Custom" do |p|
12
12
  p.spline "Custom sensor" do |w|
13
- w.sensor :custom_sensor, :color => "#0000FF"
13
+ w.sensor :custom_sensor, color: "#0000FF"
14
14
 
15
15
  w.timespan 60 * 60 * 3
16
16
  w.redraw_interval 10
@@ -47,7 +47,7 @@ describe PulseToolbox do
47
47
 
48
48
  describe ".reconnect" do
49
49
  before do
50
- described_class.redis = Redis.new :db => 2
50
+ described_class.redis = Redis.new(db: 2)
51
51
  end
52
52
 
53
53
  it "recreates redis client" do
@@ -29,7 +29,13 @@ describe PulseToolbox::Sensor::Manager do
29
29
  it "sends event to all created sensors" do
30
30
  described_class.create_sensors
31
31
  described_class.each_sensor {|s| s.should_receive(:event)}
32
- described_class.log_request(3, 2, 1)
32
+ described_class.log_request(3, {
33
+ view_runtime: 2,
34
+ db_runtime: 1,
35
+ action: "foo",
36
+ controller: 'BarController',
37
+ status: 200
38
+ })
33
39
  end
34
40
  end
35
41
 
@@ -83,14 +89,14 @@ describe PulseToolbox::Sensor::Manager do
83
89
  let(:name) {:new_sensor}
84
90
  let(:options) {
85
91
  {
86
- :sensor_type => 'timelined/max',
87
- :color => '#0000FF',
88
- :args => {
89
- :ttl => 10.days,
90
- :interval => 10.minutes,
91
- :raw_data_ttl => 10.hours,
92
- :reduce_delay => 20.minutes,
93
- :annotation => "Annotation"
92
+ sensor_type: 'timelined/max',
93
+ color: '#0000FF',
94
+ args: {
95
+ ttl: 10.days,
96
+ interval: 10.minutes,
97
+ raw_data_ttl: 10.hours,
98
+ reduce_delay: 20.minutes,
99
+ annotation: "Annotation"
94
100
  }
95
101
  }
96
102
  }
@@ -5,18 +5,18 @@ describe PulseToolbox::Sensor::Mixins::Iterators do
5
5
  extend PulseToolbox::Sensor::Mixins::Iterators
6
6
  class_attribute :sensors_config
7
7
  self.sensors_config = {
8
- :g1 => {
9
- :title => "G1",
10
- :sensors => {
11
- :s11 => "sensor11",
12
- :s12 => "sensor12"
8
+ g1: {
9
+ title: "G1",
10
+ sensors: {
11
+ s11: "sensor11",
12
+ s12: "sensor12"
13
13
  }
14
14
  },
15
- :g2 => {
16
- :title => "G2",
17
- :sensors => {
18
- :s21 => "sensor21",
19
- :s22 => "sensor22"
15
+ g2: {
16
+ title: "G2",
17
+ sensors: {
18
+ s21: "sensor21",
19
+ s22: "sensor22"
20
20
  }
21
21
  }
22
22
  }
@@ -10,22 +10,26 @@ end
10
10
  describe "/monitoring/pages/:id/widgets" do
11
11
  let(:custom_tab) {1}
12
12
  let(:monitoring_tab) {2}
13
- def visit_tab(tab_id)
13
+
14
+ before(:each) do
14
15
  PulseToolbox::Sensor::Manager.create_sensors
15
- custom = PulseMeter::Sensor::Timelined::Counter.new(:custom_sensor,
16
- :ttl => 1.hour,
17
- :interval => 1.minute,
18
- :raw_data_ttl => 10.minutes,
19
- :reduce_delay => 2.minutes,
20
- :annotation => "custom_sensor"
16
+ PulseMeter::Sensor::Timelined::Counter.new(:custom_sensor,
17
+ ttl: 1.hour,
18
+ interval: 1.minute,
19
+ raw_data_ttl: 10.minutes,
20
+ reduce_delay: 2.minutes,
21
+ annotation: "custom_sensor"
21
22
  )
23
+ end
24
+
25
+ def widgets_on_tab(tab_id)
22
26
  visit "/monitoring/pages/#{tab_id}/widgets"
23
- @widgets = JSON.parse(page.source)
27
+ JSON.parse(page.source)
24
28
  end
25
29
 
26
- def all_annotations
30
+ def sensor_names_on_tab(tab_id)
27
31
  found_annotations = []
28
- @widgets.each do |w|
32
+ widgets_on_tab(tab_id).each do |w|
29
33
  w["series"].each do |s|
30
34
  found_annotations << s["name"]
31
35
  end
@@ -34,21 +38,31 @@ describe "/monitoring/pages/:id/widgets" do
34
38
  end
35
39
 
36
40
  it "returns some groups of widgets" do
37
- visit_tab(monitoring_tab)
38
41
  groups = []
39
42
  PulseToolbox::Sensor::Manager.each_group {|g| groups << g}
40
- @widgets.count.should == groups.count
43
+ widgets_on_tab(monitoring_tab).count.should == groups.count
41
44
  end
42
45
 
43
46
  it "contains all sensors from PulseToolbox::Sensor::Manager config" do
44
- visit_tab(monitoring_tab)
45
- annotations = PulseToolbox::Sensor::Manager.sensors.map(&:annotation)
47
+ PulseToolbox::Sensor::Manager.log_request(3, {
48
+ view_runtime: 2,
49
+ db_runtime: 1,
50
+ action: "foo",
51
+ controller: 'BarController',
52
+ status: 200,
53
+ })
54
+
55
+ annotations = PulseToolbox::Sensor::Manager.sensors.reject{|s|
56
+ s.is_a?(PulseMeter::Sensor::Timelined::HashedCounter)
57
+ }.map(&:annotation)
58
+
59
+ annotations << "Status: 200"
60
+ annotations << "Action: BarController#foo"
46
61
 
47
- annotations.sort.should == all_annotations.sort
62
+ sensor_names_on_tab(monitoring_tab).sort.should == annotations.sort
48
63
  end
49
64
 
50
65
  it "returns widgets of custom page created in initializer" do
51
- visit_tab(custom_tab)
52
- all_annotations.should == ["custom_sensor"]
66
+ sensor_names_on_tab(custom_tab).should == ["custom_sensor"]
53
67
  end
54
68
  end
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.1.1
4
+ version: 0.1.2
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-16 00:00:00.000000000Z
12
+ date: 2012-06-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pulse-meter
16
- requirement: &70196296895280 !ruby/object:Gem::Requirement
16
+ requirement: &70183084727520 !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: *70196296895280
24
+ version_requirements: *70183084727520
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activesupport
27
- requirement: &70196296894160 !ruby/object:Gem::Requirement
27
+ requirement: &70183084726780 !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: *70196296894160
35
+ version_requirements: *70183084726780
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rails
38
- requirement: &70196296893420 !ruby/object:Gem::Requirement
38
+ requirement: &70183084726260 !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: *70196296893420
46
+ version_requirements: *70183084726260
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: capybara
49
- requirement: &70196296892580 !ruby/object:Gem::Requirement
49
+ requirement: &70183084725720 !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: *70196296892580
57
+ version_requirements: *70183084725720
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rack-test
60
- requirement: &70196296891800 !ruby/object:Gem::Requirement
60
+ requirement: &70183084725240 !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: *70196296891800
68
+ version_requirements: *70183084725240
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rails
71
- requirement: &70196296891120 !ruby/object:Gem::Requirement
71
+ requirement: &70183084724800 !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: *70196296891120
79
+ version_requirements: *70183084724800
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rake
82
- requirement: &70196296890200 !ruby/object:Gem::Requirement
82
+ requirement: &70183084724360 !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: *70196296890200
90
+ version_requirements: *70183084724360
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: redcarpet
93
- requirement: &70196296888840 !ruby/object:Gem::Requirement
93
+ requirement: &70183084723940 !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: *70196296888840
101
+ version_requirements: *70183084723940
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: rspec
104
- requirement: &70196296886980 !ruby/object:Gem::Requirement
104
+ requirement: &70183084723500 !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: *70196296886980
112
+ version_requirements: *70183084723500
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rspec-rails
115
- requirement: &70196296886100 !ruby/object:Gem::Requirement
115
+ requirement: &70183084723080 !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: *70196296886100
123
+ version_requirements: *70183084723080
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: simplecov
126
- requirement: &70196296884560 !ruby/object:Gem::Requirement
126
+ requirement: &70183084722560 !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: *70196296884560
134
+ version_requirements: *70183084722560
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: yard
137
- requirement: &70196296882960 !ruby/object:Gem::Requirement
137
+ requirement: &70183084721940 !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: *70196296882960
145
+ version_requirements: *70183084721940
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: 1441616513903231314
211
+ hash: 39999977172173136
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: 1441616513903231314
220
+ hash: 39999977172173136
221
221
  requirements: []
222
222
  rubyforge_project:
223
223
  rubygems_version: 1.8.10