omf_web 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. data/bin/omf_web_server +18 -0
  2. data/example/bridge/README.md +7 -0
  3. data/example/bridge/data_sources/sensor-sqlite.rb +15 -15
  4. data/example/bridge/htdocs/graph/js/bridge.js +35 -45
  5. data/example/bridge/htdocs/graph/js/event_line_chart.js +20 -18
  6. data/example/bridge/htdocs/graph/js/event_table.js +26 -28
  7. data/example/bridge/viz_server.rb +5 -9
  8. data/example/demo/demo_viz_server.rb +2 -2
  9. data/example/demo/widgets/linked_graphs_tab.yaml +9 -32
  10. data/example/openflow-gec15/code_tab.yaml +7 -12
  11. data/example/openflow-gec15/dashboard_tab.yaml +11 -12
  12. data/example/openflow-gec15/exp_source.rb +26 -26
  13. data/example/openflow-gec15/of_viz_server.rb +7 -7
  14. data/example/simple/simple.yaml +2 -1
  15. data/example/simple/simple_dynamic.yaml +1 -1
  16. data/example/web_rtc/web_rtc.yaml +54 -0
  17. data/example/web_rtc/webrtc-exp_1381786573.sq3 +0 -0
  18. data/lib/omf-web/config.ru +1 -1
  19. data/lib/omf-web/content/content_proxy.rb +2 -2
  20. data/lib/omf-web/content/file_repository.rb +11 -53
  21. data/lib/omf-web/content/git_repository.rb +1 -1
  22. data/lib/omf-web/content/irods_repository.rb +1 -1
  23. data/lib/omf-web/content/repository.rb +5 -3
  24. data/lib/omf-web/content/static_repository.rb +25 -11
  25. data/lib/omf-web/data_source_proxy.rb +3 -3
  26. data/lib/omf-web/rack/content_handler.rb +2 -2
  27. data/lib/omf-web/rack/session_authenticator.rb +3 -3
  28. data/lib/omf-web/rack/tab_mapper.rb +2 -2
  29. data/lib/omf-web/rack/update_handler.rb +2 -2
  30. data/lib/omf-web/rack/websocket_handler.rb +3 -3
  31. data/lib/omf-web/rack/widget_mapper.rb +2 -2
  32. data/lib/omf-web/session_store.rb +2 -2
  33. data/lib/omf-web/theme/abstract_page.rb +15 -24
  34. data/lib/omf-web/theme/bright/code_renderer.rb +24 -30
  35. data/lib/omf-web/theme/bright/data_renderer.rb +7 -5
  36. data/lib/omf-web/theme/bright/page.rb +2 -1
  37. data/lib/omf-web/theme/bright/widget_chrome.rb +16 -14
  38. data/lib/omf-web/theme.rb +1 -1
  39. data/lib/omf-web/thin/logging.rb +18 -13
  40. data/lib/omf-web/thin/runner.rb +2 -2
  41. data/lib/omf-web/thin/server.rb +105 -27
  42. data/lib/omf-web/version.rb +1 -1
  43. data/lib/omf-web/widget/abstract_widget.rb +3 -3
  44. data/lib/omf-web/widget/data_widget.rb +1 -0
  45. data/lib/omf-web/widget/text/maruku.rb +1 -1
  46. data/lib/omf-web/widget.rb +22 -22
  47. data/lib/omf_web.rb +1 -1
  48. data/omf_web.gemspec +18 -15
  49. data/share/htdocs/graph/js/abstract_chart.js +69 -68
  50. data/share/htdocs/graph/js/abstract_nv_chart.js +35 -33
  51. data/share/htdocs/graph/js/abstract_widget.js +61 -62
  52. data/share/htdocs/graph/js/axis.js +30 -25
  53. data/share/htdocs/graph/js/barchart_brush.js +23 -21
  54. data/share/htdocs/graph/js/code_mirror.js +35 -33
  55. data/share/htdocs/graph/js/discrete_bar_chart.js +27 -30
  56. data/share/htdocs/graph/js/histogram2.js +37 -47
  57. data/share/htdocs/graph/js/line_chart3.js +36 -30
  58. data/share/htdocs/graph/js/line_chart_with_focus.js +10 -9
  59. data/share/htdocs/graph/js/multi_barchart.js +33 -30
  60. data/share/htdocs/graph/js/network2.js +98 -97
  61. data/share/htdocs/graph/js/pie_chart2.js +25 -23
  62. data/share/htdocs/graph/js/scatter_plot.js +38 -36
  63. data/share/htdocs/graph/js/table2.js +60 -54
  64. data/share/htdocs/js/app.js +43 -0
  65. data/share/htdocs/js/{data_source2.js → data_source3.js} +44 -73
  66. data/share/htdocs/js/data_source_repo.js +42 -0
  67. data/share/htdocs/require/nv_d3.js +2 -0
  68. data/share/htdocs/theme/abstract/abstract.js +4 -4
  69. data/share/htdocs/vendor/VERSION_MAP.yaml +2 -0
  70. data/share/htdocs/vendor/require-2.1.8/require.js +2053 -0
  71. data/share/htdocs/vendor/require-2.1.8/require.min.js +36 -0
  72. data/share/htdocs/vendor/require-css-0.0.7/.gitignore +1 -0
  73. data/share/htdocs/vendor/require-css-0.0.7/LICENSE +10 -0
  74. data/share/htdocs/vendor/require-css-0.0.7/README.md +231 -0
  75. data/share/htdocs/vendor/require-css-0.0.7/bower.json +5 -0
  76. data/share/htdocs/vendor/require-css-0.0.7/css-builder.js +251 -0
  77. data/share/htdocs/vendor/require-css-0.0.7/css.js +436 -0
  78. data/share/htdocs/vendor/require-css-0.0.7/normalize.js +138 -0
  79. data/share/htdocs/vendor/require-css-0.0.7/package.json +5 -0
  80. data/share/htdocs/vendor/spin/jquery.spin.js +6 -4
  81. metadata +100 -74
  82. checksums.yaml +0 -7
  83. data/bin/omf_web_demo +0 -3
  84. data/bin/omf_web_demo.sh +0 -7
  85. data/bin/omf_web_server.rb +0 -157
  86. data/lib/omf_common/lobject.rb +0 -187
  87. data/lib/omf_common/log4r_outputter.rb +0 -69
  88. data/sample.sq3 +0 -0
  89. data/share/htdocs/js/data_source.js +0 -173
  90. data/share/htdocs/js/require3.js +0 -292
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ BIN_DIR = File.dirname(File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__)
4
+ TOP_DIR = File.join(BIN_DIR, '..')
5
+ $: << File.join(TOP_DIR, 'lib')
6
+
7
+ require 'json'
8
+ require 'omf-web/thin/server'
9
+
10
+ DESCR = %{
11
+ Start an OMF Web based Visualisation Server
12
+ }
13
+
14
+ opts = {
15
+ #footer_right: "V#{TuhuraViz::VERSION}",
16
+ }
17
+
18
+ OMF::Web::Server.start('omf_web_server', DESCR, TOP_DIR, opts)
@@ -0,0 +1,7 @@
1
+
2
+ This would deserve a long write up as it shows off many of the neat features of the omf_web architecture.
3
+
4
+ Running
5
+ -------
6
+
7
+ ruby -I example/bridge -I lib -e development --fake-events start
@@ -1,9 +1,9 @@
1
1
  require 'omf_web'
