zeusd 0.2.1 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
data/lib/zeusd/daemon.rb CHANGED
@@ -3,6 +3,8 @@ require 'thread'
3
3
  require 'childprocess'
4
4
  require 'pathname'
5
5
  require 'hooks'
6
+ require 'file-tail'
7
+ require 'json'
6
8
 
7
9
  module Zeusd
8
10
  class DaemonException < StandardError; end
@@ -12,16 +14,16 @@ module Zeusd
12
14
 
13
15
  define_hooks :after_start!, :after_stop!, :before_stop!, :after_output
14
16
 
15
- after_start! { logger.info("Zeusd") { "Start - pid(#{process.pid})" } }
16
- before_stop! { logger.info("Zeusd") { "Stop - pid(#{process ? process.pid : 'nil'})" } }
17
+ after_start! { log_event :start, :process => process ? process.attributes : nil }
18
+ before_stop! { log_event :stop, :process => process ? process.attributes : nil }
17
19
 
18
20
  after_stop! do
19
- (socket_file.delete rescue nil) if socket_file.exist?
21
+ (zeus_socket_file.delete rescue nil) if zeus_socket_file.exist?
20
22
  end
21
23
 
22
24
  after_output do |output|
23
25
  interpreter.translate(output)
24
- logger.info("Zeus"){output}
26
+ # logger.info("Zeus"){output}
25
27
  puts(output) if verbose
26
28
  end
27
29
 
@@ -42,9 +44,9 @@ module Zeusd
42
44
  sleep(0.1) until loaded?
43
45
  end
44
46
 
45
- self
46
- ensure
47
47
  run_hook :after_start!
48
+
49
+ self
48
50
  end
49
51
 
50
52
  def restart!(options = {})
@@ -66,9 +68,9 @@ module Zeusd
66
68
 
67
69
  @process = nil
68
70
 
69
- self
70
- ensure
71
71
  run_hook :after_stop!
72
+
73
+ self
72
74
  end
73
75
 
74
76
  def process
@@ -79,45 +81,63 @@ module Zeusd
79
81
  interpreter.complete?
80
82
  end
81
83
 
82
- def log_file
83
- cwd.join('log/zeusd.log')
84
+ def log_event(type, details = nil)
85
+ logger.info("EVENT") do
86
+ ">>> #{type.to_s.upcase}" + (details ? (" >>> " + JSON.pretty_generate(details)) : "")
87
+ end
88
+ end
89
+
90
+ def logger
91
+ @logger ||= Logger.new(log_file.to_path).tap do |x|
92
+ x.formatter = proc do |severity, datetime, type, msg|
93
+ prefix = "[#{datetime.strftime('%Y-%m-%d %H:%M:%S')}][#{type}]"
94
+ msg = msg.chomp.gsub("\n", "\n".ljust(prefix.length) + "\e[36m|\e[0m ")
95
+ "\e[36m#{prefix}\e[0m" + " #{msg}\n"
96
+ end
97
+ end
84
98
  end
85
99
 
86
- def socket_file
100
+ def zeus_socket_file
87
101
  cwd.join('.zeus.sock')
88
102
  end
89
103
 
90
- protected
104
+ def log_file
105
+ cwd.join('log/zeusd.log')
106
+ end
91
107
 
92
- def logger
93
- @logger ||= Logger.new(log_file.to_path).tap do |x|
94
- x.formatter = proc do |severity, datetime, progname, msg|
95
- color = progname["Zeusd"] ? 36 : 35
96
- ts = datetime.strftime('%Y-%m-%d %H:%M:%S')
97
- prefix = "[#{ts}][#{progname.ljust(6)}]"
98
- msg = msg.chomp.gsub("\n", "\n".ljust(prefix.length) + "\e[#{color}m|\e[0m ")
99
- "\e[#{color}m#{prefix}\e[0m" + " #{msg}\n"
100
- end
108
+ def zeus_log_file
109
+ cwd.join('.zeus.log').tap do |path|
110
+ FileUtils.touch(path.to_path)
101
111
  end
