Module: Legion::Data

Extended by:
Logging::Helper
Defined in:
lib/legion/data.rb,
lib/legion/data/rls.rb,
lib/legion/data/local.rb,
lib/legion/data/model.rb,
lib/legion/data/spool.rb,
lib/legion/data/helper.rb,
lib/legion/data/vector.rb,
lib/legion/data/extract.rb,
lib/legion/data/version.rb,
lib/legion/data/archival.rb,
lib/legion/data/archiver.rb,
lib/legion/data/settings.rb,
lib/legion/data/migration.rb,
lib/legion/data/retention.rb,
lib/legion/data/connection.rb,
lib/legion/data/event_store.rb,
lib/legion/data/models/node.rb,
lib/legion/data/models/task.rb,
lib/legion/data/audit_record.rb,
lib/legion/data/models/chain.rb,
lib/legion/data/models/runner.rb,
lib/legion/data/storage_tiers.rb,
lib/legion/data/models/setting.rb,
lib/legion/data/archival/policy.rb,
lib/legion/data/models/function.rb,
lib/legion/data/models/identity.rb,
lib/legion/data/models/task_log.rb,
lib/legion/data/models/audit_log.rb,
lib/legion/data/models/extension.rb,
lib/legion/data/models/principal.rb,
lib/legion/data/encryption/cipher.rb,
lib/legion/data/partition_manager.rb,
lib/legion/data/models/apollo_entry.rb,
lib/legion/data/models/audit_record.rb,
lib/legion/data/models/relationship.rb,
lib/legion/data/extract/handlers/csv.rb,
lib/legion/data/extract/handlers/pdf.rb,
lib/legion/data/extract/handlers/vtt.rb,
lib/legion/data/extract/handlers/base.rb,
lib/legion/data/extract/handlers/docx.rb,
lib/legion/data/extract/handlers/html.rb,
lib/legion/data/extract/handlers/json.rb,
lib/legion/data/extract/handlers/pptx.rb,
lib/legion/data/extract/handlers/text.rb,
lib/legion/data/extract/handlers/xlsx.rb,
lib/legion/data/extract/type_detector.rb,
lib/legion/data/models/digital_worker.rb,
lib/legion/data/models/identity_group.rb,
lib/legion/data/event_store/projection.rb,
lib/legion/data/extract/handlers/jsonl.rb,
lib/legion/data/models/apollo_relation.rb,
lib/legion/data/encryption/key_provider.rb,
lib/legion/data/models/apollo_expertise.rb,
lib/legion/data/encryption/sequel_plugin.rb,
lib/legion/data/models/apollo_access_log.rb,
lib/legion/data/models/identity_provider.rb,
lib/legion/data/models/rbac_runner_grant.rb,
lib/legion/data/extract/handlers/markdown.rb,
lib/legion/data/models/rbac_role_assignment.rb,
lib/legion/data/models/rbac_cross_team_grant.rb,
lib/legion/data/models/identity_group_membership.rb

Defined Under Namespace

Modules: Archival, Archiver, AuditRecord, Connection, Encryption, EventStore, Extract, Helper, Local, Migration, Model, Models, PartitionManager, Retention, Rls, Settings, Spool, StorageTiers, Vector

Constant Summary collapse

VERSION =
'1.6.25'

Class Method Summary collapse

Methods included from Logging::Helper

handle_exception

Class Method Details

.can_read?(table_name) ⇒ Boolean

Returns:

  • (Boolean)


110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/legion/data.rb', line 110

def can_read?(table_name)
  return false unless connected?

  adapter = Legion::Settings[:data][:adapter]&.to_s
  return true if adapter == 'sqlite'

  @read_privileges ||= {}
  return @read_privileges[table_name] unless @read_privileges[table_name].nil?

  @read_privileges[table_name] = connection
                                 .fetch("SELECT has_table_privilege(current_user, ?, 'SELECT') AS can", table_name.to_s)
                                 .first[:can] == true
rescue StandardError => e
  handle_exception(e, level: :warn, handled: true, operation: :can_read?, table: table_name)
  @read_privileges[table_name] = false if @read_privileges
  false
end

.can_write?(table_name) ⇒ Boolean

Returns:

  • (Boolean)


92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/legion/data.rb', line 92