2
- require 'omf_common/lobject'
2
+ require 'omf_base/lobject'
3
3
  require 'omf_oml/table'
4
4
  require 'omf_oml/sql_source'
5
5
 
6
- class LazySlicableTable < OMF::Common::LObject
6
+ class LazySlicableTable < OMF::Base::LObject
7
7
 
8
8
  attr_reader :name
9
9
  # attr_accessor :max_size
@@ -15,26 +15,26 @@ class LazySlicableTable < OMF::Common::LObject
15
15
  @schema = schema
16
16
  @block = block
17
17
  end
18
-
18
+
19
19
  def create_sliced_table(col_name, col_value, table_opts = {})
20
20
  @block.call(col_name, col_value, table_opts)
21
21
  end
22
22
 
23
23
  end
24
24
 
25
- class BridgeSensor < OMF::Common::LObject
25
+ class BridgeSensor < OMF::Base::LObject
26
26
  attr_reader :table
27
-
27
+
28
28
  def initialize(db_name)
29
29
  @db_name = db_name
30
30
  end
31
-
31
+
32
32
  # oml_sender_id INTEGER, oml_seq INTEGER, oml_ts_client REAL, oml_ts_server REAL, "eventID" TEXT, "sensorID" TEXT, "time" REAL, "x" REAL, "y" REAL, "z" REAL, "v1" REAL, "v2" REAL
