Class: Textus::Action::Audit
Defined Under Namespace
Classes: Query
Class Method Summary collapse
-
.call(container:, key: nil, lane: nil, role: nil, verb: nil, since: nil, seq_since: nil, correlation_id: nil, limit: nil) ⇒ Object
rubocop:disable Metrics/ParameterLists.
- .check_cursor_expiry(seq_since, audit_log) ⇒ Object
- .key_in_lane?(key, lane, manifest) ⇒ Boolean
- .parse_since(str, now: Time.now.utc) ⇒ Object
Methods inherited from Base
Methods included from Contract::DSL
#arg, #cli, #cli_stdin, #contract, #contract?, #summary, #surfaces, #verb, #view
Class Method Details
.call(container:, key: nil, lane: nil, role: nil, verb: nil, since: nil, seq_since: nil, correlation_id: nil, limit: nil) ⇒ Object
rubocop:disable Metrics/ParameterLists
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/textus/action/audit.rb', line 25 def self.call(container:, key: nil, lane: nil, role: nil, verb: nil, since: nil, seq_since: nil, correlation_id: nil, limit: nil, **) # rubocop:disable Metrics/ParameterLists audit_log = container.audit_log manifest = container.manifest cursor_check = check_cursor_expiry(seq_since, audit_log) return cursor_check if cursor_check.is_a?(Dry::Monads::Result::Failure) Success(audit_log.scan( seq_since: seq_since, key: key, role: role, verb: verb, correlation_id: correlation_id, limit: limit, ).select do |row| next false if lane && !key_in_lane?(row["key"], lane, manifest) next false if since && (row["ts"].nil? || Time.parse(row["ts"]) < since) true end) end |
.check_cursor_expiry(seq_since, audit_log) ⇒ Object
76 77 78 79 80 81 82 83 84 |
# File 'lib/textus/action/audit.rb', line 76 def self.check_cursor_expiry(seq_since, audit_log) return unless seq_since min = audit_log.min_available_seq return unless min && seq_since < min - 1 Failure(code: :cursor_expired, message: "requested seq #{seq_since} is below minimum available #{min}", details: { requested: seq_since, min_available: min }) end |
.key_in_lane?(key, lane, manifest) ⇒ Boolean
86 87 88 89 90 91 |
# File 'lib/textus/action/audit.rb', line 86 def self.key_in_lane?(key, lane, manifest) mentry = manifest.resolver.resolve(key).entry mentry && mentry.lane == lane rescue Textus::Error false end |
.parse_since(str, now: Time.now.utc) ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'lib/textus/action/audit.rb', line 47 def self.parse_since(str, now: Time.now.utc) return nil if str.nil? || str.empty? return Time.parse(str) if str =~ /\A\d{4}-\d{2}-\d{2}/ match = str.match(/\A(\d+)([smhd])\z/) or return nil mult = { "s" => 1, "m" => 60, "h" => 3600, "d" => 86_400 }[match[2]] now - (match[1].to_i * mult) end |