legion-data 0.2.0 → 1.1.2

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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +95 -72
  3. data/.gitignore +0 -1
  4. data/.rubocop.yml +5 -2
  5. data/CHANGELOG.md +5 -0
  6. data/Gemfile.lock +99 -0
  7. data/legion-data.gemspec +1 -0
  8. data/lib/legion/data.rb +10 -13
  9. data/lib/legion/data/connection.rb +15 -17
  10. data/lib/legion/data/migration.rb +3 -3
  11. data/lib/legion/data/migrations/001_add_schema_columns.rb +1 -1
  12. data/lib/legion/data/migrations/002_add_users.rb +1 -1
  13. data/lib/legion/data/migrations/003_add_groups.rb +1 -1
  14. data/lib/legion/data/migrations/004_add_chains.rb +1 -1
  15. data/lib/legion/data/migrations/005_add_envs.rb +1 -1
  16. data/lib/legion/data/migrations/006_add_dcs.rb +1 -1
  17. data/lib/legion/data/migrations/007_add_nodes.rb +1 -1
  18. data/lib/legion/data/migrations/008_add_settings.rb +1 -1
  19. data/lib/legion/data/migrations/009_add_extensions.rb +1 -1
  20. data/lib/legion/data/migrations/010_add_runners.rb +1 -1
  21. data/lib/legion/data/migrations/011_add_functions.rb +1 -1
  22. data/lib/legion/data/migrations/012_add_tasks.rb +5 -2
  23. data/lib/legion/data/migrations/013_add_task_logs.rb +8 -2
  24. data/lib/legion/data/migrations/014_add_relationships.rb +1 -1
  25. data/lib/legion/data/migrations/015_add_default_extensions.rb +24 -0
  26. data/lib/legion/data/migrations/016_change_task_args.rb +7 -0
  27. data/lib/legion/data/migrations/017_add_payload_task.rb +7 -0
  28. data/lib/legion/data/model.rb +4 -1
  29. data/lib/legion/data/models/chain.rb +0 -2
  30. data/lib/legion/data/models/datacenter.rb +0 -2
  31. data/lib/legion/data/models/environment.rb +0 -2
  32. data/lib/legion/data/models/extension.rb +0 -2
  33. data/lib/legion/data/models/function.rb +0 -2
  34. data/lib/legion/data/models/relationship.rb +0 -2
  35. data/lib/legion/data/models/runner.rb +0 -2
  36. data/lib/legion/data/models/task.rb +0 -2
  37. data/lib/legion/data/settings.rb +14 -8
  38. data/lib/legion/data/version.rb +1 -1
  39. data/sonar-project.properties +12 -0
  40. metadata +12 -13
  41. data/lib/legion/data/connections/base.rb +0 -61
  42. data/lib/legion/data/connections/jdbc.rb +0 -21
  43. data/lib/legion/data/connections/mysql.rb +0 -26
  44. data/lib/legion/data/connections/mysql2.rb +0 -11
  45. data/lib/legion/data/connections/mysql_base.rb +0 -19
  46. data/lib/legion/data/models/namespace.rb +0 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd32f907af81657448d1fdbebc681b795d536754cec212ccaa154239c13ca48f
4
- data.tar.gz: 527fd840b7ae7bdf09f65a5b60af7491bea793427719404448f4c05967fc8266
3
+ metadata.gz: 7edc1b56e433f1136ad04bb1ddb6c989493a516bc46ca928fe81439428616fd1
4
+ data.tar.gz: 2d67b54b7de9c5aa798e941cd700381df89ef87fda8fcbd272aacb017a6af1da
5
5
  SHA512:
6
- metadata.gz: b41d14cbf4d9e3c62a84a2361ecb2b6143cdc508866bee245bec6c46bf263c8b421ef944ea353f360ac1d704d8777b570cf2ea279be466ceef17f939f9902ad5
7
- data.tar.gz: e0acb9226a6c7987b008be0d7e5e9eef22ebb58194ae9613a73846a85d464a071ddc82b17cf5bf3267d467ea1cf42d180047565b85d0565516fb121dbd1f45d1
6
+ metadata.gz: 224c4962335f385131dc6e50fe9ffe952edb4e52a0c6f3b7cdc30164cc6b668de1a9ab37778c097a0e9c790430ef62ba26af70ff2e88352a4cadf32abf35b3f9
7
+ data.tar.gz: da68881cbdcaa3b021e523064f0a9d784702d69cc98c713ed7f76b24ca994eef2295d77e6e6425f093bd68e0e9cac1139a40ff7d18cf4839b4ab1dfac6cde8f1
@@ -1,21 +1,24 @@
1
- version: 2 # use CircleCI 2.0
1
+ version: 2.1
2
+ orbs:
3
+ ruby: circleci/ruby@0.2.1
4
+ sonarcloud: sonarsource/sonarcloud@1.0.1
5
+
2
6
  jobs:
3
7
  "rubocop":
4
8
  docker:
5
- - image: circleci/ruby:2.4-node
9
+ - image: circleci/ruby:2.7-node
6
10
  steps:
7
11
  - checkout
8
- - run: gem install rubocop
9
- - run: bundle install
12
+ - ruby/load-cache
13
+ - ruby/install-deps
10
14
  - run:
11
15
  name: Run Rubocop
12
- command: rubocop
13
- - store_test_results:
14
- path: test_results
15
- "ruby-2.3":
16
+ command: bundle exec rubocop
17
+ - ruby/save-cache
18
+ "ruby-two-five":
16
19
  docker:
17
- - image: circleci/ruby:2.3
18
- - image: mysql:5.7
20
+ - image: circleci/ruby:2.5
21
+ - image: circleci/mysql:5.7
19
22
  environment:
