class ExaTemplate
Public Class Methods
new(template, destination, route_refresh = 5)
click to toggle source
# File lib/exa-template.rb, line 5 def initialize(template, destination, route_refresh = 5) @template = template @destination = destination @bindings = binding @services = reset_services @route_refresh = route_refresh end
Public Instance Methods
parse_events()
click to toggle source
# File lib/exa-template.rb, line 13 def parse_events loop do chunks = [] begin loop do chunks << STDIN.read_nonblock(4096) end rescue IO::WaitReadable retry if IO.select([STDIN], [], [], @route_refresh) chunks.join.chomp.split("\n").each do |line| event = JSON.parse(line) next unless event['type'] == 'update' parse_services(event) @bindings.local_variable_set(:services, @services) render_template end route_refresh end end end
Private Instance Methods
parse_services(event)
click to toggle source
# File lib/exa-template.rb, line 48 def parse_services(event) community = event['neighbor']['message']['update']['attribute']['community'] community&.each do |c| port = c[1] event['neighbor']['message']['update']['announce']['ipv4 unicast']&.each do |_, prefix| @services[port] << prefix.keys.flatten.first end event['neighbor']['message']['update']['announce']['ipv6 unicast']&.each do |_, prefix| @services[port] << prefix.keys.flatten.first end end end
render_template()
click to toggle source
# File lib/exa-template.rb, line 61 def render_template template = ERB.new(File.read(@template), nil, '-').result(@bindings) File.write(@destination, template) end
reset_services()
click to toggle source
# File lib/exa-template.rb, line 37 def reset_services @services = Hash.new { |h,k| h[k] = [] } end
route_refresh()
click to toggle source
# File lib/exa-template.rb, line 41 def route_refresh reset_services $stdout.write 'announce route-refresh ipv4 unicast' $stdout.write 'announce route-refresh ipv6 unicast' $stdout.flush end