rap/bin/graph
2011-11-11 14:48:52 -03:00

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'