alerty 0.0.7 → 0.0.8
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 +6 -0
- data/README.md +2 -2
- data/alerty.gemspec +2 -2
- data/lib/alerty/command.rb +32 -11
- data/spec/command_spec.rb +55 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99625b0f092fb2052e60c8129488d491979362b1
|
4
|
+
data.tar.gz: 880411be5f61727839f2cfb6e72c5d5113fd4ffa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9233e87fdfc4cb57d2421749a2b5596d9d6e06c20518ecef6fac7d5a902ccd1d65ad3066c74d7e5787ca729ec5023c86c98d732536f35e5becfde49ffe37583e
|
7
|
+
data.tar.gz: d55ebdb2a4aa61cb5cad01599789acbdea3f3ec219efb2de4be783b853ada5bb61e9375f19ca099c59295cb8d0f520ea451b14624bb9b4e14a18d6f0d5792e41
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -44,8 +44,8 @@ $ bin/alerty -h
|
|
44
44
|
-c, --config CONFIG_FILE config file path (default: /etc/alerty/alerty.yml)
|
45
45
|
--log LOG_FILE log file path (default: STDOUT)
|
46
46
|
-l, --log-level LOG_LEVEL log level (default: warn)
|
47
|
-
-t, --timeout SECONDS timeout the command (default: no timeout)
|
48
|
-
--lock LOCK_FILE exclusive lock file to prevent running a command duplicatedly (default: no lock)
|
47
|
+
-t, --timeout SECONDS timeout of the command, send alert if timeout reached (default: no timeout)
|
48
|
+
--lock LOCK_FILE exclusive lock file to prevent running a command duplicatedly, send alert if locked (default: no lock)
|
49
49
|
-d, --debug debug mode (same with --log-level debug)
|
50
50
|
```
|
51
51
|
|
data/alerty.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
2
|
gem.name = "alerty"
|
3
|
-
gem.version = '0.0.
|
3
|
+
gem.version = '0.0.8'
|
4
4
|
gem.author = ['Naotoshi Seo']
|
5
5
|
gem.email = ['sonots@gmail.com']
|
6
6
|
gem.homepage = 'https://github.com/sonots/alerty'
|
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
|
|
15
15
|
|
16
16
|
gem.add_runtime_dependency 'hashie'
|
17
17
|
gem.add_runtime_dependency 'oneline_log_formatter'
|
18
|
-
gem.add_runtime_dependency 'frontkick'
|
18
|
+
gem.add_runtime_dependency 'frontkick', '>= 0.4.0'
|
19
19
|
|
20
20
|
gem.add_development_dependency 'rspec'
|
21
21
|
gem.add_development_dependency 'pry'
|
data/lib/alerty/command.rb
CHANGED
@@ -12,17 +12,38 @@ class Alerty
|
|
12
12
|
|
13
13
|
def run!
|
14
14
|
started_at = Time.now
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
15
|
+
begin
|
16
|
+
result = Frontkick.exec("#{@command} 2>&1", @opts)
|
17
|
+
rescue Frontkick::Timeout => e
|
18
|
+
record = {
|
19
|
+
hostname: @hostname,
|
20
|
+
command: @command,
|
21
|
+
exitstatus: 1,
|
22
|
+
output: "`#{@command}` is timeout (#{@opts[:timeout]} sec)",
|
23
|
+
started_at: started_at.to_f,
|
24
|
+
duration: @opts[:timeout],
|
25
|
+
}
|
26
|
+
rescue Frontkick::Locked => e
|
27
|
+
record = {
|
28
|
+
hostname: @hostname,
|
29
|
+
command: @command,
|
30
|
+
exitstatus: 1,
|
31
|
+
output: "`#{@opts[:exclusive]}` is locked by another process",
|
32
|
+
started_at: started_at.to_f,
|
33
|
+
duration: 0,
|
34
|
+
}
|
35
|
+
else
|
36
|
+
record = {
|
37
|
+
hostname: @hostname,
|
38
|
+
command: @command,
|
39
|
+
exitstatus: result.exitstatus,
|
40
|
+
output: result.stdout,
|
41
|
+
started_at: started_at.to_f,
|
42
|
+
duration: result.duration,
|
43
|
+
}
|
44
|
+
end
|
24
45
|
Alerty.logger.info { "result: #{record.to_json}" }
|
25
|
-
if
|
46
|
+
if record[:exitstatus] == 0
|
26
47
|
exit 0
|
27
48
|
else
|
28
49
|
Config.plugins.each do |plugin|
|
@@ -32,7 +53,7 @@ class Alerty
|
|
32
53
|
Alerty.logger.warn "#{e.class} #{e.message} #{e.backtrace.join("\n")}"
|
33
54
|
end
|
34
55
|
end
|
35
|
-
exit
|
56
|
+
exit record[:exitstatus]
|
36
57
|
end
|
37
58
|
end
|
38
59
|
end
|
data/spec/command_spec.rb
CHANGED
@@ -49,5 +49,60 @@ describe Alerty::Command do
|
|
49
49
|
expect(JSON.parse(stdout)["output"]).to eql("foo")
|
50
50
|
end
|
51
51
|
end
|
52
|
+
|
53
|
+
context 'timeout' do
|
54
|
+
before do
|
55
|
+
Alerty::Config.instance_variable_set(:@config, Hashie::Mash.new(
|
56
|
+
plugins: [{
|
57
|
+
type: 'stdout',
|
58
|
+
}]
|
59
|
+
))
|
60
|
+
Alerty::Config.configure(
|
61
|
+
log_path: '/tmp/foo',
|
62
|
+
log_level: 'fatal',
|
63
|
+
timeout: 0.1,
|
64
|
+
lock_path: '/tmp/lock',
|
65
|
+
)
|
66
|
+
end
|
67
|
+
|
68
|
+
let(:command) { Alerty::Command.new(command: 'sleep 1') }
|
69
|
+
|
70
|
+
it do
|
71
|
+
expect(Frontkick).to receive(:exec).with("sleep 1 2>&1", {
|
72
|
+
timeout: 0.1,
|
73
|
+
exclusive: '/tmp/lock',
|
74
|
+
}).and_raise(Frontkick::Timeout.new(111, 'sleep 1 2>&1', true))
|
75
|
+
stdout = capture_stdout { expect { command.run! }.to raise_error(SystemExit) }
|
76
|
+
expect(JSON.parse(stdout)["output"]).to include("timeout")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context 'lock' do
|
81
|
+
before do
|
82
|
+
Alerty::Config.instance_variable_set(:@config, Hashie::Mash.new(
|
83
|
+
plugins: [{
|
84
|
+
type: 'stdout',
|
85
|
+
}]
|
86
|
+
))
|
87
|
+
Alerty::Config.configure(
|
88
|
+
log_path: '/tmp/foo',
|
89
|
+
log_level: 'fatal',
|
90
|
+
timeout: 20,
|
91
|
+
lock_path: '/tmp/lock',
|
92
|
+
)
|
93
|
+
end
|
94
|
+
|
95
|
+
let(:command) { Alerty::Command.new(command: 'sleep 1') }
|
96
|
+
|
97
|
+
it do
|
98
|
+
expect(Frontkick).to receive(:exec).with("sleep 1 2>&1", {
|
99
|
+
timeout: 20,
|
100
|
+
exclusive: '/tmp/lock',
|
101
|
+
}).and_raise(Frontkick::Locked)
|
102
|
+
stdout = capture_stdout { expect { command.run! }.to raise_error(SystemExit) }
|
103
|
+
expect(JSON.parse(stdout)["output"]).to include("lock")
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
52
107
|
end
|
53
108
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alerty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Naotoshi Seo
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.4.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.4.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|