flor 0.10.0 → 0.11.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.
- data/CHANGELOG.md +12 -0
- data/README.md +5 -1
- data/fail.txt +3 -0
- data/lib/flor.rb +1 -1
- data/lib/flor/conf.rb +1 -1
- data/lib/flor/core/executor.rb +34 -6
- data/lib/flor/core/node.rb +15 -1
- data/lib/flor/core/texecutor.rb +19 -4
- data/lib/flor/djan.rb +1 -1
- data/lib/flor/flor.rb +37 -2
- data/lib/flor/parser.rb +55 -29
- data/lib/flor/pcore/apply.rb +23 -24
- data/lib/flor/pcore/case.rb +24 -26
- data/lib/flor/pcore/fail.rb +10 -0
- data/lib/flor/pcore/if.rb +36 -1
- data/lib/flor/pcore/twig.rb +32 -0
- data/lib/flor/pcore/val.rb +1 -1
- data/lib/flor/punit/graft.rb +39 -1
- data/lib/flor/unit.rb +3 -0
- data/lib/flor/unit/executor.rb +1 -0
- data/lib/flor/unit/ganger.rb +19 -68
- data/lib/flor/unit/hook.rb +32 -0
- data/lib/flor/unit/hooker.rb +5 -12
- data/lib/flor/unit/hooks.rb +37 -0
- data/lib/flor/unit/loader.rb +44 -17
- data/lib/flor/unit/logger.rb +1 -0
- data/lib/flor/unit/models/trap.rb +22 -26
- data/lib/flor/unit/runner.rb +84 -0
- data/lib/flor/unit/scheduler.rb +57 -46
- data/lib/flor/unit/spooler.rb +109 -0
- data/lib/flor/unit/storage.rb +1 -1
- data/lib/flor/unit/waiter.rb +2 -4
- data/lib/flor/unit/wlist.rb +13 -0
- metadata +8 -2
@@ -0,0 +1,109 @@
|
|
1
|
+
|
2
|
+
module Flor
|
3
|
+
|
4
|
+
class Spooler
|
5
|
+
|
6
|
+
# NB: logger configuration entries start with "spo_"
|
7
|
+
|
8
|
+
def initialize(unit)
|
9
|
+
|
10
|
+
@unit = unit
|
11
|
+
|
12
|
+
@dir = determine_spool_dir
|
13
|
+
end
|
14
|
+
|
15
|
+
def shutdown
|
16
|
+
|
17
|
+
@dir = nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def spool
|
21
|
+
|
22
|
+
return -1 unless @dir
|
23
|
+
|
24
|
+
Dir[File.join(@dir, '*.json')]
|
25
|
+
.inject(0) do |count, path|
|
26
|
+
|
27
|
+
begin
|
28
|
+
File.open(path, 'rb') do |f|
|
29
|
+
lock(path, f) or next
|
30
|
+
accept(path, f) or next
|
31
|
+
unlock(path, f)
|
32
|
+
end
|
33
|
+
count += 1
|
34
|
+
rescue => err
|
35
|
+
reject(path, err)
|
36
|
+
end
|
37
|
+
|
38
|
+
count
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
protected
|
43
|
+
|
44
|
+
def determine_spool_dir
|
45
|
+
|
46
|
+
d = @unit.conf['spo_dir'] || 'var/spool'
|
47
|
+
d = File.join(@unit.conf['root'], d) if d
|
48
|
+
d = nil unless File.directory?(d)
|
49
|
+
|
50
|
+
d
|
51
|
+
end
|
52
|
+
|
53
|
+
def lock(path, file)
|
54
|
+
|
55
|
+
file.flock(File::LOCK_EX | File::LOCK_NB) == 0
|
56
|
+
end
|
57
|
+
|
58
|
+
def unlock(path, file)
|
59
|
+
|
60
|
+
# nothing more to do
|
61
|
+
end
|
62
|
+
|
63
|
+
def accept(path, file)
|
64
|
+
|
65
|
+
json = file.read
|
66
|
+
|
67
|
+
return false if json == ''
|
68
|
+
|
69
|
+
@unit.storage.put_message(JSON.parse(json))
|
70
|
+
|
71
|
+
con = File.join(@dir, 'consumed')
|
72
|
+
|
73
|
+
File.delete(path)
|
74
|
+
|
75
|
+
return true unless File.directory?(con)
|
76
|
+
|
77
|
+
fn = File.join(con, "#{File.basename(path, '.json')}.#{Flor.tamp}.json")
|
78
|
+
|
79
|
+
File.open(fn, 'wb') { |f| f.write(json) }
|
80
|
+
|
81
|
+
true
|
82
|
+
end
|
83
|
+
|
84
|
+
def reject(path, err)
|
85
|
+
|
86
|
+
rej = File.join(@dir, 'rejected')
|
87
|
+
|
88
|
+
FileUtils.mkdir_p(rej)
|
89
|
+
|
90
|
+
eh = err.hash.abs
|
91
|
+
ts = Flor.tamp
|
92
|
+
|
93
|
+
jfn = File.join(
|
94
|
+
rej, "#{File.basename(path, '.json')}__#{eh}_#{ts}.json")
|
95
|
+
tfn = File.join(
|
96
|
+
rej, "#{File.basename(path, '.json')}__#{eh}_#{ts}.txt")
|
97
|
+
|
98
|
+
FileUtils.mv(path, jfn)
|
99
|
+
|
100
|
+
File.open(tfn, 'wb') do |tf|
|
101
|
+
tf.puts(err.inspect)
|
102
|
+
tf.puts(err.class.to_s)
|
103
|
+
tf.puts(err.to_s)
|
104
|
+
tf.puts(err.backtrace)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
data/lib/flor/unit/storage.rb
CHANGED
data/lib/flor/unit/waiter.rb
CHANGED
@@ -3,8 +3,6 @@ module Flor
|
|
3
3
|
|
4
4
|
class Waiter
|
5
5
|
|
6
|
-
DEFAULT_TIMEOUT = 4 # seconds
|
7
|
-
|
8
6
|
def initialize(exid, opts)
|
9
7
|
|
10
8
|
serie, timeout, repeat = expand_args(opts)
|
@@ -12,7 +10,7 @@ module Flor
|
|
12
10
|
@exid = exid
|
13
11
|
@original_serie = repeat ? Flor.dup(serie) : nil
|
14
12
|
@serie = serie
|
15
|
-
@timeout = timeout
|
13
|
+
@timeout = timeout
|
16
14
|
|
17
15
|
@queue = []
|
18
16
|
@mutex = Mutex.new
|
@@ -91,7 +89,7 @@ module Flor
|
|
91
89
|
|
92
90
|
owait = opts[:wait]
|
93
91
|
orepeat = opts[:repeat] || false
|
94
|
-
otimeout = opts[:timeout]
|
92
|
+
otimeout = opts[:timeout]
|
95
93
|
|
96
94
|
case owait
|
97
95
|
when true
|
data/lib/flor/unit/wlist.rb
CHANGED
@@ -3,9 +3,17 @@ module Flor
|
|
3
3
|
|
4
4
|
class WaitList
|
5
5
|
|
6
|
+
# NB: tasker configuration entries start with "wtl_"
|
7
|
+
#
|
8
|
+
# `wtl_default_timeout`:
|
9
|
+
# when #launch ing or #wait ing, set the default timeout, in seconds
|
10
|
+
|
11
|
+
DEFAULT_TIMEOUT = Flor.env_i('FLOR_DEFAULT_TIMEOUT')
|
12
|
+
|
6
13
|
def initialize(unit)
|
7
14
|
|
8
15
|
@unit = unit
|
16
|
+
@unit.hooker.add('wlist', self)
|
9
17
|
|
10
18
|
@mutex = Mutex.new
|
11
19
|
@waiters = []
|
@@ -49,6 +57,11 @@ module Flor
|
|
49
57
|
[ exid, opts ]
|
50
58
|
end
|
51
59
|
|
60
|
+
opts[:timeout] =
|
61
|
+
nil if opts[:timeout] == true
|
62
|
+
opts[:timeout] ||=
|
63
|
+
(DEFAULT_TIMEOUT || @unit.conf['wtl_default_timeout'] || 5)
|
64
|
+
|
52
65
|
@mutex.synchronize do
|
53
66
|
|
54
67
|
(@waiters << Waiter.new(exid, opts)).last
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-03-
|
12
|
+
date: 2017-03-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: munemo
|
@@ -162,6 +162,7 @@ files:
|
|
162
162
|
- lib/flor/pcore/sequence.rb
|
163
163
|
- lib/flor/pcore/set.rb
|
164
164
|
- lib/flor/pcore/stall.rb
|
165
|
+
- lib/flor/pcore/twig.rb
|
165
166
|
- lib/flor/pcore/until.rb
|
166
167
|
- lib/flor/pcore/val.rb
|
167
168
|
- lib/flor/punit/cancel.rb
|
@@ -181,7 +182,9 @@ files:
|
|
181
182
|
- lib/flor/tools/shell.rb
|
182
183
|
- lib/flor/unit/executor.rb
|
183
184
|
- lib/flor/unit/ganger.rb
|
185
|
+
- lib/flor/unit/hook.rb
|
184
186
|
- lib/flor/unit/hooker.rb
|
187
|
+
- lib/flor/unit/hooks.rb
|
185
188
|
- lib/flor/unit/journal.rb
|
186
189
|
- lib/flor/unit/loader.rb
|
187
190
|
- lib/flor/unit/logger.rb
|
@@ -191,7 +194,9 @@ files:
|
|
191
194
|
- lib/flor/unit/models/trace.rb
|
192
195
|
- lib/flor/unit/models/trap.rb
|
193
196
|
- lib/flor/unit/models.rb
|
197
|
+
- lib/flor/unit/runner.rb
|
194
198
|
- lib/flor/unit/scheduler.rb
|
199
|
+
- lib/flor/unit/spooler.rb
|
195
200
|
- lib/flor/unit/storage.rb
|
196
201
|
- lib/flor/unit/taskers.rb
|
197
202
|
- lib/flor/unit/waiter.rb
|
@@ -199,6 +204,7 @@ files:
|
|
199
204
|
- lib/flor/unit.rb
|
200
205
|
- lib/flor.rb
|
201
206
|
- flor.gemspec
|
207
|
+
- fail.txt
|
202
208
|
- LICENSE.txt
|
203
209
|
- CHANGELOG.md
|
204
210
|
- README.md
|