appjob 0.0.13 → 0.0.14
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.
- data/lib/appjob.rb +38 -58
- data/lib/appjob/version.rb +1 -1
- metadata +4 -4
data/lib/appjob.rb
CHANGED
@@ -6,14 +6,18 @@ class Appjob
|
|
6
6
|
CMD_FILE = File.join(Rails.root,'script','appjob')
|
7
7
|
|
8
8
|
@threads = {}
|
9
|
-
@monitor =
|
9
|
+
@monitor = nil
|
10
10
|
|
11
11
|
def self.configure
|
12
12
|
raise "Appjob: No rails app detected" unless
|
13
13
|
defined? Rails and RAILS_ENV and RAILS_ROOT
|
14
|
+
|
15
|
+
%w(EVERY_FILE CMD_FILE).each do |f|
|
16
|
+
FileUtils.cp(File.join(File.dirname(__FILE__),'appjob', File.basename(eval(f))), eval(f))
|
17
|
+
end
|
18
|
+
|
14
19
|
Thread.abort_on_exception = true
|
15
|
-
|
16
|
-
FileUtils.cp(File.join(File.dirname(__FILE__),'appjob','appjob'), CMD_FILE)
|
20
|
+
|
17
21
|
log "succefully configured" if configured?
|
18
22
|
end
|
19
23
|
|
@@ -22,11 +26,11 @@ class Appjob
|
|
22
26
|
File.exist?(CMD_FILE))
|
23
27
|
end
|
24
28
|
|
25
|
-
def self.every period,
|
29
|
+
def self.every period, tname=nil
|
26
30
|
t = Thread.new do
|
27
31
|
loop { sleep(period.to_i); yield }
|
28
32
|
end
|
29
|
-
t[:name] =
|
33
|
+
t[:name] = tname if tname
|
30
34
|
@threads[t[:name]] = t
|
31
35
|
end
|
32
36
|
|
@@ -35,82 +39,58 @@ class Appjob
|
|
35
39
|
configure unless configured?
|
36
40
|
log "Init ok, RAILS_ENV=#{Rails.env.to_s}"
|
37
41
|
eval File.read(EVERY_FILE)
|
38
|
-
monitor
|
42
|
+
monitor if @monitor.nil?
|
39
43
|
else
|
40
|
-
log "
|
44
|
+
log "already started"
|
41
45
|
end
|
42
46
|
end
|
43
47
|
|
44
|
-
def self.
|
45
|
-
if @threads.
|
46
|
-
|
47
|
-
list = @threads
|
48
|
-
else
|
49
|
-
if @threads.has_key?(name)
|
50
|
-
list = {}
|
51
|
-
list[name]=@threads.fetch(name)
|
52
|
-
else
|
53
|
-
log "No victims with name=#{name}"
|
54
|
-
return
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
list.each do |name, t|
|
59
|
-
if t.is_a?(Thread)
|
60
|
-
t.kill
|
61
|
-
list.delete(name)
|
62
|
-
@threads.delete(name) if list.empty?
|
63
|
-
log "task #{name} killed"
|
64
|
-
else
|
65
|
-
log "task #{name} is not a Thread "
|
66
|
-
end
|
67
|
-
end
|
48
|
+
def self.stop_all
|
49
|
+
if @threads.empty?
|
50
|
+
log "nothing to stop, task list is empty"
|
68
51
|
else
|
69
|
-
|
52
|
+
@threads.each_key { |tname| stop(tname) }
|
53
|
+
@threads = {}
|
70
54
|
end
|
71
55
|
end
|
72
56
|
|
73
|
-
def self.
|
74
|
-
@threads
|
57
|
+
def self.stop(tname)
|
58
|
+
if @threads.has_key?(tname)
|
59
|
+
@threads.fetch(tname).kill
|
60
|
+
@threads.delete(tname)
|
61
|
+
log "task #{tname} killed"
|
62
|
+
else
|
63
|
+
log "no valid victim with name=#{tname}"
|
64
|
+
end
|
75
65
|
end
|
76
66
|
|
77
67
|
def self.log(message)
|
78
|
-
|
68
|
+
Rails.logger.info("[appjob] #{message}")
|
79
69
|
end
|
80
70
|
|
81
71
|
def self.monitor
|
82
72
|
@monitor = Thread.new do
|
83
73
|
loop {
|
84
|
-
sleep
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
when 'stop'
|
92
|
-
if todo[1]
|
93
|
-
stop(todo[1])
|
94
|
-
else
|
95
|
-
stop
|
96
|
-
end
|
97
|
-
clean_command
|
98
|
-
end
|
99
|
-
end
|
74
|
+
sleep 1
|
75
|
+
case flag[:cmd]
|
76
|
+
when 'start' then start
|
77
|
+
when 'stop'
|
78
|
+
flag[:task] ? stop(flag[:task]) : stop_all
|
79
|
+
end unless flag.nil?
|
80
|
+
clear_flag if flag
|
100
81
|
}
|
101
82
|
end
|
102
83
|
end
|
103
84
|
|
104
|
-
def self.
|
105
|
-
cmd = File.exist?(FLAG_FILE) ? File.read(FLAG_FILE) : nil
|
106
|
-
cmd
|
85
|
+
def self.flag
|
86
|
+
cmd = File.exist?(FLAG_FILE) ? File.read(FLAG_FILE).to_s.strip.split : nil
|
87
|
+
{ :cmd=>cmd[0], :task=>cmd[1] } unless cmd.nil?
|
107
88
|
end
|
108
89
|
|
109
|
-
def self.
|
90
|
+
def self.clear_flag
|
110
91
|
File.delete(FLAG_FILE) if File.exist?(FLAG_FILE)
|
111
92
|
end
|
112
|
-
|
113
|
-
#попахивает ?!
|
93
|
+
# уже лучше
|
114
94
|
end
|
115
95
|
|
116
|
-
Appjob.start
|
96
|
+
Appjob.start
|
data/lib/appjob/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appjob
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 14
|
10
|
+
version: 0.0.14
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jeks
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-11-
|
18
|
+
date: 2011-11-07 00:00:00 +04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|