legion-data 0.1.1 → 0.2.0

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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2 -0
  3. data/legion-data.gemspec +2 -2
  4. data/lib/legion/data.rb +55 -35
  5. data/lib/legion/data/connection.rb +52 -19
  6. data/lib/legion/data/connections/base.rb +19 -3
  7. data/lib/legion/data/connections/mysql2.rb +2 -17
  8. data/lib/legion/data/connections/mysql_base.rb +1 -1
  9. data/lib/legion/data/migration.rb +7 -20
  10. data/lib/legion/data/migrations/002_add_users.rb +17 -0
  11. data/lib/legion/data/migrations/003_add_groups.rb +16 -0
  12. data/lib/legion/data/migrations/004_add_chains.rb +25 -0
  13. data/lib/legion/data/migrations/005_add_envs.rb +24 -0
  14. data/lib/legion/data/migrations/006_add_dcs.rb +24 -0
  15. data/lib/legion/data/migrations/007_add_nodes.rb +26 -0
  16. data/lib/legion/data/migrations/008_add_settings.rb +18 -0
  17. data/lib/legion/data/migrations/009_add_extensions.rb +25 -0
  18. data/lib/legion/data/migrations/010_add_runners.rb +21 -0
  19. data/lib/legion/data/migrations/011_add_functions.rb +29 -0
  20. data/lib/legion/data/migrations/012_add_tasks.rb +25 -0
  21. data/lib/legion/data/migrations/013_add_task_logs.rb +17 -0
  22. data/lib/legion/data/migrations/014_add_relationships.rb +27 -0
  23. data/lib/legion/data/model.rb +24 -26
  24. data/lib/legion/data/models/chain.rb +2 -1
  25. data/lib/legion/data/models/datacenter.rb +2 -1
  26. data/lib/legion/data/models/environment.rb +2 -1
  27. data/lib/legion/data/models/extension.rb +13 -0
  28. data/lib/legion/data/models/function.rb +7 -4
  29. data/lib/legion/data/models/group.rb +10 -0
  30. data/lib/legion/data/models/namespace.rb +3 -1
  31. data/lib/legion/data/models/node.rb +1 -1
  32. data/lib/legion/data/models/relationship.rb +3 -1
  33. data/lib/legion/data/models/runner.rb +17 -0
  34. data/lib/legion/data/models/setting.rb +10 -0
  35. data/lib/legion/data/models/task.rb +2 -1
  36. data/lib/legion/data/models/task_log.rb +0 -1
  37. data/lib/legion/data/models/user.rb +10 -0
  38. data/lib/legion/data/settings.rb +62 -0
  39. data/lib/legion/data/version.rb +1 -1
  40. metadata +29 -26
  41. data/lib/legion/data/migrations/002_add_chains_table.rb +0 -21
  42. data/lib/legion/data/migrations/003_add_datacenters_table.rb +0 -21
  43. data/lib/legion/data/migrations/004_add_envs_table.rb +0 -21
  44. data/lib/legion/data/migrations/005_add_functions_table.rb +0 -25
  45. data/lib/legion/data/migrations/006_add_namespaces_table.rb +0 -24
  46. data/lib/legion/data/migrations/007_add_nodes_table.rb +0 -22
  47. data/lib/legion/data/migrations/008_add_relationships_table.rb +0 -28
  48. data/lib/legion/data/migrations/009_add_task_logs_table.rb +0 -17
  49. data/lib/legion/data/migrations/010_add_tasks_table.rb +0 -20
  50. data/lib/legion/data/migrations/011_add_users_and_groups.rb +0 -28
  51. data/lib/legion/data/migrations/012_foreign_keys_users_and_groups.rb +0 -42
  52. data/lib/legion/data/migrations/013_function_foreign_keys.rb +0 -10
  53. data/lib/legion/data/migrations/014_nodes_foreign_keys.rb +0 -12
  54. data/lib/legion/data/migrations/015_relationships_foreign_keys.rb +0 -14
  55. data/lib/legion/data/migrations/016_tasks_foreign_keys.rb +0 -22
  56. data/lib/legion/data/migrations/017_add_relationship_to_tasks.rb +0 -14
