Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@madeindjs
Last active March 28, 2019 14:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save madeindjs/2df2d2bef7d6aaddd1bb6061975c54e1 to your computer and use it in GitHub Desktop.
Save madeindjs/2df2d2bef7d6aaddd1bb6061975c54e1 to your computer and use it in GitHub Desktop.
Scan a Wifi and log each new device connected on it
require 'hooray'
require 'logger'
LOG_FILE = './wifi.log'.freeze
INTERVAL_TIME = 30
DEFAULT_NODE_NAME = 'UNKNOW'.freeze
class Scanner
attr_reader :logger
def initialize
initialize_logger
@old_seek = []
end
def scan
@logger.debug('Start scan')
new_seek = Hooray::Seek.new.nodes
unless @old_seek.empty? # not log the first scan
log_nodes (new_seek - @old_seek), 'connected'
log_nodes (@old_seek - new_seek), 'left'
end
@old_seek = new_seek
end
private
def log_nodes(nodes, verb)
nodes.each do |node|
name = node.name.nil? ? '' : "#{node.name}@"
@logger.info "#{name}#{node.ip} #{verb}"
end
end
def initialize_logger
@logger = Logger.new(LOG_FILE)
@logger.level = Logger::DEBUG
@logger.datetime_format = '%Y-%m-%d %H:%M'
@logger.formatter = proc do |severity, datetime, _progname, msg|
datetime_formated = datetime.strftime('%Y-%m-%d %H:%M:%S')
"#{datetime_formated} -- #{severity}: #{msg}\n"
end
end
end
scanner = Scanner.new
scanner.logger.debug('Start wifi_logger.rb')
begin
loop do
scanner.scan
sleep INTERVAL_TIME
end
rescue Interrupt => e
scanner.logger.debug('Close wifi_logger.rb')
end
@madeindjs
Copy link
Author

Usage, the ugly way

$ curl https://gist.githubusercontent.com/madeindjs/2df2d2bef7d6aaddd1bb6061975c54e1/raw/0fb6c340beff325f06e72675383f2f39c591af02/wifi_scanner.rb | ruby &

Make sure to install hooray before with gem install hooray

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment