bin/graphshaper in graphshaper-0.2.2 vs bin/graphshaper in graphshaper-0.2.3

- old
+ new

@@ -1,10 +1,12 @@ #!/usr/bin/env ruby require 'graphshaper' require 'optparse' +start_time = Time.now + options = {} optparse = OptionParser.new do |opts| opts.banner = "Usage: graphshaper [options] size" @@ -18,10 +20,14 @@ opts.on("-d", "--dot", "Store the graph in the dot format") do |dot| options[:dot] = dot end + opts.on("-s", "--sql", "Store the graph in sql format") do |sql| + options[:sql] = sql + end + opts.on("-p", "--png", "Export the graph as a PNG (graphviz must be installed)") do |png| options[:dot] = png options[:png] = png end @@ -36,56 +42,75 @@ if ARGV.length == 0 puts "Please enter a size for your graph." exit end -number_of_vertices = ARGV.first.to_i -inner_vertices = 20 - +# check for installed components: graphviz +if options[:png] and `which circo` == "" + puts "graphviz is not installed, can't export to png. Please install graphviz or run without --png option." + exit +end + +# check for running component: AvocadoDB +if options[:avocado] + begin + HTTParty.get 'http://localhost:8529' + rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH + puts "No AvocadoDB instance is running on port 8529. Please start AvocadoDB or run without --avocado option." + exit + end +end + adapters = [] -open_files = [] if options[:log] - vertex_output_file = File.new "vertices.csv", "w" - open_files << vertex_output_file - edge_output_file = File.new "edges.csv", "w" - open_files << edge_output_file - adapters << Graphshaper::LoggingAdapter.new(vertex_output_file, edge_output_file) + generated_vertices_csv_file = File.new("generated_vertices.csv", "w") + generated_edges_csv_file = File.new("generated_edges.csv", "w") + adapters << Graphshaper::LoggingAdapter.new(generated_vertices_csv_file, generated_edges_csv_file) end if options[:avocado] adapters << Graphshaper::AvocadoDbAdapter.new("vertices", "edges") end if options[:dot] - dot_output_file = File.new "generated_graph.dot", "w" - open_files << dot_output_file - dot_adapter = Graphshaper::DotAdapter.new(dot_output_file) - adapters << dot_adapter + generated_graph_dot_file = File.new("generated_graph.dot", "w") + adapters << Graphshaper::DotAdapter.new(generated_graph_dot_file) end -start_time = Time.now +if options[:sql] + generated_graph_sql_file = File.new("generated_graph.sql", "w") + generated_vertices_sql_file = File.new("generated_vertices.sql", "w") + generated_edges_sql_file = File.new("generated_edges.sql", "w") + + adapters << Graphshaper::SqlAdapter.new(generated_graph_sql_file, generated_vertices_sql_file, generated_edges_sql_file) +end -graph = Graphshaper::UndirectedGraph.without_orphans_with_order_of inner_vertices, adapters: adapters -(number_of_vertices - inner_vertices).times do +inner_vertices = 20 +outer_vertices = ARGV.first.to_i - inner_vertices + +graph = Graphshaper::UndirectedGraph.new inner_vertices, adapters: adapters + +graph.connect_all_vertices + +outer_vertices.times do graph.add_vertex { |preferential_attachment| preferential_attachment > rand } end -dot_adapter.close if options[:dot] +adapters.each { |adapter| adapter.close } -ellapsed_time = Time.now - start_time - print "#{graph.order} vertices and #{graph.size} edges generated" print " and saved into AvocadoDB" if options[:avocado] print " and logged" if options[:log] print " and generated as a dot" if options[:dot] +print " and saved in sql format" if options[:sql] -open_files.each { |file| file.close } - if options[:png] system('circo -Tpng generated_graph.dot -o generated_graph.png') end + +ellapsed_time = Time.now - start_time if ellapsed_time < 2 puts " in about one second" elsif ellapsed_time < 60 puts " in about #{ellapsed_time.round} seconds" \ No newline at end of file