eye-patch 0.1.4 → 0.1.5
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/README.md +16 -1
- data/eye-patch.gemspec +1 -1
- data/lib/eye/patch/application.rb +1 -1
- data/lib/eye/patch/capistrano.rb +1 -1
- data/lib/eye/patch/capistrano3.rb +1 -0
- data/lib/eye/patch/process_set.rb +17 -3
- data/lib/eye/patch/settings.rb +5 -5
- data/lib/eye/patch/value_parser.rb +2 -0
- data/lib/eye/patch/version.rb +1 -1
- data/test/fixtures/overrides.yml +39 -0
- data/test/lib/eye/patch/settings_test.rb +15 -0
- data/test/lib/eye/patch_test.rb +41 -8
- metadata +11 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8281021f4db405a7011e70f5ea0f01aa0b1afc3
|
4
|
+
data.tar.gz: 4ac4ff0e9c9b16f55912ffe1a885af3d424e6819
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f58bfc30efef715e657c4c76611f9eda3040fa7ae8ebba0ca0c3b5f84ec997ddc65be39bf80ecb101ae2983f215a087106a8ee04c9e144df1daa6715bdf29a6
|
7
|
+
data.tar.gz: 667974afe57844d67faadc9ecc7bcd4926b19d982285d525f92c181224ef081c012a208da434dad5a2afea309dd6b4689371ce0f6faa9fc17972fc653cdebefa
|
data/README.md
CHANGED
@@ -71,6 +71,22 @@ Note that memory and duration values are written in plain english. See `lib/eye/
|
|
71
71
|
|
72
72
|
Processes will inherit all configurations from the main application. All process options supported by `eye` are available by using the appropriate key in the `config` block.
|
73
73
|
|
74
|
+
##### Checks and Triggers
|
75
|
+
|
76
|
+
You can define per-process checks and triggers by defining a `checks` or `triggers` block within the process definition.
|
77
|
+
|
78
|
+
processes:
|
79
|
+
- name: my-process
|
80
|
+
checks:
|
81
|
+
- name: memory
|
82
|
+
config:
|
83
|
+
times: 3
|
84
|
+
every: 10 seconds
|
85
|
+
below: 52 megabytes
|
86
|
+
...
|
87
|
+
|
88
|
+
Any check or trigger already defined at the application level will be overwritten with the new configuration. Application-level checks and triggers which are not redefined for the process will be persisted.
|
89
|
+
|
74
90
|
##### Grouping
|
75
91
|
|
76
92
|
Rather than using the `eye` DSL's nesting approaching to setting up processes within groups, `Eye::Patch` simply needs a `group` attribute to be added to the process definition.
|
@@ -180,5 +196,4 @@ See `lib/eye/patch/capistrano.rb` for a list of available configuration options.
|
|
180
196
|
|
181
197
|
## Coming Soon
|
182
198
|
|
183
|
-
- Proper support for per-process triggers and checks.
|
184
199
|
- Process templates for commonly-used libraries (unicorn, sidekiq, delayed_jobs).
|
data/eye-patch.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.test_files = spec.files.grep(%r{^test/})
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
-
spec.add_dependency "eye"
|
24
|
+
spec.add_dependency "eye", "~> 0.5"
|
25
25
|
spec.add_dependency "chronic_duration"
|
26
26
|
|
27
27
|
spec.add_development_dependency "bundler", "~> 1.3"
|
data/lib/eye/patch/capistrano.rb
CHANGED
@@ -15,7 +15,7 @@ Capistrano::Configuration.instance.load do
|
|
15
15
|
|
16
16
|
desc "Start eye with the desired configuration file"
|
17
17
|
task :load_config, roles: -> { fetch(:eye_roles) } do
|
18
|
-
run "cd #{current_path} && #{fetch(:eye_bin)} l #{fetch(:eye_config)}"
|
18
|
+
run "cd #{current_path} && #{fetch(:eye_bin)} q && #{fetch(:eye_bin)} l #{fetch(:eye_config)}"
|
19
19
|
end
|
20
20
|
|
21
21
|
desc "Stop eye and all of its monitored tasks"
|
@@ -16,22 +16,31 @@ module Eye::Patch
|
|
16
16
|
if process[:count]
|
17
17
|
parse_process_cluster(process)
|
18
18
|
else
|
19
|
-
parse_single_process(
|
19
|
+
parse_single_process(
|
20
|
+
process[:name],
|
21
|
+
process[:config],
|
22
|
+
process_monitors(process))
|
20
23
|
end
|
21
24
|
end
|
22
25
|
|
23
26
|
def parse_process_cluster(process)
|
24
27
|
process[:count].times do |index|
|
25
28
|
name = "#{process[:name]}-#{index}"
|
26
|
-
parse_single_process(
|
29
|
+
parse_single_process(
|
30
|
+
name,
|
31
|
+
indexed_config(process[:config], index),
|
32
|
+
process_monitors(process))
|
27
33
|
end
|
28
34
|
end
|
29
35
|
|
30
|
-
def parse_single_process(name, config)
|
36
|
+
def parse_single_process(name, config, monitors)
|
31
37
|
self[name] = @group
|
32
38
|
.merge(stdout: config[:stdall], stderr: config[:stdall])
|
33
39
|
.merge(config)
|
34
40
|
.merge(name: name, group: @group[:name])
|
41
|
+
|
42
|
+
self[name][:triggers] = self[name][:triggers].merge(monitors[:triggers])
|
43
|
+
self[name][:checks] = self[name][:checks].merge(monitors[:checks])
|
35
44
|
end
|
36
45
|
|
37
46
|
def indexed_config(config, index)
|
@@ -39,5 +48,10 @@ module Eye::Patch
|
|
39
48
|
result[key] = value.is_a?(String) ? value.gsub("{ID}", index.to_s) : value
|
40
49
|
end
|
41
50
|
end
|
51
|
+
|
52
|
+
def process_monitors(config)
|
53
|
+
{ triggers: OptionSet.new(Eye::Trigger, config[:triggers]),
|
54
|
+
checks: OptionSet.new(Eye::Checker, config[:checks]) }
|
55
|
+
end
|
42
56
|
end
|
43
57
|
end
|
data/lib/eye/patch/settings.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
|
+
require "erb"
|
2
|
+
require "forwardable"
|
1
3
|
require_relative "value_parser"
|
2
4
|
|
3
5
|
module Eye::Patch
|
4
6
|
|
5
7
|
class Settings
|
8
|
+
extend Forwardable
|
9
|
+
def_delegators :parsed, :[], :fetch
|
6
10
|
|
7
11
|
def initialize(filename)
|
8
|
-
@settings = YAML.load(File.
|
9
|
-
end
|
10
|
-
|
11
|
-
def [](value)
|
12
|
-
parsed[value]
|
12
|
+
@settings = YAML.load(ERB.new(File.read(filename)).result)
|
13
13
|
end
|
14
14
|
|
15
15
|
private
|
data/lib/eye/patch/version.rb
CHANGED
@@ -0,0 +1,39 @@
|
|
1
|
+
name: Test Application With Per-Process Overrides
|
2
|
+
|
3
|
+
config:
|
4
|
+
logger: /path/to/log/eye.log
|
5
|
+
|
6
|
+
application:
|
7
|
+
working_dir: /path/to/application
|
8
|
+
|
9
|
+
triggers:
|
10
|
+
- name: flapping
|
11
|
+
config:
|
12
|
+
times: 10
|
13
|
+
within: 1 minute
|
14
|
+
|
15
|
+
checks:
|
16
|
+
- name: memory
|
17
|
+
config:
|
18
|
+
times: 3
|
19
|
+
every: 20 seconds
|
20
|
+
below: 1.5 gigabytes
|
21
|
+
|
22
|
+
processes:
|
23
|
+
- name: my-process
|
24
|
+
triggers:
|
25
|
+
- name: flapping
|
26
|
+
config:
|
27
|
+
times: 6
|
28
|
+
within: 40 seconds
|
29
|
+
checks:
|
30
|
+
- name: memory
|
31
|
+
config:
|
32
|
+
times: 2
|
33
|
+
every: 15 seconds
|
34
|
+
below: 1.2 megabytes
|
35
|
+
config:
|
36
|
+
start_timeout: 25 seconds
|
37
|
+
start_command: bundle exec my-process
|
38
|
+
pid_file: tmp/pids/my-process.pid
|
39
|
+
stdall: log/my-process.log
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative "../../../test_helper"
|
2
|
+
require "tempfile"
|
3
|
+
|
4
|
+
module Eye
|
5
|
+
module Patch
|
6
|
+
describe Settings do
|
7
|
+
it "evaluates the yaml as ERB" do
|
8
|
+
file = Tempfile.new("yaml")
|
9
|
+
file.write("sum: <%= 1 + 2 %>")
|
10
|
+
file.close
|
11
|
+
assert_equal 3, Settings.new(file.path)[:sum]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/test/lib/eye/patch_test.rb
CHANGED
@@ -2,13 +2,13 @@ require_relative "../../test_helper"
|
|
2
2
|
|
3
3
|
describe Eye::Patch do
|
4
4
|
before do
|
5
|
-
|
6
|
-
@original = YAML.load(File.open(@fixture))
|
5
|
+
Eye::Config.any_instance.stubs(:validate!)
|
7
6
|
end
|
8
7
|
|
9
8
|
describe ".parse" do
|
10
9
|
before do
|
11
|
-
|
10
|
+
@fixture = File.expand_path(File.join(File.dirname(__FILE__), %w[.. .. fixtures test.yml]))
|
11
|
+
@original = YAML.load(File.open(@fixture))
|
12
12
|
@parsed = Eye::Patch.parse(@fixture)
|
13
13
|
|
14
14
|
@settings = @parsed.settings
|
@@ -37,17 +37,18 @@ describe Eye::Patch do
|
|
37
37
|
trigger = @original["triggers"].first
|
38
38
|
parsed_trigger = @application[:triggers][trigger["name"].to_sym]
|
39
39
|
|
40
|
-
|
41
|
-
|
40
|
+
%w(times within).each do |setting|
|
41
|
+
assert_equal Eye::Patch::ValueParser.parse(trigger["config"][setting]), parsed_trigger[setting.to_sym]
|
42
|
+
end
|
42
43
|
end
|
43
44
|
|
44
45
|
it "parses checks" do
|
45
46
|
check = @original["checks"].first
|
46
47
|
parsed_check = @application[:checks][check["name"].to_sym]
|
47
48
|
|
48
|
-
|
49
|
-
|
50
|
-
|
49
|
+
%w(times every below).each do |setting|
|
50
|
+
assert_equal Eye::Patch::ValueParser.parse(check["config"][setting]), parsed_check[setting.to_sym]
|
51
|
+
end
|
51
52
|
end
|
52
53
|
|
53
54
|
it "splits processes into groups" do
|
@@ -88,4 +89,36 @@ describe Eye::Patch do
|
|
88
89
|
assert_equal process["config"]["stdall"], parsed_process[:stderr]
|
89
90
|
end
|
90
91
|
end
|
92
|
+
|
93
|
+
describe ".parse with per-process overrides" do
|
94
|
+
before do
|
95
|
+
@fixture = File.expand_path(File.join(File.dirname(__FILE__), %w[.. .. fixtures overrides.yml]))
|
96
|
+
@original = YAML.load(File.open(@fixture))
|
97
|
+
@parsed = Eye::Patch.parse(@fixture)
|
98
|
+
|
99
|
+
@settings = @parsed.settings
|
100
|
+
@applications = @parsed.applications
|
101
|
+
@application = @applications.values.first
|
102
|
+
end
|
103
|
+
|
104
|
+
it "loads per-process triggers" do
|
105
|
+
process = @application[:groups]["__default__"][:processes].values.first
|
106
|
+
trigger = @original["processes"].detect { |p| p["name"] == process[:name] }["triggers"].first
|
107
|
+
parsed_trigger = process[:triggers][trigger["name"].to_sym]
|
108
|
+
|
109
|
+
%w(times within).each do |setting|
|
110
|
+
assert_equal Eye::Patch::ValueParser.parse(trigger["config"][setting]), parsed_trigger[setting.to_sym]
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
it "loads per-process checks" do
|
115
|
+
process = @application[:groups]["__default__"][:processes].values.first
|
116
|
+
check = @original["processes"].detect { |p| p["name"] == process[:name] }["checks"].first
|
117
|
+
parsed_check = process[:checks][check["name"].to_sym]
|
118
|
+
|
119
|
+
%w(times every below).each do |setting|
|
120
|
+
assert_equal Eye::Patch::ValueParser.parse(check["config"][setting]), parsed_check[setting.to_sym]
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
91
124
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eye-patch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Horner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eye
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
19
|
+
version: '0.5'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
26
|
+
version: '0.5'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: chronic_duration
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -110,7 +110,9 @@ files:
|
|
110
110
|
- lib/eye/patch/settings.rb
|
111
111
|
- lib/eye/patch/value_parser.rb
|
112
112
|
- lib/eye/patch/version.rb
|
113
|
+
- test/fixtures/overrides.yml
|
113
114
|
- test/fixtures/test.yml
|
115
|
+
- test/lib/eye/patch/settings_test.rb
|
114
116
|
- test/lib/eye/patch/value_parser_test.rb
|
115
117
|
- test/lib/eye/patch/version_test.rb
|
116
118
|
- test/lib/eye/patch_test.rb
|
@@ -135,13 +137,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
137
|
version: '0'
|
136
138
|
requirements: []
|
137
139
|
rubyforge_project:
|
138
|
-
rubygems_version: 2.
|
140
|
+
rubygems_version: 2.2.2
|
139
141
|
signing_key:
|
140
142
|
specification_version: 4
|
141
143
|
summary: Eye::Patch abstracts out the Eye DSL to allow you to load your configuration
|
142
144
|
from a structured YAML file, rather than relying on Eye's built-in DSL.
|
143
145
|
test_files:
|
146
|
+
- test/fixtures/overrides.yml
|
144
147
|
- test/fixtures/test.yml
|
148
|
+
- test/lib/eye/patch/settings_test.rb
|
145
149
|
- test/lib/eye/patch/value_parser_test.rb
|
146
150
|
- test/lib/eye/patch/version_test.rb
|
147
151
|
- test/lib/eye/patch_test.rb
|