logger_pipe 0.2.1 → 0.3.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 +4 -4
- data/Gemfile +8 -0
- data/lib/logger_pipe/runner.rb +37 -13
- data/lib/logger_pipe/version.rb +1 -1
- data/spec/logger_pipe_spec.rb +19 -0
- data/spec/stderr_test.sh +7 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd276efaaeaec72d772ef2850226516e2fdbd75d
|
4
|
+
data.tar.gz: 3a8b2f21d9a5e920db4dd4ead277e89a78a0941d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf66b0f214bb5dbb5370cfec1e4339bffd2d9af0af26354e583e3f35b0732d60496b38eabb753a4b168112f87c1dfe8629fcf57a26898bd885c3d7e2396f3201
|
7
|
+
data.tar.gz: d28ec1066da06d0759b41b727e2ff31f684b815f27e74193143d248908ff0c8ceafaca9854af359d3d835f284eaafe1624d4c38bb34ae565a9dc6d3bb32f4106
|
data/Gemfile
CHANGED
data/lib/logger_pipe/runner.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require "logger_pipe"
|
3
3
|
|
4
4
|
require "timeout"
|
5
|
+
require 'tempfile'
|
5
6
|
|
6
7
|
module LoggerPipe
|
7
8
|
|
@@ -28,48 +29,57 @@ module LoggerPipe
|
|
28
29
|
return nil
|
29
30
|
end
|
30
31
|
logger.info("executing: #{cmd}")
|
31
|
-
buf = []
|
32
|
+
@buf = []
|
32
33
|
# systemをタイムアウトさせることはできないので、popenの戻り値を使っています。
|
33
34
|
# see http://docs.ruby-lang.org/ja/2.0.0/class/Timeout.html
|
34
|
-
com, pid = nil, nil
|
35
|
-
|
36
|
-
|
35
|
+
@com, @pid = nil, nil
|
36
|
+
stderr_buffer do |stderr_fp|
|
37
|
+
timeout do
|
37
38
|
|
38
39
|
# popenにブロックを渡さないと$?がnilになってしまうので敢えてブロックで処理しています。
|
39
|
-
com = IO.popen(cmd) do |com|
|
40
|
-
|
40
|
+
@com = IO.popen("#{cmd} 2> #{stderr_fp.path}") do |com|
|
41
|
+
@com = com
|
42
|
+
@pid = com.pid
|
41
43
|
while line = com.gets
|
42
|
-
buf << line
|
44
|
+
@buf << line
|
43
45
|
logger.debug(line.chomp)
|
44
46
|
end
|
45
47
|
end
|
46
48
|
if $?.exitstatus == 0
|
49
|
+
logging_stderr(stderr_fp)
|
47
50
|
logger.info("\e[32mSUCCESS: %s\e[0m" % [cmd])
|
48
|
-
return buf.join
|
51
|
+
return @buf.join
|
49
52
|
else
|
53
|
+
logging_stderr(stderr_fp)
|
50
54
|
msg = "\e[31mFAILURE: %s\e[0m" % [cmd]
|
51
55
|
logger.error(msg)
|
52
|
-
raise Failure.new(msg, buf)
|
56
|
+
raise Failure.new(msg, @buf)
|
53
57
|
end
|
54
58
|
|
55
59
|
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def timeout(&block)
|
64
|
+
begin
|
65
|
+
Timeout.timeout(@timeout, &block)
|
56
66
|
rescue Timeout::Error => e
|
57
|
-
logger.error("[#{e.class.name} #{e.message}] now killing process
|
67
|
+
logger.error("[#{e.class.name} #{e.message}] now killing process pid:#{@pid.inspect}: #{cmd}")
|
58
68
|
begin
|
59
|
-
Process.kill('SIGINT', pid) if pid
|
69
|
+
Process.kill('SIGINT', @pid) if @pid
|
60
70
|
rescue Exception => err
|
61
71
|
logger.error("[#{err.class.name}] #{err.message}")
|
62
72
|
end
|
63
73
|
begin
|
64
74
|
Timeout.timeout(10) do
|
65
|
-
result = com.read
|
75
|
+
result = @com.read
|
66
76
|
end
|
67
77
|
rescue Exception => err
|
68
78
|
logger.error("failure to get result [#{err.class.name}] #{err.message}")
|
69
79
|
result = "<failure to get result>"
|
70
80
|
end
|
71
81
|
begin
|
72
|
-
msg = "\e[31mEXECUTION Timeout: %s\e[0m\n%s\n[result]: %s" % [cmd, buf.join.strip, result]
|
82
|
+
msg = "\e[31mEXECUTION Timeout: %s\e[0m\n%s\n[result]: %s" % [cmd, @buf.join.strip, result]
|
73
83
|
logger.error(msg)
|
74
84
|
rescue Exception => err
|
75
85
|
logger.error("[#{err.class.name}] #{err.message}")
|
@@ -78,6 +88,20 @@ module LoggerPipe
|
|
78
88
|
end
|
79
89
|
end
|
80
90
|
|
91
|
+
def stderr_buffer
|
92
|
+
Tempfile.open("logger_pipe.stderr.log") do |f|
|
93
|
+
f.close
|
94
|
+
return block_given? ? yield(f) : nil
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def logging_stderr(f)
|
99
|
+
f.open
|
100
|
+
c = f.read
|
101
|
+
if !c.nil? && !c.empty?
|
102
|
+
logger.info("--- begin stderr ---\n#{c}\n--- end stderr ---")
|
103
|
+
end
|
104
|
+
end
|
81
105
|
end
|
82
106
|
|
83
107
|
end
|
data/lib/logger_pipe/version.rb
CHANGED
data/spec/logger_pipe_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
require 'stringio'
|
@@ -37,6 +38,24 @@ describe LoggerPipe do
|
|
37
38
|
end
|
38
39
|
end
|
39
40
|
|
41
|
+
context "stderr" do
|
42
|
+
let(:cmd){ File.expand_path("../stderr_test.sh", __FILE__) }
|
43
|
+
it "returns STDOUT on success" do
|
44
|
+
res = LoggerPipe.run(logger, "#{cmd} 0")
|
45
|
+
# puts buffer.string
|
46
|
+
expect(buffer.string).to match /bar\n/
|
47
|
+
expect(res).to eq "foo\nbaz\n"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "buffer include stderr content on error" do
|
51
|
+
expect{
|
52
|
+
LoggerPipe.run(logger, "#{cmd} 1")
|
53
|
+
}.to raise_error(LoggerPipe::Failure)
|
54
|
+
# puts buffer.string
|
55
|
+
expect(buffer.string).to match /bar\n/
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
40
59
|
context "dry_run: true" do
|
41
60
|
let(:cmd){ "date +'Foo: %Y-%m-%dT%H:%M:%S'; sleep 1; date +'Bar: %Y-%m-%dT%H:%M:%S'" }
|
42
61
|
it "returns nil" do
|
data/spec/stderr_test.sh
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logger_pipe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- akima
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -72,6 +72,7 @@ files:
|
|
72
72
|
- logger_pipe.gemspec
|
73
73
|
- spec/logger_pipe_spec.rb
|
74
74
|
- spec/spec_helper.rb
|
75
|
+
- spec/stderr_test.sh
|
75
76
|
homepage: https://github.com/groovenauts/logger_pipe
|
76
77
|
licenses:
|
77
78
|
- MIT
|
@@ -99,3 +100,4 @@ summary: logger_pipe helps to connect child process STDOUT to Logger on realtime
|
|
99
100
|
test_files:
|
100
101
|
- spec/logger_pipe_spec.rb
|
101
102
|
- spec/spec_helper.rb
|
103
|
+
- spec/stderr_test.sh
|