Class: LogStruct::Log::ActiveStorage

Inherits:
T::Struct
  • Object
show all
Extended by:
T::Sig
Includes:
Interfaces::CommonFields, SerializeCommon
Defined in:
lib/log_struct/log/active_storage.rb

Overview

ActiveStorage log entry for structured logging

Constant Summary collapse

ActiveStorageEvent =

Define valid event types for ActiveStorage

T.type_alias {
  T.any(
    Event::Upload,
    Event::Download,
    Event::Delete,
    Event::Metadata,
    Event::Exist,
    Event::Stream,
    Event::Url,
    Event::Unknown
  )
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from SerializeCommon

#as_json, #serialize_common

Constructor Details

#initialize(source: T.let(Source::Storage, Source::Storage), event:, timestamp:, level: T.let(Level::Info, Level), operation: nil, storage: nil, file_id: nil, filename: nil, mime_type: nil, size: nil, metadata: nil, duration: nil, checksum: nil, exist: nil, url: nil, prefix: nil, range: nil) ⇒ void

Parameters:

  • source (Source::Storage) (defaults to: T.let(Source::Storage, Source::Storage))

    Common fields

  • event (ActiveStorageEvent)
  • timestamp (Time)
  • level (Level) (defaults to: T.let(Level::Info, Level))
  • operation (Symbol, nil) (defaults to: nil)

    ActiveStorage-specific fields

  • storage (String, nil) (defaults to: nil)
  • file_id (String, nil) (defaults to: nil)
  • filename (String, nil) (defaults to: nil)
  • mime_type (String, nil) (defaults to: nil)
  • size (Integer, nil) (defaults to: nil)
  • metadata (Hash{String => T.untyped}, nil) (defaults to: nil)
  • duration (Float, nil) (defaults to: nil)
  • checksum (String, nil) (defaults to: nil)
  • exist (Boolean, nil) (defaults to: nil)
  • url (String, nil) (defaults to: nil)
  • prefix (String, nil) (defaults to: nil)
  • range (String, nil) (defaults to: nil)


# File ''

const :source, Source::Storage, default: T.let(Source::Storage, Source::Storage)
const :event, ActiveStorageEvent
const :timestamp, Time, factory: -> { Time.now }
const :level, Level, default: T.let(Level::Info, Level)
const :operation, T.nilable(Symbol), default: nil
const :storage, T.nilable(String), default: nil
const :file_id, T.nilable(String), default: nil
const :filename, T.nilable(String), default: nil
const :mime_type, T.nilable(String), default: nil
const :size, T.nilable(Integer), default: nil
const :metadata, T.nilable(T::Hash[String, T.untyped]), default: nil
const :duration, T.nilable(Float), default: nil
const :checksum, T.nilable(String), default: nil
const :exist, T.nilable(T::Boolean), default: nil
const :url, T.nilable(String), default: nil
const :prefix, T.nilable(String), default: nil
const :range, T.nilable(String), default: nil

Instance Attribute Details

#checksumString? (readonly)

Returns the value of prop checksum.

Returns:

  • (String, nil)


# File ''

const :checksum, T.nilable(String), default: nil

#durationFloat? (readonly)

Returns the value of prop duration.

Returns:

  • (Float, nil)


# File ''

const :duration, T.nilable(Float), default: nil

#eventActiveStorageEvent (readonly)

Returns the value of prop event.

Returns:



# File ''

const :event, ActiveStorageEvent

#existBoolean? (readonly)

Returns the value of prop exist.

Returns:

  • (Boolean, nil)


# File ''

const :exist, T.nilable(T::Boolean), default: nil

#file_idString? (readonly)

Returns the value of prop file_id.

Returns:

  • (String, nil)


# File ''

const :file_id, T.nilable(String), default: nil

#filenameString? (readonly)

Returns the value of prop filename.

Returns:

  • (String, nil)


# File ''

const :filename, T.nilable(String), default: nil

#levelLevel (readonly)

Returns the value of prop level.

Returns:



# File ''

const :level, Level, default: T.let(Level::Info, Level)

#metadataHash{String => T.untyped}? (readonly)

Returns the value of prop metadata.

Returns:

  • (Hash{String => T.untyped}, nil)


# File ''

const :metadata, T.nilable(T::Hash[String, T.untyped]), default: nil

#mime_typeString? (readonly)

Returns the value of prop mime_type.

Returns:

  • (String, nil)


# File ''

const :mime_type, T.nilable(String), default: nil

#operationSymbol? (readonly)

ActiveStorage-specific fields

Returns:

  • (Symbol, nil)


# File ''

const :operation, T.nilable(Symbol), default: nil

#prefixString? (readonly)

Returns the value of prop prefix.

Returns:

  • (String, nil)


# File ''

const :prefix, T.nilable(String), default: nil

#rangeString? (readonly)

Returns the value of prop range.

Returns:

  • (String, nil)


# File ''

const :range, T.nilable(String), default: nil

#sizeInteger? (readonly)

Returns the value of prop size.

Returns:

  • (Integer, nil)


# File ''

const :size, T.nilable(Integer), default: nil

#sourceSource::Storage (readonly)

Common fields

Returns:



# File ''

const :source, Source::Storage, default: T.let(Source::Storage, Source::Storage)

#storageString? (readonly)

Returns the value of prop storage.

Returns:

  • (String, nil)


# File ''

const :storage, T.nilable(String), default: nil

#timestampTime (readonly)

Returns the value of prop timestamp.

Returns:

  • (Time)


# File ''

const :timestamp, Time, factory: -> { Time.now }

#urlString? (readonly)

Returns the value of prop url.

Returns:

  • (String, nil)


# File ''

const :url, T.nilable(String), default: nil

Instance Method Details

#serialize(strict = true) ⇒ Hash{Symbol => T.untyped}

Convert the log entry to a hash for serialization

Parameters:

  • strict (Boolean) (defaults to: true)

Returns:

  • (Hash{Symbol => T.untyped})


56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/log_struct/log/active_storage.rb', line 56

def serialize(strict = true)
  hash = serialize_common(strict)

  # Add ActiveStorage-specific fields - only include non-nil values
  hash[LOG_KEYS.fetch(:operation)] = operation if operation
  hash[LOG_KEYS.fetch(:storage)] = storage if storage
  hash[LOG_KEYS.fetch(:file_id)] = file_id if file_id
  hash[LOG_KEYS.fetch(:filename)] = filename if filename
  hash[LOG_KEYS.fetch(:mime_type)] = mime_type if mime_type
  hash[LOG_KEYS.fetch(:size)] = size if size
  hash[LOG_KEYS.fetch(:metadata)] =  if 
  hash[LOG_KEYS.fetch(:duration)] = duration if duration
  hash[LOG_KEYS.fetch(:checksum)] = checksum if checksum
  hash[LOG_KEYS.fetch(:exist)] = exist if !exist.nil?
  hash[LOG_KEYS.fetch(:url)] = url if url
  hash[LOG_KEYS.fetch(:prefix)] = prefix if prefix
  hash[LOG_KEYS.fetch(:range)] = range if range

  hash
end