forcast 0.0.110
Sign up to get free protection for your applications and to get access to all the features.
- 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,25 @@
|
|
1
|
+
require 'sidekiq'
|
2
|
+
require 'active_job'
|
3
|
+
include Sidekiq::Worker
|
4
|
+
|
5
|
+
module Forcast
|
6
|
+
module Jobs
|
7
|
+
module JobsWrapper
|
8
|
+
class Repetitive < ActiveJob::Base
|
9
|
+
sidekiq_options queue: 'sync_repetitive'
|
10
|
+
def perform(callback,array,t,interval,unidad)
|
11
|
+
vas = eval(callback)
|
12
|
+
unidad = 'minutes' unless units.include?(unidad)
|
13
|
+
i = interval || 1
|
14
|
+
t = (t/i).round || 1
|
15
|
+
t.times do |time|
|
16
|
+
vas.perform_at(((time+1)*interval).send(unidad).from_now,array)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
def units
|
20
|
+
return ['seconds','minutes','hours','days']
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'sidekiq'
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
include Sidekiq::Worker
|
5
|
+
|
6
|
+
module JobsActions
|
7
|
+
class Actions < ActiveJob::Base
|
8
|
+
sidekiq_options queue: 'action_queue'
|
9
|
+
|
10
|
+
def perform (object_id,rule_id)
|
11
|
+
puts "SendAction"
|
12
|
+
rule = Rule.find(rule_id)
|
13
|
+
object = rule.rule_model.classify.constantize.find(object_id)
|
14
|
+
actions = rule.action.where(:active? => true)
|
15
|
+
actions.each do |action|
|
16
|
+
action_type = action.action_type
|
17
|
+
puts "Select Action #{action_type}"
|
18
|
+
begin
|
19
|
+
JobsActions::Actions.send(action_type,object,rule,action.action_params)
|
20
|
+
rescue StandardError => e
|
21
|
+
puts e
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.callback(object,rule,action_params)
|
27
|
+
puts "callback"
|
28
|
+
action_params = JSON.parse(action_params)
|
29
|
+
url = action_params["url"]
|
30
|
+
attributes = action_params["attr"]
|
31
|
+
servidor = Forcast::Utils::Server::Server.new do |config|
|
32
|
+
config.dns = url
|
33
|
+
config.connect = 1
|
34
|
+
config.write = 1
|
35
|
+
config.read = 1
|
36
|
+
#config.ssl = true
|
37
|
+
#config.headers.store("accept","application/json")
|
38
|
+
config.before_ping = false
|
39
|
+
end
|
40
|
+
model_id = object.attributes.slice(*attributes) unless attributes.include?("all")
|
41
|
+
json_send = {:data => model_id}
|
42
|
+
servidor.conexion(:post,{},"",json_send)
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.telegram(object,rule,action_params)
|
46
|
+
puts "telegram"
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.slack(object,rule,action_params)
|
50
|
+
puts "slack"
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.email(object, rule, action_params)
|
54
|
+
puts "action_params"
|
55
|
+
puts action_params
|
56
|
+
# attributes = action_params["attributes"]
|
57
|
+
# model_id_attributes = object.attributes.slice(*attributes) unless attributes.include?("all")
|
58
|
+
# model_id_attributes ||= object.attributes
|
59
|
+
|
60
|
+
obj_identifier = action_params['attr_id'] ? object.send(action_params['attr_id']) : object.id
|
61
|
+
Forcast::Utils::Email::Layout.with(
|
62
|
+
to: action_params['owner_email'], cc: action_params['target_email']
|
63
|
+
).default(
|
64
|
+
object: object, rule: rule, obj_identifier: obj_identifier
|
65
|
+
).deliver_now
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.notification(action_params); end
|
69
|
+
|
70
|
+
def self.sms(action_params); end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'sidekiq'
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
include Sidekiq::Worker
|
5
|
+
|
6
|
+
module JobsPollings
|
7
|
+
class AddModelPolling < ActiveJob::Base
|
8
|
+
sidekiq_options queue: 'polling_queue'
|
9
|
+
|
10
|
+
def perform(args={})
|
11
|
+
puts "AddModelPolling"
|
12
|
+
JobsPollings::ValidateModelPolling.perform_in(args["review_time"].to_i.send("second"),args)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class ValidateModelPolling < ActiveJob::Base
|
17
|
+
sidekiq_options queue: 'polling_queue'
|
18
|
+
|
19
|
+
def perform(args={})
|
20
|
+
puts "ValidateModelPolling"
|
21
|
+
object = c_to_m(args["polling_model"]).find(args["polling_model_id"].to_i)
|
22
|
+
#Se podria obtener lista desde el cache
|
23
|
+
pollings = object.currents_pollings
|
24
|
+
puts "Pollings: #{pollings.size}"
|
25
|
+
return if pollings.size == 0
|
26
|
+
pollings.each do |polling|
|
27
|
+
next unless polling.validate_duration_time
|
28
|
+
next unless polling.validate_execute_time
|
29
|
+
begin
|
30
|
+
rule = polling.rule
|
31
|
+
puts "polling Validate Rule #{rule.id}"
|
32
|
+
validate_rule(object,rule,polling)
|
33
|
+
rescue Exception => e
|
34
|
+
puts "Somethings where wrong: "+e.to_s
|
35
|
+
end
|
36
|
+
end
|
37
|
+
review_time = define_review_time(pollings.pluck("review_time"))
|
38
|
+
puts review_time
|
39
|
+
args = {
|
40
|
+
:polling_model => args["polling_model"],
|
41
|
+
:polling_model_id => args["polling_model_id"],
|
42
|
+
:review_time => review_time,
|
43
|
+
:pollings => pollings.size.to_s,
|
44
|
+
:created_at => args["created_at"],
|
45
|
+
:last_trigger_at => Time.now.strftime("%m/%d/%Y %H:%M"),
|
46
|
+
}
|
47
|
+
JobsPollings::ValidateModelPolling.perform_in(review_time.to_i.send(:second),args)
|
48
|
+
end
|
49
|
+
|
50
|
+
def define_review_time(pollings_times)
|
51
|
+
puts "Shorter Review Time"
|
52
|
+
min = pollings_times.min
|
53
|
+
min ||= 10
|
54
|
+
return min
|
55
|
+
end
|
56
|
+
|
57
|
+
def validate_rule(object,rule,polling)
|
58
|
+
#Tipos de regla:= Logicas, Cambio
|
59
|
+
#Validar reglas si estan activas
|
60
|
+
#return unless rule.active?
|
61
|
+
validation = rule.validate_logic(object)
|
62
|
+
if validation
|
63
|
+
puts "Rule Fulfilled"
|
64
|
+
rule_id = rule.id
|
65
|
+
JobsActions::Actions.perform_async(object.id,rule_id) if polling.validate_send_time
|
66
|
+
else
|
67
|
+
puts "Rule Not Met"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def c_to_m(model)
|
72
|
+
return model.classify.constantize
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'sidekiq'
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
include Sidekiq::Worker
|
5
|
+
|
6
|
+
module JobsWebhooks
|
7
|
+
|
8
|
+
class ValidateModelWebhook < ActiveJob::Base
|
9
|
+
sidekiq_options queue: 'webhook_queue'
|
10
|
+
def perform(webhook_model:, webhook_model_id:, changed_attrs_json:, created_at:)
|
11
|
+
changed_attrs = JSON.parse(changed_attrs_json)
|
12
|
+
puts 'ValidateModelWebhook'
|
13
|
+
object = c_to_m(webhook_model).find(webhook_model_id.to_i)
|
14
|
+
# Se podria obtener lista desde el cache
|
15
|
+
webhooks = triggered_webhooks(object: object, changed_attrs: changed_attrs.keys)
|
16
|
+
puts "Webhooks: #{webhooks.size}"
|
17
|
+
return if webhooks.empty?
|
18
|
+
|
19
|
+
webhooks.each do |webhook|
|
20
|
+
next unless webhook.validate_duration_time
|
21
|
+
|
22
|
+
begin
|
23
|
+
rule = webhook.rule
|
24
|
+
puts "Webhook Validate Rule #{rule.id}"
|
25
|
+
validate_rule(object, rule, webhook)
|
26
|
+
rescue Exception => e
|
27
|
+
puts 'Somethings where wrong: ' + e.to_s
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def validate_rule(object, rule, webhook)
|
35
|
+
validation = rule.validate_logic(object)
|
36
|
+
if validation
|
37
|
+
puts 'Rule Fulfilled'
|
38
|
+
rule_id = rule.id
|
39
|
+
JobsActions::Actions.perform_async(object.id, rule_id) if webhook.validate_send_time
|
40
|
+
else
|
41
|
+
puts 'Rule Not Met'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def c_to_m(model)
|
46
|
+
model.classify.constantize
|
47
|
+
end
|
48
|
+
|
49
|
+
def triggered_webhooks(object:, changed_attrs:)
|
50
|
+
Webhook.includes(:rule).references(:rule)
|
51
|
+
.merge(Rule.actives.for_attributes(changed_attrs).for_object_and_class(object))
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
$files = Dir["#{Rails.root}/db/migrate/tables/*.rb"]
|
2
|
+
$files.each do |file|
|
3
|
+
require file
|
4
|
+
end
|
5
|
+
|
6
|
+
class MigracionGeneral < ActiveRecord::Migration[5.1]
|
7
|
+
|
8
|
+
def self.tables
|
9
|
+
general_tables
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.general_tables
|
13
|
+
@tables = []
|
14
|
+
$files.each do |file|
|
15
|
+
require file
|
16
|
+
table = "#{file.split("/").last.gsub('.rb','').titleize.delete(' ')}"
|
17
|
+
next if table == 'Base'
|
18
|
+
@tables.push(eval("Tables::#{table}"))
|
19
|
+
end
|
20
|
+
return @tables
|
21
|
+
end
|
22
|
+
|
23
|
+
def up
|
24
|
+
run_migrations
|
25
|
+
end
|
26
|
+
|
27
|
+
def down
|
28
|
+
raise ActiveRecord::IrreversibleMigration, 'Error'
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def run_migrations
|
34
|
+
create_tables
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_tables
|
38
|
+
self.class.tables.each do |table|
|
39
|
+
table.create(self)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# This migration creates the `versions` table, the only schema PT requires.
|
2
|
+
# All other migrations PT provides are optional.
|
3
|
+
class CreateVersions < ActiveRecord::Migration[5.1]
|
4
|
+
|
5
|
+
# The largest text column available in all supported RDBMS is
|
6
|
+
# 1024^3 - 1 bytes, roughly one gibibyte. We specify a size
|
7
|
+
# so that MySQL will use `longtext` instead of `text`. Otherwise,
|
8
|
+
# when serializing very large objects, `text` might not be big enough.
|
9
|
+
TEXT_BYTES = 1_073_741_823
|
10
|
+
|
11
|
+
def change
|
12
|
+
create_table :versions do |t|
|
13
|
+
t.string :item_type, {:null=>false}
|
14
|
+
t.integer :item_id, null: false
|
15
|
+
t.string :event, null: false
|
16
|
+
t.string :whodunnit
|
17
|
+
t.text :object, limit: TEXT_BYTES
|
18
|
+
|
19
|
+
# Known issue in MySQL: fractional second precision
|
20
|
+
# -------------------------------------------------
|
21
|
+
#
|
22
|
+
# MySQL timestamp columns do not support fractional seconds unless
|
23
|
+
# defined with "fractional seconds precision". MySQL users should manually
|
24
|
+
# add fractional seconds precision to this migration, specifically, to
|
25
|
+
# the `created_at` column.
|
26
|
+
# (https://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html)
|
27
|
+
#
|
28
|
+
# MySQL users should also upgrade to at least rails 4.2, which is the first
|
29
|
+
# version of ActiveRecord with support for fractional seconds in MySQL.
|
30
|
+
# (https://github.com/rails/rails/pull/14359)
|
31
|
+
#
|
32
|
+
t.datetime :created_at
|
33
|
+
end
|
34
|
+
add_index :versions, %i(item_type item_id)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
require_relative 'base'
|
39
|
+
|
40
|
+
class Tables::Webhooks < Tables::Base
|
41
|
+
|
42
|
+
def self.table(migration)
|
43
|
+
create_table migration do |t|
|
44
|
+
t.string :webhook_model
|
45
|
+
t.integer :webhook_model_id
|
46
|
+
t.integer :send_time
|
47
|
+
t.integer :duration_time
|
48
|
+
t.boolean :active?
|
49
|
+
t.boolean :forever_true?
|
50
|
+
t.datetime :last_execution
|
51
|
+
t.datetime :last_review_send
|
52
|
+
t.datetime :last_send
|
53
|
+
t.boolean :execute?
|
54
|
+
t.boolean :send?
|
55
|
+
t.bigint :rule_id
|
56
|
+
t.index :rule_id, name: 'index_rule_webhook_id'
|
57
|
+
t.timestamps
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
class Tables::ActionLogs < Tables::Base
|
4
|
+
|
5
|
+
def self.table(migration)
|
6
|
+
create_table migration do |t|
|
7
|
+
t.string :action_type
|
8
|
+
t.text :action_params
|
9
|
+
t.text :action_result
|
10
|
+
t.bigint :action_id
|
11
|
+
t.index :action_id, name: 'index_action_action_log_id'
|
12
|
+
t.timestamps
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
class Tables::Actions < Tables::Base
|
4
|
+
|
5
|
+
def self.table(migration)
|
6
|
+
create_table migration do |t|
|
7
|
+
t.string :action_type
|
8
|
+
t.json :action_params
|
9
|
+
t.boolean :active?
|
10
|
+
t.bigint :rule_id
|
11
|
+
t.index :rule_id, name: 'index_rule_action_id'
|
12
|
+
t.timestamps
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
class Tables::Pollings < Tables::Base
|
4
|
+
|
5
|
+
def self.table(migration)
|
6
|
+
create_table migration do |t|
|
7
|
+
t.string :polling_model
|
8
|
+
t.integer :polling_model_id
|
9
|
+
t.integer :review_time
|
10
|
+
t.integer :send_time
|
11
|
+
t.integer :duration_time
|
12
|
+
t.boolean :active?
|
13
|
+
t.datetime :last_execution
|
14
|
+
t.datetime :last_review_send
|
15
|
+
t.datetime :last_send
|
16
|
+
t.boolean :execute?
|
17
|
+
t.boolean :send?
|
18
|
+
t.boolean :class_polling?
|
19
|
+
t.bigint :rule_id
|
20
|
+
t.index :rule_id, name: 'index_rule_polling_id'
|
21
|
+
|
22
|
+
t.timestamps
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
class Tables::RuleLogs < Tables::Base
|
4
|
+
|
5
|
+
def self.table(migration)
|
6
|
+
create_table migration do |t|
|
7
|
+
t.string :name
|
8
|
+
t.string :rule_model
|
9
|
+
t.integer :rule_model_id
|
10
|
+
t.string :attr_comparable
|
11
|
+
t.string :rule
|
12
|
+
t.string :rule_type
|
13
|
+
t.string :rule_class
|
14
|
+
t.string :value
|
15
|
+
t.text :actions
|
16
|
+
t.bigint :rule_id
|
17
|
+
t.index :rule_id, name: 'index_rule_rule_log_id'
|
18
|
+
t.timestamps
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
class Tables::Rules < Tables::Base
|
4
|
+
|
5
|
+
def self.table(migration)
|
6
|
+
create_table migration do |t|
|
7
|
+
t.string :name
|
8
|
+
t.string :rule_model
|
9
|
+
t.integer :rule_model_id
|
10
|
+
t.string :value_s
|
11
|
+
t.integer :value_i
|
12
|
+
t.decimal :value_d
|
13
|
+
t.boolean :value_b
|
14
|
+
t.datetime :value_t
|
15
|
+
t.string :rule
|
16
|
+
t.string :rule_type
|
17
|
+
t.string :rule_class
|
18
|
+
t.string :combine_type
|
19
|
+
t.string :attr_comparable
|
20
|
+
t.string :last_value_attr_comparable
|
21
|
+
t.boolean :class_rule?
|
22
|
+
t.boolean :active?
|
23
|
+
t.timestamps
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|