forcast 0.0.110
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/.gitignore +1 -0
- data/COPYRIGHTS +11 -0
- data/Gemfile +22 -0
- data/Gemfile.lock +166 -0
- data/PENDIENTES +39 -0
- data/README.md +35 -0
- data/Rakefile +7 -0
- data/VERSION +1 -0
- data/bin/console +14 -0
- data/bin/rake +28 -0
- data/bin/setup +8 -0
- data/forcast.gemspec +73 -0
- data/lib/forcast.rb +5 -0
- data/lib/forcast/controllers/all.rb +2 -0
- data/lib/forcast/controllers/application/all.rb +12 -0
- data/lib/forcast/controllers/application/crud.rb +91 -0
- data/lib/forcast/controllers/application/database.rb +34 -0
- data/lib/forcast/controllers/application/error.rb +18 -0
- data/lib/forcast/controllers/application/exception_handler.rb +25 -0
- data/lib/forcast/controllers/application/json.rb +83 -0
- data/lib/forcast/controllers/application/locale.rb +30 -0
- data/lib/forcast/controllers/application/log.rb +22 -0
- data/lib/forcast/controllers/application/login.rb +41 -0
- data/lib/forcast/controllers/application/meta.rb +61 -0
- data/lib/forcast/controllers/application/model.rb +17 -0
- data/lib/forcast/controllers/application/permitirtodo.rb +27 -0
- data/lib/forcast/controllers/application/utils.rb +28 -0
- data/lib/forcast/controllers/controller/all.rb +8 -0
- data/lib/forcast/controllers/controller/asociar.rb +121 -0
- data/lib/forcast/controllers/controller/busqueda.rb +151 -0
- data/lib/forcast/controllers/controller/definitor/definitor.rb +322 -0
- data/lib/forcast/controllers/controller/definitor/definitor_page.rb +40 -0
- data/lib/forcast/controllers/controller/definitor_all.rb +2 -0
- data/lib/forcast/controllers/controller/filtro.rb +48 -0
- data/lib/forcast/controllers/controller/login/controllers/base_controller.rb +135 -0
- data/lib/forcast/controllers/controller/login/controllers/login_controller.rb +38 -0
- data/lib/forcast/controllers/controller/login/login.rb +71 -0
- data/lib/forcast/controllers/controller/login_all.rb +1 -0
- data/lib/forcast/controllers/controller/paper_trail/paper_trail.rb +21 -0
- data/lib/forcast/controllers/controller/paper_trail_all.rb +1 -0
- data/lib/forcast/controllers/controller/relacion.rb +157 -0
- data/lib/forcast/controllers/controller/rule_engine/action_engine.rb +92 -0
- data/lib/forcast/controllers/controller/rule_engine/controllers/action_logs_controller.rb +12 -0
- data/lib/forcast/controllers/controller/rule_engine/controllers/actions_controller.rb +10 -0
- data/lib/forcast/controllers/controller/rule_engine/controllers/pollings_controller.rb +13 -0
- data/lib/forcast/controllers/controller/rule_engine/controllers/rule_logs_controller.rb +12 -0
- data/lib/forcast/controllers/controller/rule_engine/controllers/rules_controller.rb +19 -0
- data/lib/forcast/controllers/controller/rule_engine/controllers/webhooks_controller.rb +27 -0
- data/lib/forcast/controllers/controller/rule_engine/polling_engine.rb +76 -0
- data/lib/forcast/controllers/controller/rule_engine/rule_controller.rb +27 -0
- data/lib/forcast/controllers/controller/rule_engine/rule_engine.rb +88 -0
- data/lib/forcast/controllers/controller/rule_engine/webhook_engine.rb +38 -0
- data/lib/forcast/controllers/controller/rule_engine_all.rb +5 -0
- data/lib/forcast/jobs/all.rb +2 -0
- data/lib/forcast/jobs/jobs_assets.rb +25 -0
- data/lib/forcast/jobs/jobs_wrapper.rb +25 -0
- data/lib/forcast/jobs/rule_engine/jobs_actions.rb +73 -0
- data/lib/forcast/jobs/rule_engine/jobs_pollings.rb +77 -0
- data/lib/forcast/jobs/rule_engine/jobs_webhooks.rb +54 -0
- data/lib/forcast/migrations/0_migracion_general.rb +44 -0
- data/lib/forcast/migrations/paper_trail/versions.rb +61 -0
- data/lib/forcast/migrations/rule_engine/action_logs.rb +15 -0
- data/lib/forcast/migrations/rule_engine/actions.rb +15 -0
- data/lib/forcast/migrations/rule_engine/pollings.rb +26 -0
- data/lib/forcast/migrations/rule_engine/rule_logs.rb +22 -0
- data/lib/forcast/migrations/rule_engine/rules.rb +27 -0
- data/lib/forcast/migrations/rule_engine/webhooks.rb +25 -0
- data/lib/forcast/models/all.rb +8 -0
- data/lib/forcast/models/asociar.rb +74 -0
- data/lib/forcast/models/busqueda.rb +17 -0
- data/lib/forcast/models/login/authorization.rb +37 -0
- data/lib/forcast/models/login/json_web_token.rb +15 -0
- data/lib/forcast/models/login/login.rb +26 -0
- data/lib/forcast/models/login_all.rb +2 -0
- data/lib/forcast/models/meta.rb +19 -0
- data/lib/forcast/models/modelo.rb +125 -0
- data/lib/forcast/models/models/meta.rb +6 -0
- data/lib/forcast/models/paper_trail/paper_trail.rb +13 -0
- data/lib/forcast/models/paper_trail_all.rb +1 -0
- data/lib/forcast/models/permitirtodo.rb +57 -0
- data/lib/forcast/models/rule_engine/action_engine.rb +19 -0
- data/lib/forcast/models/rule_engine/models/action.rb +41 -0
- data/lib/forcast/models/rule_engine/models/action_log.rb +40 -0
- data/lib/forcast/models/rule_engine/models/polling.rb +43 -0
- data/lib/forcast/models/rule_engine/models/rule.rb +44 -0
- data/lib/forcast/models/rule_engine/models/rule_log.rb +39 -0
- data/lib/forcast/models/rule_engine/models/webhook.rb +43 -0
- data/lib/forcast/models/rule_engine/polling_engine.rb +113 -0
- data/lib/forcast/models/rule_engine/rule.rb +62 -0
- data/lib/forcast/models/rule_engine/rule_engine.rb +137 -0
- data/lib/forcast/models/rule_engine/rule_scope.rb +35 -0
- data/lib/forcast/models/rule_engine/webhook_engine.rb +55 -0
- data/lib/forcast/models/rule_engine_all.rb +6 -0
- data/lib/forcast/routes/concerns/asociar.rb +15 -0
- data/lib/forcast/routes/concerns/buscar.rb +6 -0
- data/lib/forcast/routes/concerns/definitor.rb +3 -0
- data/lib/forcast/routes/concerns/modelo.rb +6 -0
- data/lib/forcast/routes/database.rb +4 -0
- data/lib/forcast/routes/login.rb +4 -0
- data/lib/forcast/routes/paper_trail/paper_trail.rb +3 -0
- data/lib/forcast/routes/rule_engine/rule.rb +5 -0
- data/lib/forcast/tasks/.giosaveZr0hbs +21 -0
- data/lib/forcast/tasks/.keep +0 -0
- data/lib/forcast/tasks/all.rb +16 -0
- data/lib/forcast/tasks/diagramas.rake +32 -0
- data/lib/forcast/tasks/documentation/documentation.rb +100 -0
- data/lib/forcast/tasks/env.rake +10 -0
- data/lib/forcast/tasks/git.rake +22 -0
- data/lib/forcast/tasks/indy/indy.rb +28 -0
- data/lib/forcast/tasks/logs.rake +13 -0
- data/lib/forcast/tasks/process.rake +18 -0
- data/lib/forcast/tasks/schema.rake +17 -0
- data/lib/forcast/tasks/schema/recips/action.rb +18 -0
- data/lib/forcast/tasks/schema/recips/controller.rb +29 -0
- data/lib/forcast/tasks/schema/recips/definitor.rb +38 -0
- data/lib/forcast/tasks/schema/recips/model.rb +43 -0
- data/lib/forcast/tasks/schema/recips/project.rb +19 -0
- data/lib/forcast/tasks/schema/recips/route.rb +9 -0
- data/lib/forcast/tasks/schema/recips/tmp/controller.rb +0 -0
- data/lib/forcast/tasks/schema/recips/tmp/model.rb +0 -0
- data/lib/forcast/tasks/schema/recips/tmp/model/.keep +0 -0
- data/lib/forcast/tasks/schema/rule_engine/rule_engine.rb +98 -0
- data/lib/forcast/tasks/schema/schema.rb +346 -0
- data/lib/forcast/tasks/test.rake +129 -0
- data/lib/forcast/tasks/utils.rake +68 -0
- data/lib/forcast/tasks/yard.rake +18 -0
- data/lib/forcast/utils/all.rb +4 -0
- data/lib/forcast/utils/email.rb +49 -0
- data/lib/forcast/utils/email/forcast/utils/email/layout/default.html.erb +3 -0
- data/lib/forcast/utils/email/forcast/utils/email/layout/default.text.erb +5 -0
- data/lib/forcast/utils/firebase.rb +60 -0
- data/lib/forcast/utils/firebase_database.rb +117 -0
- data/lib/forcast/utils/measure.rb +44 -0
- data/lib/forcast/utils/qvo.rb +141 -0
- data/lib/forcast/utils/server.rb +296 -0
- data/lib/forcast/utils/telegram.rb +82 -0
- data/lib/forcast/utils/thing.rb +180 -0
- data/lib/forcast/version.rb +15 -0
- data/lib/lib/backup.rb +42 -0
- data/lib/lib/deploy.sh +40 -0
- data/lib/lib/forcast_servidor_rails.sh +11 -0
- data/lib/lib/pg_generator.sh +10 -0
- data/lib/lib/production.rb +66 -0
- data/lib/lib/production/production.rb +30 -0
- data/lib/lib/systemctl_maker.rb +88 -0
- data/lib/lib/update.rb +100 -0
- data/production.rb +31 -0
- metadata +301 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
class Action < ApplicationRecord
|
|
2
|
+
belongs_to :rule
|
|
3
|
+
has_many :action_log
|
|
4
|
+
include Forcast::Model::Modelo
|
|
5
|
+
include Forcast::Model::Permitirtodo
|
|
6
|
+
include Forcast::Model::RuleEngine::ActionEngine
|
|
7
|
+
def init(params)
|
|
8
|
+
#self.password=(params['password_hash'])
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.parametros_necesario_create
|
|
12
|
+
array = []
|
|
13
|
+
return array
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.parametros_a_validar_modelo_create
|
|
17
|
+
#return parametros_a_validar_modelo_create = [{:param => 'tipo_valor', :validacion => 'validaciones_tipo_valor', :error => :bad_param_not_allow_type}]
|
|
18
|
+
return parametros_a_validar_modelo_create = []
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.parametros_a_validar_modelo_update
|
|
22
|
+
#return parametros_a_validar_modelo_update = [{:param => 'tipo_valor', :validacion => 'validaciones_tipo_valor', :error => :bad_param_not_allow_type}]
|
|
23
|
+
return parametros_a_validar_modelo_update = []
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.parametros_permitido_asociar
|
|
27
|
+
return parametros_permitido_asociar = []
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.parametros_a_comprobar_si_existen_create
|
|
31
|
+
return parametros_a_comprobar_si_existen_create = []
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def self.parametros_a_comprobar_si_existen_update
|
|
35
|
+
return parametros_a_comprobar_si_existen_update = []
|
|
36
|
+
end
|
|
37
|
+
# def self.validaciones_tipo_valor(valor)
|
|
38
|
+
# return true unless ['string','integer','decimal'].include?(valor)
|
|
39
|
+
# end
|
|
40
|
+
end
|
|
41
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
class ActionLog < ApplicationRecord
|
|
2
|
+
belongs_to :action
|
|
3
|
+
include Forcast::Model::Modelo
|
|
4
|
+
include Forcast::Model::Permitirtodo
|
|
5
|
+
def init(params)
|
|
6
|
+
#self.password=(params['password_hash'])
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.parametros_necesario_create
|
|
10
|
+
array = []
|
|
11
|
+
return array
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.parametros_a_validar_modelo_create
|
|
15
|
+
#return parametros_a_validar_modelo_create = [{:param => 'tipo_valor', :validacion => 'validaciones_tipo_valor', :error => :bad_param_not_allow_type}]
|
|
16
|
+
return parametros_a_validar_modelo_create = []
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.parametros_a_validar_modelo_update
|
|
20
|
+
#return parametros_a_validar_modelo_update = [{:param => 'tipo_valor', :validacion => 'validaciones_tipo_valor', :error => :bad_param_not_allow_type}]
|
|
21
|
+
return parametros_a_validar_modelo_update = []
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.parametros_permitido_asociar
|
|
25
|
+
return parametros_permitido_asociar = []
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.parametros_a_comprobar_si_existen_create
|
|
29
|
+
return parametros_a_comprobar_si_existen_create = []
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.parametros_a_comprobar_si_existen_update
|
|
33
|
+
return parametros_a_comprobar_si_existen_update = []
|
|
34
|
+
end
|
|
35
|
+
# def self.validaciones_tipo_valor(valor)
|
|
36
|
+
# return true unless ['string','integer','decimal'].include?(valor)
|
|
37
|
+
# end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
class Polling < ApplicationRecord
|
|
2
|
+
|
|
3
|
+
belongs_to :rule
|
|
4
|
+
include Forcast::Model::Modelo
|
|
5
|
+
include Forcast::Model::Permitirtodo
|
|
6
|
+
include Forcast::Model::RuleEngine::PollingEngine
|
|
7
|
+
|
|
8
|
+
def init(params)
|
|
9
|
+
#self.password=(params['password_hash'])
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.parametros_necesario_create
|
|
13
|
+
array = []
|
|
14
|
+
return array
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.parametros_a_validar_modelo_create
|
|
18
|
+
#return parametros_a_validar_modelo_create = [{:param => 'tipo_valor', :validacion => 'validaciones_tipo_valor', :error => :bad_param_not_allow_type}]
|
|
19
|
+
return parametros_a_validar_modelo_create = []
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.parametros_a_validar_modelo_update
|
|
23
|
+
#return parametros_a_validar_modelo_update = [{:param => 'tipo_valor', :validacion => 'validaciones_tipo_valor', :error => :bad_param_not_allow_type}]
|
|
24
|
+
return parametros_a_validar_modelo_update = []
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.parametros_permitido_asociar
|
|
28
|
+
return parametros_permitido_asociar = []
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.parametros_a_comprobar_si_existen_create
|
|
32
|
+
return parametros_a_comprobar_si_existen_create = []
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.parametros_a_comprobar_si_existen_update
|
|
36
|
+
return parametros_a_comprobar_si_existen_update = []
|
|
37
|
+
end
|
|
38
|
+
# def self.validaciones_tipo_valor(valor)
|
|
39
|
+
# return true unless ['string','integer','decimal'].include?(valor)
|
|
40
|
+
# end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
class Rule < ApplicationRecord
|
|
2
|
+
has_many :webhook
|
|
3
|
+
has_many :polling
|
|
4
|
+
has_many :action
|
|
5
|
+
has_many :rule_log
|
|
6
|
+
include Forcast::Model::Modelo
|
|
7
|
+
include Forcast::Model::Permitirtodo
|
|
8
|
+
include Forcast::Model::RuleEngine::RuleScope
|
|
9
|
+
include Forcast::Model::RuleEngine::RuleEngine
|
|
10
|
+
|
|
11
|
+
def init(params)
|
|
12
|
+
# self.password=(params['password_hash'])
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.parametros_necesario_create
|
|
16
|
+
[]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.parametros_a_validar_modelo_create
|
|
20
|
+
# [{:param => 'tipo_valor', :validacion => 'validaciones_tipo_valor', :error => :bad_param_not_allow_type}]
|
|
21
|
+
[]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.parametros_a_validar_modelo_update
|
|
25
|
+
# [{:param => 'tipo_valor', :validacion => 'validaciones_tipo_valor', :error => :bad_param_not_allow_type}]
|
|
26
|
+
[]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.parametros_permitido_asociar
|
|
30
|
+
[]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def self.parametros_a_comprobar_si_existen_create
|
|
34
|
+
[]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.parametros_a_comprobar_si_existen_update
|
|
38
|
+
[]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# def self.validaciones_tipo_valor(valor)
|
|
42
|
+
# return true unless ['string','integer','decimal'].include?(valor)
|
|
43
|
+
# end
|
|
44
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
class RuleLog < ApplicationRecord
|
|
2
|
+
belongs_to :rule
|
|
3
|
+
include Forcast::Model::Modelo
|
|
4
|
+
include Forcast::Model::Permitirtodo
|
|
5
|
+
def init(params)
|
|
6
|
+
#self.password=(params['password_hash'])
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.parametros_necesario_create
|
|
10
|
+
array = []
|
|
11
|
+
return array
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.parametros_a_validar_modelo_create
|
|
15
|
+
#return parametros_a_validar_modelo_create = [{:param => 'tipo_valor', :validacion => 'validaciones_tipo_valor', :error => :bad_param_not_allow_type}]
|
|
16
|
+
return parametros_a_validar_modelo_create = []
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.parametros_a_validar_modelo_update
|
|
20
|
+
#return parametros_a_validar_modelo_update = [{:param => 'tipo_valor', :validacion => 'validaciones_tipo_valor', :error => :bad_param_not_allow_type}]
|
|
21
|
+
return parametros_a_validar_modelo_update = []
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.parametros_permitido_asociar
|
|
25
|
+
return parametros_permitido_asociar = []
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.parametros_a_comprobar_si_existen_create
|
|
29
|
+
return parametros_a_comprobar_si_existen_create = []
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.parametros_a_comprobar_si_existen_update
|
|
33
|
+
return parametros_a_comprobar_si_existen_update = []
|
|
34
|
+
end
|
|
35
|
+
# def self.validaciones_tipo_valor(valor)
|
|
36
|
+
# return true unless ['string','integer','decimal'].include?(valor)
|
|
37
|
+
# end
|
|
38
|
+
end
|
|
39
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
class Webhook < ApplicationRecord
|
|
2
|
+
|
|
3
|
+
belongs_to :rule
|
|
4
|
+
include Forcast::Model::Modelo
|
|
5
|
+
include Forcast::Model::Permitirtodo
|
|
6
|
+
include Forcast::Model::RuleEngine::WebhookEngine
|
|
7
|
+
|
|
8
|
+
def init(params)
|
|
9
|
+
#self.password=(params['password_hash'])
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.parametros_necesario_create
|
|
13
|
+
array = []
|
|
14
|
+
return array
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.parametros_a_validar_modelo_create
|
|
18
|
+
#return parametros_a_validar_modelo_create = [{:param => 'tipo_valor', :validacion => 'validaciones_tipo_valor', :error => :bad_param_not_allow_type}]
|
|
19
|
+
return parametros_a_validar_modelo_create = []
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.parametros_a_validar_modelo_update
|
|
23
|
+
#return parametros_a_validar_modelo_update = [{:param => 'tipo_valor', :validacion => 'validaciones_tipo_valor', :error => :bad_param_not_allow_type}]
|
|
24
|
+
return parametros_a_validar_modelo_update = []
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.parametros_permitido_asociar
|
|
28
|
+
return parametros_permitido_asociar = []
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.parametros_a_comprobar_si_existen_create
|
|
32
|
+
return parametros_a_comprobar_si_existen_create = []
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.parametros_a_comprobar_si_existen_update
|
|
36
|
+
return parametros_a_comprobar_si_existen_update = []
|
|
37
|
+
end
|
|
38
|
+
# def self.validaciones_tipo_valor(valor)
|
|
39
|
+
# return true unless ['string','integer','decimal'].include?(valor)
|
|
40
|
+
# end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
require 'active_support'
|
|
2
|
+
module Forcast
|
|
3
|
+
module Model
|
|
4
|
+
module RuleEngine
|
|
5
|
+
module PollingEngine
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
included do
|
|
8
|
+
def self.duplicate_object?(object)
|
|
9
|
+
return self.exists?(object)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.validate_if_work_exists_to_polling(args={})
|
|
13
|
+
found_work = logic_work_polling(args[:polling_model],args[:polling_model_id])
|
|
14
|
+
if found_work
|
|
15
|
+
puts "Work already exists"
|
|
16
|
+
else
|
|
17
|
+
puts "Push Work"
|
|
18
|
+
add_worker_to_polling(args)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.add_worker_to_polling(args={})
|
|
23
|
+
JobsPollings::AddModelPolling.perform_async(args)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.logic_work_polling(polling_model,polling_model_id)
|
|
27
|
+
work = 'JobsPollings::ValidateModelPolling'
|
|
28
|
+
scheduled = Sidekiq::ScheduledSet.new
|
|
29
|
+
scheduled_jobs = scheduled.select {|job| job.klass == work}
|
|
30
|
+
queue = Sidekiq::Queue.new("polling_queue")
|
|
31
|
+
queue_jobs = queue.select {|job| job.klass == work}
|
|
32
|
+
jobs = scheduled_jobs + queue_jobs
|
|
33
|
+
regulate_works_logic_from_pollings_actives(jobs,polling_model,polling_model_id)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self.regulate_works_logic_from_pollings_actives(jobs,polling_model,polling_model_id)
|
|
37
|
+
found_works = jobs.select {|job| job.args[0]["polling_model"]==polling_model&&job.args[0]["polling_model_id"]==polling_model_id}
|
|
38
|
+
if found_works.length > 0
|
|
39
|
+
puts "[polling] Work found "+found_works[0].args.to_s
|
|
40
|
+
return true
|
|
41
|
+
elsif found_works.length > 1
|
|
42
|
+
puts "[polling] Deleting another work found "+found_works[1].args.to_s
|
|
43
|
+
found_works[1].delete
|
|
44
|
+
return true
|
|
45
|
+
else
|
|
46
|
+
puts "[polling] Work not found "+polling_model.to_s+" "+polling_model_id.to_s
|
|
47
|
+
return false
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def validate_execute_time
|
|
53
|
+
puts "validate_execute_time"
|
|
54
|
+
execution_time = self.review_time
|
|
55
|
+
execution_time ||= 30
|
|
56
|
+
last_execution = self.last_execution
|
|
57
|
+
testing_time = last_execution + execution_time.second
|
|
58
|
+
if testing_time.to_i > Time.now.to_i
|
|
59
|
+
puts "It should not be executed"
|
|
60
|
+
self.update_columns(:execute? => false)
|
|
61
|
+
return false
|
|
62
|
+
else
|
|
63
|
+
puts "Must be executed"
|
|
64
|
+
self.update_columns(:last_execution => Time.now,
|
|
65
|
+
:execute? => true)
|
|
66
|
+
return true
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def validate_duration_time
|
|
72
|
+
puts "validate_duration_time"
|
|
73
|
+
polling_duration_time = self.duration_time
|
|
74
|
+
polling_duration_time ||= 1
|
|
75
|
+
testing_time = self.created_at + polling_duration_time.minutes
|
|
76
|
+
if testing_time.to_i < Time.now.to_i
|
|
77
|
+
self.update_columns(:active? => false)
|
|
78
|
+
puts "Duration period expire"
|
|
79
|
+
return false
|
|
80
|
+
else
|
|
81
|
+
puts "Duration period still active"
|
|
82
|
+
return true
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def validate_send_time
|
|
87
|
+
puts "validate_send_time"
|
|
88
|
+
send_time = self.send_time
|
|
89
|
+
send_time ||= 30
|
|
90
|
+
last_review_send = self.last_review_send
|
|
91
|
+
last_review_send ||= Time.now
|
|
92
|
+
testing_time = last_review_send + send_time.second
|
|
93
|
+
remain = testing_time.to_i - Time.now.to_i
|
|
94
|
+
if testing_time.to_i > Time.now.to_i
|
|
95
|
+
puts "Dont send yet, remains #{remain} seconds"
|
|
96
|
+
self.update_columns( :last_review_send => Time.now,
|
|
97
|
+
:send? => false)
|
|
98
|
+
return false
|
|
99
|
+
else
|
|
100
|
+
puts "Send now"
|
|
101
|
+
self.update_columns(:last_send => Time.now,
|
|
102
|
+
:send? => true)
|
|
103
|
+
return true
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
module Forcast
|
|
2
|
+
module Model
|
|
3
|
+
module RuleEngine
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
included do
|
|
7
|
+
after_create :send_webhook_create
|
|
8
|
+
after_update :send_webhook_update
|
|
9
|
+
after_destroy :send_webhook_destroy
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def class_polling
|
|
13
|
+
Polling.where(polling_model: self.class.name, class_polling?: true)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def class_rule
|
|
17
|
+
Rule.for_class(self.class.name)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def webhook
|
|
21
|
+
Webhook.joins(:rule).merge(rule)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def object_webhook
|
|
25
|
+
Webhook.joins(:rule).merge(Rule.for_object(self))
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def polling
|
|
29
|
+
Polling.where(polling_model: self.class.name, polling_model_id: id)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def rule
|
|
33
|
+
Rule.for_object_and_class(self)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def send_webhook_create
|
|
37
|
+
puts 'send_webhook_create'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def send_webhook_destroy
|
|
41
|
+
puts 'send_webhook_destroy'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def send_webhook_update
|
|
45
|
+
puts 'send_webhook_update'
|
|
46
|
+
JobsWebhooks::ValidateModelWebhook.perform_later(
|
|
47
|
+
webhook_model: self.class.name,
|
|
48
|
+
webhook_model_id: id,
|
|
49
|
+
changed_attrs_json: saved_changes.to_json,
|
|
50
|
+
created_at: Time.now.to_s
|
|
51
|
+
)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def currents_pollings
|
|
55
|
+
arr1 = polling.where(created_at: 4.week.ago.beginning_of_day..Time.now)
|
|
56
|
+
.where(active?: true)
|
|
57
|
+
arr2 = class_polling.where(active?: true)
|
|
58
|
+
arr2 + arr1
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
require 'active_support'
|
|
2
|
+
module Forcast
|
|
3
|
+
module Model
|
|
4
|
+
module RuleEngine
|
|
5
|
+
module RuleEngine
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
|
|
8
|
+
RULE_VALUES_MAP = {
|
|
9
|
+
string: :value_s,
|
|
10
|
+
integer: :value_i,
|
|
11
|
+
decimal: :value_d,
|
|
12
|
+
boolean: :value_b,
|
|
13
|
+
datetime: :value_t
|
|
14
|
+
}.freeze
|
|
15
|
+
|
|
16
|
+
VALID_RULE_COMPARATORS_MAP = {
|
|
17
|
+
string: %w[eql? ==],
|
|
18
|
+
integer: %w[eql? > >= < <= ==],
|
|
19
|
+
decimal: %w[eql? > >= < <= ==],
|
|
20
|
+
boolean: %w[eql? ==],
|
|
21
|
+
datetime: %w[eql? > >= < <= ==]
|
|
22
|
+
}.freeze
|
|
23
|
+
|
|
24
|
+
class_methods do
|
|
25
|
+
def validate_logic_rule(rule, value1, value2)
|
|
26
|
+
return false unless value1
|
|
27
|
+
|
|
28
|
+
value1.send(rule.to_s, value2)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def logical_calculation(arr, op)
|
|
32
|
+
case op
|
|
33
|
+
when 'and' then arr.reduce(:&)
|
|
34
|
+
when 'or' then arr.reduce(:|)
|
|
35
|
+
else
|
|
36
|
+
false
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def rule_value(rule_class)
|
|
41
|
+
RULE_VALUES_MAP[rule_class.to_sym]&.to_s || 'value_s'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def validate_rule_and_class(rule, rule_class, params)
|
|
45
|
+
return false unless RULE_VALUES_MAP[rule_class.to_sym].present?
|
|
46
|
+
|
|
47
|
+
value_name = RULE_VALUES_MAP[rule_class.to_sym]
|
|
48
|
+
params[value_name] =
|
|
49
|
+
case rule_class
|
|
50
|
+
when 'string' then params[:value].to_s
|
|
51
|
+
when 'integer' then params[:value].to_i
|
|
52
|
+
when 'decimal' then params[:value].to_f
|
|
53
|
+
when 'boolean' then params[:value]
|
|
54
|
+
when 'datetime' then params[:value].to_date
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
VALID_RULE_COMPARATORS_MAP[rule_class.to_sym].include?(rule)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def validate_class_update(rule_class)
|
|
61
|
+
RULE_VALUES_MAP[rule_class.to_sym]&.to_s || false
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def rules_allowed
|
|
65
|
+
VALID_RULE_COMPARATORS_MAP.values.flatten.uniq
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def rules_type_allowed
|
|
69
|
+
%w[logic change]
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def rules_class_allowed
|
|
73
|
+
RULE_VALUES_MAP.keys.map(&:to_s)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def valid_combine_type
|
|
77
|
+
%w[and or]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def validate_rule_duplicate(hash_new)
|
|
81
|
+
if hash_new
|
|
82
|
+
!Rule.exists?(hash_new)
|
|
83
|
+
else
|
|
84
|
+
!Rule.exists?(attr_comparable: @attr_comparable,
|
|
85
|
+
rule_model: @rule_model,
|
|
86
|
+
rule_model_id: @rule_model_id,
|
|
87
|
+
rule: @rule,
|
|
88
|
+
rule_class: @rule_class,
|
|
89
|
+
rule_type: @rule_type,
|
|
90
|
+
combine_type: @combine_type)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def validate_model_id(rule_model, rule_model_id)
|
|
95
|
+
rule_model.classify.constantize.find(rule_model_id)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def validate_attr_model(rule_model,attribute)
|
|
99
|
+
rule_model = rule_model.classify.constantize
|
|
100
|
+
return false unless rule_model.column_names.include?(attribute)
|
|
101
|
+
|
|
102
|
+
@rule_class = rule_model.columns_hash[attribute.to_s].type.to_s
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def validate_logic(object)
|
|
107
|
+
attr_comparable = self.attr_comparable
|
|
108
|
+
case rule_type
|
|
109
|
+
when 'logic'
|
|
110
|
+
value_attr_comparable = object.send(attr_comparable.to_s)
|
|
111
|
+
value_type = Rule.rule_value(rule_class)
|
|
112
|
+
value_comparable = send(value_type)
|
|
113
|
+
puts "Attr Value: #{value_attr_comparable}"
|
|
114
|
+
puts "Rule Value: #{value_comparable}"
|
|
115
|
+
validation = Rule.validate_logic_rule(rule, value_attr_comparable, value_comparable)
|
|
116
|
+
when 'change'
|
|
117
|
+
value_attr_comparable = object.send(attr_comparable.to_s)
|
|
118
|
+
last_value_attr_comparable = self.last_value_attr_comparable
|
|
119
|
+
validation = !Rule.validate_logic_rule('eql?', value_attr_comparable, last_value_attr_comparable)
|
|
120
|
+
update_columns(last_value_attr_comparable: value_attr_comparable)
|
|
121
|
+
when 'logic_comparable'
|
|
122
|
+
rules_to = Rule.where(id: rule.split(',').map(&:to_i))
|
|
123
|
+
boolean_array = []
|
|
124
|
+
rules_to.each do |rule_to|
|
|
125
|
+
boolean_array.push(validate_logic(object,rule_to))
|
|
126
|
+
end
|
|
127
|
+
validation = Rule.logical_calculation(boolean_array, combine_type)
|
|
128
|
+
else
|
|
129
|
+
validation = false
|
|
130
|
+
end
|
|
131
|
+
validation
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|