pampa 2.0.29 → 2.0.30
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pampa/app.rb +194 -0
- data/lib/pampa/dispatcher.rb +133 -0
- data/lib/pampa/worker.rb +172 -0
- data/lib/pampa.rb +42 -384
- data/pampa.gemspec +43 -0
- metadata +80 -17
- data/worker.rb +0 -147
metadata
CHANGED
@@ -1,75 +1,135 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pampa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.30
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leandro Daniel Sardi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rubygems-bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.4.5
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: 1.4.5
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 1.4.5
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: 1.4.5
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: sinatra
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 2.2.4
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 2.2.4
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 2.2.4
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 2.2.4
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: colorize
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 0.8.1
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 0.8.1
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.8.1
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 0.8.1
|
33
73
|
- !ruby/object:Gem::Dependency
|
34
74
|
name: blackstack-core
|
35
75
|
requirement: !ruby/object:Gem::Requirement
|
36
76
|
requirements:
|
37
77
|
- - "~>"
|
38
78
|
- !ruby/object:Gem::Version
|
39
|
-
version: 1.2.
|
79
|
+
version: 1.2.15
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.2.15
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.2.15
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 1.2.15
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: blackstack-db
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 1.0.1
|
40
100
|
- - ">="
|
41
101
|
- !ruby/object:Gem::Version
|
42
|
-
version: 1.
|
102
|
+
version: 1.0.1
|
43
103
|
type: :runtime
|
44
104
|
prerelease: false
|
45
105
|
version_requirements: !ruby/object:Gem::Requirement
|
46
106
|
requirements:
|
47
107
|
- - "~>"
|
48
108
|
- !ruby/object:Gem::Version
|
49
|
-
version: 1.
|
109
|
+
version: 1.0.1
|
50
110
|
- - ">="
|
51
111
|
- !ruby/object:Gem::Version
|
52
|
-
version: 1.
|
112
|
+
version: 1.0.1
|
53
113
|
- !ruby/object:Gem::Dependency
|
54
114
|
name: blackstack-nodes
|
55
115
|
requirement: !ruby/object:Gem::Requirement
|
56
116
|
requirements:
|
57
117
|
- - "~>"
|
58
118
|
- !ruby/object:Gem::Version
|
59
|
-
version: 1.2.
|
119
|
+
version: 1.2.12
|
60
120
|
- - ">="
|
61
121
|
- !ruby/object:Gem::Version
|
62
|
-
version: 1.2.
|
122
|
+
version: 1.2.12
|
63
123
|
type: :runtime
|
64
124
|
prerelease: false
|
65
125
|
version_requirements: !ruby/object:Gem::Requirement
|
66
126
|
requirements:
|
67
127
|
- - "~>"
|
68
128
|
- !ruby/object:Gem::Version
|
69
|
-
version: 1.2.
|
129
|
+
version: 1.2.12
|
70
130
|
- - ">="
|
71
131
|
- !ruby/object:Gem::Version
|
72
|
-
version: 1.2.
|
132
|
+
version: 1.2.12
|
73
133
|
- !ruby/object:Gem::Dependency
|
74
134
|
name: simple_command_line_parser
|
75
135
|
requirement: !ruby/object:Gem::Requirement
|
@@ -134,8 +194,11 @@ extensions: []
|
|
134
194
|
extra_rdoc_files: []
|
135
195
|
files:
|
136
196
|
- lib/pampa.rb
|
137
|
-
-
|
138
|
-
|
197
|
+
- lib/pampa/app.rb
|
198
|
+
- lib/pampa/dispatcher.rb
|
199
|
+
- lib/pampa/worker.rb
|
200
|
+
- pampa.gemspec
|
201
|
+
homepage: https://github.com/leandrosardi/pampa
|
139
202
|
licenses:
|
140
203
|
- MIT
|
141
204
|
metadata: {}
|
data/worker.rb
DELETED
@@ -1,147 +0,0 @@
|
|
1
|
-
# require the gem simple_cloud_logging for parsing command line parameters.
|
2
|
-
require 'simple_command_line_parser'
|
3
|
-
# require the gem simple_cloud_logging for writing logfiles.
|
4
|
-
require 'simple_cloud_logging'
|
5
|
-
# require the gem sequel for connecting to the database and handle ORM classes.
|
6
|
-
require 'sequel'
|
7
|
-
|
8
|
-
# parse command line parameters
|
9
|
-
PARSER = BlackStack::SimpleCommandLineParser.new(
|
10
|
-
:description => 'This script starts an infinite loop. Each loop will look for a task to perform. Must be a delay between each loop.',
|
11
|
-
:configuration => [{
|
12
|
-
:name=>'delay',
|
13
|
-
:mandatory=>false,
|
14
|
-
:default=>30,
|
15
|
-
:description=>'Minimum delay between loops. A minimum of 10 seconds is recommended, in order to don\'t hard the database server. Default is 30 seconds.',
|
16
|
-
:type=>BlackStack::SimpleCommandLineParser::INT,
|
17
|
-
}, {
|
18
|
-
:name=>'debug',
|
19
|
-
:mandatory=>false,
|
20
|
-
:default=>false,
|
21
|
-
:description=>'Activate this flag if you want to require the `pampa.rb` file from the same Pampa project folder, insetad to require the gem as usual.',
|
22
|
-
:type=>BlackStack::SimpleCommandLineParser::BOOL,
|
23
|
-
}, {
|
24
|
-
:name=>'pampa',
|
25
|
-
:mandatory=>false,
|
26
|
-
:default=>'./lib/pampa.rb',
|
27
|
-
:description=>'Ruby file to require where `debug` is activated.',
|
28
|
-
:type=>BlackStack::SimpleCommandLineParser::STRING,
|
29
|
-
}, {
|
30
|
-
:name=>'config',
|
31
|
-
:mandatory=>false,
|
32
|
-
:default=>'./config.rb',
|
33
|
-
:description=>'Ruby file where is defined the connection-string and jobs.',
|
34
|
-
:type=>BlackStack::SimpleCommandLineParser::STRING,
|
35
|
-
}, {
|
36
|
-
:name=>'id',
|
37
|
-
:mandatory=>true,
|
38
|
-
:description=>'Write here a unique identifier for the worker.',
|
39
|
-
:type=>BlackStack::SimpleCommandLineParser::STRING,
|
40
|
-
}]
|
41
|
-
)
|
42
|
-
|
43
|
-
# creating logfile
|
44
|
-
l = BlackStack::LocalLogger.new('worker.'+PARSER.value('id').to_s+'.log')
|
45
|
-
|
46
|
-
begin
|
47
|
-
# log the paramers
|
48
|
-
l.log 'STARTING WORKER'
|
49
|
-
|
50
|
-
# show the parameters
|
51
|
-
# TODO: replace this hardocded array for method `PARSER.params`.
|
52
|
-
# reference: https://github.com/leandrosardi/simple_command_line_parser/issues/7
|
53
|
-
#['id','delay','debug','pampa','config'].each { |param| l.log param + ': ' + PARSER.value(param).to_s }
|
54
|
-
|
55
|
-
# require the pampa library
|
56
|
-
l.logs 'Requiring pampa (debug='+(PARSER.value('debug') ? 'true' : 'false')+', pampa='+PARSER.value('pampa')+')... '
|
57
|
-
require 'pampa' if !PARSER.value('debug')
|
58
|
-
require PARSER.value('pampa') if PARSER.value('debug')
|
59
|
-
l.done
|
60
|
-
|
61
|
-
# requiore the config.rb file where the jobs are defined.
|
62
|
-
l.logs 'Requiring config (config='+PARSER.value('config')+')... '
|
63
|
-
require PARSER.value('config')
|
64
|
-
l.done
|
65
|
-
|
66
|
-
# getting the worker object
|
67
|
-
worker = BlackStack::Pampa.workers.select { |w| w.id == PARSER.value('id') }.first
|
68
|
-
raise 'Worker '+PARSER.value('id')+' not found.' if worker.nil?
|
69
|
-
|
70
|
-
# start the loop
|
71
|
-
while true
|
72
|
-
# get the start loop time
|
73
|
-
l.logs 'Starting loop... '
|
74
|
-
start = Time.now()
|
75
|
-
l.done
|
76
|
-
|
77
|
-
BlackStack::Pampa.jobs.each { |job|
|
78
|
-
l.logs 'Processing job '+job.name+'... '
|
79
|
-
tasks = job.occupied_slots(worker)
|
80
|
-
l.logf tasks.size.to_s+' tasks in queue.'
|
81
|
-
|
82
|
-
tasks.each { |task|
|
83
|
-
l.logs 'Flag task '+job.name+'.'+task[job.field_primary_key.to_sym].to_s+' started... '
|
84
|
-
job.start(task)
|
85
|
-
l.done
|
86
|
-
|
87
|
-
begin
|
88
|
-
l.logs 'Processing task '+task[job.field_primary_key.to_sym].to_s+'... '
|
89
|
-
job.processing_function.call(task, l, job, worker)
|
90
|
-
l.done
|
91
|
-
|
92
|
-
l.logs 'Flag task '+job.name+'.'+task[job.field_primary_key.to_sym].to_s+' finished... '
|
93
|
-
job.finish(task)
|
94
|
-
l.done
|
95
|
-
|
96
|
-
# note: this catches the CTRL+C signal.
|
97
|
-
# note: this catches the `kill` command, ONLY if it has not the `-9` option.
|
98
|
-
rescue SignalException, SystemExit, Interrupt => e
|
99
|
-
l.logs 'Flag task '+job.name+'.'+task[job.field_primary_key.to_sym].to_s+' interrumpted... '
|
100
|
-
job.finish(task, e)
|
101
|
-
l.done
|
102
|
-
|
103
|
-
log.logf 'Bye!'
|
104
|
-
|
105
|
-
raise e
|
106
|
-
|
107
|
-
rescue => e
|
108
|
-
l.logs 'Flag task '+job.name+'.'+task[job.field_primary_key.to_sym].to_s+' failed... '
|
109
|
-
job.finish(task, e)
|
110
|
-
l.done
|
111
|
-
|
112
|
-
l.logf 'Error: '+e.to_console
|
113
|
-
end
|
114
|
-
}
|
115
|
-
}
|
116
|
-
|
117
|
-
# get the end loop time
|
118
|
-
l.logs 'Ending loop... '
|
119
|
-
finish = Time.now()
|
120
|
-
l.done
|
121
|
-
|
122
|
-
# get different in seconds between start and finish
|
123
|
-
# if diff > 30 seconds
|
124
|
-
l.logs 'Calculating loop duration... '
|
125
|
-
diff = finish - start
|
126
|
-
l.logf 'done ('+diff.to_s+')'
|
127
|
-
|
128
|
-
if diff < PARSER.value('delay')
|
129
|
-
# sleep for 30 seconds
|
130
|
-
n = PARSER.value('delay')-diff
|
131
|
-
|
132
|
-
l.logs 'Sleeping for '+n.to_label+' seconds... '
|
133
|
-
sleep n
|
134
|
-
l.done
|
135
|
-
else
|
136
|
-
l.log 'No sleeping. The loop took '+diff.to_label+' seconds.'
|
137
|
-
end
|
138
|
-
end # while true
|
139
|
-
rescue SignalException, SystemExit, Interrupt
|
140
|
-
# note: this catches the CTRL+C signal.
|
141
|
-
# note: this catches the `kill` command, ONLY if it has not the `-9` option.
|
142
|
-
l.logf 'Process Interrumpted.'
|
143
|
-
rescue => e
|
144
|
-
l.logf 'Fatal Error: '+e.to_console
|
145
|
-
rescue
|
146
|
-
l.logf 'Unknown Fatal Error.'
|
147
|
-
end
|