stoplight 0.3.0 → 0.3.1
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 +4 -4
- data/CHANGELOG.md +15 -0
- data/README.md +3 -2
- data/lib/stoplight.rb +1 -1
- data/lib/stoplight/failure.rb +29 -14
- data/lib/stoplight/light.rb +1 -1
- data/spec/stoplight/failure_spec.rb +42 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5bb148c31a3c94f65125fba1628f7399755c74d
|
4
|
+
data.tar.gz: ed907f0fcfee16fbb9a760d863f47f0d89341d69
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73b02ee787610aef6491804b789c449fc91ed49ba6c511d800e7119178b120dcc9f87341838eb0b28ce4acb880ee2d67d956cedce1883c1cd49b76feccb5c699
|
7
|
+
data.tar.gz: 567b87080e6cd46487e09ea136319317aeebd6f0042f1b2e60aa5438d13f92cf99f2f42af76097609c35201903beac2c8d96f9ec912f5e7b220a25763ce8f2c1
|
data/CHANGELOG.md
CHANGED
@@ -1,10 +1,25 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## v0.3.1 (2014-09-12)
|
4
|
+
|
5
|
+
- Replaced `Stoplight::Failure#error` with `#error_class` and `#error_message`.
|
6
|
+
Also changed the constructor to take the class and the message instead of the
|
7
|
+
error.
|
8
|
+
|
3
9
|
## v0.3.0 (2014-09-11)
|
4
10
|
|
5
11
|
- Allowed formatting notifications.
|
6
12
|
- Added automatic recovery from red lights.
|
7
13
|
- Added `Stoplight::DataStore#clear_stale` for clearing stale lights.
|
14
|
+
- Removed forwarded methods on `Stoplight` module.
|
15
|
+
- Moved some methods from `Stoplight::DataStore::Base` to
|
16
|
+
`Stoplight::DataStore`.
|
17
|
+
- Renamed `Stoplight::DataStore::Base#purge` to `#clear_stale`.
|
18
|
+
- Renamed `Stoplight::DataStore::Base#delete` to `#clear`.
|
19
|
+
- Prefixed data store getters with `get_`.
|
20
|
+
- Added `Stoplight::DataStore::Base#sync`.
|
21
|
+
- Changed `Stoplight::DataStore::Base#get_failures` to return actual failures
|
22
|
+
(`Stoplight::Failure`) instead of strings.
|
8
23
|
|
9
24
|
## v0.2.1 (2014-08-20)
|
10
25
|
|
data/README.md
CHANGED
@@ -30,7 +30,7 @@ Check out [stoplight-admin][12] for controlling your stoplights.
|
|
30
30
|
Add it to your Gemfile:
|
31
31
|
|
32
32
|
``` rb
|
33
|
-
gem 'stoplight', '~> 0.3.
|
33
|
+
gem 'stoplight', '~> 0.3.1'
|
34
34
|
```
|
35
35
|
|
36
36
|
Or install it manually:
|
@@ -225,7 +225,8 @@ Stoplight::Error::RedLight: example-6
|
|
225
225
|
### Custom timeout
|
226
226
|
|
227
227
|
Stoplights will automatically attempt to recover after a certain amount of time.
|
228
|
-
|
228
|
+
A light in the red state for longer than the timeout will transition to the
|
229
|
+
yellow state. This timeout is customizable.
|
229
230
|
|
230
231
|
``` irb
|
231
232
|
>> light = Stoplight::Light.new('example-7') { fail }.
|
data/lib/stoplight.rb
CHANGED
@@ -15,7 +15,7 @@ require 'stoplight/notifier/standard_error'
|
|
15
15
|
|
16
16
|
module Stoplight
|
17
17
|
# @return [Gem::Version]
|
18
|
-
VERSION = Gem::Version.new('0.3.
|
18
|
+
VERSION = Gem::Version.new('0.3.1')
|
19
19
|
|
20
20
|
@data_store = DataStore::Memory.new
|
21
21
|
@notifiers = [Notifier::StandardError.new]
|
data/lib/stoplight/failure.rb
CHANGED
@@ -1,36 +1,51 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
3
|
require 'json'
|
4
|
+
require 'time'
|
4
5
|
|
5
6
|
module Stoplight
|
6
7
|
class Failure
|
7
|
-
# @return [
|
8
|
-
attr_reader :
|
8
|
+
# @return [String]
|
9
|
+
attr_reader :error_class
|
10
|
+
|
11
|
+
# @return [String]
|
12
|
+
attr_reader :error_message
|
9
13
|
|
10
14
|
# @return [Time]
|
11
15
|
attr_reader :time
|
12
16
|
|
17
|
+
# @param error [Exception]
|
18
|
+
def self.create(error)
|
19
|
+
new(error.class.name, error.message)
|
20
|
+
end
|
21
|
+
|
22
|
+
# @param json [String]
|
13
23
|
def self.from_json(json)
|
14
24
|
h = JSON.parse(json)
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
new(error, time)
|
25
|
+
new(
|
26
|
+
h['error']['class'],
|
27
|
+
h['error']['message'],
|
28
|
+
Time.parse(h['time']))
|
29
|
+
rescue => error
|
30
|
+
new(Error::InvalidFailure.name, error.message)
|
22
31
|
end
|
23
32
|
|
24
|
-
# @param
|
25
|
-
|
26
|
-
|
33
|
+
# @param error_class [String]
|
34
|
+
# @param error_message [String]
|
35
|
+
# @param time [Time, nil]
|
36
|
+
def initialize(error_class, error_message, time = nil)
|
37
|
+
@error_class = error_class
|
38
|
+
@error_message = error_message
|
27
39
|
@time = time || Time.now
|
28
40
|
end
|
29
41
|
|
30
42
|
def to_json(*args)
|
31
43
|
{
|
32
|
-
error:
|
33
|
-
|
44
|
+
error: {
|
45
|
+
class: error_class,
|
46
|
+
message: error_message
|
47
|
+
},
|
48
|
+
time: time.iso8601
|
34
49
|
}.to_json(*args)
|
35
50
|
end
|
36
51
|
end
|
data/lib/stoplight/light.rb
CHANGED
@@ -131,7 +131,7 @@ module Stoplight
|
|
131
131
|
if error_allowed?(error)
|
132
132
|
Stoplight.data_store.clear_failures(name)
|
133
133
|
else
|
134
|
-
Stoplight.data_store.record_failure(name, Failure.
|
134
|
+
Stoplight.data_store.record_failure(name, Failure.create(error))
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
@@ -3,25 +3,56 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe Stoplight::Failure do
|
6
|
-
subject(:failure) { described_class.new(
|
7
|
-
let(:
|
8
|
-
let(:error_class) { StandardError }
|
6
|
+
subject(:failure) { described_class.new(error_class, error_message, time) }
|
7
|
+
let(:error_class) { SecureRandom.hex }
|
9
8
|
let(:error_message) { SecureRandom.hex }
|
10
9
|
let(:time) { Time.now }
|
11
10
|
|
11
|
+
describe '.create' do
|
12
|
+
subject(:result) { described_class.create(error) }
|
13
|
+
let(:error) { error_class.new(error_message) }
|
14
|
+
let(:error_class) { Class.new(StandardError) }
|
15
|
+
|
16
|
+
it 'creates a failure' do
|
17
|
+
expect(result).to be_a(Stoplight::Failure)
|
18
|
+
expect(result.error_class).to eql(error.class.name)
|
19
|
+
expect(result.error_message).to eql(error.message)
|
20
|
+
expect(result.time).to be_within(1).of(Time.now)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
12
24
|
describe '.from_json' do
|
13
25
|
subject(:result) { described_class.from_json(json) }
|
14
26
|
let(:json) { failure.to_json }
|
15
27
|
|
16
|
-
it do
|
17
|
-
expect(result.
|
28
|
+
it 'can be round-tripped' do
|
29
|
+
expect(result.error_class).to eq(failure.error_class)
|
30
|
+
expect(result.error_message).to eq(failure.error_message)
|
18
31
|
expect(result.time).to be_within(1).of(failure.time)
|
19
32
|
end
|
33
|
+
|
34
|
+
context 'with invalid JSON' do
|
35
|
+
let(:json) { nil }
|
36
|
+
|
37
|
+
it 'does not raise an error' do
|
38
|
+
expect { result }.to_not raise_error
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'returns a self-describing invalid failure' do
|
42
|
+
expect(result.error_class).to eq('Stoplight::Error::InvalidFailure')
|
43
|
+
expect(result.error_message).to end_with('nil into String')
|
44
|
+
expect(result.time).to be_within(1).of(Time.now)
|
45
|
+
end
|
46
|
+
end
|
20
47
|
end
|
21
48
|
|
22
49
|
describe '#initialize' do
|
23
|
-
it 'sets the error' do
|
24
|
-
expect(failure.
|
50
|
+
it 'sets the error class' do
|
51
|
+
expect(failure.error_class).to eql(error_class)
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'sets the error message' do
|
55
|
+
expect(failure.error_message).to eql(error_message)
|
25
56
|
end
|
26
57
|
|
27
58
|
it 'sets the time' do
|
@@ -40,10 +71,12 @@ describe Stoplight::Failure do
|
|
40
71
|
describe '#to_json' do
|
41
72
|
subject(:json) { failure.to_json }
|
42
73
|
let(:data) { JSON.load(json) }
|
74
|
+
let(:time) { Time.utc(2001, 2, 3, 4, 5, 6) }
|
43
75
|
|
44
76
|
it 'converts to JSON' do
|
45
|
-
expect(data['error']).to eql(
|
46
|
-
expect(data['
|
77
|
+
expect(data['error']['class']).to eql(error_class)
|
78
|
+
expect(data['error']['message']).to eql(error_message)
|
79
|
+
expect(data['time']).to eql('2001-02-03T04:05:06Z')
|
47
80
|
end
|
48
81
|
end
|
49
82
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stoplight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cameron Desautels
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-09-
|
12
|
+
date: 2014-09-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: benchmark-ips
|