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 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