flapjack 0.7.35 → 0.8.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/.gitignore +1 -1
- data/Gemfile +3 -4
- data/Guardfile +1 -1
- data/README.md +38 -19
- data/Rakefile +1 -3
- data/etc/flapjack_config.yaml.example +11 -1
- data/features/steps/cli_steps.rb +3 -3
- data/features/steps/events_steps.rb +7 -6
- data/features/steps/flapjack-netsaint-parser_steps.rb +8 -8
- data/features/steps/notifications_steps.rb +10 -10
- data/features/steps/packaging-lintian_steps.rb +5 -9
- data/features/steps/time_travel_steps.rb +1 -1
- data/flapjack.gemspec +4 -3
- data/lib/flapjack/data/contact.rb +78 -6
- data/lib/flapjack/data/entity.rb +11 -2
- data/lib/flapjack/data/notification_rule.rb +67 -59
- data/lib/flapjack/data/semaphore.rb +44 -0
- data/lib/flapjack/gateways/api.rb +24 -28
- data/lib/flapjack/gateways/api/contact_methods.rb +1 -2
- data/lib/flapjack/gateways/api/entity_methods.rb +3 -3
- data/lib/flapjack/gateways/jsonapi.rb +249 -0
- data/lib/flapjack/gateways/jsonapi/contact_methods.rb +544 -0
- data/lib/flapjack/gateways/jsonapi/entity_check_presenter.rb +217 -0
- data/lib/flapjack/gateways/jsonapi/entity_methods.rb +350 -0
- data/lib/flapjack/gateways/jsonapi/entity_presenter.rb +75 -0
- data/lib/flapjack/gateways/jsonapi/rack/json_params_parser.rb +32 -0
- data/lib/flapjack/gateways/web.rb +78 -12
- data/lib/flapjack/gateways/web/public/css/bootstrap-theme.css +397 -0
- data/lib/flapjack/gateways/web/public/css/bootstrap-theme.min.css +7 -0
- data/lib/flapjack/gateways/web/public/css/bootstrap.css +7118 -0
- data/lib/flapjack/gateways/web/public/css/bootstrap.min.css +6 -8
- data/lib/flapjack/gateways/web/public/css/font-awesome.css +1338 -0
- data/lib/flapjack/gateways/web/public/css/font-awesome.min.css +4 -0
- data/lib/flapjack/gateways/web/public/css/screen.css +80 -0
- data/lib/flapjack/gateways/web/public/css/select2-bootstrap.css +87 -0
- data/lib/flapjack/gateways/web/public/css/select2.css +615 -0
- data/lib/flapjack/gateways/web/public/fonts/FontAwesome.otf +0 -0
- data/lib/flapjack/gateways/web/public/fonts/fontawesome-webfont.eot +0 -0
- data/lib/flapjack/gateways/web/public/fonts/fontawesome-webfont.svg +414 -0
- data/lib/flapjack/gateways/web/public/fonts/fontawesome-webfont.ttf +0 -0
- data/lib/flapjack/gateways/web/public/fonts/fontawesome-webfont.woff +0 -0
- data/lib/flapjack/gateways/web/public/fonts/glyphicons-halflings-regular.eot +0 -0
- data/lib/flapjack/gateways/web/public/fonts/glyphicons-halflings-regular.svg +229 -0
- data/lib/flapjack/gateways/web/public/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/lib/flapjack/gateways/web/public/fonts/glyphicons-halflings-regular.woff +0 -0
- data/lib/flapjack/gateways/web/public/img/flapjack-2013-notext-transparent-300-300.png +0 -0
- data/lib/flapjack/gateways/web/public/img/select2.png +0 -0
- data/lib/flapjack/gateways/web/public/img/select2x2.png +0 -0
- data/lib/flapjack/gateways/web/public/js/backbone-min.js +2 -0
- data/lib/flapjack/gateways/web/public/js/backbone.js +1581 -0
- data/lib/flapjack/gateways/web/public/js/backbone.jsonapi.js +75 -0
- data/lib/flapjack/gateways/web/public/js/bootstrap.js +2276 -0
- data/lib/flapjack/gateways/web/public/js/contacts.js +225 -0
- data/lib/flapjack/gateways/web/public/js/jquery-1.10.2.js +9789 -0
- data/lib/flapjack/gateways/web/public/js/jquery-1.10.2.min.js +6 -0
- data/lib/flapjack/gateways/web/public/js/select2.js +3255 -0
- data/lib/flapjack/gateways/web/public/js/select2.min.js +22 -0
- data/lib/flapjack/gateways/web/public/js/underscore-min.js +6 -0
- data/lib/flapjack/gateways/web/public/js/underscore.js +1276 -0
- data/lib/flapjack/gateways/web/views/check.html.erb +423 -193
- data/lib/flapjack/gateways/web/views/checks.html.erb +51 -71
- data/lib/flapjack/gateways/web/views/contact.html.erb +142 -164
- data/lib/flapjack/gateways/web/views/contacts.html.erb +20 -40
- data/lib/flapjack/gateways/web/views/edit_contacts.html.erb +83 -0
- data/lib/flapjack/gateways/web/views/entities.html.erb +18 -37
- data/lib/flapjack/gateways/web/views/entity.html.erb +46 -65
- data/lib/flapjack/gateways/web/views/index.html.erb +6 -27
- data/lib/flapjack/gateways/web/views/layout.erb +95 -0
- data/lib/flapjack/gateways/web/views/self_stats.html.erb +100 -114
- data/lib/flapjack/pikelet.rb +4 -2
- data/lib/flapjack/version.rb +1 -1
- data/spec/lib/flapjack/coordinator_spec.rb +120 -120
- data/spec/lib/flapjack/data/contact_spec.rb +66 -58
- data/spec/lib/flapjack/data/entity_check_spec.rb +179 -179
- data/spec/lib/flapjack/data/entity_spec.rb +71 -71
- data/spec/lib/flapjack/data/event_spec.rb +34 -30
- data/spec/lib/flapjack/data/message_spec.rb +6 -6
- data/spec/lib/flapjack/data/notification_rule_spec.rb +24 -24
- data/spec/lib/flapjack/data/notification_spec.rb +19 -19
- data/spec/lib/flapjack/data/semaphore_spec.rb +24 -0
- data/spec/lib/flapjack/data/tag_spec.rb +11 -10
- data/spec/lib/flapjack/gateways/api/contact_methods_spec.rb +201 -201
- data/spec/lib/flapjack/gateways/api/entity_check_presenter_spec.rb +55 -55
- data/spec/lib/flapjack/gateways/api/entity_methods_spec.rb +257 -257
- data/spec/lib/flapjack/gateways/api/entity_presenter_spec.rb +26 -26
- data/spec/lib/flapjack/gateways/api_spec.rb +1 -1
- data/spec/lib/flapjack/gateways/email_spec.rb +4 -4
- data/spec/lib/flapjack/gateways/jabber_spec.rb +77 -77
- data/spec/lib/flapjack/gateways/jsonapi/contact_methods_spec.rb +830 -0
- data/spec/lib/flapjack/gateways/jsonapi/entity_check_presenter_spec.rb +211 -0
- data/spec/lib/flapjack/gateways/jsonapi/entity_methods_spec.rb +863 -0
- data/spec/lib/flapjack/gateways/jsonapi/entity_presenter_spec.rb +108 -0
- data/spec/lib/flapjack/gateways/jsonapi_spec.rb +8 -0
- data/spec/lib/flapjack/gateways/oobetet_spec.rb +35 -35
- data/spec/lib/flapjack/gateways/pagerduty_spec.rb +40 -40
- data/spec/lib/flapjack/gateways/sms_messagenet_spec.rb +3 -3
- data/spec/lib/flapjack/gateways/web/views/check.html.erb_spec.rb +1 -1
- data/spec/lib/flapjack/gateways/web/views/contact.html.erb_spec.rb +5 -5
- data/spec/lib/flapjack/gateways/web/views/index.html.erb_spec.rb +1 -1
- data/spec/lib/flapjack/gateways/web_spec.rb +73 -74
- data/spec/lib/flapjack/logger_spec.rb +13 -13
- data/spec/lib/flapjack/pikelet_spec.rb +33 -33
- data/spec/lib/flapjack/processor_spec.rb +22 -22
- data/spec/lib/flapjack/redis_pool_spec.rb +1 -1
- data/spec/lib/flapjack/utility_spec.rb +12 -12
- data/spec/spec_helper.rb +9 -9
- data/spec/support/erb_view_helper.rb +4 -0
- metadata +107 -96
- data/lib/flapjack/gateways/web/public/css/flapjack.css +0 -49
- data/lib/flapjack/gateways/web/views/_css.html.erb +0 -42
- data/lib/flapjack/gateways/web/views/_foot.html.erb +0 -3
- data/lib/flapjack/gateways/web/views/_head.html.erb +0 -5
- data/lib/flapjack/gateways/web/views/_nav.html.erb +0 -10
|
@@ -26,43 +26,43 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
26
26
|
|
|
27
27
|
it "is created for an event id" do
|
|
28
28
|
ec = Flapjack::Data::EntityCheck.for_event_id("#{name}:ping", :redis => @redis)
|
|
29
|
-
ec.
|
|
30
|
-
ec.entity.
|
|
31
|
-
ec.entity.name.
|
|
32
|
-
ec.entity.name.
|
|
33
|
-
ec.check.
|
|
34
|
-
ec.check.
|
|
29
|
+
expect(ec).not_to be_nil
|
|
30
|
+
expect(ec.entity).not_to be_nil
|
|
31
|
+
expect(ec.entity.name).not_to be_nil
|
|
32
|
+
expect(ec.entity.name).to eq(name)
|
|
33
|
+
expect(ec.check).not_to be_nil
|
|
34
|
+
expect(ec.check).to eq('ping')
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
it "is created for an entity name" do
|
|
38
38
|
ec = Flapjack::Data::EntityCheck.for_entity_name(name, 'ping', :redis => @redis)
|
|
39
|
-
ec.
|
|
40
|
-
ec.entity.
|
|
41
|
-
ec.entity.name.
|
|
42
|
-
ec.entity.name.
|
|
43
|
-
ec.check.
|
|
44
|
-
ec.check.
|
|
39
|
+
expect(ec).not_to be_nil
|
|
40
|
+
expect(ec.entity).not_to be_nil
|
|
41
|
+
expect(ec.entity.name).not_to be_nil
|
|
42
|
+
expect(ec.entity.name).to eq(name)
|
|
43
|
+
expect(ec.check).not_to be_nil
|
|
44
|
+
expect(ec.check).to eq('ping')
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
it "is created for an entity id" do
|
|
48
48
|
ec = Flapjack::Data::EntityCheck.for_entity_id(5000, 'ping', :redis => @redis)
|
|
49
|
-
ec.
|
|
50
|
-
ec.entity.
|
|
51
|
-
ec.entity.name.
|
|
52
|
-
ec.entity.name.
|
|
53
|
-
ec.check.
|
|
54
|
-
ec.check.
|
|
49
|
+
expect(ec).not_to be_nil
|
|
50
|
+
expect(ec.entity).not_to be_nil
|
|
51
|
+
expect(ec.entity.name).not_to be_nil
|
|
52
|
+
expect(ec.entity.name).to eq(name)
|
|
53
|
+
expect(ec.check).not_to be_nil
|
|
54
|
+
expect(ec.check).to eq('ping')
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
it "is created for an entity object" do
|
|
58
58
|
e = Flapjack::Data::Entity.find_by_name(name, :redis => @redis)
|
|
59
59
|
ec = Flapjack::Data::EntityCheck.for_entity(e, 'ping', :redis => @redis)
|
|
60
|
-
ec.
|
|
61
|
-
ec.entity.
|
|
62
|
-
ec.entity.name.
|
|
63
|
-
ec.entity.name.
|
|
64
|
-
ec.check.
|
|
65
|
-
ec.check.
|
|
60
|
+
expect(ec).not_to be_nil
|
|
61
|
+
expect(ec.entity).not_to be_nil
|
|
62
|
+
expect(ec.entity.name).not_to be_nil
|
|
63
|
+
expect(ec.entity.name).to eq(name)
|
|
64
|
+
expect(ec.check).not_to be_nil
|
|
65
|
+
expect(ec.check).to eq('ping')
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
it "is not created for a missing entity" do
|
|
@@ -83,36 +83,36 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
83
83
|
@redis.set("#{name}:#{check}:unscheduled_maintenance", Time.now.to_i.to_s)
|
|
84
84
|
|
|
85
85
|
ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
|
|
86
|
-
ec.
|
|
86
|
+
expect(ec).to be_in_unscheduled_maintenance
|
|
87
87
|
end
|
|
88
88
|
|
|
89
89
|
it "returns that it is not in unscheduled maintenance" do
|
|
90
90
|
ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
|
|
91
|
-
ec.
|
|
91
|
+
expect(ec).not_to be_in_unscheduled_maintenance
|
|
92
92
|
end
|
|
93
93
|
|
|
94
94
|
it "returns that it is in scheduled maintenance" do
|
|
95
95
|
@redis.set("#{name}:#{check}:scheduled_maintenance", Time.now.to_i.to_s)
|
|
96
96
|
|
|
97
97
|
ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
|
|
98
|
-
ec.
|
|
98
|
+
expect(ec).to be_in_scheduled_maintenance
|
|
99
99
|
end
|
|
100
100
|
|
|
101
101
|
it "returns that it is not in scheduled maintenance" do
|
|
102
102
|
ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
|
|
103
|
-
ec.
|
|
103
|
+
expect(ec).not_to be_in_scheduled_maintenance
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
it "returns its current maintenance period" do
|
|
107
107
|
ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
|
|
108
|
-
ec.current_maintenance(:scheduled => true).
|
|
108
|
+
expect(ec.current_maintenance(:scheduled => true)).to be_nil
|
|
109
109
|
|
|
110
110
|
t = Time.now.to_i
|
|
111
111
|
|
|
112
112
|
ec.create_unscheduled_maintenance(t, half_an_hour, :summary => 'oops')
|
|
113
|
-
ec.current_maintenance.
|
|
113
|
+
expect(ec.current_maintenance).to eq({:start_time => t,
|
|
114
114
|
:duration => half_an_hour,
|
|
115
|
-
:summary => 'oops'}
|
|
115
|
+
:summary => 'oops'})
|
|
116
116
|
end
|
|
117
117
|
|
|
118
118
|
it "creates an unscheduled maintenance period" do
|
|
@@ -120,27 +120,27 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
120
120
|
ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
|
|
121
121
|
ec.create_unscheduled_maintenance(t, half_an_hour, :summary => 'oops')
|
|
122
122
|
|
|
123
|
-
ec.
|
|
123
|
+
expect(ec).to be_in_unscheduled_maintenance
|
|
124
124
|
|
|
125
125
|
umps = ec.maintenances(nil, nil, :scheduled => false)
|
|
126
|
-
umps.
|
|
127
|
-
umps.
|
|
128
|
-
umps.
|
|
129
|
-
umps[0].
|
|
126
|
+
expect(umps).not_to be_nil
|
|
127
|
+
expect(umps).to be_an(Array)
|
|
128
|
+
expect(umps.size).to eq(1)
|
|
129
|
+
expect(umps[0]).to be_a(Hash)
|
|
130
130
|
|
|
131
131
|
start_time = umps[0][:start_time]
|
|
132
|
-
start_time.
|
|
133
|
-
start_time.
|
|
134
|
-
start_time.
|
|
132
|
+
expect(start_time).not_to be_nil
|
|
133
|
+
expect(start_time).to be_an(Integer)
|
|
134
|
+
expect(start_time).to eq(t)
|
|
135
135
|
|
|
136
136
|
duration = umps[0][:duration]
|
|
137
|
-
duration.
|
|
138
|
-
duration.
|
|
139
|
-
duration.
|
|
137
|
+
expect(duration).not_to be_nil
|
|
138
|
+
expect(duration).to be_a(Float)
|
|
139
|
+
expect(duration).to eq(half_an_hour)
|
|
140
140
|
|
|
141
141
|
summary = @redis.get("#{name}:#{check}:#{t}:unscheduled_maintenance:summary")
|
|
142
|
-
summary.
|
|
143
|
-
summary.
|
|
142
|
+
expect(summary).not_to be_nil
|
|
143
|
+
expect(summary).to eq('oops')
|
|
144
144
|
end
|
|
145
145
|
|
|
146
146
|
it "creates an unscheduled maintenance period and ends the current one early", :time => true do
|
|
@@ -151,33 +151,33 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
151
151
|
Delorean.time_travel_to( Time.at(later_t) )
|
|
152
152
|
ec.create_unscheduled_maintenance(later_t, half_an_hour, :summary => 'spoo')
|
|
153
153
|
|
|
154
|
-
ec.
|
|
154
|
+
expect(ec).to be_in_unscheduled_maintenance
|
|
155
155
|
|
|
156
156
|
umps = ec.maintenances(nil, nil, :scheduled => false)
|
|
157
|
-
umps.
|
|
158
|
-
umps.
|
|
159
|
-
umps.
|
|
160
|
-
umps[0].
|
|
157
|
+
expect(umps).not_to be_nil
|
|
158
|
+
expect(umps).to be_an(Array)
|
|
159
|
+
expect(umps.size).to eq(2)
|
|
160
|
+
expect(umps[0]).to be_a(Hash)
|
|
161
161
|
|
|
162
162
|
start_time = umps[0][:start_time]
|
|
163
|
-
start_time.
|
|
164
|
-
start_time.
|
|
165
|
-
start_time.
|
|
163
|
+
expect(start_time).not_to be_nil
|
|
164
|
+
expect(start_time).to be_an(Integer)
|
|
165
|
+
expect(start_time).to eq(t)
|
|
166
166
|
|
|
167
167
|
duration = umps[0][:duration]
|
|
168
|
-
duration.
|
|
169
|
-
duration.
|
|
170
|
-
duration.
|
|
168
|
+
expect(duration).not_to be_nil
|
|
169
|
+
expect(duration).to be_a(Float)
|
|
170
|
+
expect(duration).to eq(15 * 60)
|
|
171
171
|
|
|
172
172
|
start_time_curr = umps[1][:start_time]
|
|
173
|
-
start_time_curr.
|
|
174
|
-
start_time_curr.
|
|
175
|
-
start_time_curr.
|
|
173
|
+
expect(start_time_curr).not_to be_nil
|
|
174
|
+
expect(start_time_curr).to be_an(Integer)
|
|
175
|
+
expect(start_time_curr).to eq(later_t)
|
|
176
176
|
|
|
177
177
|
duration_curr = umps[1][:duration]
|
|
178
|
-
duration_curr.
|
|
179
|
-
duration_curr.
|
|
180
|
-
duration_curr.
|
|
178
|
+
expect(duration_curr).not_to be_nil
|
|
179
|
+
expect(duration_curr).to be_a(Float)
|
|
180
|
+
expect(duration_curr).to eq(half_an_hour)
|
|
181
181
|
end
|
|
182
182
|
|
|
183
183
|
it "ends an unscheduled maintenance period" do
|
|
@@ -186,28 +186,28 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
186
186
|
ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
|
|
187
187
|
|
|
188
188
|
ec.create_unscheduled_maintenance(t, half_an_hour, :summary => 'oops')
|
|
189
|
-
ec.
|
|
189
|
+
expect(ec).to be_in_unscheduled_maintenance
|
|
190
190
|
|
|
191
191
|
Delorean.time_travel_to( Time.at(later_t) )
|
|
192
|
-
ec.
|
|
192
|
+
expect(ec).to be_in_unscheduled_maintenance
|
|
193
193
|
ec.end_unscheduled_maintenance(later_t)
|
|
194
|
-
ec.
|
|
194
|
+
expect(ec).not_to be_in_unscheduled_maintenance
|
|
195
195
|
|
|
196
196
|
umps = ec.maintenances(nil, nil, :scheduled => false)
|
|
197
|
-
umps.
|
|
198
|
-
umps.
|
|
199
|
-
umps.
|
|
200
|
-
umps[0].
|
|
197
|
+
expect(umps).not_to be_nil
|
|
198
|
+
expect(umps).to be_an(Array)
|
|
199
|
+
expect(umps.size).to eq(1)
|
|
200
|
+
expect(umps[0]).to be_a(Hash)
|
|
201
201
|
|
|
202
202
|
start_time = umps[0][:start_time]
|
|
203
|
-
start_time.
|
|
204
|
-
start_time.
|
|
205
|
-
start_time.
|
|
203
|
+
expect(start_time).not_to be_nil
|
|
204
|
+
expect(start_time).to be_an(Integer)
|
|
205
|
+
expect(start_time).to eq(t)
|
|
206
206
|
|
|
207
207
|
duration = umps[0][:duration]
|
|
208
|
-
duration.
|
|
209
|
-
duration.
|
|
210
|
-
duration.
|
|
208
|
+
expect(duration).not_to be_nil
|
|
209
|
+
expect(duration).to be_a(Float)
|
|
210
|
+
expect(duration).to eq(15 * 60)
|
|
211
211
|
end
|
|
212
212
|
|
|
213
213
|
it "creates a scheduled maintenance period for a future time" do
|
|
@@ -217,20 +217,20 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
217
217
|
half_an_hour, :summary => "30 minutes")
|
|
218
218
|
|
|
219
219
|
smps = ec.maintenances(nil, nil, :scheduled => true)
|
|
220
|
-
smps.
|
|
221
|
-
smps.
|
|
222
|
-
smps.
|
|
223
|
-
smps[0].
|
|
220
|
+
expect(smps).not_to be_nil
|
|
221
|
+
expect(smps).to be_an(Array)
|
|
222
|
+
expect(smps.size).to eq(1)
|
|
223
|
+
expect(smps[0]).to be_a(Hash)
|
|
224
224
|
|
|
225
225
|
start_time = smps[0][:start_time]
|
|
226
|
-
start_time.
|
|
227
|
-
start_time.
|
|
228
|
-
start_time.
|
|
226
|
+
expect(start_time).not_to be_nil
|
|
227
|
+
expect(start_time).to be_an(Integer)
|
|
228
|
+
expect(start_time).to eq(t + (60 * 60))
|
|
229
229
|
|
|
230
230
|
duration = smps[0][:duration]
|
|
231
|
-
duration.
|
|
232
|
-
duration.
|
|
233
|
-
duration.
|
|
231
|
+
expect(duration).not_to be_nil
|
|
232
|
+
expect(duration).to be_a(Float)
|
|
233
|
+
expect(duration).to eq(half_an_hour)
|
|
234
234
|
end
|
|
235
235
|
|
|
236
236
|
# TODO this should probably enforce that it starts in the future
|
|
@@ -241,20 +241,20 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
241
241
|
2 * (60 * 60), :summary => "2 hours")
|
|
242
242
|
|
|
243
243
|
smps = ec.maintenances(nil, nil, :scheduled => true)
|
|
244
|
-
smps.
|
|
245
|
-
smps.
|
|
246
|
-
smps.
|
|
247
|
-
smps[0].
|
|
244
|
+
expect(smps).not_to be_nil
|
|
245
|
+
expect(smps).to be_an(Array)
|
|
246
|
+
expect(smps.size).to eq(1)
|
|
247
|
+
expect(smps[0]).to be_a(Hash)
|
|
248
248
|
|
|
249
249
|
start_time = smps[0][:start_time]
|
|
250
|
-
start_time.
|
|
251
|
-
start_time.
|
|
252
|
-
start_time.
|
|
250
|
+
expect(start_time).not_to be_nil
|
|
251
|
+
expect(start_time).to be_an(Integer)
|
|
252
|
+
expect(start_time).to eq(t - (60 * 60))
|
|
253
253
|
|
|
254
254
|
duration = smps[0][:duration]
|
|
255
|
-
duration.
|
|
256
|
-
duration.
|
|
257
|
-
duration.
|
|
255
|
+
expect(duration).not_to be_nil
|
|
256
|
+
expect(duration).to be_a(Float)
|
|
257
|
+
expect(duration).to eq(2 * (60 * 60))
|
|
258
258
|
end
|
|
259
259
|
|
|
260
260
|
it "removes a scheduled maintenance period for a future time" do
|
|
@@ -266,9 +266,9 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
266
266
|
ec.end_scheduled_maintenance(t + (60 * 60))
|
|
267
267
|
|
|
268
268
|
smps = ec.maintenances(nil, nil, :scheduled => true)
|
|
269
|
-
smps.
|
|
270
|
-
smps.
|
|
271
|
-
smps.
|
|
269
|
+
expect(smps).not_to be_nil
|
|
270
|
+
expect(smps).to be_an(Array)
|
|
271
|
+
expect(smps).to be_empty
|
|
272
272
|
end
|
|
273
273
|
|
|
274
274
|
# maint period starts an hour from now, goes for two hours -- at 30 minutes into
|
|
@@ -284,11 +284,11 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
284
284
|
ec.end_scheduled_maintenance(t + (60 * 60))
|
|
285
285
|
|
|
286
286
|
smps = ec.maintenances(nil, nil, :scheduled => true)
|
|
287
|
-
smps.
|
|
288
|
-
smps.
|
|
289
|
-
smps.
|
|
290
|
-
smps.
|
|
291
|
-
smps.first[:duration].
|
|
287
|
+
expect(smps).not_to be_nil
|
|
288
|
+
expect(smps).to be_an(Array)
|
|
289
|
+
expect(smps).not_to be_empty
|
|
290
|
+
expect(smps.size).to eq(1)
|
|
291
|
+
expect(smps.first[:duration]).to eq(30 * 60)
|
|
292
292
|
end
|
|
293
293
|
|
|
294
294
|
it "does not alter or remove a scheduled maintenance period covering a past time", :time => true do
|
|
@@ -302,11 +302,11 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
302
302
|
ec.end_scheduled_maintenance(t + (60 * 60))
|
|
303
303
|
|
|
304
304
|
smps = ec.maintenances(nil, nil, :scheduled => true)
|
|
305
|
-
smps.
|
|
306
|
-
smps.
|
|
307
|
-
smps.
|
|
308
|
-
smps.
|
|
309
|
-
smps.first[:duration].
|
|
305
|
+
expect(smps).not_to be_nil
|
|
306
|
+
expect(smps).to be_an(Array)
|
|
307
|
+
expect(smps).not_to be_empty
|
|
308
|
+
expect(smps.size).to eq(1)
|
|
309
|
+
expect(smps.first[:duration]).to eq(2 * (60 * 60))
|
|
310
310
|
end
|
|
311
311
|
|
|
312
312
|
it "returns a list of scheduled maintenance periods" do
|
|
@@ -321,17 +321,17 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
321
321
|
:summary => "second")
|
|
322
322
|
|
|
323
323
|
smp = ec.maintenances(nil, nil, :scheduled => true)
|
|
324
|
-
smp.
|
|
325
|
-
smp.
|
|
326
|
-
smp.
|
|
327
|
-
smp[0].
|
|
324
|
+
expect(smp).not_to be_nil
|
|
325
|
+
expect(smp).to be_an(Array)
|
|
326
|
+
expect(smp.size).to eq(2)
|
|
327
|
+
expect(smp[0]).to eq({:start_time => five_hours_ago,
|
|
328
328
|
:end_time => five_hours_ago + half_an_hour,
|
|
329
329
|
:duration => half_an_hour,
|
|
330
|
-
:summary => "first"}
|
|
331
|
-
smp[1].
|
|
330
|
+
:summary => "first"})
|
|
331
|
+
expect(smp[1]).to eq({:start_time => three_hours_ago,
|
|
332
332
|
:end_time => three_hours_ago + half_an_hour,
|
|
333
333
|
:duration => half_an_hour,
|
|
334
|
-
:summary => "second"}
|
|
334
|
+
:summary => "second"})
|
|
335
335
|
end
|
|
336
336
|
|
|
337
337
|
it "returns a list of unscheduled maintenance periods" do
|
|
@@ -346,17 +346,17 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
346
346
|
half_an_hour, :summary => "second")
|
|
347
347
|
|
|
348
348
|
ump = ec.maintenances(nil, nil, :scheduled => false)
|
|
349
|
-
ump.
|
|
350
|
-
ump.
|
|
351
|
-
ump.
|
|
352
|
-
ump[0].
|
|
349
|
+
expect(ump).not_to be_nil
|
|
350
|
+
expect(ump).to be_an(Array)
|
|
351
|
+
expect(ump.size).to eq(2)
|
|
352
|
+
expect(ump[0]).to eq({:start_time => five_hours_ago,
|
|
353
353
|
:end_time => five_hours_ago + half_an_hour,
|
|
354
354
|
:duration => half_an_hour,
|
|
355
|
-
:summary => "first"}
|
|
356
|
-
ump[1].
|
|
355
|
+
:summary => "first"})
|
|
356
|
+
expect(ump[1]).to eq({:start_time => three_hours_ago,
|
|
357
357
|
:end_time => three_hours_ago + half_an_hour,
|
|
358
358
|
:duration => half_an_hour,
|
|
359
|
-
:summary => "second"}
|
|
359
|
+
:summary => "second"})
|
|
360
360
|
end
|
|
361
361
|
|
|
362
362
|
end
|
|
@@ -366,8 +366,8 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
366
366
|
|
|
367
367
|
ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
|
|
368
368
|
state = ec.state
|
|
369
|
-
state.
|
|
370
|
-
state.
|
|
369
|
+
expect(state).not_to be_nil
|
|
370
|
+
expect(state).to eq('ok')
|
|
371
371
|
end
|
|
372
372
|
|
|
373
373
|
it "updates state" do
|
|
@@ -379,11 +379,11 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
379
379
|
ec.update_state('critical')
|
|
380
380
|
|
|
381
381
|
state = @redis.hget("check:#{name}:#{check}", 'state')
|
|
382
|
-
state.
|
|
383
|
-
state.
|
|
382
|
+
expect(state).not_to be_nil
|
|
383
|
+
expect(state).to eq('critical')
|
|
384
384
|
|
|
385
385
|
new_timestamp = @redis.hget("check:#{name}:#{check}", 'last_update')
|
|
386
|
-
new_timestamp.
|
|
386
|
+
expect(new_timestamp).not_to eq(old_timestamp)
|
|
387
387
|
end
|
|
388
388
|
|
|
389
389
|
it "updates enabled checks" do
|
|
@@ -392,11 +392,11 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
392
392
|
ec.last_update = ts
|
|
393
393
|
|
|
394
394
|
saved_check_ts = @redis.zscore("current_checks:#{name}", check)
|
|
395
|
-
saved_check_ts.
|
|
396
|
-
saved_check_ts.
|
|
395
|
+
expect(saved_check_ts).not_to be_nil
|
|
396
|
+
expect(saved_check_ts).to eq(ts)
|
|
397
397
|
saved_entity_ts = @redis.zscore("current_entities", name)
|
|
398
|
-
saved_entity_ts.
|
|
399
|
-
saved_entity_ts.
|
|
398
|
+
expect(saved_entity_ts).not_to be_nil
|
|
399
|
+
expect(saved_entity_ts).to eq(ts)
|
|
400
400
|
end
|
|
401
401
|
|
|
402
402
|
it "exposes that it is enabled" do
|
|
@@ -405,14 +405,14 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
405
405
|
ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
|
|
406
406
|
|
|
407
407
|
e = ec.enabled?
|
|
408
|
-
e.
|
|
408
|
+
expect(e).to be true
|
|
409
409
|
end
|
|
410
410
|
|
|
411
411
|
it "exposes that it is disabled" do
|
|
412
412
|
ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
|
|
413
413
|
|
|
414
414
|
e = ec.enabled?
|
|
415
|
-
e.
|
|
415
|
+
expect(e).to be false
|
|
416
416
|
end
|
|
417
417
|
|
|
418
418
|
it "disables checks" do
|
|
@@ -423,8 +423,8 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
423
423
|
|
|
424
424
|
saved_check_ts = @redis.zscore("current_checks:#{name}", check)
|
|
425
425
|
saved_entity_ts = @redis.zscore("current_entities", name)
|
|
426
|
-
saved_check_ts.
|
|
427
|
-
saved_entity_ts.
|
|
426
|
+
expect(saved_check_ts).to be_nil
|
|
427
|
+
expect(saved_entity_ts).to be_nil
|
|
428
428
|
end
|
|
429
429
|
|
|
430
430
|
it "does not update state with invalid value" do
|
|
@@ -434,8 +434,8 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
434
434
|
ec.update_state('silly')
|
|
435
435
|
|
|
436
436
|
state = @redis.hget("check:#{name}:#{check}", 'state')
|
|
437
|
-
state.
|
|
438
|
-
state.
|
|
437
|
+
expect(state).not_to be_nil
|
|
438
|
+
expect(state).to eq('ok')
|
|
439
439
|
end
|
|
440
440
|
|
|
441
441
|
it "does not update state with a repeated state value" do
|
|
@@ -448,15 +448,15 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
448
448
|
new_changed_at = @redis.hget("check:#{name}:#{check}", 'last_change')
|
|
449
449
|
new_summary = @redis.hget("check:#{name}:#{check}", 'summary')
|
|
450
450
|
|
|
451
|
-
changed_at.
|
|
452
|
-
new_changed_at.
|
|
453
|
-
new_changed_at.
|
|
451
|
+
expect(changed_at).not_to be_nil
|
|
452
|
+
expect(new_changed_at).not_to be_nil
|
|
453
|
+
expect(new_changed_at).to eq(changed_at)
|
|
454
454
|
|
|
455
|
-
summary.
|
|
456
|
-
new_summary.
|
|
457
|
-
new_summary.
|
|
458
|
-
summary.
|
|
459
|
-
new_summary.
|
|
455
|
+
expect(summary).not_to be_nil
|
|
456
|
+
expect(new_summary).not_to be_nil
|
|
457
|
+
expect(new_summary).not_to eq(summary)
|
|
458
|
+
expect(summary).to eq('small problem')
|
|
459
|
+
expect(new_summary).to eq('big problem')
|
|
460
460
|
end
|
|
461
461
|
|
|
462
462
|
def time_before(t, min, sec = 0)
|
|
@@ -474,13 +474,13 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
474
474
|
ec.update_state('ok', :timestamp => time_before(t, 1), :summary => 'e')
|
|
475
475
|
|
|
476
476
|
states = ec.historical_states(time_before(t, 4), t)
|
|
477
|
-
states.
|
|
478
|
-
states.
|
|
479
|
-
states.
|
|
480
|
-
states[0][:summary].
|
|
481
|
-
states[1][:summary].
|
|
482
|
-
states[2][:summary].
|
|
483
|
-
states[3][:summary].
|
|
477
|
+
expect(states).not_to be_nil
|
|
478
|
+
expect(states).to be_an(Array)
|
|
479
|
+
expect(states.size).to eq(4)
|
|
480
|
+
expect(states[0][:summary]).to eq('b')
|
|
481
|
+
expect(states[1][:summary]).to eq('c')
|
|
482
|
+
expect(states[2][:summary]).to eq('d')
|
|
483
|
+
expect(states[3][:summary]).to eq('e')
|
|
484
484
|
end
|
|
485
485
|
|
|
486
486
|
it "returns a list of historical unscheduled maintenances for a time range" do
|
|
@@ -494,13 +494,13 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
494
494
|
ec.update_state('ok', :timestamp => time_before(t, 1), :summary => 'e')
|
|
495
495
|
|
|
496
496
|
states = ec.historical_states(time_before(t, 4), t)
|
|
497
|
-
states.
|
|
498
|
-
states.
|
|
499
|
-
states.
|
|
500
|
-
states[0][:summary].
|
|
501
|
-
states[1][:summary].
|
|
502
|
-
states[2][:summary].
|
|
503
|
-
states[3][:summary].
|
|
497
|
+
expect(states).not_to be_nil
|
|
498
|
+
expect(states).to be_an(Array)
|
|
499
|
+
expect(states.size).to eq(4)
|
|
500
|
+
expect(states[0][:summary]).to eq('b')
|
|
501
|
+
expect(states[1][:summary]).to eq('c')
|
|
502
|
+
expect(states[2][:summary]).to eq('d')
|
|
503
|
+
expect(states[3][:summary]).to eq('e')
|
|
504
504
|
end
|
|
505
505
|
|
|
506
506
|
it "returns a list of historical scheduled maintenances for a time range" do
|
|
@@ -517,34 +517,34 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
517
517
|
|
|
518
518
|
sched_maint_periods = ec.maintenances(time_before(t, 150), t,
|
|
519
519
|
:scheduled => true)
|
|
520
|
-
sched_maint_periods.
|
|
521
|
-
sched_maint_periods.
|
|
522
|
-
sched_maint_periods.
|
|
523
|
-
sched_maint_periods[0][:summary].
|
|
524
|
-
sched_maint_periods[1][:summary].
|
|
520
|
+
expect(sched_maint_periods).not_to be_nil
|
|
521
|
+
expect(sched_maint_periods).to be_an(Array)
|
|
522
|
+
expect(sched_maint_periods.size).to eq(2)
|
|
523
|
+
expect(sched_maint_periods[0][:summary]).to eq('b')
|
|
524
|
+
expect(sched_maint_periods[1][:summary]).to eq('c')
|
|
525
525
|
end
|
|
526
526
|
|
|
527
527
|
it "returns that it has failed" do
|
|
528
528
|
ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
|
|
529
529
|
|
|
530
530
|
@redis.hset("check:#{name}:#{check}", 'state', 'warning')
|
|
531
|
-
ec.
|
|
531
|
+
expect(ec).to be_failed
|
|
532
532
|
|
|
533
533
|
@redis.hset("check:#{name}:#{check}", 'state', 'critical')
|
|
534
|
-
ec.
|
|
534
|
+
expect(ec).to be_failed
|
|
535
535
|
|
|
536
536
|
@redis.hset("check:#{name}:#{check}", 'state', 'unknown')
|
|
537
|
-
ec.
|
|
537
|
+
expect(ec).to be_failed
|
|
538
538
|
end
|
|
539
539
|
|
|
540
540
|
it "returns that it has not failed" do
|
|
541
541
|
ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
|
|
542
542
|
|
|
543
543
|
@redis.hset("check:#{name}:#{check}", 'state', 'ok')
|
|
544
|
-
ec.
|
|
544
|
+
expect(ec).not_to be_failed
|
|
545
545
|
|
|
546
546
|
@redis.hset("check:#{name}:#{check}", 'state', 'acknowledgement')
|
|
547
|
-
ec.
|
|
547
|
+
expect(ec).not_to be_failed
|
|
548
548
|
end
|
|
549
549
|
|
|
550
550
|
it "returns a status summary" do
|
|
@@ -557,7 +557,7 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
557
557
|
ec.update_state('critical', :timestamp => time_before(t, 2), :summary => 'd')
|
|
558
558
|
|
|
559
559
|
summary = ec.summary
|
|
560
|
-
summary.
|
|
560
|
+
expect(summary).to eq('d')
|
|
561
561
|
end
|
|
562
562
|
|
|
563
563
|
it "returns timestamps for its last notifications" do
|
|
@@ -567,26 +567,26 @@ describe Flapjack::Data::EntityCheck, :redis => true do
|
|
|
567
567
|
@redis.set("#{name}:#{check}:last_recovery_notification", t)
|
|
568
568
|
|
|
569
569
|
ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
|
|
570
|
-
ec.last_notification_for_state(:problem)[:timestamp].
|
|
571
|
-
ec.last_notification_for_state(:acknowledgement)[:timestamp].
|
|
572
|
-
ec.last_notification_for_state(:recovery)[:timestamp].
|
|
570
|
+
expect(ec.last_notification_for_state(:problem)[:timestamp]).to eq(t - 30)
|
|
571
|
+
expect(ec.last_notification_for_state(:acknowledgement)[:timestamp]).to eq(t - 15)
|
|
572
|
+
expect(ec.last_notification_for_state(:recovery)[:timestamp]).to eq(t)
|
|
573
573
|
end
|
|
574
574
|
|
|
575
575
|
it "finds all related contacts" do
|
|
576
576
|
ec = Flapjack::Data::EntityCheck.for_entity_name(name, check, :redis => @redis)
|
|
577
577
|
contacts = ec.contacts
|
|
578
|
-
contacts.
|
|
579
|
-
contacts.
|
|
580
|
-
contacts.
|
|
581
|
-
contacts.first.name.
|
|
578
|
+
expect(contacts).not_to be_nil
|
|
579
|
+
expect(contacts).to be_an(Array)
|
|
580
|
+
expect(contacts.size).to eq(1)
|
|
581
|
+
expect(contacts.first.name).to eq('John Johnson')
|
|
582
582
|
end
|
|
583
583
|
|
|
584
584
|
it "generates ephemeral tags for itself" do
|
|
585
585
|
ec = Flapjack::Data::EntityCheck.for_entity_name('foo-app-01.example.com', 'Disk / Utilisation', :redis => @redis)
|
|
586
586
|
tags = ec.tags
|
|
587
|
-
tags.
|
|
588
|
-
tags.
|
|
589
|
-
['foo-app-01', 'example.com', 'disk', '/', 'utilisation'].to_set.subset?(tags).
|
|
587
|
+
expect(tags).not_to be_nil
|
|
588
|
+
expect(tags).to be_a(Flapjack::Data::TagSet)
|
|
589
|
+
expect(['foo-app-01', 'example.com', 'disk', '/', 'utilisation'].to_set.subset?(tags)).to be true
|
|
590
590
|
end
|
|
591
591
|
|
|
592
592
|
end
|