20
23
  MYSQL_DATABASE: 'legion'
21
24
  MYSQL_ROOT_PASSWORD: 'legion'
@@ -23,20 +26,20 @@ jobs:
23
26
  MYSQL_PASSWORD: 'legion'
24
27
  steps:
25
28
  - checkout
29
+ - ruby/load-cache
26
30
  - run:
27
- name: Bundle Install
28
- command: bundle install
31
+ name: update bundler
32
+ command: gem update bundler
33
+ - ruby/install-deps
29
34
  - run:
30
- name: Run RSpec
31
- command: bundle exec rspec --format progress --format RspecJunitFormatter -o test-results/rspec/results.xml
32
- when: always
33
- - store_test_results:
34
- path: test-results
35
-
36
- "ruby-2.4":
35
+ name: update max connections
36
+ command: 'sudo apt-get install default-mysql-client && mysql -h 127.0.0.1 -u root --password=legion --execute="set global max_connections = 100000;"'
37
+ - ruby/run-tests
38
+ - ruby/save-cache
39
+ "ruby-two-six":
37
40
  docker:
38
- - image: circleci/ruby:2.4-node
39
- - image: mysql:5.7
41
+ - image: circleci/ruby:2.6
42
+ - image: circleci/mysql:5.7
40
43
  environment:
41
44
  MYSQL_DATABASE: 'legion'
42
45
  MYSQL_ROOT_PASSWORD: 'legion'
@@ -44,19 +47,38 @@ jobs:
44
47
  MYSQL_PASSWORD: 'legion'
45
48
  steps:
46
49
  - checkout
50
+ - ruby/load-cache
47
51
  - run:
48
- name: Bundle Install
49
- command: bundle install
52
+ name: update bundler
53
+ command: gem update bundler
54
+ - ruby/install-deps
50
55
  - run:
51
- name: Run RSpec
52
- command: bundle exec rspec --format progress --format RspecJunitFormatter -o test-results/rspec/results.xml
53
- when: always
54
- - store_test_results:
55
- path: test-results
56
- "ruby-2.5":
56
+ name: update max connections
57
+ command: 'sudo apt-get install default-mysql-client && mysql -h 127.0.0.1 -u root --password=legion --execute="set global max_connections = 100000;"'
58
+ - ruby/run-tests
59
+ - ruby/save-cache
60
+ "ruby-two-seven":
61
+ docker:
62
+ - image: circleci/ruby:2.7
63
+ - image: circleci/mysql:5.7
64
+ environment:
65
+ MYSQL_DATABASE: 'legion'
66
+ MYSQL_ROOT_PASSWORD: 'legion'
67
+ MYSQL_USER: 'legion'
68
+ MYSQL_PASSWORD: 'legion'
69
+ steps:
70
+ - checkout
71
+ - ruby/load-cache
72
+ - ruby/install-deps
73
+ - run:
74
+ name: update max connections
75
+ command: 'sudo apt-get install default-mysql-client && mysql -h 127.0.0.1 -u root --password=legion --execute="set global max_connections = 100000;"'
76
+ - ruby/run-tests
77
+ - ruby/save-cache
78
+ "jruby-nine-two":
57
79
  docker:
58
- - image: circleci/ruby:2.5-node
59
- - image: mysql:5.7
80
+ - image: circleci/jruby:9.2-jre
81
+ - image: circleci/mysql:5.7
60
82
  environment:
61
83
  MYSQL_DATABASE: 'legion'
62
84
  MYSQL_ROOT_PASSWORD: 'legion'
@@ -67,16 +89,18 @@ jobs:
67
89
  - run:
68
90
  name: Bundle Install
69
91
  command: bundle install
92
+ - run:
93
+ name: update max connections
94
+ command: 'sudo apt-get install default-mysql-client && mysql -h 127.0.0.1 -u root --password=legion --execute="set global max_connections = 100000;"'
70
95
  - run:
71
96
  name: Run RSpec
72
97
  command: bundle exec rspec --format progress --format RspecJunitFormatter -o test-results/rspec/results.xml
73
98
  when: always
74
- - store_test_results:
75
- path: test-results
76
- "ruby-2.6":
99
+ - sonarcloud/scan
100
+ "jruby-nine-two-e":
77
101
  docker:
78
- - image: circleci/ruby:2.6-node
79
- - image: mysql:5.7
102
+ - image: circleci/jruby:9.2.11-jre
103
+ - image: circleci/mysql:5.7
80
104
  environment:
81
105
  MYSQL_DATABASE: 'legion'
82
106
  MYSQL_ROOT_PASSWORD: 'legion'
@@ -87,16 +111,17 @@ jobs:
87
111
  - run:
88
112
  name: Bundle Install
89
113
  command: bundle install
114
+ - run:
115
+ name: update max connections
116
+ command: 'sudo apt-get install default-mysql-client && mysql -h 127.0.0.1 -u root --password=legion --execute="set global max_connections = 100000;"'
90
117
  - run:
91
118
  name: Run RSpec
92
119
  command: bundle exec rspec --format progress --format RspecJunitFormatter -o test-results/rspec/results.xml
93
120
  when: always
94
- - store_test_results:
95
- path: test-results
96
- "jruby-9.2":
121
+ "sonarcloud":
97
122
  docker:
98
- - image: circleci/jruby:9.2
99
- - image: mysql:5.7
123
+ - image: circleci/ruby:2.7
124
+ - image: circleci/mysql:5.7
100
125
  environment:
101
126
  MYSQL_DATABASE: 'legion'
102
127
  MYSQL_ROOT_PASSWORD: 'legion'
@@ -104,45 +129,43 @@ jobs:
104
129
  MYSQL_PASSWORD: 'legion'