@@ -0,0 +1,26 @@
1
+ Sequel.migration do
2
+ up do
3
+ run "CREATE TABLE `nodes` (
4
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
5
+ `name` varchar(128) NOT NULL DEFAULT '',
6
+ `datacenter_id` int(11) unsigned DEFAULT NULL,
7
+ `environment_id` int(11) unsigned DEFAULT NULL,
8
+ `status` varchar(255) NOT NULL DEFAULT 'unknown',
9
+ `active` tinyint(1) unsigned NOT NULL DEFAULT '1',
10
+ `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
11
+ `updated` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
12
+ PRIMARY KEY (`id`),
13
+ UNIQUE KEY `name` (`name`),
14
+ KEY `active` (`active`),
15
+ KEY `status` (`status`),
16
+ KEY `node_datacenter_id` (`datacenter_id`),
17
+ KEY `node_environment_id` (`environment_id`),
18
+ CONSTRAINT `node_datacenter_id` FOREIGN KEY (`datacenter_id`) REFERENCES `datacenters` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
19
+ CONSTRAINT `node_environment_id` FOREIGN KEY (`environment_id`) REFERENCES `environments` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
20
+ ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;"
21
+ end
22
+
23
+ down do
24
+ drop :nodes
25
+ end
26
+ end
@@ -0,0 +1,18 @@
1
+ Sequel.migration do
2
+ up do
3
+ run "CREATE TABLE `settings` (
4
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
5
+ `key` varchar(128) NOT NULL,
6
+ `value` varchar(256) NOT NULL,
7
+ `encrypted` tinyint(1) unsigned NOT NULL DEFAULT '0',
8
+ `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
9
+ `updated` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
10
+ PRIMARY KEY (`id`),
11
+ UNIQUE KEY `key` (`key`)
12
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
13
+ end
14
+
15
+ down do
16
+ drop :settings
17
+ end
18
+ end
@@ -0,0 +1,25 @@
1
+ Sequel.migration do
2
+ up do
3
+ run "CREATE TABLE `extensions` (
4
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
5
+ `active` tinyint(1) unsigned NOT NULL DEFAULT '1',
6
+ `name` varchar(128) NOT NULL,
7
+ `namespace` varchar(128) NOT NULL DEFAULT '',
8
+ `exchange` varchar(255) DEFAULT NULL,
9
+ `uri` varchar(256) DEFAULT NULL,
10
+ `user_owner` int(11) unsigned DEFAULT NULL,
11
+ `group_owner` int(11) unsigned DEFAULT NULL,
12
+ `updated` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
13
+ `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
14
+ PRIMARY KEY (`id`),
15
+ UNIQUE KEY `name_namespace` (`name`,`namespace`),
16
+ KEY `active` (`active`),
17
+ KEY `name` (`name`),
18
+ KEY `namespace` (`namespace`)
19
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
20
+ end
21
+
22
+ down do
23
+ drop :extensions
24
+ end
25
+ end
@@ -0,0 +1,21 @@
1
+ Sequel.migration do
2
+ up do
3
+ run "CREATE TABLE `runners` (
4
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
5
+ `extension_id` int(11) unsigned NOT NULL,
6
+ `name` varchar(256) NOT NULL DEFAULT '',
7
+ `namespace` varchar(256) NOT NULL DEFAULT '',
8
+ `active` tinyint(1) unsigned NOT NULL DEFAULT '1',
9
+ `queue` varchar(256) DEFAULT NULL,
10
+ `uri` varchar(256) DEFAULT NULL,
11
+ `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
12
+ `updated` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
13
+ PRIMARY KEY (`id`),
14
+ CONSTRAINT `runner_extension_id` FOREIGN KEY (`extension_id`) REFERENCES `extensions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
15
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
16
+ end
17
+
18
+ down do
19
+ drop :runners
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ Sequel.migration do
2
+ up do
3
+ run "CREATE TABLE `functions` (
4
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
5
+ `name` varchar(128) NOT NULL,
6
+ `active` tinyint(1) unsigned NOT NULL DEFAULT '1',
7
+ `runner_id` int(11) unsigned NOT NULL,
8
+ `args` text,
9
+ `user_owner` int(11) unsigned DEFAULT NULL,
10
+ `group_owner` int(11) unsigned DEFAULT NULL,
11
+ `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
12
+ `updated` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
13
+ PRIMARY KEY (`id`),
14
+ UNIQUE KEY `runner_id` (`runner_id`,`name`),
15
+ KEY `active` (`active`),
16
+ KEY `namespace` (`runner_id`),
17
+ KEY `name` (`name`),
18
+ KEY `functions_user_owner` (`user_owner`),
19
+ KEY `functions_group_owner` (`group_owner`),
20
+ CONSTRAINT `function_runner_id` FOREIGN KEY (`runner_id`) REFERENCES `runners` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
21
+ CONSTRAINT `functions_group_owner` FOREIGN KEY (`group_owner`) REFERENCES `groups` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
22
+ CONSTRAINT `functions_user_owner` FOREIGN KEY (`user_owner`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
23
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
24
+ end
25
+
26
+ down do
27
+ drop :functions
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ Sequel.migration do
2
+ up do
3
+ run "CREATE TABLE `tasks` (
4
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
5
+ `relationship_id` int(11) unsigned NOT NULL,
6
+ `status` varchar(255) NOT NULL,
7
+ `parent_id` int(11) unsigned DEFAULT NULL,
8
+ `master_id` int(11) unsigned DEFAULT NULL,
9
+ `args` text,
10
+ `results` text,
11
+ `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
12
+ `updated` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
13
+ PRIMARY KEY (`id`),
14
+ KEY `status` (`status`),
15
+ KEY `parent_id` (`parent_id`),
16
+ KEY `master_id` (`master_id`),
17
+ CONSTRAINT `parent_id` FOREIGN KEY (`parent_id`) REFERENCES `tasks` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
18
+ CONSTRAINT `master_id` FOREIGN KEY (`master_id`) REFERENCES `tasks` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
19
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
20
+ end
21
+
22
+ down do
23
+ drop :tasks
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ Sequel.migration do
2
+ up do
3
+ run "CREATE TABLE `task_logs` (
4
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
5
+ `task_id` int(11) unsigned NOT NULL,
6
+ `entry` text NOT NULL,
7
+ `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
8
+ `updated` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
9
+ PRIMARY KEY (`id`),
10
+ CONSTRAINT `task_log_task_id` FOREIGN KEY (`task_id`) REFERENCES `tasks` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
11
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
12
+ end
13
+
14
+ down do
15
+ drop :task_logs
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ Sequel.migration do
2
+ up do
3
+ run "CREATE TABLE `relationships` (
4
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
5
+ `name` varchar(255) DEFAULT NULL,
6
+ `active` tinyint(1) unsigned NOT NULL DEFAULT '1',
7
+ `chain_id` int(11) unsigned DEFAULT NULL,
8
+ `trigger_id` int(11) unsigned NOT NULL,
9
+ `action_id` int(11) unsigned NOT NULL,
10
+ `delay` int(11) unsigned NOT NULL DEFAULT '0',
11
+ `allow_new_chains` tinyint(1) unsigned NOT NULL DEFAULT '1',
12
+ `conditions` text,
13
+ `transformation` text,
14
+ `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
15
+ `updated` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
16
+ PRIMARY KEY (`id`),
17
+ KEY `chain_id` (`chain_id`),
18
+ CONSTRAINT `function_chain_id` FOREIGN KEY (`chain_id`) REFERENCES `chains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
19
+ CONSTRAINT `relationship_action_id` FOREIGN KEY (`action_id`) REFERENCES `functions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
20
+ CONSTRAINT `relationship_trigger_id` FOREIGN KEY (`trigger_id`) REFERENCES `functions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
21
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
22
+ end
23
+
24
+ down do
25
+ drop :task_logs
26
+ end
27
+ end
@@ -1,34 +1,32 @@
1
1
  module Legion
2
2
  module Data
3
- class Models
4
- attr_reader :loaded_models
5
- def initialize(options = {})
6
- options.merge!(default_options) { |_key, v1, _v2| v1 }
7
- @loaded_models = []
8
- require_sequel_models if options[:auto_load]
9
- end
3
+ module Models
4
+ class << self
5
+ attr_reader :loaded_models
6
+ def models
7
+ %w[user group extension chain relationship function task runner task_log datacenter environment node setting]
8
+ end
10
9
 
11
- def default_options
12
- { continue_on_model_fail: false,
13
- auto_load: true }
14
- end
10
+ def load
11
+ Legion::Logging.info 'Loading Legion::Data::Models'
12
+ @loaded_models ||= []
13
+ require_sequel_models(models)
14
+ end
15
15
 
16
- def models
17
- %w[chain relationship function task namespace task_log datacenter environment node]
18
- end
19
-
20
- def require_sequel_models(files = models)
21
- files.each { |file| load_sequel_model(file) }
22
- end
16
+ def require_sequel_models(files = models)
17
+ Dir[File.dirname(__FILE__) + 'models/*.rb'].each { |file| puts file }
18
+ files.each { |file| load_sequel_model(file) }
19
+ end
23
20
 
24
- def load_sequel_model(model)
25
- Legion::Logging.debug("Trying to load #{model}.rb")
26
- require_relative "models/#{model}"
27
- @loaded_models << model
28
- Legion::Logging.debug("Successfully loaded #{model}")
29
- rescue LoadError => e
30
- Legion::Logging.fatal("Failed to load #{model}")
31
- raise e unless Legion::Settings[:data][:models][:continue_on_fail]
21
+ def load_sequel_model(model)
22
+ Legion::Logging.debug("Trying to load #{model}.rb")
23
+ require_relative "models/#{model}"
24
+ @loaded_models << model
25
+ Legion::Logging.debug("Successfully loaded #{model}")
26
+ rescue LoadError => e
27
+ Legion::Logging.fatal("Failed to load #{model}")
28
+ raise e unless Legion::Settings[:data][:models][:continue_on_fail]
29
+ end
32
30
  end
33
31
  end
34
32
  end
@@ -3,9 +3,10 @@
3
3
  module Legion
4
4
  module Data
5
5
  module Model
6
- # Used for accessing legion.chains
7
6
  class Chain < Sequel::Model
8
7
  one_to_many :relationship
8
+ many_to_one :user_owner, class: Legion::Data::Model::User
9
+ many_to_one :group_owner, class: Legion::Data::Model::Group
9
10
  end
10
11
  end
11
12
  end
@@ -3,9 +3,10 @@
3
3
  module Legion
4
4
  module Data
5
5
  module Model
6
- # Used for accessing legion.datacenters
7
6
  class Datacenter < Sequel::Model
8
7
  one_to_many :node
8
+ many_to_one :user_owner, class: Legion::Data::Model::User
9
+ many_to_one :group_owner, class: Legion::Data::Model::Group
9
10
  end
10
11
  end
11
12
  end
@@ -3,9 +3,10 @@
3
3
  module Legion
4
4
  module Data
5
5
  module Model
6
- # Used for accessing legion.environments
7
6
  class Environment < Sequel::Model
8
7
  one_to_many :node
8
+ many_to_one :user_owner, class: Legion::Data::Model::User
9
+ many_to_one :group_owner, class: Legion::Data::Model::Group
9
10
  end
10
11
  end
11
12
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Data
5
+ module Model
6
+ class Extension < Sequel::Model
7
+ one_to_many :runners
8
+ many_to_one :user_owner, class: Legion::Data::Model::User
9
+ many_to_one :group_owner, class: Legion::Data::Model::Group
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,13 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'relationship'
4
+
3
5
  module Legion
4
6
  module Data
5
7
  module Model
6
- # Used for accessing legion.functions
7
8
  class Function < Sequel::Model
8
- many_to_one :namespace
9
- one_to_many :trigger_functions, class: :Relationship, key: :trigger_id
10
- one_to_many :action_functions, class: :Relationship, key: :action_id
9
+ many_to_one :runner
10
+ one_to_many :trigger_relationships, class: 'Legion::Data::Model::Relationship', key: :trigger_id
11
+ one_to_many :action_relationships, class: 'Legion::Data::Model::Relationship', key: :action_id
12
+ many_to_one :user_owner, class: Legion::Data::Model::User
13
+ many_to_one :group_owner, class: Legion::Data::Model::Group
11
14
  end
12
15
  end
13
16
  end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Data
5
+ module Model
6
+ class Group < Sequel::Model
7
+ end
8
+ end
9
+ end
10
+ end
@@ -3,9 +3,11 @@
3
3
  module Legion
4
4
  module Data
5
5
  module Model
6
- # Used for accessing legion.namespaces
7
6
  class Namespace < Sequel::Model
8
7
  one_to_many :function
8
+ many_to_one :extension
9
+ many_to_one :user_owner, class: Legion::Data::Model::User
10
+ many_to_one :group_owner, class: Legion::Data::Model::Group
9
11
  end
10
12
  end
11
13
  end
@@ -3,10 +3,10 @@
3
3
  module Legion
4
4
  module Data
5
5
  module Model
6
- # Used for accessing legion.nodes
7
6
  class Node < Sequel::Model
8
7
  many_to_one :environment
9
8
  many_to_one :datacenter
9
+ one_to_many :task_log
10
10
  end
11
11
  end
12
12
  end
@@ -1,15 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'function'
4
+
4
5
  module Legion
5
6
  module Data
6
7
  module Model
7
- # Used for access legion.relationships
8
8
  class Relationship < Sequel::Model
9
9
  many_to_one :chain
10
10
  one_to_many :task
11
11
  many_to_one :trigger, class: Legion::Data::Model::Function
12
12
  many_to_one :action, class: Legion::Data::Model::Function
13
+ many_to_one :user_owner, class: Legion::Data::Model::User
14
+ many_to_one :group_owner, class: Legion::Data::Model::Group
13
15
  end
14
16
  end
15
17
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'function'
4
+ module Legion
5
+ module Data
6
+ module Model
7
+ class Runner < Sequel::Model
8
+ many_to_one :chain
9
+ one_to_many :task
10
+ one_to_many :functions
11
+ many_to_one :extension
12
+ many_to_one :user_owner, class: Legion::Data::Model::User
13
+ many_to_one :group_owner, class: Legion::Data::Model::Group
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Data
5
+ module Model
6
+ class Setting < Sequel::Model
7
+ end
8
+ end
9
+ end
10
+ end
@@ -3,7 +3,6 @@
3
3
  module Legion
4
4
  module Data
5
5
  module Model
6
- # Used for accessing legion.tasks
7
6
  class Task < Sequel::Model
8
7
  many_to_one :relationship
9
8
  one_to_many :task_log
@@ -11,6 +10,8 @@ module Legion
11
10
  one_to_many :children, key: :parent_id, class: self
12
11
  many_to_one :master, class: self
13
12
  one_to_many :slave, key: :master_id, class: self
13
+ many_to_one :user_owner, class: Legion::Data::Model::User
14
+ many_to_one :group_owner, class: Legion::Data::Model::Group
14
15
  end
15
16
  end
16
17
  end