omf_web 1.2.6 → 1.2.7
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +13 -0
- data/README.md +6 -0
- data/example/bridge/README.md +1 -1
- data/example/bridge/bridge.yaml +10 -0
- data/example/bridge/bridge_viz_server +41 -0
- data/example/bridge/data_sources/sensor-sqlite.rb +3 -2
- data/example/bridge/htdocs/graph/js/event_table.js +2 -7
- data/example/bridge/tabs/overview.yaml +82 -0
- data/example/openflow-gec15/dashboard_tab.yaml +1 -0
- data/example/simple/simple.yaml +1 -1
- data/example/simple/simple_dynamic.yaml +5 -3
- data/example/topo_discovery/data_sources/links.csv +3 -0
- data/example/topo_discovery/data_sources/links2.csv +21 -0
- data/example/topo_discovery/data_sources/node_info.csv +10 -0
- data/example/topo_discovery/data_sources/nodes.csv +4 -0
- data/example/topo_discovery/data_sources/nodes2.csv +11 -0
- data/example/topo_discovery/introduction.md +17 -0
- data/example/topo_discovery/topo_discovery_simple.yaml +35 -0
- data/example/topo_discovery/topo_discovery_simple2.yaml +32 -0
- data/example/topo_discovery/widgets/network.yaml +52 -0
- data/example/topo_discovery/widgets/node_info.yaml +23 -0
- data/lib/omf-web/content/file_repository.rb +5 -1
- data/lib/omf-web/content/git_repository.rb +11 -0
- data/lib/omf-web/content/repository.rb +13 -2
- data/lib/omf-web/data_source_proxy.rb +22 -10
- data/lib/omf-web/theme.rb +11 -4
- data/lib/omf-web/theme/abstract_page.rb +5 -0
- data/lib/omf-web/thin/server.rb +62 -16
- data/lib/omf-web/version.rb +1 -1
- data/lib/omf-web/widget/code_widget.rb +24 -23
- data/lib/omf-web/widget/data_widget.rb +14 -5
- data/lib/omf-web/widget/text/maruku.rb +16 -1
- data/lib/omf-web/widget/text/text_widget.rb +1 -1
- data/share/htdocs/graph/js/abstract_chart.js +7 -1
- data/share/htdocs/graph/js/abstract_multiple_datasource_chart.js +21 -3
- data/share/htdocs/graph/js/abstract_nv_chart.js +17 -11
- data/share/htdocs/graph/js/abstract_widget.js +44 -14
- data/share/htdocs/graph/js/line_chart3.js +5 -9
- data/share/htdocs/graph/js/map2.js +122 -79
- data/share/htdocs/graph/js/network2.js +205 -36
- data/share/htdocs/graph/js/table2.js +7 -11
- data/share/htdocs/js/data_source3.js +24 -4
- data/share/htdocs/vendor/VERSION_MAP.yaml +1 -1
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/css/font-awesome.css +251 -23
- data/share/htdocs/vendor/font-awesome-4.1.0/css/font-awesome.min.css +4 -0
- data/share/htdocs/vendor/font-awesome-4.1.0/fonts/FontAwesome.otf +0 -0
- data/share/htdocs/vendor/font-awesome-4.1.0/fonts/fontawesome-webfont.eot +0 -0
- data/share/htdocs/vendor/font-awesome-4.1.0/fonts/fontawesome-webfont.svg +504 -0
- data/share/htdocs/vendor/font-awesome-4.1.0/fonts/fontawesome-webfont.ttf +0 -0
- data/share/htdocs/vendor/font-awesome-4.1.0/fonts/fontawesome-webfont.woff +0 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/less/bordered-pulled.less +0 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/less/core.less +0 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/less/fixed-width.less +0 -0
- data/share/htdocs/vendor/font-awesome-4.1.0/less/font-awesome.less +17 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/less/icons.less +97 -3
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/less/larger.less +0 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/less/list.less +0 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/less/mixins.less +0 -0
- data/share/htdocs/vendor/font-awesome-4.1.0/less/path.less +14 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/less/rotated-flipped.less +0 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/less/spinning.less +8 -6
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/less/stacked.less +0 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/less/variables.less +463 -329
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/scss/_bordered-pulled.scss +0 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/scss/_core.scss +0 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/scss/_fixed-width.scss +0 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/scss/_icons.scss +97 -3
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/scss/_larger.scss +0 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/scss/_list.scss +0 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/scss/_mixins.scss +2 -2
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/scss/_path.scss +0 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/scss/_rotated-flipped.scss +0 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/scss/_spinning.scss +8 -6
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/scss/_stacked.scss +0 -0
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/scss/_variables.scss +464 -330
- data/share/htdocs/vendor/{font-awesome-4.0.3 → font-awesome-4.1.0}/scss/font-awesome.scss +1 -1
- data/share/htdocs/vendor/jquery-ui-1.8.23/js/jquery-ui.js +125 -0
- data/share/htdocs/vendor/spin/jquery.spin.js +46 -24
- data/share/htdocs/vendor/spin/spin.js +20 -17
- metadata +277 -237
- data/example/bridge/data_sources/test2.oml +0 -1808
- data/example/bridge/data_sources/test2.sq3 +0 -0
- data/example/bridge/data_sources/test31.sq3 +0 -0
- data/example/bridge/viz_server.rb +0 -59
- data/share/htdocs/vendor/font-awesome-4.0.3/css/font-awesome.min.css +0 -4
- data/share/htdocs/vendor/font-awesome-4.0.3/fonts/FontAwesome.otf +0 -0
- data/share/htdocs/vendor/font-awesome-4.0.3/fonts/fontawesome-webfont.eot +0 -0
- data/share/htdocs/vendor/font-awesome-4.0.3/fonts/fontawesome-webfont.svg +0 -414
- data/share/htdocs/vendor/font-awesome-4.0.3/fonts/fontawesome-webfont.ttf +0 -0
- data/share/htdocs/vendor/font-awesome-4.0.3/fonts/fontawesome-webfont.woff +0 -0
- data/share/htdocs/vendor/font-awesome-4.0.3/less/font-awesome.less +0 -17
- data/share/htdocs/vendor/font-awesome-4.0.3/less/path.less +0 -14
- data/share/htdocs/vendor/spin/spin.min.js +0 -1
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -13,7 +13,13 @@ At this stage the best course of action is to clone the repository
|
|
13
13
|
% cd omf_web
|
14
14
|
% export OMF_WEB=`pwd`
|
15
15
|
% bundle install
|
16
|
+
|
17
|
+
On some systems you will need to install 'libicu'
|
18
|
+
|
19
|
+
On Mac with Ports
|
16
20
|
|
21
|
+
% sudo port install icu
|
22
|
+
% bundle config build.charlock_holmes --with-icu-dir=/opt/local
|
17
23
|
|
18
24
|
Getting Started
|
19
25
|
---------------
|
data/example/bridge/README.md
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
THIS_DIR = File.dirname(File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__)
|
4
|
+
TOP_DIR = File.join(THIS_DIR, '../..')
|
5
|
+
$: << File.join(TOP_DIR, 'lib')
|
6
|
+
|
7
|
+
require 'json'
|
8
|
+
require 'omf-web/thin/server'
|
9
|
+
|
10
|
+
DESCR = %{
|
11
|
+
Start the Bridge Viz Server
|
12
|
+
}
|
13
|
+
|
14
|
+
OMF::Base::Loggable.init_log 'bridge', searchPath: THIS_DIR
|
15
|
+
|
16
|
+
# If set, create fake sensor events
|
17
|
+
$fake_bridge_events = false
|
18
|
+
# Path to OML database
|
19
|
+
$oml_database = 'sqlite://example/bridge/data_sources/test3.sq3'
|
20
|
+
|
21
|
+
|
22
|
+
opts = {
|
23
|
+
port: 4050,
|
24
|
+
handlers: {
|
25
|
+
pre_parse: lambda do |p, runner|
|
26
|
+
runner.options[:omf_config_file] = File.join(THIS_DIR, 'bridge.yaml')
|
27
|
+
|
28
|
+
p.separator ""
|
29
|
+
p.separator "BRIDGE options:"
|
30
|
+
p.on("--fake-events", "If set, create fake sensor events") { $fake_bridge_events = true }
|
31
|
+
p.on("--oml-database DATABASE", "Database containing bridge data [#{$oml_database}]") do |f|
|
32
|
+
$oml_database = f
|
33
|
+
end
|
34
|
+
p.separator ""
|
35
|
+
end,
|
36
|
+
},
|
37
|
+
footer_left: "Imagined by NICTA",
|
38
|
+
footer_right: "git:omf_web/bridge",
|
39
|
+
}
|
40
|
+
|
41
|
+
OMF::Web::Server.start('omf_web_server', DESCR, TOP_DIR, opts)
|
@@ -25,8 +25,9 @@ end
|
|
25
25
|
class BridgeSensor < OMF::Base::LObject
|
26
26
|
attr_reader :table
|
27
27
|
|
28
|
-
def initialize(db_name)
|
28
|
+
def initialize(db_name, fake_bridge_events)
|
29
29
|
@db_name = db_name
|
30
|
+
@fake_bridge_events = fake_bridge_events
|
30
31
|
end
|
31
32
|
|
32
33
|
# 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
|
@@ -97,4 +98,4 @@ class BridgeSensor < OMF::Base::LObject
|
|
97
98
|
end
|
98
99
|
end
|
99
100
|
end
|
100
|
-
wv = BridgeSensor.new($oml_database).run()
|
101
|
+
wv = BridgeSensor.new($oml_database, $fake_bridge_events).run()
|
@@ -1,12 +1,7 @@
|
|
1
1
|
|
2
2
|
define(["graph/table2",
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
// L.provide('OML.event_table', ["graph/js/table2", "#OML.table2",
|
7
|
-
// 'vendor/slickgrid/plugins/slick.checkboxselectcolumn.js',
|
8
|
-
// 'css/bridge.css'
|
9
|
-
// ], function () {
|
3
|
+
'vendor/slickgrid/plugins/slick.checkboxselectcolumn',
|
4
|
+
'css!/resource/css/bridge.css'], function(table2) {
|
10
5
|
|
11
6
|
var event_table = table2.extend({
|
12
7
|
decl_properties: [
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# Shows full width model of the bridge followed by two
|
2
|
+
# half-width widgets, one listing the last N events and
|
3
|
+
# the other one details of a single event (selected in the
|
4
|
+
# former widget)
|
5
|
+
#
|
6
|
+
|
7
|
+
|
8
|
+
tabs:
|
9
|
+
- id: overview
|
10
|
+
name: Overview
|
11
|
+
priority: 900
|
12
|
+
chrome: false # don't show title
|
13
|
+
widgets:
|
14
|
+
- type: data/bridge
|
15
|
+
title: Context
|
16
|
+
data_source:
|
17
|
+
name: health
|
18
|
+
mapping:
|
19
|
+
health: health
|
20
|
+
fill_color:
|
21
|
+
property: health
|
22
|
+
#scale: 0.04 # 1.0 / 25
|
23
|
+
color: red_green() # () indicates a color scale
|
24
|
+
margin:
|
25
|
+
left: 20
|
26
|
+
right: 20
|
27
|
+
|
28
|
+
- type: layout/two_columns/50_50
|
29
|
+
left:
|
30
|
+
- type: data/event_table
|
31
|
+
title: Events
|
32
|
+
data_source:
|
33
|
+
name: health
|
34
|
+
dynamic: 1 # check once a second
|
35
|
+
columns:
|
36
|
+
- field: eventID
|
37
|
+
name: Event ID
|
38
|
+
behavior: select
|
39
|
+
cssClass: cell-selection
|
40
|
+
selectable: true
|
41
|
+
|
42
|
+
- field: jointID
|
43
|
+
name: Joint ID
|
44
|
+
|
45
|
+
- field: health
|
46
|
+
topts:
|
47
|
+
enableCellNavigation: true
|
48
|
+
margin:
|
49
|
+
left: 5
|
50
|
+
right:
|
51
|
+
- type: data/event_line_chart
|
52
|
+
title: Sensor Reading
|
53
|
+
data_source:
|
54
|
+
name: sensors
|
55
|
+
# Only fetch a 'slice' of the underlying data source. A slice
|
56
|
+
# is defined by specific value in the 'slice_column' of all rows
|
57
|
+
slice:
|
58
|
+
slice_column: eventID
|
59
|
+
event:
|
60
|
+
name: bridge.event_selected
|
61
|
+
key: eventID
|
62
|
+
mapping:
|
63
|
+
x_axis: time
|
64
|
+
y_axis:
|
65
|
+
property: v1
|
66
|
+
group_by:
|
67
|
+
property: sensorID
|
68
|
+
axis:
|
69
|
+
x:
|
70
|
+
ticks:
|
71
|
+
type: date
|
72
|
+
#format: %I:%M
|
73
|
+
count: 5
|
74
|
+
legend: Time
|
75
|
+
y:
|
76
|
+
ticks:
|
77
|
+
format: s
|
78
|
+
legend: V1
|
79
|
+
margin:
|
80
|
+
top: 10
|
81
|
+
left: 60
|
82
|
+
right: 20
|
data/example/simple/simple.yaml
CHANGED
@@ -5,13 +5,15 @@
|
|
5
5
|
#
|
6
6
|
|
7
7
|
server:
|
8
|
-
name: 'Simple Demo'
|
9
|
-
|
8
|
+
name: 'Simple Dynamic Demo'
|
9
|
+
page_title: 'Simple Dynamic Demo'
|
10
|
+
port: 4010
|
10
11
|
|
11
12
|
data_sources:
|
12
13
|
- id: signal
|
13
14
|
table: wave
|
14
|
-
|
15
|
+
check_interval: 2 # Check every 2 seconds
|
16
|
+
query_interval: 1
|
15
17
|
limit: 5 # Fetch 5 rows each time
|
16
18
|
database:
|
17
19
|
id: sample
|
@@ -0,0 +1,21 @@
|
|
1
|
+
id:int,from_id:string,to_id:string,zone:int
|
2
|
+
1,00:00:00:00:c1:00,rf1,0
|
3
|
+
2,00:00:00:00:c2:00,rf1,0
|
4
|
+
3,10:10:10:10:10:fe,rf2,0
|
5
|
+
4,rf1,00:00:00:00:c1:00,0
|
6
|
+
5,rf1,00:00:00:00:c2:00,0
|
7
|
+
6,rf1,rf2,0
|
8
|
+
7,rf1,ba:5e:ba:11:00:00,0
|
9
|
+
8,rf2,rf1,0
|
10
|
+
9,rf2,ba:5e:ba:11:00:00,0
|
11
|
+
10,rf2,ba:5e:ba:11:ad:00,0
|
12
|
+
11,rf2,10:10:10:10:10:fe,0
|
13
|
+
12,rf3,ba:5e:ba:11:db:00,0
|
14
|
+
13,rf3,ba:5e:ba:11:ad:00,0
|
15
|
+
14,ba:5e:ba:11:00:00,rf1,0
|
16
|
+
15,ba:5e:ba:11:00:00,rf2,0
|
17
|
+
16,ba:5e:ba:11:00:01,ba:5e:ba:11:db:00,0
|
18
|
+
17,ba:5e:ba:11:ad:00,rf2,0
|
19
|
+
18,ba:5e:ba:11:ad:00,rf3,0
|
20
|
+
19,ba:5e:ba:11:db:00,rf3,0
|
21
|
+
20,ba:5e:ba:11:db:00,ba:5e:ba:11:00:01,0
|
@@ -0,0 +1,11 @@
|
|
1
|
+
id:string,name,type
|
2
|
+
00:00:00:00:c1:00,x1,unknown
|
3
|
+
00:00:00:00:c2:00,x2,unknown
|
4
|
+
10:10:10:10:10:fe,x3,unknown
|
5
|
+
rf1,rf1,router
|
6
|
+
rf2,rf2,router
|
7
|
+
rf3,rf3,router
|
8
|
+
ba:5e:ba:11:00:00,x4,unknown
|
9
|
+
ba:5e:ba:11:00:01,x5,host
|
10
|
+
ba:5e:ba:11:ad:00,x6,unknown
|
11
|
+
ba:5e:ba:11:db:00,x7,unknown
|
@@ -0,0 +1,17 @@
|
|
1
|
+
title: Introduction
|
2
|
+
|
3
|
+
|
4
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin
|
5
|
+
sollicitudin nibh eu ligula lobortis ornare. Sed nibh nibh,
|
6
|
+
ullamcorper at vehicula ac, molestie ac nunc. Duis sodales, nisi vel
|
7
|
+
pellentesque imperdiet, nisi massa accumsan lorem, gravida scelerisque
|
8
|
+
velit est vitae eros. Suspendisse eu lacinia elit.
|
9
|
+
|
10
|
+
|
11
|
+
Suspendisse laoreet, lacus quis dignissim volutpat, dolor augue convallis lectus,
|
12
|
+
ac consectetur yyyy sem iaculis diam. Donec iaculis mattis iaculis.
|
13
|
+
Curabitur ut nisl in sapien semper ullamcorper in id turpis. Vivamus
|
14
|
+
sed sapien justo, ac scelerisque nibh. Sed eget quam velit. Lorem
|
15
|
+
ipsum dolor sit amet, consectetur adipiscing elit.
|
16
|
+
|
17
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
# Simple tab showing a line chart with supporting table
|
5
|
+
#
|
6
|
+
|
7
|
+
server:
|
8
|
+
name: 'Topology Discovery'
|
9
|
+
page_title: 'Topology Discovery'
|
10
|
+
port: 4020
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
repositories:
|
15
|
+
- id: content
|
16
|
+
type: file
|
17
|
+
top_dir: .
|
18
|
+
|
19
|
+
include: widgets/network.yaml
|
20
|
+
|
21
|
+
widgets:
|
22
|
+
- id: main
|
23
|
+
name: Main
|
24
|
+
top_level: true
|
25
|
+
priority: 900
|
26
|
+
type: layout/two_columns/33_66
|
27
|
+
left:
|
28
|
+
- name: Introduction
|
29
|
+
type: text
|
30
|
+
content:
|
31
|
+
url: file:content:introduction.md
|
32
|
+
right:
|
33
|
+
- network
|
34
|
+
|
35
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
# Simple tab showing a line chart with supporting table
|
5
|
+
#
|
6
|
+
|
7
|
+
server:
|
8
|
+
name: 'Topology Discovery'
|
9
|
+
page_title: 'Topology Discovery'
|
10
|
+
port: 4020
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
repositories:
|
15
|
+
- id: content
|
16
|
+
type: file
|
17
|
+
top_dir: .
|
18
|
+
|
19
|
+
include: widgets/*.yaml
|
20
|
+
|
21
|
+
widgets:
|
22
|
+
- id: main
|
23
|
+
name: Main
|
24
|
+
top_level: true
|
25
|
+
priority: 900
|
26
|
+
type: layout/two_columns/66_33
|
27
|
+
left:
|
28
|
+
- network
|
29
|
+
right:
|
30
|
+
- node_info
|
31
|
+
|
32
|
+
|
@@ -0,0 +1,52 @@
|
|
1
|
+
|
2
|
+
data_sources:
|
3
|
+
- id: network/nodes
|
4
|
+
file: data_sources/nodes2.csv # checking that node ids can be anything
|
5
|
+
- id: network/links
|
6
|
+
file: data_sources/links2.csv
|
7
|
+
|
8
|
+
widgets:
|
9
|
+
- id: network
|
10
|
+
name: Network
|
11
|
+
type: data/network2
|
12
|
+
height: 1.0
|
13
|
+
#data_source: network
|
14
|
+
data_sources:
|
15
|
+
- name: nodes
|
16
|
+
stream: network/nodes
|
17
|
+
- name: links
|
18
|
+
stream: network/links
|
19
|
+
|
20
|
+
mapping:
|
21
|
+
nodes:
|
22
|
+
x: auto # force layout
|
23
|
+
y: auto
|
24
|
+
radius: 15
|
25
|
+
# property: capacity
|
26
|
+
# scale: 20
|
27
|
+
# min: 4
|
28
|
+
fill_color: #white
|
29
|
+
property: type
|
30
|
+
color:
|
31
|
+
router: orange
|
32
|
+
switch: green
|
33
|
+
host: lightblue
|
34
|
+
unknown: gray
|
35
|
+
# property: capacity
|
36
|
+
# color: red_yellow20_green()
|
37
|
+
stroke_width: 2
|
38
|
+
label_color: black
|
39
|
+
label_size: 14
|
40
|
+
links:
|
41
|
+
stroke_width: 8
|
42
|
+
stroke_color:
|
43
|
+
property: zone
|
44
|
+
color: category10()
|
45
|
+
|
46
|
+
force:
|
47
|
+
link_distance: 50
|
48
|
+
charge: -1000
|
49
|
+
|
50
|
+
line_mode: straight
|
51
|
+
interaction_mode: click
|
52
|
+
|