105
130
  steps:
106
131
  - checkout
132
+ - ruby/load-cache
107
133
  - run:
108
- name: Bundle Install
109
- command: bundle install
134
+ name: update bundler
135
+ command: gem update bundler
136
+ - ruby/install-deps
110
137
  - run:
111
- name: Run RSpec
112
- command: bundle exec rspec --format progress --format RspecJunitFormatter -o test-results/rspec/results.xml
113
- when: always
114
- - store_test_results:
115
- path: test-results
138
+ name: update max connections
139
+ command: 'sudo apt-get install default-mysql-client && mysql -h 127.0.0.1 -u root --password=legion --execute="set global max_connections = 100000;"'
140
+ - ruby/run-tests
141
+ - run:
142
+ name: Run Rubocop
143
+ command: bundle exec rubocop --format=json --out=rubocop-result.json
144
+ - sonarcloud/scan
145
+ - ruby/save-cache
116
146
 
117
147
  workflows:
118
148
  version: 2
119
- cop_rake_deploy:
149
+ rubocop-rspec:
120
150
  jobs:
121
151
  - rubocop
122
- - ruby-2.3:
123
- requires:
124
- - ruby-2.4
125
- filters:
126
- branches:
127
- only: /\bdevelop\b|\bmaster\b/
128
- - ruby-2.4:
152
+ - ruby-two-five:
129
153
  requires:
130
154
  - rubocop
131
- - ruby-2.5:
155
+ - ruby-two-six:
156
+ requires:
157
+ - ruby-two-five
158
+ - ruby-two-seven:
159
+ requires:
160
+ - ruby-two-five
161
+ - sonarcloud:
162
+ requires:
163
+ - ruby-two-seven
164
+ - ruby-two-six
165
+ - jruby-nine-two:
132
166
  requires:
133
- - ruby-2.4
134
- filters:
135
- branches:
136
- only: /\bdevelop\b|\bmaster\b/
137
- - ruby-2.6:
167
+ - ruby-two-seven
168
+ - ruby-two-six
169
+ - jruby-nine-two-e:
138
170
  requires:
139
- - ruby-2.4
140
- filters:
141
- branches:
142
- only: /\bdevelop\b|\bmaster\b/
143
- # - jruby-9.2:
144
- # requires:
145
- # - ruby-2.3
146
- # - ruby-2.4
147
- # - ruby-2.5
148
- # - ruby-2.6
171
+ - jruby-nine-two
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
- /Gemfile.lock
4
3
  /_yardoc/
5
4
  /coverage/
6
5
  /doc/
@@ -3,7 +3,7 @@ require:
3
3
  - rubocop-md
4
4
  - rubocop-performance
5
5
 
6
- Metrics/LineLength:
6
+ Layout/LineLength:
7
7
  Max: 120
8
8
  Exclude:
9
9
  - 'lib/legion/data/migrations/*.rb'
@@ -11,6 +11,8 @@ Metrics/MethodLength:
11
11
  Max: 30
12
12
  Metrics/ClassLength:
13
13
  Max: 1500
14
+ Metrics/AbcSize:
15
+ Max: 34
14
16
  Metrics/BlockLength:
15
17
  Max: 50
16
18
  Exclude:
@@ -25,6 +27,7 @@ Layout/HashAlignment:
25
27
  Style/Documentation:
26
28
  Enabled: false
27
29
  AllCops:
28
- TargetRubyVersion: 2.6
30
+ TargetRubyVersion: 2.5
31
+ NewCops: enable
29
32
  Style/FrozenStringLiteralComment:
30
33
  Enabled: false
@@ -1,4 +1,9 @@
1
1
  # Legion::Data Changelog
2
+ ## v1.1.2
3
+ * Updating connection details to support JDBC
4
+ * Changing default max connections to 10
5
+ * Fixing issue with Legion::Cache always throwing an error
6
+
2
7
  ## v0.2.0
3
8
  * Redesigning schema
4
9
 