33
33
  def process_acceleration(stream)
34
34
  #puts stream.class
35
35
  @table = stream.to_table(:sensors_raw, :include_oml_internals => true)
36
-
37
- #OMF::Web.register_datasource @table
36
+
37
+ #OMF::Web.register_datasource @table
38
38
  OMF::Web.register_datasource(LazySlicableTable.new(:sensors, @table.schema) do |col_name, col_value, table_opts|
39
39
  @table.create_sliced_table(col_name, col_value, table_opts)
40
40
  end)
@@ -43,13 +43,13 @@ class BridgeSensor < OMF::Common::LObject
43
43
  def process_health(stream)
44
44
  if $fake_bridge_events
45
45
  fake_health
46
- return
46
+ return
47
47
  end
48
-
48
+
49
49
  @table = stream.to_table(:health, :include_oml_internals => true)
50
- OMF::Web.register_datasource @table
50
+ OMF::Web.register_datasource @table
51
51
  end
52
-
52
+
53
53
  def run
54
54
  #ep = OMF::OML::OmlSqlSource.new(@db_name, :offset => -500, :check_interval => 1.0)
55
55
  ep = OMF::OML::OmlSqlSource.new(@db_name, :check_interval => 3.0)
@@ -69,13 +69,13 @@ class BridgeSensor < OMF::Common::LObject
69
69
  ep.run
70
70
  self
71
71
  end
72
-
72
+
73
73
  def fake_health()
74
74
  # oml_sender_id INTEGER, oml_seq INTEGER, oml_ts_client REAL, oml_ts_server REAL, "eventID" TEXT, "jointID" TEXT, "health" REAL
75
75
  schema = [[:oml_sender_id, :integer], [:oml_seq, :integer], [:oml_ts_client, :float], [:oml_ts_server, :float], [:eventID, :string], [:jointID, :string], [:health, :float]]
76
76
  table = OMF::OML::OmlTable.new 'health', schema, :max_size => 20
77
77
  OMF::Web.register_datasource table
78
-
78
+
79
79
  Thread.new do
80
80
  begin
81
81
  seq_no = 1
@@ -94,7 +94,7 @@ class BridgeSensor < OMF::Common::LObject
94
94
  puts ex
95
95
  puts ex.backtrace.join("\n")
96
96
  end
97
- end
97
+ end
98
98
  end
99
99
  end
100
100
  wv = BridgeSensor.new($oml_database).run()
@@ -1,46 +1,38 @@
1
1
 
