kryten 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8f0a14d2f5b04660d77a405f0a85afeb514ad736
4
- data.tar.gz: 60fb6fc7ba1502f6f627db72343f5d14c1b95388
3
+ metadata.gz: ff4e205748887527fb006bd3cb5f73d98e04162d
4
+ data.tar.gz: fc8a1aae785bdb21683a44eb2f052bed64830a50
5
5
  SHA512:
6
- metadata.gz: 4403068bc362166a7d7a89137eb2f054cc3ba7f059479122f71206b3025bbef2181831a7f263dc3d0b8750d699a1e0ee6de2b7146825fac11f21ef8aaa042231
7
- data.tar.gz: f6590c7e15bcba8888603ebf8bd022e9c835c762feabd6eea7a5f92cbf46a24b61c30b32bd4a4df236aa30e477674d192d470ba9a133c2a7bd54042807ef49f1
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
- w1 = Work.new('work1')
14
- w2 = Work.new('work2')
15
- w3 = Work.new('work3')
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 Work
10
- include ThreadedTask
9
+ class WorkList
10
+ include BackgroundTask
11
11
  end
12
12
 
13
- workers = []
14
- workers << Work.new('work1')
15
- workers << Work.new('work2')
16
- w3 = Work.new('work3').workers do
17
- [Work.new('work3sub1'),
18
- Work.new('work3sub2')]
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
- Supervisor.start(workers)
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
- sleep 10
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.debug(name) { message }
12
+ logger.progname = name
13
+ logger.send(level, message )
13
14
  end
14
15
 
15
16
  def logger
16
- @logger ||= Logger.new(log_path)
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 "starting"
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
- #raise
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
- end
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
@@ -1,4 +1,4 @@
1
- # WARNING: Legacy Code
1
+ # legacy
2
2
 
3
3
  require 'daemons'
4
4
 
@@ -1,3 +1,3 @@
1
1
  module Kryten
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
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 start_work
6
- workers.each(&:start_work) if workers
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
- end
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/summoner"
3
- require "kryten/weaver"
4
- require "kryten/lawger"
2
+ require "kryten/environment"
3
+
5
4
  require "kryten/runner"
5
+ require "kryten/lawger"
6
6
  require "kryten/helper"
7
- require "kryten/environment"
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::DaemonTask
17
+ module Kryten::ThreadedTask
16
18
  include Kryten::Task
17
- include Kryten::Summoner
19
+ include Kryten::Weaver
18
20
  end
19
21
 
20
- module Kryten::ThreadedTask
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::Weaver
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.2.1
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-23 00:00:00.000000000 Z
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