pampa_workers 1.1.3
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 +7 -0
- data/lib/basedivision.rb +5 -0
- data/lib/baseworker.rb +5 -0
- data/lib/client.rb +189 -0
- data/lib/division.rb +46 -0
- data/lib/login.rb +7 -0
- data/lib/mybotprocess.rb +348 -0
- data/lib/mychildprocess.rb +9 -0
- data/lib/mycrawlprocess.rb +49 -0
- data/lib/mylocalprocess.rb +170 -0
- data/lib/myparentprocess.rb +142 -0
- data/lib/myprocess.rb +265 -0
- data/lib/myremoteprocess.rb +138 -0
- data/lib/pampa-local.rb +41 -0
- data/lib/pampa_workers.rb +257 -0
- data/lib/params.rb +50 -0
- data/lib/remotedivision.rb +8 -0
- data/lib/remoteworker.rb +8 -0
- data/lib/role.rb +8 -0
- data/lib/timezone.rb +151 -0
- data/lib/user.rb +25 -0
- data/lib/userdivision.rb +5 -0
- data/lib/userrole.rb +8 -0
- data/lib/worker.rb +154 -0
- metadata +169 -0
data/lib/remoteworker.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
module BlackStack
|
2
|
+
|
3
|
+
class RemoteWorker
|
4
|
+
attr_accessor :id, :process, :last_ping_time, :name, :active, :id_division, :assigned_process, :id_client, :division_name, :ws_url, :ws_port, :division
|
5
|
+
include BlackStack::BaseWorker
|
6
|
+
end # Remote Worker
|
7
|
+
|
8
|
+
end # module BlackStack
|
data/lib/role.rb
ADDED
data/lib/timezone.rb
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
module BlackStack
|
2
|
+
class Timezone < Sequel::Model(:timezone)
|
3
|
+
BlackStack::Timezone.dataset = BlackStack::Timezone.dataset.disable_insert_output
|
4
|
+
|
5
|
+
# Recibe un string con formato "+HH:MM".
|
6
|
+
# Retorna la cantidad de horas como un numero real, con decimales.
|
7
|
+
def self.descToFloat(s)
|
8
|
+
sign = s[0]
|
9
|
+
if (sign=="+")
|
10
|
+
n = 1.0
|
11
|
+
else
|
12
|
+
n = -1.0
|
13
|
+
end
|
14
|
+
hours = s[1..2]
|
15
|
+
minutes = s[4..5]
|
16
|
+
int_part = hours.to_f
|
17
|
+
dec_part = minutes.to_f / 60.00
|
18
|
+
ret = n*(int_part + dec_part)
|
19
|
+
return ret.to_f
|
20
|
+
end
|
21
|
+
|
22
|
+
# Recibe la cantidad de horas como un numero real, con decimales.
|
23
|
+
# Retorna un string con formato "+HH:MM".
|
24
|
+
def self.floatToDesc(x)
|
25
|
+
int_part = x.to_i
|
26
|
+
dec_part = (x-int_part.to_f).round(2).abs
|
27
|
+
hours = int_part
|
28
|
+
minutes = (dec_part * 60.00).to_i
|
29
|
+
if (hours<0)
|
30
|
+
desc = "%03d" % hours
|
31
|
+
else
|
32
|
+
desc = "+" + "%02d" % hours
|
33
|
+
end
|
34
|
+
desc += ":" + "%02d" % minutes
|
35
|
+
return desc
|
36
|
+
end
|
37
|
+
|
38
|
+
# Example: '-03:00'
|
39
|
+
# Example: ' 08:00'
|
40
|
+
def self.getDatabaseOffset()
|
41
|
+
dbtime = DB["select SYSDATETIMEOFFSET() AS o"].first[:o].to_s
|
42
|
+
#puts ""
|
43
|
+
#puts ""
|
44
|
+
#puts "dbtime:#{dbtime.to_s}:."
|
45
|
+
#puts ""
|
46
|
+
#puts ""
|
47
|
+
ret = "#{dbtime[-5..-3]}:#{dbtime[-2..-1]}"
|
48
|
+
ret[0] = '+' if ret[0]!='-'
|
49
|
+
#puts ""
|
50
|
+
#puts ""
|
51
|
+
#puts "dbtime:#{ret.to_s}:."
|
52
|
+
#puts ""
|
53
|
+
#puts ""
|
54
|
+
return ret
|
55
|
+
end
|
56
|
+
|
57
|
+
# Convierte el atributo offset en un string con formato de hora.
|
58
|
+
# Ejemplos: 5.0 => 05:00, 5.5 => 05:30, -5.75 => -05:45
|
59
|
+
def offsetDescription()
|
60
|
+
return BlackStack::Timezone.floatToDesc(self.offset.to_f)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Convierte una hora almacenada en el servidor de bases de datos, a la hora en esta zona horaria.
|
64
|
+
# Recibe un string con formato "+HH:MM".
|
65
|
+
# Retorna un string con formato "+HH:MM".
|
66
|
+
def convertFromThisTimeZoneToDatabaseTime(s_time_in_client_timezone)
|
67
|
+
f_time_in_client_timezone = BlackStack::Timezone.descToFloat(s_time_in_client_timezone)
|
68
|
+
s = BlackStack::Timezone.getDatabaseOffset()
|
69
|
+
x = BlackStack::Timezone.descToFloat(s) # database offset
|
70
|
+
y = self.offset # client offset
|
71
|
+
z = y - x
|
72
|
+
return BlackStack::Timezone.floatToDesc((f_time_in_client_timezone.to_f + z.to_f).modulo(24))
|
73
|
+
end
|
74
|
+
|
75
|
+
# Convierte una hora almacenada en el servidor de bases de datos, a la hora en esta zona horaria.
|
76
|
+
# Recibe un string con formato "+HH:MM".
|
77
|
+
# Retorna un string con formato "+HH:MM".
|
78
|
+
def convertFromDatabaseTimeToThisTimeZone(s_time_in_database)
|
79
|
+
f_time_in_database = BlackStack::Timezone.descToFloat(s_time_in_database)
|
80
|
+
s = BlackStack::Timezone.getDatabaseOffset()
|
81
|
+
x = BlackStack::Timezone.descToFloat(s) # database offset
|
82
|
+
y = self.offset # client offset
|
83
|
+
z = y - x
|
84
|
+
return BlackStack::Timezone.floatToDesc((f_time_in_database.to_f - z.to_f).modulo(24))
|
85
|
+
end
|
86
|
+
|
87
|
+
# Convierte una fecha-hora almacenada en el servidor de bases de datos, a la hora en esta zona horaria.
|
88
|
+
# Recibe un string con formato "YYYY-MM-DD HH:MM:SS".
|
89
|
+
# Retorna un string con formato "YYYY-MM-DD HH:MM:SS".
|
90
|
+
def convertFromDatabaseDateTimeToThisTimeZone(s_datetime_in_database)
|
91
|
+
s = BlackStack::Timezone.getDatabaseOffset() # Example: '-03:00'
|
92
|
+
#puts ""
|
93
|
+
#puts ""
|
94
|
+
#puts "s:#{s.to_s}:."
|
95
|
+
#puts ""
|
96
|
+
#puts ""
|
97
|
+
x = BlackStack::Timezone.descToFloat(s) # database offset. Number of hours, with decimals
|
98
|
+
#puts ""
|
99
|
+
#puts ""
|
100
|
+
#puts "x:#{x.to_s}:."
|
101
|
+
#puts ""
|
102
|
+
#puts ""
|
103
|
+
y = self.offset # client offset
|
104
|
+
#puts ""
|
105
|
+
#puts ""
|
106
|
+
#puts "y:#{y.to_s}:."
|
107
|
+
#puts ""
|
108
|
+
#puts ""
|
109
|
+
z = y - x
|
110
|
+
#puts ""
|
111
|
+
#puts ""
|
112
|
+
#puts "z:#{z.to_s}:."
|
113
|
+
#puts ""
|
114
|
+
#puts ""
|
115
|
+
ret = DB["SELECT DATEADD(HH, #{z.to_s}, '#{s_datetime_in_database}') AS o"].first[:o].to_s[0..18]
|
116
|
+
#puts ""
|
117
|
+
#puts ""
|
118
|
+
#puts "convertFromDatabaseDateTimeToThisTimeZone:#{ret}:."
|
119
|
+
#puts ""
|
120
|
+
#puts ""
|
121
|
+
|
122
|
+
return ret
|
123
|
+
end
|
124
|
+
|
125
|
+
#
|
126
|
+
def get_now()
|
127
|
+
datetime1 = DB["SELECT GETDATE() AS o"].first[:o].to_s[0..18]
|
128
|
+
datetime2 = self.convertFromDatabaseDateTimeToThisTimeZone(datetime1)
|
129
|
+
#puts ""
|
130
|
+
#puts ""
|
131
|
+
#puts "timezone:#{self.large_description}:."
|
132
|
+
#puts "datetime1:#{datetime1}:."
|
133
|
+
#puts "datetime2:#{datetime2}:."
|
134
|
+
#puts ""
|
135
|
+
#puts ""
|
136
|
+
yy = datetime2[0..3] # yyyy-mm-dd hh:mi:ss
|
137
|
+
mm = datetime2[5..6]
|
138
|
+
dd = datetime2[8..9]
|
139
|
+
hh = datetime2[11..12]
|
140
|
+
mi = datetime2[14..15]
|
141
|
+
ss = datetime2[17..18]
|
142
|
+
#puts ""
|
143
|
+
#puts ""
|
144
|
+
#puts "get_now:#{yy}-#{mm}-#{dd} #{hh}:#{mi}:#{ss}:."
|
145
|
+
#puts ""
|
146
|
+
#puts ""
|
147
|
+
return Time.new(yy,mm,dd,hh,mi,ss)
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
end # module BlackStack
|
data/lib/user.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
module BlackStack
|
2
|
+
class User < Sequel::Model(:user)
|
3
|
+
BlackStack::User.dataset = BlackStack::User.dataset.disable_insert_output
|
4
|
+
many_to_one :client, :class=>:'BlackStack::Client', :key=>:id_client
|
5
|
+
one_to_many :user_roles, :class=>:'BlackStack::UserRole', :key=>:id_user
|
6
|
+
|
7
|
+
# TODO: agregar todos los arrays de un usuario
|
8
|
+
# => one_to_many :searches, :class=>:Search, :key=>:id_user
|
9
|
+
# => one_to_many :emlist, :class=>:EmList, :key=>:id_user
|
10
|
+
# => one_to_many :emlist, :class=>:EmList, :key=>:id_user
|
11
|
+
# => etc.
|
12
|
+
|
13
|
+
# retorna la primera division habilitada a la que pertenezca este usuario
|
14
|
+
def division
|
15
|
+
row = DB[
|
16
|
+
"SELECT d.id " +
|
17
|
+
"FROM division d WITH (NOLOCK) " +
|
18
|
+
"JOIN user_division ud WITH (NOLOCK) ON (d.id=ud.id_division AND ud.id_user='#{self.id}') " +
|
19
|
+
"WHERE ISNULL(d.available,0) = 1 "
|
20
|
+
].first
|
21
|
+
return nil if row.nil?
|
22
|
+
return BlackStack::Division.where(:id=>row[:id]).first if !row.nil?
|
23
|
+
end
|
24
|
+
end # class User
|
25
|
+
end # module BlackStack
|
data/lib/userdivision.rb
ADDED
data/lib/userrole.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
module BlackStack
|
2
|
+
class UserRole < Sequel::Model(:user_role)
|
3
|
+
BlackStack::UserRole.dataset = BlackStack::UserRole.dataset.disable_insert_output
|
4
|
+
many_to_one :user, :class=>:'BlackStack::User', :key=>:id_user
|
5
|
+
many_to_one :role, :class=>:'BlackStack::Role', :key=>:id_role
|
6
|
+
|
7
|
+
end
|
8
|
+
end # module BlackStack
|
data/lib/worker.rb
ADDED
@@ -0,0 +1,154 @@
|
|
1
|
+
module BlackStack
|
2
|
+
|
3
|
+
#
|
4
|
+
class WorkerJob < Sequel::Model(:workerjob)
|
5
|
+
|
6
|
+
end
|
7
|
+
|
8
|
+
#
|
9
|
+
class Worker < Sequel::Model(:worker)
|
10
|
+
include BlackStack::BaseWorker
|
11
|
+
BlackStack::Worker.dataset = BlackStack::Worker.dataset.disable_insert_output
|
12
|
+
many_to_one :division, :class=>:'BlackStack::Division', :key=>:id_division
|
13
|
+
many_to_one :user, :class=>:'BlackStack::User', :key=>:id_user
|
14
|
+
many_to_one :client, :class=>:'BlackStack::Client', :key=>:id_client
|
15
|
+
many_to_one :owner, :class=>:'BlackStack::Client', :key=>:id_client_owner
|
16
|
+
many_to_one :host, :class=>:'BlackStack::LocalHost', :key=>:id_host
|
17
|
+
many_to_one :current_job, :class=>:'BlackStack::WorkerJob', :key=>:id_workerjob
|
18
|
+
many_to_one :lnuser, :class=>:'BlackStack::LnUser', :key=>:id_lnuser
|
19
|
+
many_to_one :proxy, :class=>:'BlackStack::Proxy', :key=>:id_proxy
|
20
|
+
|
21
|
+
# Usage seconds of all the workers assigned to the client.
|
22
|
+
# Note that the same worker may has been assigned to different clients withing the same timeframe.
|
23
|
+
# This method will sum the seconds used by this client only
|
24
|
+
def self.client_usage_seconds(id_client, period='M', units=1)
|
25
|
+
row = DB[
|
26
|
+
"select datediff(ss, dateadd(#{period}#{period}, -#{units.to_s}, getdate()), getdate()) as total_seconds, isnull(sum(datediff(ss, j.job_start_time, j.job_end_time)), 0) as used_seconds " +
|
27
|
+
"from workerjob j with (nolock) " +
|
28
|
+
"where j.id_client = '#{id_client}' " +
|
29
|
+
"and j.create_time > dateadd(#{period}#{period}, -#{units.to_s}, getdate()) " +
|
30
|
+
"and j.job_start_time is not null " +
|
31
|
+
"and j.job_end_time is not null "
|
32
|
+
].first
|
33
|
+
row[:used_seconds].to_f
|
34
|
+
end
|
35
|
+
|
36
|
+
# Average usage ratio of all the workers assigned to the client.
|
37
|
+
# Note that the same worker may has been assigned to different clients withing the same timeframe.
|
38
|
+
# This method will compute the seconds used by this client only, over the total timeframe.
|
39
|
+
def self.client_usage_ratio(id_client, period='M', units=1)
|
40
|
+
#
|
41
|
+
row = DB[
|
42
|
+
"select count(*) as total_workers " +
|
43
|
+
"from worker w with (nolock) " +
|
44
|
+
"where w.id_client = '#{id_client}' "
|
45
|
+
].first
|
46
|
+
t = row[:total_workers].to_f
|
47
|
+
|
48
|
+
#
|
49
|
+
row = DB[
|
50
|
+
"select datediff(ss, dateadd(#{period}#{period}, -#{units.to_s}, getdate()), getdate()) as total_seconds, isnull(sum(datediff(ss, j.job_start_time, j.job_end_time)), 0) as used_seconds " +
|
51
|
+
"from workerjob j with (nolock) " +
|
52
|
+
"where j.id_client = '#{id_client}' " +
|
53
|
+
"and j.create_time > dateadd(#{period}#{period}, -#{units.to_s}, getdate()) " +
|
54
|
+
"and j.job_start_time is not null " +
|
55
|
+
"and j.job_end_time is not null "
|
56
|
+
].first
|
57
|
+
|
58
|
+
#
|
59
|
+
x = row[:used_seconds].to_f
|
60
|
+
y = row[:total_seconds].to_f
|
61
|
+
100.to_f * ( x / t ) / y
|
62
|
+
end
|
63
|
+
|
64
|
+
# Usage ratio this worker by this client.
|
65
|
+
# Note that the same worker may has been assigned to different clients withing the same timeframe.
|
66
|
+
# This method will sum the seconds used by this client only.
|
67
|
+
def usage_seconds(id_client, period='M', units=1)
|
68
|
+
row = DB[
|
69
|
+
"select datediff(ss, dateadd(#{period}#{period}, -#{units.to_s}, getdate()), getdate()) as total_seconds, isnull(sum(datediff(ss, j.job_start_time, j.job_end_time)), 0) as used_seconds " +
|
70
|
+
"from workerjob j with (nolock) " +
|
71
|
+
"where j.id_client = '#{id_client}' " +
|
72
|
+
"and j.id_worker = '#{self.id}' " +
|
73
|
+
"and j.create_time > dateadd(#{period}#{period}, -#{units.to_s}, getdate()) " +
|
74
|
+
"and j.job_start_time is not null " +
|
75
|
+
"and j.job_end_time is not null "
|
76
|
+
].first
|
77
|
+
row[:used_seconds].to_f
|
78
|
+
end
|
79
|
+
|
80
|
+
# Usage ratio this worker by this client.
|
81
|
+
# Note that the same worker may has been assigned to different clients withing the same timeframe.
|
82
|
+
# This method will compute the seconds used by this client only, over the total timeframe.
|
83
|
+
def usage_ratio(id_client, period='M', units=1)
|
84
|
+
row = DB[
|
85
|
+
"select datediff(ss, dateadd(#{period}#{period}, -#{units.to_s}, getdate()), getdate()) as total_seconds, isnull(sum(datediff(ss, j.job_start_time, j.job_end_time)), 0) as used_seconds " +
|
86
|
+
"from workerjob j with (nolock) " +
|
87
|
+
"where j.id_client = '#{id_client}' " +
|
88
|
+
"and j.id_worker = '#{self.id}' " +
|
89
|
+
"and j.create_time > dateadd(#{period}#{period}, -#{units.to_s}, getdate()) " +
|
90
|
+
"and j.job_start_time is not null " +
|
91
|
+
"and j.job_end_time is not null "
|
92
|
+
].first
|
93
|
+
x = row[:used_seconds].to_f
|
94
|
+
y = row[:total_seconds].to_f
|
95
|
+
100.to_f * x / y
|
96
|
+
end
|
97
|
+
|
98
|
+
#
|
99
|
+
def self.create(h)
|
100
|
+
w = BlackStack::Worker.where(:name=>h['name']).first
|
101
|
+
if w.nil?
|
102
|
+
w = BlackStack::Worker.new
|
103
|
+
w.id = h['id']
|
104
|
+
end
|
105
|
+
w.name = h['name']
|
106
|
+
w.process = h['process']
|
107
|
+
w.last_ping_time = h['last_ping_time']
|
108
|
+
w.assigned_process = h['assigned_process']
|
109
|
+
w.id_client = h['id_client']
|
110
|
+
w.id_division = h['id_division']
|
111
|
+
w.division_name = h['division_name']
|
112
|
+
w.save
|
113
|
+
end
|
114
|
+
|
115
|
+
#
|
116
|
+
def to_hash
|
117
|
+
h = {}
|
118
|
+
h['id'] = self.id
|
119
|
+
h['name'] = self.name
|
120
|
+
h['process'] = self.process
|
121
|
+
h['last_ping_time'] = self.last_ping_time
|
122
|
+
h['assigned_process'] = self.assigned_process
|
123
|
+
h['id_client'] = self.id_client
|
124
|
+
h['id_division'] = self.id_division
|
125
|
+
h['division_name'] = self.division_name
|
126
|
+
h
|
127
|
+
end
|
128
|
+
|
129
|
+
# Retorna true si este worker esta corriendo en nuestros propios servidores,
|
130
|
+
# Retorna false si este worker esta correiendo en otro host, asumiendo que es el host del cliente.
|
131
|
+
# Comparando la pulic_ip_address del worer con la lista en BlackStack::Pampa::set_farm_external_ip_addresses.
|
132
|
+
def hosted?
|
133
|
+
BlackStack::Pampa::farm_external_ip_addresses.include?(self.public_ip_address)
|
134
|
+
end # hosted?
|
135
|
+
|
136
|
+
# Retorna la cantidad de minutos desde que este worker envio una senial de vida.
|
137
|
+
# Este metodo se usa para saber si un worker esta activo o no.
|
138
|
+
def last_ping_minutes()
|
139
|
+
q = "SELECT DATEDIFF(mi, p.last_ping_time, getdate()) AS minutes FROM worker p WHERE p.id='#{self.id}'"
|
140
|
+
return DB[q].first[:minutes].to_i
|
141
|
+
end
|
142
|
+
|
143
|
+
# returns true if this worker had got a ping within the last 5 minutes
|
144
|
+
def active?
|
145
|
+
self.last_ping_minutes < BlackStack::BaseWorker::KEEP_ACTIVE_MINUTES
|
146
|
+
end
|
147
|
+
|
148
|
+
# envia una senial de vida a la division
|
149
|
+
def ping()
|
150
|
+
DB.execute("UPDATE worker SET last_ping_time=GETDATE() WHERE id='#{self.id}'")
|
151
|
+
end
|
152
|
+
end # class Worker
|
153
|
+
|
154
|
+
end # module BlackStack
|
metadata
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pampa_workers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Leandro Daniel Sardi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-02-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: websocket
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.2.8
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.2.8
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.2.8
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.2.8
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: json
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 1.8.1
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.8.1
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 1.8.1
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.8.1
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: tiny_tds
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 1.0.5
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 1.0.5
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.0.5
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 1.0.5
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: sequel
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 4.28.0
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 4.28.0
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 4.28.0
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 4.28.0
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: simple_host_monitoring
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 1.1.1
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 1.1.1
|
103
|
+
type: :runtime
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.1.1
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 1.1.1
|
113
|
+
description: 'THIS GEM IS STILL IN DEVELOPMENT STAGE. Find documentation here: https://github.com/leandrosardi/pampa.'
|
114
|
+
email: leandro.sardi@expandedventure.com
|
115
|
+
executables: []
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files: []
|
118
|
+
files:
|
119
|
+
- lib/basedivision.rb
|
120
|
+
- lib/baseworker.rb
|
121
|
+
- lib/client.rb
|
122
|
+
- lib/division.rb
|
123
|
+
- lib/login.rb
|
124
|
+
- lib/mybotprocess.rb
|
125
|
+
- lib/mychildprocess.rb
|
126
|
+
- lib/mycrawlprocess.rb
|
127
|
+
- lib/mylocalprocess.rb
|
128
|
+
- lib/myparentprocess.rb
|
129
|
+
- lib/myprocess.rb
|
130
|
+
- lib/myremoteprocess.rb
|
131
|
+
- lib/pampa-local.rb
|
132
|
+
- lib/pampa_workers.rb
|
133
|
+
- lib/params.rb
|
134
|
+
- lib/remotedivision.rb
|
135
|
+
- lib/remoteworker.rb
|
136
|
+
- lib/role.rb
|
137
|
+
- lib/timezone.rb
|
138
|
+
- lib/user.rb
|
139
|
+
- lib/userdivision.rb
|
140
|
+
- lib/userrole.rb
|
141
|
+
- lib/worker.rb
|
142
|
+
homepage: https://rubygems.org/gems/pampa_workers
|
143
|
+
licenses:
|
144
|
+
- MIT
|
145
|
+
metadata: {}
|
146
|
+
post_install_message:
|
147
|
+
rdoc_options: []
|
148
|
+
require_paths:
|
149
|
+
- lib
|
150
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '0'
|
155
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
requirements: []
|
161
|
+
rubyforge_project:
|
162
|
+
rubygems_version: 2.4.5.1
|
163
|
+
signing_key:
|
164
|
+
specification_version: 4
|
165
|
+
summary: THIS GEM IS STILL IN DEVELOPMENT STAGE. Ruby library for distributing computing,
|
166
|
+
supporting dynamic reconfiguration, distribution of the computation jobs, error
|
167
|
+
handling, job-retry and fault tolerance, fast (non-direct) communication to ensure
|
168
|
+
real-time capabilities.
|
169
|
+
test_files: []
|