2
- L.provide('OML.bridge', ["graph/js/abstract_chart", "#OML.abstract_chart"],
2
+ define(["graph/abstract_chart"], function(abstract_chart) {
3
3
 
4
- function () {
5
-
6
- OML.bridge = OML.abstract_chart.extend({
4
+ var bridge = abstract_chart.extend({
7
5
  decl_properties: [
8
- ['health', 'key'],
9
- ['fill_color', 'color', 'blue'],
6
+ ['health', 'key'],
7
+ ['fill_color', 'color', 'blue'],
10
8
  ],
11
-
9
+
12
10
  defaults: function() {
13
11
  return this.deep_defaults({
14
12
  width: 1.0, // <= 1.0 means set width to enclosing element
15
13
  height: 200, // <= 1.0 means fraction of width
16
-
17
- /*
18
- axis: {
19
- orientation: 'horizontal'
20
- }
21
- */
22
- }, OML.bridge.__super__.defaults.call(this));
23
- },
24
-
14
+ }, bridge.__super__.defaults.call(this));
15
+ },
16
+
25
17
  base_css_class: 'oml-bridge',
26
-
18
+
27
19
  initialize: function(opts) {
28
- OML.bridge.__super__.initialize.call(this, opts);
29
-
20
+ bridge.__super__.initialize.call(this, opts);
21
+
30
22
  var self = this;
31
23
  OHUB.bind("bridge.event_selected", function(evt) {
32
24
  var joint_id = evt.datum[evt.schema.jointID.index];
33
25
  self.redraw_sensor_locator(joint_id);
34
26
  });
35
27
  },
36
-
37
-
28
+
29
+
38
30
  configure_base_layer: function(vis) {
39
31
  var base = this.base_layer = vis.append("svg:g")
40
32
  .attr("class", "bridge")
41
33
  ;
42
-
43
- var ca = this.chart_area;
34
+
35
+ var ca = this.chart_area;
44
36
  var bgl = this.background_layer = base.append("svg:g");
45
37
  this.draw_background(bgl);
46
38
 
@@ -53,7 +45,7 @@ L.provide('OML.bridge', ["graph/js/abstract_chart", "#OML.abstract_chart"],
53
45
  var o = this.opts;
54
46
  var ca = this.widget_area;
55
47
  var m = this.mapping;
56
-
48
+
57
49
  var events = this.data_layer.selectAll('.event')
58
50
  .data(data)
59
51
  ;
@@ -70,17 +62,17 @@ L.provide('OML.bridge', ["graph/js/abstract_chart", "#OML.abstract_chart"],
70
62
  .attr("r", 2)
71
63
  .attr('cy', m.y + 50)
72
64
  .style("stroke-opacity", 1e-6)
73
- .remove();
65
+ .remove();
74
66
  ;
75
67
  },
76
-
68
+
77
69
  redraw_sensor_locator: function(joint_id) {
78
70
  var self = this;
79
71
  var o = this.opts;
80
72
  var ca = this.widget_area;
81
73
  var m = this.mapping;
82
74
  var self= this;
83
-
75
+
84
76
  function locator(g) {
85
77
  g.append('svg:rect')
86
78
  .attr('x', m.joint2x)
@@ -100,27 +92,24 @@ L.provide('OML.bridge', ["graph/js/abstract_chart", "#OML.abstract_chart"],
100
92
  ;
101
93
  return g;
102
94
  }
103
-
95
+
104
96
  var selector = this.selector_layer.selectAll('.locator')
105
97
  .data([joint_id], function(d) { return d; })
106
98
  ;
107
99
  selector
108
100
  .enter().append('g')
109
101
  .attr('class', 'locator')
110
- .call(locator)
102
+ .call(locator);
111
103
  selector.exit().remove();
112
104
  },
113
-
105
+
114
106
  draw_background: function(bgl) {
115
-
116
- var bw = 600, bh = 180; // bridge dim
117
- var y = -977.36218 + bh - 75;
107
+ var bw = 600, bh = 180; // bridge dim
108
+ var y = -977.36218 + bh - 75;
118
109
  var boffset = 70;
119
-
120
110
  var lmargin = (this.w - (2 * boffset + bw)) / 2;
121
-
122
111
  var stroke = 'silver';
123
-
112
+
124
113
  bgl.append('g')
125
114
  .attr("transform", 'translate(' + (boffset + lmargin) + ', ' + y + ')')
126
115
  .append('path')
@@ -139,11 +128,11 @@ L.provide('OML.bridge', ["graph/js/abstract_chart", "#OML.abstract_chart"],
139
128
  .attr('x1', 0)
140
129
  .attr('x2', 2 * boffset + bw)
141
130
  .attr('y1', ly)
142
- .attr('y2', ly)
131
+ .attr('y2', ly)
143
132
  .attr('stroke', stroke)
144
133
  .attr('stroke-width', '4px')
145
134
  ;
146
-
135
+
147
136
  var self = this;
148
137
  var jid = this.schema.jointID.index;
149
138
  var scale = d3.scale.linear().domain([0, 60]).range([lmargin, lmargin + 2 * boffset + bw]);
@@ -152,14 +141,15 @@ L.provide('OML.bridge', ["graph/js/abstract_chart", "#OML.abstract_chart"],
152
141
  var joint = parseInt(joint_s);
153
142
  var x = scale(joint);
154
143
  return x;
155
- }
144
+ };
156
145
  this.mapping.x = function(d) {
157
146
  return joint2x(d[jid]);
158
- }
159
-
147
+ };
160
148
  this.mapping.y = ly;
161
149
  },
162
-
163
-
164
- }) // end of histogram
165
- }) // end of provide
150
+
151
+
152
+ }); // end of bridge
153
+
154
+ return bridge;
155
+ });
@@ -1,17 +1,17 @@
1
1
 
