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