def can_write?(table_name)
  return false unless connected?

  adapter = Legion::Settings[:data][:adapter]&.to_s
  return true if adapter == 'sqlite'

  @write_privileges ||= {}
  return @write_privileges[table_name] unless @write_privileges[table_name].nil?

  @write_privileges[table_name] = connection
                                  .fetch("SELECT has_table_privilege(current_user, ?, 'INSERT') AS can", table_name.to_s)
                                  .first[:can] == true
rescue StandardError => e
  handle_exception(e, level: :warn, handled: true, operation: :can_write?, table: table_name)
  @write_privileges[table_name] = false if @write_privileges
  false
end

.connected?Boolean

Returns:

  • (Boolean)


85
86
87
88
89
90
# File 'lib/legion/data.rb', line 85

def connected?
  Legion::Settings[:data][:connected] == true
rescue StandardError => e
  handle_exception(e, level: :debug, handled: true, operation: :connected?)
  false
end

.connectionObject



70
71
72
# File 'lib/legion/data.rb', line 70

def connection
  Legion::Data::Connection.sequel
end

.connection_setupObject



54
55
56
57
58
# File 'lib/legion/data.rb', line 54

def connection_setup
  return if Legion::Settings[:data][:connected]

  Legion::Data::Connection.setup
end

.load_modelsObject



66
67
68
# File 'lib/legion/data.rb', line 66

def load_models
  Legion::Data::Models.load
end

.localObject



74
75
76
# File 'lib/legion/data.rb', line 74

def local
  Legion::Data::Local
end

.migrateObject



60
61
62
63
64
# File 'lib/legion/data.rb', line 60

def migrate
  return if skip_migrations?

  Legion::Data::Migration.migrate
end

.reload_static_cacheObject



149
150
151
152
153
154
# File 'lib/legion/data.rb', line 149

def reload_static_cache
  [Model::Extension, Model::Runner, Model::Function].each do |model|
    model.load_cache if model.respond_to?(:load_cache)
  end
  log.info 'Legion::Data static cache reloaded'
end

.reset_privileges!Object



128
129
130
131
# File 'lib/legion/data.rb', line 128

def reset_privileges!
  @write_privileges = nil
  @read_privileges = nil
end

.setupObject



44
45
46
47
48
49
50
51
52
# File 'lib/legion/data.rb', line 44

def setup
  log.info 'Legion::Data setup starting'
  connection_setup
  migrate
  load_models
  setup_cache
  setup_local
  log.info 'Legion::Data setup complete'
end

.setup_cacheObject



133
134
135
136
137
# File 'lib/legion/data.rb', line 133

def setup_cache
  cache_settings = Legion::Settings[:data][:cache]
  setup_static_cache if cache_settings[:static_cache]
  setup_external_cache if cache_settings[:auto_enable] && defined?(::Legion::Cache)
end

.setup_external_cacheObject



156
157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/legion/data.rb', line 156

def setup_external_cache
  ttl = Legion::Settings[:data][:cache][:ttl] || 60
  {
    Model::Relationship => 10,
    Model::Node         => 10,
    Model::Setting      => ttl
  }.each do |model, model_ttl|
    model.plugin :caching, ::Legion::Cache, ttl: model_ttl
    log.debug("Caching enabled for #{model} (ttl: #{model_ttl})")
  rescue StandardError => e
    handle_exception(e, level: :warn, operation: :setup_external_cache, model: model.to_s, ttl: model_ttl)
  end
  log.info 'Legion::Data external cache connected'
end

.setup_static_cacheObject



139
140
141
142
143
144
145
146
147
# File 'lib/legion/data.rb', line 139

def setup_static_cache
  [Model::Extension, Model::Runner, Model::Function].each do |model|
    model.plugin :static_cache
    log.debug("StaticCache enabled for #{model}")
  rescue StandardError => e
    handle_exception(e, level: :warn, operation: :setup_static_cache, model: model.to_s)
  end
  log.info 'Legion::Data static cache loaded'
end

.shutdownObject



171
172
173
174
175
# File 'lib/legion/data.rb', line 171

def shutdown
  Legion::Data::Local.shutdown if defined?(Legion::Data::Local) && Legion::Data::Local.connected?
  Legion::Data::Connection.shutdown
  log.info 'Legion::Data shutdown complete'
end

.statsObject



78
79
80
81
82
83
# File 'lib/legion/data.rb', line 78

def stats
  {
    shared: Legion::Data::Connection.stats,
    local:  Legion::Data::Local.stats
  }
end