50 lines
1.0 KiB
Ruby
Executable File
50 lines
1.0 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
begin
|
|
require 'graphviz'
|
|
rescue
|
|
puts 'Este script necesita ruby-graphviz para funcionar'
|
|
exit 1
|
|
end
|
|
|
|
# Encontrar los nodos y sus uniones
|
|
re_nodes = /(\w+) to (\w+)/
|
|
|
|
# Encontrar las conexiones en la red
|
|
re_log = /([0-9\-: ]+).*Edges:(.*)End of edges./m
|
|
|
|
# Pedirle a tincd que imprima toda la red
|
|
# Necesita iniciarse con los flags --logfile -U nobody
|
|
`sudo -u nobody killall -SIGUSR2 tincd`
|
|
|
|
# Salir si no se pudo enviar la señal
|
|
exit 1 if $?.to_i > 0
|
|
|
|
# Leer el log buscando la lista de edges
|
|
log = IO::read('/var/log/tinc.lab.log').scan(re_log).to_s
|
|
|
|
# Crear el grafico
|
|
g = GraphViz::new('lab', 'type' => 'graph')
|
|
|
|
# Estilo
|
|
g.node[:fontname] = 'DejaVu Sans'
|
|
g.node[:fontsize] = '12'
|
|
g.node[:style] = 'filled'
|
|
g.node[:fillcolor] = '#b3e86a'
|
|
|
|
# Buscar todas las uniones
|
|
log.scan(re_nodes) do |n|
|
|
|
|
# Agregar el nodo
|
|
g.add_node(n[0])
|
|
|
|
# Agregar la conexión
|
|
g.add_edge(n[0], n[1])
|
|
|
|
end
|
|
|
|
# Salida
|
|
#g.output(:png => '/tmp/graph.png')
|
|
g.output(:dot => nil)
|
|
#puts '// El grafico se guardo en /tmp/graph.png'
|