102
112
  end
103
113
 
114
+ protected
115
+
104
116
  def start_child_process!
105
- @reader, @writer = IO.pipe
117
+ # Truncate and cast to File
118
+ zeus_log_file.open("w") {}
119
+ std_file = File.new(zeus_log_file, 'w+').tap{|x| x.sync = true}
120
+
121
+ # Prep and Start child process
106
122
  @child_process = ChildProcess.build("zeus", "start")
107
123
  @child_process.environment["BUNDLE_GEMFILE"] = cwd.join("Gemfile").to_path
108
- @child_process.io.stdout = @child_process.io.stderr = @writer
109
- @child_process.cwd = cwd.to_path
110
- @child_process.detach = true
124
+ @child_process.io.stderr = std_file
125
+ @child_process.io.stdout = std_file
126
+ @child_process.cwd = cwd.to_path
127
+ @child_process.detach = true
111
128
  @child_process.start
112
129
 
113
- @writer.close
114
-
130
+ # Start tailing child process output
115
131
  Thread.new do
116
- while (buffer = (@reader.readpartial(10000) rescue nil)) do
117
- run_hook :after_output, buffer
132
+ File.open(std_file.to_path) do |log|
133
+ log.extend(File::Tail)
134
+ log.interval = 0.1
135
+ log.backward(100)
136
+ log.tail {|line| run_hook(:after_output, line) }
118
137
  end
119
138
  end
120
139
 
140
+ # Block until the first zeus command has been registered
121
141
  sleep 0.1 until interpreter.commands.any?
122
142
 
123
143
  @child_process
@@ -44,8 +44,6 @@ module Zeusd
44
44
  false
45
45
  end
46
46
 
47
-
48
-
49
47
  def last_update
50
48
  @lines[@lines.rindex(&:update?)..-1].join("\n").to_s
51
49
  end
@@ -85,10 +83,6 @@ module Zeusd
85
83
  end
86
84
  end
87
85
 
88
- def color?
89
- !!color
90
- end
91
-
92
86
  end
93
87
 
94
88
  end
data/lib/zeusd/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Zeusd
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.3"
3
3
  end
data/zeusd.gemspec CHANGED
@@ -19,7 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_runtime_dependency "thor" , "~> 0.18.1"
22
- spec.add_runtime_dependency "childprocess" , "~> 0.4.0"
22
+ spec.add_runtime_dependency "childprocess" , ">= 0.5.1"
23
+ spec.add_runtime_dependency "file-tail" , "~> 1.0.12"
23
24
  spec.add_runtime_dependency "hooks" , "~> 0.3.3"
24
25
  spec.add_runtime_dependency "zeus" , "~> 0.13.3"
25
26
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zeusd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -29,12 +29,28 @@ dependencies:
29
29
  version: 0.18.1
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: childprocess
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 0.5.1
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 0.5.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: file-tail
32
48
  requirement: !ruby/object:Gem::Requirement
33
49
  none: false
34
50
  requirements:
35
51
  - - ~>
36
52
  - !ruby/object:Gem::Version
37
- version: 0.4.0
53
+ version: 1.0.12
38
54
  type: :runtime
39
55
  prerelease: false
40
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +58,7 @@ dependencies:
42
58
  requirements:
43
59
  - - ~>
44
60
  - !ruby/object:Gem::Version
45
- version: 0.4.0
61
+ version: 1.0.12
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: hooks
48
64
  requirement: !ruby/object:Gem::Requirement
@@ -215,7 +231,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
215
231
  version: '0'
216
232
  segments:
217
233
  - 0
218
- hash: -796152463092065801
234
+ hash: 4001944416869534268
219
235
  required_rubygems_version: !ruby/object:Gem::Requirement
220
236
  none: false
221
237
  requirements:
@@ -224,7 +240,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
224
240
  version: '0'
225
241
  segments:
226
242
  - 0
227
- hash: -796152463092065801
243
+ hash: 4001944416869534268
228
244
  requirements: []
229
245
  rubyforge_project:
230
246
  rubygems_version: 1.8.25