kryten 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/bin/console +69 -3
- data/bin/kryten +19 -11
- data/lib/kryten/daemon.rb +72 -0
- data/lib/kryten/lawger.rb +8 -3
- data/lib/kryten/runner.rb +15 -11
- data/lib/kryten/summoner.rb +1 -1
- data/lib/kryten/version.rb +1 -1
- data/lib/kryten/weaver.rb +15 -29
- data/lib/kryten.rb +19 -8
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff4e205748887527fb006bd3cb5f73d98e04162d
|
4
|
+
data.tar.gz: fc8a1aae785bdb21683a44eb2f052bed64830a50
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1aa9e498e5ba57173d8bdc7a714dd852dc9be4870d5de76a760d7526aa87b498936d5df685d5a8c987798e904e3f2faa04e954a015ace9aaff50718ee9de147
|
7
|
+
data.tar.gz: 29647916012297f41847df8f09e35583236d1baf30b116bd2340ab1b1832501f32e8bc4bddcd0f1a19cfd4fddfc7cc06608ad3331756212f065739b5d3d1d513
|
data/bin/console
CHANGED
@@ -6,12 +6,78 @@ require "pry"
|
|
6
6
|
|
7
7
|
include Kryten
|
8
8
|
|
9
|
+
class WorkList
|
10
|
+
include BackgroundTask
|
11
|
+
end
|
12
|
+
|
9
13
|
class Work
|
14
|
+
include BackgroundTask
|
15
|
+
def run
|
16
|
+
work = rand(5)+1;
|
17
|
+
log "working for #{work}"
|
18
|
+
sleep work
|
19
|
+
log "done working"
|
20
|
+
end
|
21
|
+
def timer
|
22
|
+
0.1
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class ThreadedWork
|
10
27
|
include ThreadedTask
|
28
|
+
def run
|
29
|
+
work = rand(5)+1;
|
30
|
+
log "working for #{work}"
|
31
|
+
sleep work
|
32
|
+
log "done working"
|
33
|
+
end
|
34
|
+
def timer
|
35
|
+
0.1
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
work = WorkList.new('visor').workers do
|
41
|
+
[ Work.new('work1'),
|
42
|
+
Work.new('work2'),
|
43
|
+
Work.new('work3').workers do
|
44
|
+
[ Work.new('work3sub1'),
|
45
|
+
Work.new('work3sub2') ]
|
46
|
+
end ]
|
11
47
|
end
|
12
48
|
|
13
|
-
|
14
|
-
|
15
|
-
|
49
|
+
threaded_work = ThreadVisor.workers do
|
50
|
+
[ ThreadedWork.new('thread work1'),
|
51
|
+
ThreadedWork.new('thread work2'),
|
52
|
+
ThreadedWork.new('thread work3').workers do
|
53
|
+
[ ThreadedWork.new('thread work3sub1'),
|
54
|
+
ThreadedWork.new('thread work3sub2') ]
|
55
|
+
end ]
|
56
|
+
end
|
57
|
+
|
58
|
+
mixed_work = Work.new('mixy').mixed.workers do
|
59
|
+
[ Work.new('mixy 1 process').workers do
|
60
|
+
Work.new('mixy 1 subprocess')
|
61
|
+
end,
|
62
|
+
ThreadedWork.new('mixy 2 thread').workers do
|
63
|
+
ThreadedWork.new('mixy2 subthread')
|
64
|
+
end ]
|
65
|
+
end
|
66
|
+
|
67
|
+
class CrashWork
|
68
|
+
include BackgroundTask
|
69
|
+
def run
|
70
|
+
sleep rand(3) + 2
|
71
|
+
log 'working'
|
72
|
+
raise 'boom' if rand(5) == 0
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
crashing_work = CrashWork.new('crashy').workers do
|
77
|
+
[ Work.new('regular1'),
|
78
|
+
Work.new('regular2'),
|
79
|
+
CrashWork.new('crash3') ]
|
80
|
+
end
|
16
81
|
|
17
82
|
binding.pry
|
83
|
+
#w3.start
|
data/bin/kryten
CHANGED
@@ -6,19 +6,27 @@ require "pry"
|
|
6
6
|
|
7
7
|
include Kryten
|
8
8
|
|
9
|
-
class
|
10
|
-
include
|
9
|
+
class WorkList
|
10
|
+
include BackgroundTask
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
class Work
|
14
|
+
include BackgroundTask
|
15
|
+
def run
|
16
|
+
work = rand(5)+1;
|
17
|
+
log "working for #{work}"
|
18
|
+
sleep work
|
19
|
+
log "done working"
|
20
|
+
end
|
19
21
|
end
|
20
|
-
workers << w3
|
21
22
|
|
22
|
-
|
23
|
+
work = WorkList.new('visor').workers do
|
24
|
+
[ Work.new('work1'),
|
25
|
+
Work.new('work2'),
|
26
|
+
Work.new('work3').workers do
|
27
|
+
[ Work.new('work3sub1'),
|
28
|
+
Work.new('work3sub2') ]
|
29
|
+
end ]
|
30
|
+
end
|
23
31
|
|
24
|
-
|
32
|
+
work.start
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'daemons'
|
2
|
+
|
3
|
+
module Kryten::Daemon
|
4
|
+
attr_reader :worker
|
5
|
+
attr_accessor :workers
|
6
|
+
|
7
|
+
def setup
|
8
|
+
super
|
9
|
+
if workers
|
10
|
+
log 'starting workers'
|
11
|
+
workers.each(&:start_work)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def start_work
|
16
|
+
if worker && worker.running?
|
17
|
+
log 'worker already running'
|
18
|
+
return false
|
19
|
+
end
|
20
|
+
|
21
|
+
options = {
|
22
|
+
dir_mode: :script,
|
23
|
+
dir: '/tmp/',
|
24
|
+
log_output: false,
|
25
|
+
backtrace: false,
|
26
|
+
multiple: false,
|
27
|
+
ARGV: ['start']
|
28
|
+
}
|
29
|
+
@worker.start_all if @worker
|
30
|
+
@worker ||= Daemons.run_proc(name, options) { start }
|
31
|
+
end
|
32
|
+
|
33
|
+
def log_path
|
34
|
+
"/tmp/#{name}.log"
|
35
|
+
end
|
36
|
+
|
37
|
+
def mixed
|
38
|
+
@mixed = true
|
39
|
+
self
|
40
|
+
end
|
41
|
+
|
42
|
+
def shutdown
|
43
|
+
if @mixed && workers
|
44
|
+
workers.each(&:stop_running)
|
45
|
+
elsif workers
|
46
|
+
workers.each { |w| fork { w.shutdown }}
|
47
|
+
Process.waitall
|
48
|
+
end
|
49
|
+
worker.stop_all if worker
|
50
|
+
end
|
51
|
+
|
52
|
+
def stop_work
|
53
|
+
stop_running
|
54
|
+
end
|
55
|
+
|
56
|
+
def workers
|
57
|
+
if block_given?
|
58
|
+
@workers = Array(yield)
|
59
|
+
return self
|
60
|
+
end
|
61
|
+
@workers
|
62
|
+
end
|
63
|
+
|
64
|
+
def status
|
65
|
+
worker && worker.show_status || 'off'
|
66
|
+
end
|
67
|
+
|
68
|
+
def running
|
69
|
+
worker && worker.running? || false
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
data/lib/kryten/lawger.rb
CHANGED
@@ -7,13 +7,18 @@ module Kryten::Lawger
|
|
7
7
|
"log/#{name}.log"
|
8
8
|
end
|
9
9
|
|
10
|
-
def log message
|
10
|
+
def log(level = :debug, message)
|
11
11
|
default_log_format
|
12
|
-
logger.
|
12
|
+
logger.progname = name
|
13
|
+
logger.send(level, message )
|
13
14
|
end
|
14
15
|
|
15
16
|
def logger
|
16
|
-
@logger
|
17
|
+
unless @logger
|
18
|
+
@logger = Logger.new(log_path)
|
19
|
+
default_log_format
|
20
|
+
end
|
21
|
+
@logger
|
17
22
|
end
|
18
23
|
|
19
24
|
def default_log_format
|
data/lib/kryten/runner.rb
CHANGED
@@ -4,12 +4,17 @@ module Kryten::Runner
|
|
4
4
|
|
5
5
|
def initialize title=nil
|
6
6
|
@name, @running, @started = title, false, false
|
7
|
+
end
|
8
|
+
|
9
|
+
def setup
|
10
|
+
log "setting up"
|
7
11
|
Signal.trap("INT", proc { stop_running })
|
12
|
+
Signal.trap("TERM", proc { stop_running })
|
8
13
|
end
|
9
14
|
|
10
15
|
def start
|
11
16
|
setup
|
12
|
-
log "
|
17
|
+
log "started"
|
13
18
|
@started = true
|
14
19
|
|
15
20
|
while started do
|
@@ -22,24 +27,18 @@ module Kryten::Runner
|
|
22
27
|
log "stopped"
|
23
28
|
true
|
24
29
|
rescue => e
|
25
|
-
log "error #{e}"
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
def run
|
30
|
-
log "running"
|
30
|
+
log :error, "error: #{e} - from: #{e.backtrace.first}"
|
31
|
+
raise
|
31
32
|
end
|
32
33
|
|
33
34
|
def timer
|
34
35
|
@timer || 4
|
35
36
|
end
|
36
37
|
|
38
|
+
# stop the loop
|
37
39
|
def stop_running
|
38
40
|
@started = false
|
39
|
-
|
40
|
-
|
41
|
-
def setup
|
42
|
-
log "setting up"
|
41
|
+
shutdown
|
43
42
|
end
|
44
43
|
|
45
44
|
def debug
|
@@ -65,4 +64,9 @@ module Kryten::Runner
|
|
65
64
|
started
|
66
65
|
end
|
67
66
|
|
67
|
+
# hook methods
|
68
|
+
def shutdown; nil; end
|
69
|
+
|
70
|
+
def run; nil; end
|
71
|
+
|
68
72
|
end
|
data/lib/kryten/summoner.rb
CHANGED
data/lib/kryten/version.rb
CHANGED
data/lib/kryten/weaver.rb
CHANGED
@@ -2,18 +2,28 @@ module Kryten::Weaver
|
|
2
2
|
attr_reader :worker
|
3
3
|
attr_accessor :workers
|
4
4
|
|
5
|
-
def
|
6
|
-
|
5
|
+
def setup
|
6
|
+
if workers
|
7
|
+
log 'starting workers'
|
8
|
+
workers.each(&:start_work)
|
9
|
+
end
|
10
|
+
end
|
7
11
|
|
12
|
+
def start_work
|
8
13
|
if worker && worker.alive?
|
9
14
|
log 'worker already running'
|
10
15
|
return false
|
11
16
|
end
|
17
|
+
|
18
|
+
@started = true
|
12
19
|
@worker = Thread.new { start }
|
13
20
|
end
|
14
21
|
|
22
|
+
def shutdown
|
23
|
+
workers.each(&:stop_running) if workers
|
24
|
+
end
|
25
|
+
|
15
26
|
def stop_work
|
16
|
-
workers.each(&:stop_work) if workers
|
17
27
|
stop_running
|
18
28
|
end
|
19
29
|
|
@@ -25,32 +35,8 @@ module Kryten::Weaver
|
|
25
35
|
@workers
|
26
36
|
end
|
27
37
|
|
28
|
-
|
29
|
-
|
30
|
-
class Kryten::Supervisor
|
31
|
-
def self.start(workers)
|
32
|
-
start_workers(workers)
|
33
|
-
sleep 1 while @started
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.start_workers(workers)
|
37
|
-
@workers = workers
|
38
|
-
@started = true
|
39
|
-
Signal.trap("INT", proc { self.stop })
|
40
|
-
workers.each(&:start_work)
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.stop
|
44
|
-
if @started
|
45
|
-
@workers.each(&:stop_work)
|
46
|
-
sleep 1 while @workers.detect(&:running)
|
47
|
-
@started = false
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.running?
|
52
|
-
@workers.detect(&:running)
|
38
|
+
def log_path
|
39
|
+
"/tmp/#{name}.log"
|
53
40
|
end
|
54
41
|
|
55
42
|
end
|
56
|
-
|
data/lib/kryten.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
require "kryten/version"
|
2
|
-
require "kryten/
|
3
|
-
|
4
|
-
require "kryten/lawger"
|
2
|
+
require "kryten/environment"
|
3
|
+
|
5
4
|
require "kryten/runner"
|
5
|
+
require "kryten/lawger"
|
6
6
|
require "kryten/helper"
|
7
|
-
|
7
|
+
|
8
|
+
require "kryten/weaver"
|
9
|
+
require "kryten/daemon"
|
8
10
|
|
9
11
|
module Kryten::Task
|
10
12
|
include Kryten::Runner
|
@@ -12,12 +14,21 @@ module Kryten::Task
|
|
12
14
|
include Kryten::Helper
|
13
15
|
end
|
14
16
|
|
15
|
-
module Kryten::
|
17
|
+
module Kryten::ThreadedTask
|
16
18
|
include Kryten::Task
|
17
|
-
include Kryten::
|
19
|
+
include Kryten::Weaver
|
18
20
|
end
|
19
21
|
|
20
|
-
|
22
|
+
class Kryten::ThreadVisor
|
23
|
+
extend Kryten::ThreadedTask
|
24
|
+
def self.setup
|
25
|
+
Signal.trap("INT", proc { stop_work })
|
26
|
+
Signal.trap("TERM", proc { stop_work })
|
27
|
+
super
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module Kryten::BackgroundTask
|
21
32
|
include Kryten::Task
|
22
|
-
include Kryten::
|
33
|
+
include Kryten::Daemon
|
23
34
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kryten
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zsolt Fekete
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -126,6 +126,7 @@ files:
|
|
126
126
|
- bin/setup
|
127
127
|
- kryten.gemspec
|
128
128
|
- lib/kryten.rb
|
129
|
+
- lib/kryten/daemon.rb
|
129
130
|
- lib/kryten/environment.rb
|
130
131
|
- lib/kryten/helper.rb
|
131
132
|
- lib/kryten/lawger.rb
|