Module: Legion::Data::Connection
- Defined in:
- lib/legion/data/connection.rb
Constant Summary collapse
- ADAPTERS =
%i[sqlite mysql2 postgres].freeze
Class Attribute Summary collapse
-
.sequel ⇒ Object
Returns the value of attribute sequel.
Class Method Summary collapse
- .adapter ⇒ Object
- .connect_with_replicas ⇒ Object
- .creds_builder(final_creds = {}) ⇒ Object
- .merge_tls_creds(creds, adapter:, port:) ⇒ Object
- .read_server ⇒ Object
- .replica_servers ⇒ Object
- .setup ⇒ Object
- .shutdown ⇒ Object
Class Attribute Details
.sequel ⇒ Object
Returns the value of attribute sequel.
11 12 13 |
# File 'lib/legion/data/connection.rb', line 11 def sequel @sequel end |
Class Method Details
.adapter ⇒ Object
13 14 15 |
# File 'lib/legion/data/connection.rb', line 13 def adapter @adapter ||= Legion::Settings[:data][:adapter]&.to_sym || :sqlite end |
.connect_with_replicas ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/legion/data/connection.rb', line 45 def connect_with_replicas return unless adapter == :postgres replica_url = Legion::Settings[:data][:read_replica_url] replica_list = Array(Legion::Settings[:data][:replicas]).dup replica_list.prepend(replica_url) if replica_url && !replica_url.empty? replica_list.uniq! replica_list.compact! return if replica_list.empty? @sequel.extension(:server_block) replica_list.each_with_index do |url, idx| @sequel.add_servers("read_#{idx}": url) end @replica_servers = replica_list.each_with_index.map { |_, idx| :"read_#{idx}" } end |
.creds_builder(final_creds = {}) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/legion/data/connection.rb', line 99 def creds_builder(final_creds = {}) final_creds.merge! Legion::Data::Settings.creds(adapter) final_creds.merge! Legion::Settings[:data][:creds] if Legion::Settings[:data][:creds].is_a? Hash port = final_creds[:port] merge_tls_creds(final_creds, adapter: adapter, port: port) return final_creds if Legion::Settings[:vault].nil? if Legion::Settings[:vault][:connected] && ::Vault.sys.mounts.key?(:database) temp_vault_creds = Legion::Crypt.read('database/creds/legion') final_creds[:user] = temp_vault_creds[:username] final_creds[:password] = temp_vault_creds[:password] end final_creds end |
.merge_tls_creds(creds, adapter:, port:) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/legion/data/connection.rb', line 76 def merge_tls_creds(creds, adapter:, port:) return creds if adapter == :sqlite return creds unless defined?(Legion::Crypt::TLS) tls = Legion::Crypt::TLS.resolve(data_tls_settings, port: port) return creds unless tls[:enabled] case adapter when :postgres creds[:sslmode] = tls[:verify] == :none ? 'require' : 'verify-full' creds[:sslrootcert] = tls[:ca] if tls[:ca] creds[:sslcert] = tls[:cert] if tls[:cert] creds[:sslkey] = tls[:key] if tls[:key] when :mysql2 creds[:ssl_mode] = tls[:verify] == :none ? 'required' : 'verify_identity' creds[:sslca] = tls[:ca] if tls[:ca] creds[:sslcert] = tls[:cert] if tls[:cert] creds[:sslkey] = tls[:key] if tls[:key] end creds end |
.read_server ⇒ Object
66 67 68 69 70 |
# File 'lib/legion/data/connection.rb', line 66 def read_server return :default if @replica_servers.nil? || @replica_servers.empty? :read_0 end |
.replica_servers ⇒ Object
72 73 74 |
# File 'lib/legion/data/connection.rb', line 72 def replica_servers @replica_servers || [] end |
.setup ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/legion/data/connection.rb', line 17 def setup @sequel = if adapter == :sqlite ::Sequel.sqlite(sqlite_path) else begin ::Sequel.connect(adapter: adapter, **creds_builder) rescue StandardError => e raise unless dev_fallback? if defined?(Legion::Logging) Legion::Logging.warn( "Shared DB unreachable (#{e.}), dev_mode fallback to SQLite" ) end @adapter = :sqlite ::Sequel.sqlite(sqlite_path) end end Legion::Settings[:data][:connected] = true configure_logging connect_with_replicas end |
.shutdown ⇒ Object
40 41 42 43 |
# File 'lib/legion/data/connection.rb', line 40 def shutdown @sequel&.disconnect Legion::Settings[:data][:connected] = false end |