Class: WifiWand::LogFileManager

Inherits:
Object
  • Object
show all
Defined in:
lib/wifi_wand/services/log_file_manager.rb

Overview

LogFileManager handles writing timestamped events to a log file.

Responsibilities:

  • Opens log file in append mode (creates if it does not exist)
  • Creates parent directories for the log file path if needed
  • Writes messages with timestamps
  • Flushes after each write to ensure data is written to disk
  • Closes file handle properly

Design notes:

  • Parent directories are created before opening the log file
  • File open, write, and close errors are propagated to the caller
  • Each write is flushed immediately for real-time log visibility

Constant Summary collapse

DEFAULT_LOG_FILE =
'wifiwand-events.log'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(log_file_path: nil, runtime_config: nil, **kwargs) ⇒ LogFileManager

Returns a new instance of LogFileManager.



28
29
30
31
32
33
34
35
# File 'lib/wifi_wand/services/log_file_manager.rb', line 28

def initialize(log_file_path: nil, runtime_config: nil, **kwargs)
  @log_file_path = log_file_path || DEFAULT_LOG_FILE
  @runtime_config = runtime_config || RuntimeConfig.new(verbose: kwargs[:verbose], out_stream: $stdout)
  @verbose_override = kwargs[:verbose] if kwargs.key?(:verbose)
  @out_stream_override = kwargs[:out_stream] if kwargs.key?(:out_stream)
  @file_handle = nil
  setup_log_file
end

Instance Attribute Details

#log_file_pathObject (readonly)

Returns the value of attribute log_file_path.



25
26
27
# File 'lib/wifi_wand/services/log_file_manager.rb', line 25

def log_file_path
  @log_file_path
end

Instance Method Details

#closeObject



55
56
57
58
59
60
# File 'lib/wifi_wand/services/log_file_manager.rb', line 55

def close
  return unless @file_handle

  @file_handle.close
  @file_handle = nil
end

#out_streamObject



37
38
39
40
41
42
43
# File 'lib/wifi_wand/services/log_file_manager.rb', line 37

def out_stream
  if instance_variable_defined?(:@out_stream_override)
    @out_stream_override
  else
    runtime_config.out_stream
  end
end

#verbose?Boolean

Returns:

  • (Boolean)


96
97
98
99
100
101
102
# File 'lib/wifi_wand/services/log_file_manager.rb', line 96

def verbose?
  if instance_variable_defined?(:@verbose_override)
    @verbose_override
  else
    runtime_config.verbose
  end
end

#write(message) ⇒ Object

Propagate write failures so EventLogger can either fall back to stdout or stop.



46
47
48
49
50
51
52
53
# File 'lib/wifi_wand/services/log_file_manager.rb', line 46

def write(message)
  raise WifiWand::LogWriteError, 'Log file is not available' unless @file_handle

  @file_handle.puts(message)
  @file_handle.flush
rescue IOError, SystemCallError => e
  raise WifiWand::LogWriteError, "Failed to write to log file #{@log_file_path}: #{e.message}"
end