2
- L.provide('OML.event_line_chart', ["graph/js/line_chart3", "#OML.line_chart3"], function () {
2
+ define(["graph/line_chart3"], function (line_chart3) {
3
3
 
4
- OML.event_line_chart = OML.line_chart3.extend({
4
+ var event_line_chart = line_chart3.extend({
5
5
  defaults: function() {
6
6
  return this.deep_defaults({
7
- }, OML.event_line_chart .__super__.defaults.call(this));
8
- },
9
-
7
+ }, event_line_chart .__super__.defaults.call(this));
8
+ },
9
+
10
10
  base_css_class: 'oml-event-line-chart',
11
-
11
+
12
12
  initialize: function(opts) {
13
- OML.event_line_chart.__super__.initialize.call(this, opts);
14
-
13
+ event_line_chart.__super__.initialize.call(this, opts);
14
+
15
15
  var self = this;
16
16
  OHUB.bind("bridge.event_selected", function(evt) {
17
17
  self.event_id = evt.datum[evt.schema.eventID.index];
@@ -19,26 +19,28 @@ L.provide('OML.event_line_chart', ["graph/js/line_chart3", "#OML.line_chart3"],
19
19
  self.update();
20
20
  });
21
21
  },
22
-
22
+
23
23
  update: function() {
24
- var eid = this.event_id
24
+ var eid = this.event_id;
25
25
  if (! eid) return;
26
-
26
+
27
27
  var data;
28
28
  if ((data = this.data_source.rows()) == null) {
29
- throw "Missing events array in data source"
29
+ throw "Missing events array in data source";
30
30
  }
31
-
31
+
32
32
  var ei = this.schema.eventID.index;
33
33
  data = _.filter(data, function(r) {
34
34
  return r[ei] == eid;
35
- })
35
+ });
36
36
  if (data.length == 0) return;
37
37
  this.redraw(data);
38
-
38
+
39
39
  var i = 0;
40
40
  },
41
41
 
42
-
43
- }) // end of event-line_chart
44
- }) // end of provide
42
+
43
+ }); // end of event-line_chart
44
+
45
+ return event_line_chart;
46
+ }); // end of provide
@@ -1,34 +1,30 @@
1
1
 
