Permalink
Cannot retrieve contributors at this time
#!/usr/bin/env ruby | |
# if something is changed here -> change line numbers in doc/tutorial.page | |
require 'cmdparse' | |
class NetStatCommand < CmdParse::Command | |
def initialize | |
super('stat', takes_commands: false) | |
short_desc("Show network statistics") | |
long_desc("This command shows very useful 'network' statistics - eye catching!!!") | |
argument_desc(M: 'start row number', N: 'end row number') | |
end | |
def execute(m = 1, n) | |
puts "Showing network statistics" if command_parser.data[:verbose] | |
puts | |
m.to_i.upto(n.to_i) do |row| | |
puts " "*(20 - row).abs + "#"*(row*2 - 1).abs | |
end | |
puts | |
end | |
end | |
parser = CmdParse::CommandParser.new(handle_exceptions: :no_help) | |
parser.main_options.program_name = "net" | |
parser.main_options.version = "0.1.1" | |
parser.main_options.banner = "This is net, a s[ai]mple network analytics program" | |
parser.global_options do |opt| | |
opt.on("-v", "--verbose", "Be verbose when outputting info") do | |
parser.data[:verbose] = true | |
end | |
end | |
parser.add_command(CmdParse::HelpCommand.new, default: true) | |
parser.add_command(CmdParse::VersionCommand.new) | |
parser.add_command(NetStatCommand.new) | |
# ipaddr | |
ipaddr = CmdParse::Command.new('ipaddr') | |
ipaddr.short_desc = "Manage IP addresses" | |
parser.add_command(ipaddr, default: true) | |
# ipaddr add | |
ipaddr.add_command('add') do |cmd| | |
cmd.takes_commands(false) | |
cmd.short_desc("Add an IP address") | |
cmd.action do |*ips| | |
puts "Adding ip addresses: #{ips.join(', ')}" if parser.data[:verbose] | |
parser.data[:ipaddrs] += ips | |
end | |
end | |
# ipaddr del | |
del = CmdParse::Command.new('del', takes_commands: false) | |
del.short_desc = "Delete an IP address" | |
del.options.on('-a', '--all', 'Delete all IPs') { del.data[:delete_all] = true } | |
del.action do |*ips| | |
if del.data[:delete_all] | |
puts "All IP adresses deleted!" if parser.data[:verbose] | |
parser.data[:ipaddrs] = [] | |
else | |
puts "Deleting ip addresses: #{ips.join(', ')}" if parser.data[:verbose] | |
ips.each {|ip| parser.data[:ipaddrs].delete(ip) } | |
end | |
end | |
ipaddr.add_command(del) | |
# ipaddr list | |
list = CmdParse::Command.new('list', takes_commands: false) | |
list.short_desc = "Lists all IP addresses" | |
list.action do | |
puts "Listing ip addresses:" if parser.data[:verbose] | |
puts parser.data[:ipaddrs].join("\n") unless parser.data[:ipaddrs].empty? | |
end | |
ipaddr.add_command(list, default: true) | |
parser.data[:ipaddrs] = if File.exists?('dumpnet') | |
Marshal.load(File.read('dumpnet', mode: 'rb')) | |
else | |
[] | |
end | |
parser.parse | |
File.write('dumpnet', Marshal.dump(parser.data[:ipaddrs]), mode: 'wb+') |