Create GraphService object to manage calls to forked gnuplot process
for chart generation. Also add Graph DTO for encapsulating svg or various
other chart description languages.
---
 src/app/models/graph.rb           |    9 ++++++
 src/app/services/graph_service.rb |   50 +++++++++++++++++++++++++++++++++++++
 2 files changed, 59 insertions(+), 0 deletions(-)
 create mode 100644 src/app/models/graph.rb
 create mode 100644 src/app/services/graph_service.rb

diff --git a/src/app/models/graph.rb b/src/app/models/graph.rb
new file mode 100644
index 0000000..16e609e
--- /dev/null
+++ b/src/app/models/graph.rb
@@ -0,0 +1,9 @@
+class Graph
+  attr :svg
+
+  QOS_AVG_TIME_TO_SUBMIT = "qos_avg_time_to_submit"
+
+  def initialize
+    @svg = ""
+  end
+end
diff --git a/src/app/services/graph_service.rb 
b/src/app/services/graph_service.rb
new file mode 100644
index 0000000..8fc5bad
--- /dev/null
+++ b/src/app/services/graph_service.rb
@@ -0,0 +1,50 @@
+class GraphService
+  require 'gnuplot'
+
+  def gnuplot_open( persist=false )
+    cmd = Gnuplot.gnuplot( persist ) or raise 'gnuplot not found'
+    output_stream = IO::popen( cmd, "r+")
+  end
+
+
+  def qos_avg_time_to_submit_graph ( provider=nil, width=200, height=100 )
+
+    graph = Graph.new
+    gp = gnuplot_open
+
+    Gnuplot::Plot.new( gp ) do |plot|
+      plot.terminal "svg size #{width},#{height}"
+      plot.arbitrary_lines << "unset xtics"
+      plot.arbitrary_lines << "unset x2tics"
+      plot.arbitrary_lines << "unset ytics"
+      plot.arbitrary_lines << "unset y2tics"
+
+      #FIXME: get data from DataService for the provider.
+      #First build three equal-length arrays
+      x = (0..20).collect { |v| v.to_f }
+      y = x.collect { |v| v ** 2 }
+      c = y.collect { |v| if v > 100 then 1 else 3 end }
+
+      #The three arrays above are three columns of data for gnuplot.
+      #'c' is used for the point's color. See gnuplot docs for
+      #'lc variable' usage.
+      plot.data << Gnuplot::DataSet.new( [x, y, c] ) do |ds|
+        ds.using = "1:2:3"
+        ds.with = "lines lc variable"
+        ds.notitle
+      end
+    end
+    gp.flush
+    gp.close_write
+    gp.read(nil,graph.svg)
+    gp.close_read
+    graph
+  end
+
+  def dashboard_qos (provider = nil)
+    graphs = Hash.new
+    graphs[Graph::QOS_AVG_TIME_TO_SUBMIT] = 
qos_avg_time_to_submit_graph(provider)
+    graphs
+  end
+
+end
-- 
1.6.6.1

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to