2
- // L.provide('slickgrid/checkbox', [
3
- // 'vendor/slickgrid/slick.core.js',
4
- // 'vendor/slickgrid/slick.formatters.js',
5
- // 'vendor/slickgrid/slick.editors.js',
6
- // 'vendor/slickgrid/plugins/slick.rowselectionmodel.js',
7
- // 'vendor/slickgrid/slick.grid.js',
8
- // 'vendor/slickgrid/slick.dataview.js',
2
+ define(["graph/table2",
3
+ 'vendor/slickgrid/plugins/slick.checkboxselectcolumn',
4
+ 'css!/resource/css/bridge.css'], function(table2) {
9
5
 
10
- L.provide('OML.event_table', ["graph/js/table2", "#OML.table2",
11
- 'vendor/slickgrid/plugins/slick.checkboxselectcolumn.js',
12
- 'css/bridge.css'
13
- ], function () {
6
+ // L.provide('OML.event_table', ["graph/js/table2", "#OML.table2",
7
+ // 'vendor/slickgrid/plugins/slick.checkboxselectcolumn.js',
8
+ // 'css/bridge.css'
9
+ // ], function () {
14
10
 
15
- OML.event_table = OML.table2.extend({
11
+ var event_table = table2.extend({
16
12
  decl_properties: [
17
13
  ],
18
-
14
+
19
15
  defaults: function() {
20
16
  return this.deep_defaults({
21
- }, OML.event_table.__super__.defaults.call(this));
22
- },
23
-
17
+ }, event_table.__super__.defaults.call(this));
18
+ },
19
+
24
20
  base_css_class: 'oml-event-table',
25
-
21
+
26
22
  init_grid: function() {
27
- OML.event_table.__super__.init_grid.call(this);
23
+ event_table.__super__.init_grid.call(this);
28
24
 
29
25
  var grid = this.grid;
30
26
  var self = this;
31
-
27
+
32
28
  grid.setSelectionModel(new Slick.RowSelectionModel());
33
29
  grid.onSelectedRowsChanged.subscribe(function(e, args) {
34
30
  var rindex = args.rows[0];
@@ -39,22 +35,22 @@ L.provide('OML.event_table', ["graph/js/table2", "#OML.table2",
39
35
  }
40
36
  });
41
37
  },
42
-
38
+
43
39
  init_columns: function() {
44
- var columns = OML.event_table.__super__.init_columns.call(this);
45
-
40
+ var columns = event_table.__super__.init_columns.call(this);
41
+
46
42
  // var checkboxSelector = new Slick.CheckboxSelectColumn({
47
43
  // cssClass: "slick-cell-checkboxsel"
48
44
  // });
49
45
  // columns.splice(0, 0, checkboxSelector.getColumnDefinition());
50
-
46
+
51
47
  function health_formatter(row, cell, value, columnDef, dataContext) {
52
48
  if (value == null || value === "") {
53
49
  return "";
54
50
  }
55
51
  var value = Math.round(100 * (1 - value));
56
52
  var color;
57
-
53
+
58
54
  if (value < 30) {
59
55
  color = "silver";
60
56
  } else if (value < 50) {
@@ -69,10 +65,12 @@ L.provide('OML.event_table', ["graph/js/table2", "#OML.table2",
69
65
  }
70
66
  var hc = columns[2];
71
67
  hc.formatter = health_formatter;
72
- hc.name = 'Attention'
68
+ hc.name = 'Attention';
73
69
  return columns;
74
70
  },
75
71
 
76
-
77
- }) // end of event-table
78
- }) // end of provide
72
+
73
+ }); // end of event-table
74
+
75
+ return event_table;
76
+ });
@@ -1,14 +1,10 @@
1
1
 
2
- #require 'omf-common/mobject2'
3
- require 'omf_common/lobject'
4
- # require 'yaml'
5
- # require 'log4r'
2
+ require 'omf_base/lobject'
6
3
 
7
- #OMF::Common::Loggable.init_log 'bridge', 'development', :searchPath => File.dirname(__FILE__)
8
- OMF::Common::Loggable.init_log 'bridge', :searchPath => File.dirname(__FILE__)
4
+ OMF::Base::Loggable.init_log 'bridge', :searchPath => File.dirname(__FILE__)
9
5
 
10
6
 
11
- # If set, create fake sensor events
7
+ # If set, create fake sensor events
12
8
  $fake_bridge_events = false
13
9
  # Path to OML database
14
10
  $oml_database = 'sqlite://example/bridge/data_sources/test3.sq3'
@@ -20,10 +16,10 @@ def load_environment
20
16
  Dir.glob("#{File.dirname(__FILE__)}/data_sources/*.rb").each do |fn|
21
17
  load fn
22
18
  end
23
-
19
+
24
20
  require 'yaml'
25
21
  Dir.glob("#{File.dirname(__FILE__)}/widgets/*.yaml").each do |fn|
26
- OMF::Common::LObject.debug "Load yaml file '#{fn}'"
22
+ OMF::Base::LObject.debug "Load yaml file '#{fn}'"
27
23
  h = YAML.load_file(fn)
28
24
  if w = h['widget']
29
25
  OMF::Web.register_widget w
@@ -1,7 +1,7 @@
1
1
  #ENV['BUNDLE_GEMFILE'] = "#{File.dirname(__FILE__)}/../../Gemfile"
2
2
  #require 'bundler/setup'
3
- require 'omf_common/lobject'
4
- OMF::Common::Loggable.init_log 'demo', :searchPath => File.dirname(__FILE__)
3
+ require 'omf_base/lobject'
4
+ OMF::Base::Loggable.init_log 'demo', :searchPath => File.dirname(__FILE__)
5
5
 
6
6
 
7
7
  require 'omf_oml/table'
@@ -13,7 +13,7 @@ widget:
13
13
  - name: Network
14
14
  type: data/network2
15
15
  width: 1.0
16
- data_source:
16
+ data_source:
17
17
  name: static_network
18
18
  unique_column: id # only use the latest link and row descriptions
19
19
  dynamic: true
@@ -21,7 +21,7 @@ widget:
21
21
  nodes:
22
22
  x:
23
23
  property: x
24
- y:
24
+ y:
25
25
  property: y
26
26
  links:
27
27
  stroke_width:
@@ -31,44 +31,21 @@ widget:
31
31
  stroke_color:
32
32
  property: load
33
33
  color: red_yellow20_green() #green_yellow80_red()
34
- margin:
34
+ margin:
35
35
  left: 30
36
36
  right: 30
37
37
  interaction_mode: click # click on link to create event
38
38
 
39
39
 
40
- # - name: Link Stats All
41
- # type: data/line_chart3
42
- # #area: true # color the area between line and zero line
43
- # data_source:
44
- # name: static_network/links
45
- # dynamic: true
46
- # group_by: name
47
- # mapping:
48
- # x_axis: ts
49
- # y_axis:
50
- # property: load
51
- # min: 0
52
- # max: 1
53
- # axis:
54
- # x:
55
- # ticks:
56
- # type: time
57
- # #transition: 0
58
- # legend: Time (sec)
59
- # y:
60
- # legend: Load (bps)
61
- # margin:
62
- # left: 100
63
-
40
+
64
41
  right:
65
42
  - name: Single Link Stats
66
43
  type: data/line_chart3
67
44
  #area: true # color the area between line and zero line
68
45
  data_source:
69
46
  name: link_history
70
- #name: static_network/links
71
-
47
+ #name: static_network/links
48
+
72
49
  # Only fetch a 'slice' of the underlying data source. A slice
73
50
  # is defined by specific value in the 'slice_column' of all rows
74
51
  slice:
@@ -79,8 +56,8 @@ widget:
79
56
  group_by: name
80
57
  mapping:
81
58
  x_axis: ts
82
- y_axis:
83
- property: load
59
+ y_axis:
60
+ property: load
84
61
  min: 0
85
62
  max: 1
86
63
  axis:
@@ -91,5 +68,5 @@ widget:
91
68
  legend: Time (sec)
92
69
  y:
93
70
  legend: Load (bps)
94
- margin:
71
+ margin:
95
72
  left: 100
@@ -1,32 +1,27 @@
1
-
2
-
3
-
4
- # Simple tab showing a line chart with supporting table
5
1
  #
6
-
2
+ # Tab showing the source code used in this demo
3
+ #
7
4
  widget:
8
5
  id: code
9
6
  name: Code
10
7
  top_level: true
11
8
  priority: 600
12
9
  type: layout/tabbed
13
- widgets:
14
-
15
-
10
+ widgets:
16
11
  - name: OIDL
17
12
  type: code
18
13
  width: 1.0
19
14
  #height: 800
20
15
  content:
21
- url: file:code:of-exp.rb
22
-
16
+ url: file:code:of-exp.rb
17
+
23
18
  - name: Trema
24
19
  type: code
25
20
  width: 1.0
26
21
  #height: 800
27
22
  content:
28
- url: file:code:trema-ctl6.rb
29
-
23
+ url: file:code:trema-ctl6.rb
24
+
30
25
 
31
26
 
32
27
 
@@ -1,8 +1,7 @@
1
-
2
-
3
- # Define a 'dashboard' consisting of two columns of widgets
4
1
  #
5
-
2
+ # First tab showing the network on the left and
3
+ # link stats on the right.
4
+ #
6
5
  widget:
7
6
  id: linked_graphs
8
7
  name: Dashboard
@@ -14,7 +13,7 @@ widget:
14
13
  type: data/network2
15
14
  width: 1.0
16
15
  height: 1.0
17
- data_source:
16
+ data_source:
18
17
  name: network
19
18
  unique_column: id # only use the latest link and row descriptions
20
19
  dynamic: true
@@ -22,7 +21,7 @@ widget:
22
21
  nodes:
23
22
  x:
24
23
  property: x
25
- y:
24
+ y:
26
25
  property: y
27
26
  radius: 20
28
27
  links:
@@ -35,12 +34,12 @@ widget:
35
34
  property: load
36
35
  max: 1.0
37
36
  color: green_yellow80_red()
38
- margin:
37
+ margin:
39
38
  left: 30
40
39
  right: 30
41
- #interaction_mode: click # click on link to create event
40
+ interaction_mode: click # click on link to create event
41
+
42
42
 
43
-
44
43
  right:
45
44
  - name: Link Stats
46
45
  type: data/line_chart3
@@ -51,8 +50,8 @@ widget:
51
50
  name: link_history
52
51
  mapping:
53
52
  x_axis: ts
54
- y_axis:
55
- property: rate
53
+ y_axis:
54
+ property: rate
56
55
  #max: 1
57
56
  group_by: name
58
57
  axis:
@@ -68,5 +67,5 @@ widget:
68
67
  ticks:
69
68
  format: 's'
70
69
  transition: 0
71
- margin:
70
+ margin:
72
71
  left: 100