@@ -0,0 +1,99 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ legion-data (1.1.2)
5
+ legion-logging
6
+ legion-settings
7
+ mysql2
8
+ sequel
9
+
10
+ GEM
11
+ remote: https://rubygems.org/
12
+ specs:
13
+ ast (2.4.1)
14
+ codecov (0.2.8)
15
+ json
16
+ simplecov
17
+ diff-lcs (1.4.4)
18
+ docile (1.3.2)
19
+ json (2.3.1)
20
+ json (2.3.1-java)
21
+ json_pure (2.3.1)
22
+ legion-json (1.1.2)
23
+ json_pure
24
+ multi_json
25
+ legion-logging (1.1.0)
26
+ rainbow (~> 3)
27
+ legion-settings (1.1.1)
28
+ legion-json
29
+ legion-logging
30
+ multi_json (1.15.0)
31
+ mysql2 (0.5.3)
32
+ parallel (1.19.2)
33
+ parser (2.7.1.4)
34
+ ast (~> 2.4.1)
35
+ rainbow (3.0.0)
36
+ rake (13.0.1)
37
+ regexp_parser (1.7.1)
38
+ rexml (3.2.4)
39
+ rspec (3.9.0)
40
+ rspec-core (~> 3.9.0)
41
+ rspec-expectations (~> 3.9.0)
42
+ rspec-mocks (~> 3.9.0)
43
+ rspec-core (3.9.2)
44
+ rspec-support (~> 3.9.3)
45
+ rspec-expectations (3.9.2)
46
+ diff-lcs (>= 1.2.0, < 2.0)
47
+ rspec-support (~> 3.9.0)
48
+ rspec-mocks (3.9.1)
49
+ diff-lcs (>= 1.2.0, < 2.0)
50
+ rspec-support (~> 3.9.0)
51
+ rspec-support (3.9.3)
52
+ rspec_junit_formatter (0.4.1)
53
+ rspec-core (>= 2, < 4, != 2.12.0)
54
+ rubocop (0.89.1)
55
+ parallel (~> 1.10)
56
+ parser (>= 2.7.1.1)
57
+ rainbow (>= 2.2.2, < 4.0)
58
+ regexp_parser (>= 1.7)
59
+ rexml
60
+ rubocop-ast (>= 0.3.0, < 1.0)
61
+ ruby-progressbar (~> 1.7)
62
+ unicode-display_width (>= 1.4.0, < 2.0)
63
+ rubocop-ast (0.3.0)
64
+ parser (>= 2.7.1.4)
65
+ rubocop-md (0.4.0)
66
+ rubocop (~> 0.60)
67
+ rubocop-performance (1.7.1)
68
+ rubocop (>= 0.82.0)
69
+ rubocop-rspec (1.43.2)
70
+ rubocop (~> 0.87)
71
+ rubocop-sequel (0.0.6)
72
+ rubocop (~> 0.55, >= 0.55)
73
+ ruby-progressbar (1.10.1)
74
+ sequel (5.35.0)
75
+ simplecov (0.19.0)
76
+ docile (~> 1.1)
77
+ simplecov-html (~> 0.11)
78
+ simplecov-html (0.12.2)
79
+ unicode-display_width (1.7.0)
80
+
81
+ PLATFORMS
82
+ java
83
+ ruby
84
+
85
+ DEPENDENCIES
86
+ bundler
87
+ codecov
88
+ legion-data!
89
+ rake
90
+ rspec
91
+ rspec_junit_formatter
92
+ rubocop
93
+ rubocop-md
94
+ rubocop-performance
95
+ rubocop-rspec
96
+ rubocop-sequel
97
+
98
+ BUNDLED WITH
99
+ 2.1.4
@@ -11,6 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.summary = 'Used by Legion to connect to the database'
12
12
  spec.description = 'The Legion connect gem'
13
13
  spec.homepage = 'https://bitbucket.org/legion-io/legion-data'
14
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.5.0')
14
15
 
15
16
  spec.metadata['bug_tracker_uri'] = 'https://bitbucket.org/legion-io/legion-data/issues?status=new&status=open'
16
17
  spec.metadata['changelog_uri'] = 'https://bitbucket.org/legion-io/legion-data/src/CHANGELOG.md'
@@ -1,10 +1,10 @@
1
1
  require 'legion/data/version'
2
- require_relative 'data/settings'
2
+ require 'legion/data/settings'
3
3
  require 'sequel'
4
4
 
5
- require_relative 'data/connection'
6
- require_relative 'data/model'
7
- require_relative 'data/migration'
5
+ require 'legion/data/connection'
6
+ require 'legion/data/model'
7
+ require 'legion/data/migration'
8
8
 
9
9
  module Legion
10
10
  module Data
@@ -13,7 +13,7 @@ module Legion
13
13
  connection_setup
14
14
  migrate
15
15
  load_models
16
- # setup_cache
16
+ setup_cache
17
17
  end
18
18
 
19
19
  def connection_setup
@@ -34,20 +34,17 @@ module Legion
34
34
  Legion::Data::Connection.sequel
35
35
  end
36
36
 
37
- def setup_cache # rubocop:disable Metrics/AbcSize
38
- return if Legion::Settings[:data][:cache][:enable]
37
+ def setup_cache
38
+ return if Legion::Settings[:data][:cache][:enabled]
39
39
 
40
- unless Legion::Settings[:cache][:connected]
41
- Legion::Logging.warn 'Legion::Data has caching enabled but Legion::Cache is not started'
42
- end
43
- return unless Legion::Settings[:cache][:connected]
40
+ return unless defined?(::Legion::Cache)
44
41
 
45
- # Legion::Data::Model::Relationship.plugin :caching, Legion::Cache, ttl: 10
42
+ Legion::Data::Model::Relationship.plugin :caching, Legion::Cache, ttl: 10
46
43
  Legion::Data::Model::Chain.plugin :caching, Legion::Cache, ttl: 60
47
44
  Legion::Data::Model::Datacenter.plugin :caching, Legion::Cache, ttl: 120
48
45
  Legion::Data::Model::Extension.plugin :caching, Legion::Cache, ttl: 120
49
46
  Legion::Data::Model::Function.plugin :caching, Legion::Cache, ttl: 120
50
- Legion::Data::Model::Namespace.plugin :caching, Legion::Cache, ttl: 120
47
+ Legion::Data::Model::Extension.plugin :caching, Legion::Cache, ttl: 120
51
48
  Legion::Data::Model::Node.plugin :caching, Legion::Cache, ttl: 10
52
49
  Legion::Data::Model::TaskLog.plugin :caching, Legion::Cache, ttl: 12
53
50
  Legion::Data::Model::Task.plugin :caching, Legion::Cache, ttl: 10
@@ -4,33 +4,35 @@ module Legion
4
4
  module Data
5
5
  module Connection
6
6
  class << self
7
- attr_reader :sequel
8
- if RUBY_ENGINE == 'jruby'
9
- require_relative 'connections/jdbc'
10
- include Legion::Data::Connections::JDBC
11
- else
12
- require_relative 'connections/mysql2'
13
- include Legion::Data::Connections::MySQL2
7
+ attr_accessor :sequel
8
+
9
+ def adapter
10
+ @adapter ||= RUBY_ENGINE == 'jruby' ? :jdbc : :mysql2
14
11
  end
15
12
 
16
13
  def setup
