Class: AirportEvents::Logger

Inherits:
Object
  • Object
show all
Defined in:
lib/airport_events/logger.rb

Instance Method Summary collapse

Constructor Details

#initialize(path) ⇒ Logger

Returns a new instance of Logger.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/airport_events/logger.rb', line 9

def initialize path
  @log_path = path
  read_log

  watcher = AirportEvents::Watcher.new
  
  watcher.on :connected do |ssid, date|
    connected ssid, date
  end

  watcher.on :disconnected do |date|
    disconnected date
  end

  watcher.start

  interrupted = false
  trap("INT") { interrupted = true }

  while true do
    exit if interrupted
    sleep 0.1
  end

end

Instance Method Details

#append(entry) ⇒ Object



70
71
72
73
# File 'lib/airport_events/logger.rb', line 70

def append entry
  @log.push entry
  rewrite
end

#connected(ssid, date) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/airport_events/logger.rb', line 35

def connected ssid, date
  if last_entry
    unless last_entry[:ssid] == ssid
      new_entry ssid, date
    else
      OUT.info "AirportLogger: Already connected to to \"#{ssid}\""
    end
  else
    new_entry ssid, date
  end
end

#disconnected(date) ⇒ Object



47
48
49
# File 'lib/airport_events/logger.rb', line 47

def disconnected date
  end_last_entry date
end

#end_last_entry(date) ⇒ Object



91
92
93
94
95
96
97
# File 'lib/airport_events/logger.rb', line 91

def end_last_entry date
  if last_entry and last_entry[:disconnected_at].nil?
    OUT.info "AirportLogger: Disconnected"
    last_entry[:disconnected_at] = date
    rewrite
  end
end

#last_entryObject



75
76
77
78
79
80
# File 'lib/airport_events/logger.rb', line 75

def last_entry
  entry = @log.last
  if entry and entry[:disconnected_at].nil?
    return entry
  end
end

#new_entry(ssid, date) ⇒ Object



82
83
84
85
86
87
88
89
# File 'lib/airport_events/logger.rb', line 82

def new_entry ssid, date
  OUT.info "AirportLogger: Connected to \"#{ssid}\""
  append({
    :ssid => ssid,
    :connected_at => date,
    :disconnected_at => nil
  })
end

#read_fileObject



55
56
57
58
59
60
61
62
63
# File 'lib/airport_events/logger.rb', line 55

def read_file 
  if file = File.read(@log_path, mode: 'a+')
    if file.length > 0
      JSON.parse(file, :symbolize_names => true)
    else
      []
    end
  end
end

#read_logObject



51
52
53
# File 'lib/airport_events/logger.rb', line 51

def read_log
  @log = read_file
end

#rewriteObject



65
66
67
68
# File 'lib/airport_events/logger.rb', line 65

def rewrite
  IO.write(@log_path, JSON.pretty_generate(@log))
  read_log
end