legion-data 0.2.0 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
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