pampa 2.0.29 → 2.0.30
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 +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
|