17
- @sequel = ::Sequel.connect(adapter: adapter, **creds_builder)
14
+ @sequel = if adapter == :mysql2
15
+ ::Sequel.connect(adapter: adapter, **creds_builder)
16
+ else
17
+ ::Sequel.connect("jdbc:mysql://#{creds_builder[:host]}:#{creds_builder[:port]}/#{creds_builder[:database]}?user=#{creds_builder[:username]}&password=#{creds_builder[:password]}&serverTimezone=UTC") # rubocop:disable Layout/LineLength
18
+ end
18
19
  Legion::Settings[:data][:connected] = true
19
- return unless Legion::Settings[:data][:connection][:log]
20
+ return if Legion::Settings[:data][:connection].nil? || Legion::Settings[:data][:connection][:log].nil?
20
21
 
21
- @sequel.logger = Legion::Logging::Logger.new(level: 'debug')
22
+ @sequel.logger = Legion::Logging
22
23
  @sequel.sql_log_level = Legion::Settings[:data][:connection][:sql_log_level]
23
24
  @sequel.log_warn_duration = Legion::Settings[:data][:connection][:log_warn_duration]
24
25
  end
25
26
 
26
27
  def shutdown
27
- @sequel.disconnect
28
+ @sequel&.disconnect
29
+ Legion::Settings[:data][:connected] = false
28
30
  end
29
31
 
30
- def creds_builder # rubocop:disable Metrics/AbcSize
32
+ def creds_builder
31
33
  final_creds = {}
32
34
  final_creds.merge! default_creds
33
- final_creds.merge! Legion::Settings[:data][:creds]
35
+ final_creds.merge! Legion::Settings[:data][:creds] if Legion::Settings[:data][:creds].is_a? Hash
34
36
  return final_creds if Legion::Settings[:vault].nil?
35
37
 
36
38
  if Legion::Settings[:vault][:connected] && ::Vault.sys.mounts.key?(:database)
@@ -53,10 +55,6 @@ module Legion
53
55
  preconnect: 'concurrently'
54
56
  }
55
57
  end
56
-
57
- def adapter
58
- 'mysql2'
59
- end
60
58
  end
61
59
  end
62
60
  end
@@ -4,9 +4,9 @@ module Legion
4
4
  module Data
5
5
  module Migration
6
6
  class << self
7
- def migrate(connection = Legion::Data.connection, path = __dir__ + '/migrations')
8
- Legion::Settings[:data][:migrations][:version] = Sequel::Migrator.run(connection, path)
9
- Legion::Logging.info 'Legion::Data::Migration ran successfully to version ' + Legion::Settings[:data][:migrations][:version].to_s # rubocop:disable Layout/LineLength
7
+ def migrate(connection = Legion::Data.connection, path = "#{__dir__}/migrations", **opts)
8
+ Legion::Settings[:data][:migrations][:version] = Sequel::Migrator.run(connection, path, **opts)
9
+ Legion::Logging.info("Legion::Data::Migration ran successfully to version #{Legion::Settings[:data][:migrations][:version]}") # rubocop:disable Layout/LineLength
10
10
  Legion::Settings[:data][:migrations][:ran] = true
11
11
  end
12
12
  end
@@ -8,7 +8,7 @@ Sequel.migration do
8
8
  end
9
9
 
10
10
  down do
11
- alter_table(:schema) do
11
+ alter_table(:schema_info) do
12
12
  drop_column :catalog
13
13
  drop_column :updated_at
14
14
  drop_column :created_at
@@ -12,6 +12,6 @@ Sequel.migration do
12
12
  end
13
13
 
14
14
  down do
15
- drop :users
15
+ drop_table :users
16
16
  end
17
17
  end
@@ -11,6 +11,6 @@ Sequel.migration do
11
11
  end
12
12
 
13
13
  down do
14
- drop :groups
14
+ drop_table :groups
15
15
  end
16
16
  end
@@ -20,6 +20,6 @@ Sequel.migration do
20
20
  end
21
21
 
22
22
  down do
23
- drop :chains
23
+ drop_table :chains
24
24
  end
25
25
  end
@@ -19,6 +19,6 @@ Sequel.migration do
19
19
  end
20
20
 
21
21
  down do
22
- drop :environments
22
+ drop_table :environments
23
23
  end
24
24
  end
@@ -19,6 +19,6 @@ Sequel.migration do
19
19
  end
20
20
 
21
21
  down do
22
- drop :datacenters
22
+ drop_table :datacenters
23
23
  end
24
24
  end
@@ -21,6 +21,6 @@ Sequel.migration do
21
21
  end
22
22
 
23
23
  down do
24
- drop :nodes
24
+ drop_table :nodes
25
25
  end
26
26
  end
@@ -13,6 +13,6 @@ Sequel.migration do
13
13
  end
14
14
 
15
15
  down do
16
- drop :settings
16
+ drop_table :settings
17
17
  end
18
18
  end
@@ -20,6 +20,6 @@ Sequel.migration do
20
20
  end
21
21
 
22
22
  down do
23
- drop :extensions
23
+ drop_table :extensions
24
24
  end
25
25
  end
@@ -16,6 +16,6 @@ Sequel.migration do
16
16
  end
17
17
 
18
18
  down do
19
- drop :runners
19
+ drop_table :runners
20
20
  end
21
21
  end
@@ -24,6 +24,6 @@ Sequel.migration do
24
24
  end
25
25
 
26
26
  down do
27
- drop :functions
27
+ drop_table :functions
28
28
  end
29
29
  end
@@ -2,7 +2,8 @@ Sequel.migration do
2
2
  up do
3
3
  run "CREATE TABLE `tasks` (
4
4
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
5
- `relationship_id` int(11) unsigned NOT NULL,
5
+ `relationship_id` int(11) unsigned DEFAULT NULL,
6
+ `function_id` int(11) unsigned DEFAULT NULL,
6
7
  `status` varchar(255) NOT NULL,
7
8
  `parent_id` int(11) unsigned DEFAULT NULL,
8
9
  `master_id` int(11) unsigned DEFAULT NULL,
@@ -14,12 +15,14 @@ Sequel.migration do
14
15
  KEY `status` (`status`),
15
16
  KEY `parent_id` (`parent_id`),
16
17
  KEY `master_id` (`master_id`),
18
+ KEY `relationship_id` (`relationship_id`),
19
+ KEY `function_id` (`function_id`),
17
20
  CONSTRAINT `parent_id` FOREIGN KEY (`parent_id`) REFERENCES `tasks` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
18
21
  CONSTRAINT `master_id` FOREIGN KEY (`master_id`) REFERENCES `tasks` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
19
22
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
20
23
  end
21
24
 
22
25
  down do
23
- drop :tasks
26
+ drop_table :tasks
24
27
  end
25
28
  end
@@ -3,15 +3,21 @@ Sequel.migration do
3
3
  run "CREATE TABLE `task_logs` (
4
4
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
5
5
  `task_id` int(11) unsigned NOT NULL,
6
+ `function_id` int(11) unsigned,
7
+ `node_id` int(11) unsigned,
6
8
  `entry` text NOT NULL,
7
9
  `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
8
10
  `updated` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
9
11
  PRIMARY KEY (`id`),
10
- CONSTRAINT `task_log_task_id` FOREIGN KEY (`task_id`) REFERENCES `tasks` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
12
+ KEY (`created`),
13
+ KEY (`updated`),
14
+ CONSTRAINT `task_log_task_id` FOREIGN KEY (`task_id`) REFERENCES `tasks` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
15
+ CONSTRAINT `task_log_functions` FOREIGN KEY (`function_id`) REFERENCES `functions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
16
+ CONSTRAINT `task_log_nodes` FOREIGN KEY (`node_id`) REFERENCES `nodes` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
11
17
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
12
18
  end
13
19
 
14
20
  down do
15
- drop :task_logs
21
+ drop_table :task_logs
16
22
  end
17
23
  end
@@ -22,6 +22,6 @@ Sequel.migration do
22
22
  end
23
23
 
24
24
  down do
25
- drop :task_logs
25
+ drop_table :relationships
26
26
  end
27
27
  end
@@ -0,0 +1,24 @@
1
+ Sequel.migration do
2
+ up do
3
+ lex = from(:extensions).insert(namespace: 'Legion::Extensions::Lex', name: 'lex', exchange: 'lex', uri: 'lex')
4
+ [
5
+ { extension_id: lex, namespace: 'Legion::Extensions::Lex::Runners::Register', name: 'register', queue: 'register', uri: 'register' },
6
+ { extension_id: lex, namespace: 'Legion::Extensions::Lex::Runners::Function', name: 'function', queue: 'function', uri: 'function' },
7
+ { extension_id: lex, namespace: 'Legion::Extensions::Lex::Runners::Runner', name: 'runner', queue: 'runner', uri: 'runner' },
8
+ { extension_id: lex, namespace: 'Legion::Extensions::Lex::Runners::Extension', name: 'extension', queue: 'extension', uri: 'extension' }
9
+ ].each do |row|
10
+ from(:runners).insert row
11
+ end
12
+
13
+ lex = from(:extensions).insert(namespace: 'Legion::Extensions::Node', name: 'node', exchange: 'node', uri: 'node')
14
+ [
15
+ { extension_id: lex, namespace: 'Legion::Extensions::Node::Runners::Crypt', name: 'crypt', queue: 'crypt', uri: 'crypt' }
16
+ ].each do |row|
17
+ from(:runners).insert row
18
+ end
19
+ end
20
+ down do
21
+ from(:extensions).where(namespace: 'Legion::Extensions::Lex').delete
22
+ from(:extensions).where(namespace: 'Legion::Extensions::Node').delete
23
+ end
24
+ end
@@ -0,0 +1,7 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:tasks) do
4
+ rename_column :args, :function_args
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ Sequel.migration do
2
+ change do
3
+ alter_table(:tasks) do
4
+ add_column :payload, :text
5
+ end
6
+ end
7
+ end
@@ -3,6 +3,7 @@ module Legion
3
3
  module Models
4
4
  class << self
5
5
  attr_reader :loaded_models
6
+
6
7
  def models
7
8
  %w[user group extension chain relationship function task runner task_log datacenter environment node setting]
8
9
  end
@@ -11,10 +12,11 @@ module Legion
11
12
  Legion::Logging.info 'Loading Legion::Data::Models'
12
13
  @loaded_models ||= []
13
14
  require_sequel_models(models)
15
+ Legion::Settings[:data][:models][:loaded] = true
14
16
  end
15
17
 
16
18
  def require_sequel_models(files = models)
17
- Dir[File.dirname(__FILE__) + 'models/*.rb'].each { |file| puts file }
19
+ Dir["#{File.dirname(__FILE__)}models/*.rb"].each { |file| puts file }
18
20
  files.each { |file| load_sequel_model(file) }
19
21
  end
20
22
 
@@ -23,6 +25,7 @@ module Legion
23
25
  require_relative "models/#{model}"
24
26
  @loaded_models << model
25
27
  Legion::Logging.debug("Successfully loaded #{model}")
28
+ model
26
29
  rescue LoadError => e
27
30
  Legion::Logging.fatal("Failed to load #{model}")
28
31
  raise e unless Legion::Settings[:data][:models][:continue_on_fail]
@@ -5,8 +5,6 @@ module Legion
5
5
  module Model
6
6
  class Chain < Sequel::Model
7
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
10
8
  end
11
9
  end
12
10
  end
@@ -5,8 +5,6 @@ module Legion
5
5
  module Model
6
6
  class Datacenter < Sequel::Model
7
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
10
8
  end
11
9
  end
12
10
  end
@@ -5,8 +5,6 @@ module Legion
5
5
  module Model
6
6
  class Environment < Sequel::Model
7
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
10
8
  end
11
9
  end
12
10
  end
@@ -5,8 +5,6 @@ module Legion
5
5
  module Model
6
6
  class Extension < Sequel::Model
7
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
8
  end
11
9
  end
12
10
  end
@@ -9,8 +9,6 @@ module Legion
9
9
  many_to_one :runner
10
10
  one_to_many :trigger_relationships, class: 'Legion::Data::Model::Relationship', key: :trigger_id
11
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
14
12
  end
15
13
  end
16
14
  end
@@ -10,8 +10,6 @@ module Legion
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
15
13
  end
16
14
  end
17
15
  end
@@ -9,8 +9,6 @@ module Legion
9
9
  one_to_many :task
10
10
  one_to_many :functions
11
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
12
  end
15
13
  end
16
14
  end
@@ -10,8 +10,6 @@ module Legion
10
10
  one_to_many :children, key: :parent_id, class: self
11
11
  many_to_one :master, class: self
12
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
15
13
  end
16
14
  end
17
15
  end
@@ -3,13 +3,13 @@ module Legion
3
3
  module Settings
4
4
  def self.default
5
5
  {
6
- connected: false,
7
- cache: cache,
8
- connection: connection,
9
- creds: creds,
10
- migrations: migrations,
11
- models: models
12
-
6
+ connected: false,
7
+ cache: cache,
8
+ connection: connection,
9
+ creds: creds,
10
+ migrations: migrations,
11
+ models: models,
12
+ connect_on_start: true
13
13
  }
14
14
  end
15
15
 
@@ -35,7 +35,7 @@ module Legion
35
35
  log_connection_info: false,
36
36
  log_warn_duration: 1,
37
37
  sql_log_level: 'debug',
38
- max_connections: 32
38
+ max_connections: 10
39
39
  }
40
40
  end
41
41
 
@@ -60,3 +60,9 @@ module Legion
60
60
  end
61
61
  end
62
62
  end
63
+
64
+ begin
65
+ Legion::Settings.merge_settings('data', Legion::Data::Settings.default) if Legion.const_defined?('Settings')
66
+ rescue StandardError => e
67
+ Legion::Logging.fatal(e.message) if Legion::Logging.method_defined?(:fatal)
68
+ end
@@ -1,5 +1,5 @@
1
1
  module Legion
2
2
  module Data
3
- VERSION = '0.2.0'.freeze
3
+ VERSION = '1.1.2'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1,12 @@
1
+ sonar.projectKey=legion-io_legion-data
2
+ sonar.organization=legion-io
3
+ sonar.projectName=Legion::Data
4
+ sonar.sources=.
5
+ sonar.exclusions=vendor/**
6
+ sonar.coverage.exclusions=spec/**
7
+ sonar.ruby.coverage.reportPath=coverage/.resultset.json
8
+ sonar.ruby.file.suffixes=rb,ruby
9
+ sonar.ruby.coverage.framework=RSpec
10
+ sonar.ruby.rubocopConfig=.rubocop.yml
11
+ sonar.ruby.rubocop.reportPath=rubocop-result.json
12
+ sonar.ruby.rubocop.filePath=.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legion-data
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-27 00:00:00.000000000 Z
11
+ date: 2020-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -219,6 +219,7 @@ files:
219
219
  - ".rubocop.yml"
220
220
  - CHANGELOG.md
221
221
  - Gemfile
222
+ - Gemfile.lock
222
223
  - README.md
223
224
  - Rakefile
224
225
  - bin/console
@@ -227,11 +228,6 @@ files:
227
228
  - legion-data.gemspec
228
229
  - lib/legion/data.rb
229
230
  - lib/legion/data/connection.rb
230
- - lib/legion/data/connections/base.rb
231
- - lib/legion/data/connections/jdbc.rb
232
- - lib/legion/data/connections/mysql.rb
233
- - lib/legion/data/connections/mysql2.rb
234
- - lib/legion/data/connections/mysql_base.rb
235
231
  - lib/legion/data/migration.rb
236
232
  - lib/legion/data/migrations/001_add_schema_columns.rb
237
233
  - lib/legion/data/migrations/002_add_users.rb
@@ -247,6 +243,9 @@ files:
247
243
  - lib/legion/data/migrations/012_add_tasks.rb
248
244
  - lib/legion/data/migrations/013_add_task_logs.rb
249
245
  - lib/legion/data/migrations/014_add_relationships.rb
246
+ - lib/legion/data/migrations/015_add_default_extensions.rb
247
+ - lib/legion/data/migrations/016_change_task_args.rb
248
+ - lib/legion/data/migrations/017_add_payload_task.rb
250
249
  - lib/legion/data/model.rb
251
250
  - lib/legion/data/models/chain.rb
252
251
  - lib/legion/data/models/datacenter.rb
@@ -254,7 +253,6 @@ files:
254
253
  - lib/legion/data/models/extension.rb
255
254
  - lib/legion/data/models/function.rb
256
255
  - lib/legion/data/models/group.rb
257
- - lib/legion/data/models/namespace.rb
258
256
  - lib/legion/data/models/node.rb
259
257
  - lib/legion/data/models/relationship.rb
260
258
  - lib/legion/data/models/runner.rb
@@ -264,6 +262,7 @@ files:
264
262
  - lib/legion/data/models/user.rb
265
263
  - lib/legion/data/settings.rb
266
264
  - lib/legion/data/version.rb
265
+ - sonar-project.properties
267
266
  homepage: https://bitbucket.org/legion-io/legion-data
268
267
  licenses: []
269
268
  metadata:
@@ -273,7 +272,7 @@ metadata:
273
272
  homepage_uri: https://bitbucket.org/legion-io/legion-data
274
273
  source_code_uri: https://bitbucket.org/legion-io/legion-data
275
274
  wiki_uri: https://bitbucket.org/legion-io/legion-data/wiki/Home
276
- post_install_message:
275
+ post_install_message:
277
276
  rdoc_options: []
278
277
  require_paths:
279
278
  - lib
@@ -281,15 +280,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
281
280
  requirements:
282
281
  - - ">="
283
282
  - !ruby/object:Gem::Version
284
- version: '0'
283
+ version: 2.5.0
285
284
  required_rubygems_version: !ruby/object:Gem::Requirement
286
285
  requirements:
287
286
  - - ">="
288
287
  - !ruby/object:Gem::Version
289
288
  version: '0'
290
289
  requirements: []
291
- rubygems_version: 3.0.3
292
- signing_key:
290
+ rubygems_version: 3.1.2
291
+ signing_key:
293
292
  specification_version: 4
294
293
  summary: Used by Legion to connect to the database
295
294
  test_files: []
@@ -1,61 +0,0 @@
1
- module Legion
2
- module Data
3
- module Connections
4
- class Base
5
- attr_reader :sequel
6
- def check_gem(gem = adapter)
7
- Gem::Specification.find_by_name(gem)
8
- rescue Gem::MissingSpecError, ArgumentError
9
- false
10
- end
11
-
12
- def creds_builder(credentials = {}) # rubocop:disable Metrics/AbcSize
13
- creds = {}
14
- if Legion::Settings[:vault][:connected] && ::Vault.sys.mounts.key?(:database)
15
- creds = Legion::Crypt.read('database/creds/legion')
16
- Legion::Logging.info 'Grabbing database creds from vault'
17
- end
18
-
19
- creds = creds.merge(default_creds) if creds.is_a? Hash
20
- creds = creds.merge(Legion::Settings[:data][:creds]) if Legion::Settings[:data][:creds].is_a? Hash
21
- creds = creds.merge(credentials) if credentials.is_a? Hash
22
- creds
23
- end
24
-
25
- def connect(adapter, creds, _options = {})
26
- creds[:adapter] = adapter
27
- @sequel = Sequel.connect(creds)
28
- end
29
-
30
- def settings(options, _connection = @connection)
31
- raise ArgumentError unless options.is_a? Hash
32
- end
33
-
34
- def debug_logging(enabled = true, connection = @connection, _options = {})
35
- if enabled
36
- connection.logger = Legion::Logging
37
- connection.sql_log_level = :debug
38
- elsif enabled == false
39
- connection.logger = nil
40
- connection.sql_log_level = :debug
41
- end
42
- connection
43
- end
44
-
45
- def adapter
46
- 'mysql2'
47
- end
48
-
49
- def default_creds
50
- { data: { creds: {
51
- host: '127.0.0.1',
52
- user: 'legion',
53
- password: 'legion',
54
- max_connections: 1000,
55
- database: 'legion'
56
- } } }
57
- end
58
- end
59
- end
60
- end
61
- end
@@ -1,21 +0,0 @@
1
- module Legion
2
- module Data
3
- module Connections
4
- class JDBC
5
- attr_accessor :connection
6
- def initialize
7
- Legion::Logging.debug('Connecting to MySQL with JBDC Connector')
8
- connection_string = build_connection_string
9
- @connection = Sequel.connect(connection_string, max_connetions: @args[:max_connections])
10
- Legion::Logging.info("Legion is connected to database #{args[:database]}")
11
- end
12
-
13
- def build_connection_string
14
- set = Legion::Settings[:data][:mysql]
15
- con_string = "jdbc:mysql://#{set[:host]}/#{set[:database]}?user=#{set[:user]}&password=#{set[:password]}"
16
- con_string
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,26 +0,0 @@
1
- require 'legion/data/connections/mysql_base'
2
-
3
- module Legion
4
- module Data
5
- module Connections
6
- class MySQL < Legion::Data::Connections::MySQLBase
7
- attr_accessor :connection
8
- def initialize(_options = {})
9
- Legion::Logging.debug('Connecting to MySQL with MySQL2 Connector')
10
- @connection = connect
11
-
12
- Legion::Logging.info("Legion is connected to database #{Legion::Settings[:data][:mysql][:database]}")
13
- Legion::Settings[:data][:connected] = true
14
- end
15
-
16
- def adapter
17
- 'mysql2'
18
- end
19
-
20
- def connect
21
- super(adapter, creds_builder)
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,11 +0,0 @@
1
- module Legion
2
- module Data
3
- module Connections
4
- module MySQL2
5
- def adapter
6
- :mysql2
7
- end
8
- end
9
- end
10
- end
11
- end
@@ -1,19 +0,0 @@
1
- require 'legion/data/connections/base'
2
-
3
- module Legion
4
- module Data
5
- module Connections
6
- module MySQLBase
7
- def default_creds
8
- { data: { mysql: {
9
- host: '127.0.0.1',
10
- user: 'legion',
11
- password: 'legion',
12
- max_connections: 100,
13
- database: 'legion'
14
- } } }
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Legion
4
- module Data
5
- module Model
6
- class Namespace < Sequel::Model
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
11
- end
12
- end
13
- end
14
- end