ardtweeno 0.3.1 → 0.4.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.
data/test/node_test.rb CHANGED
@@ -1,4 +1,10 @@
1
- require 'rubygems'
1
+ ####################################################################################################
2
+ # @author David Kirwan https://github.com/davidkirwan/ardtweeno
3
+ # @description Ardtweeno::Node test fixtures
4
+ #
5
+ # @date 2013-08-18
6
+ ####################################################################################################
7
+
2
8
  require 'test/unit'
3
9
  require 'rack/test'
4
10
  require 'ardtweeno'
@@ -12,8 +18,6 @@ class NodeTest < Test::Unit::TestCase
12
18
 
13
19
  include Rack::Test::Methods
14
20
 
15
- attr_accessor :node
16
-
17
21
 
18
22
  # Test suite fixtures
19
23
  def setup
@@ -1,4 +1,10 @@
1
- require 'rubygems'
1
+ ####################################################################################################
2
+ # @author David Kirwan https://github.com/davidkirwan/ardtweeno
3
+ # @description Ardtweeno::NodeManager test fixtures
4
+ #
5
+ # @date 2013-08-18
6
+ ####################################################################################################
7
+
2
8
  require 'test/unit'
3
9
  require 'rack/test'
4
10
  require 'ardtweeno'
@@ -12,8 +18,6 @@ class NodeManagerTest < Test::Unit::TestCase
12
18
 
13
19
  include Rack::Test::Methods
14
20
 
15
- attr_accessor :dispatch
16
-
17
21
 
18
22
  # Test suite fixtures
19
23
  def setup
@@ -159,7 +163,7 @@ class NodeManagerTest < Test::Unit::TestCase
159
163
  end
160
164
 
161
165
  assert_nothing_raised do
162
- assert_equal(true, @nodemanager.watched?(@init[0]))
166
+ assert_equal(true, @nodemanager.watched?("node6"))
163
167
  end
164
168
 
165
169
  assert_nothing_raised do
@@ -167,7 +171,7 @@ class NodeManagerTest < Test::Unit::TestCase
167
171
  end
168
172
 
169
173
  assert_nothing_raised do
170
- assert_equal(false, @nodemanager.watched?(@init[0]))
174
+ assert_equal(false, @nodemanager.watched?("node6"))
171
175
  end
172
176
 
173
177
  end
data/test/packet_test.rb CHANGED
@@ -1,4 +1,10 @@
1
- require 'rubygems'
1
+ ###################################################################################################
2
+ # @author David Kirwan https://github.com/davidkirwan/ardtweeno
3
+ # @description Ardtweeno::Packet test fixtures
4
+ #
5
+ # @date 2013-08-18
6
+ ####################################################################################################
7
+
2
8
  require 'test/unit'
3
9
  require 'rack/test'
4
10
  require 'ardtweeno'
@@ -12,8 +18,6 @@ class PacketTest < Test::Unit::TestCase
12
18
 
13
19
  include Rack::Test::Methods
14
20
 
15
- attr_accessor :packetArray
16
-
17
21
 
18
22
  # Test suite fixtures, setup before each test is executed
19
23
  def setup
data/test/parser_test.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  # @author David Kirwan https://github.com/davidkirwan/ardtweeno
3
3
  # @description Ardtweeno serialparser subsystem test fixtures
4
4
  #
5
- # @date 05-06-2013
5
+ # @date 2013-08-18
6
6
  ####################################################################################################
7
7
 
8
8
  require 'rubygems'
@@ -20,8 +20,6 @@ class ParserTest < Test::Unit::TestCase
20
20
 
21
21
  include Rack::Test::Methods
22
22
 
23
- attr_accessor :parser, :mock, :modem, :validdata, :invaliddata, :validdata_invalidnode
24
-
25
23
 
26
24
  # Test suite fixtures
27
25
  def setup
@@ -275,4 +275,12 @@ class RESTAPITest < Test::Unit::TestCase
275
275
  end
276
276
 
277
277
 
278
+ # Test the watch list commands
279
+ def test_watch_node
280
+
281
+
282
+
283
+ end
284
+
285
+
278
286
  end
@@ -0,0 +1,64 @@
1
+ ####################################################################################################
2
+ # @author David Kirwan https://github.com/davidkirwan/ardtweeno
3
+ # @description Ardtweeno::RingBuffer test fixtures
4
+ #
5
+ # @date 2013-08-17
6
+ ####################################################################################################
7
+
8
+ require 'test/unit'
9
+ require 'ardtweeno'
10
+ require 'rack/test'
11
+ require 'logger'
12
+ require 'json'
13
+
14
+
15
+ ENV['RACK_ENV'] = 'test'
16
+
17
+
18
+ class RingBufferTest < Test::Unit::TestCase
19
+
20
+ include Rack::Test::Methods
21
+
22
+
23
+ # Test suite fixtures
24
+ def setup
25
+ @buffer = Array.new
26
+ @size = 50
27
+ @ringbuffer = Ardtweeno::RingBuffer.new(@size)
28
+
29
+ 50.times do |i|
30
+ @buffer.push(i)
31
+ @ringbuffer.push(i)
32
+ end
33
+
34
+ end
35
+
36
+
37
+
38
+ # tear down the test fixtures between each test
39
+ def teardown
40
+ @buffer = nil
41
+ @size = nil
42
+ @ringbuffer = nil
43
+ end
44
+
45
+
46
+
47
+ # Test to ensure the Ardtweeno::RingBuffer#to_s method functions correctly
48
+ def test_tostring
49
+ assert_equal(@buffer.to_s, @ringbuffer.to_s)
50
+ end
51
+
52
+ # Test to ensure the Ardtweeo::RingBuffer#to_a method functions correctly
53
+ def test_toarray
54
+ assert_equal(@buffer, @ringbuffer.to_a)
55
+ end
56
+
57
+ # Test to ensure the Ardtweeno::RingBuffer#clear method functions correctly
58
+ def test_clear
59
+ @ringbuffer.clear
60
+ assert_equal([], @ringbuffer.to_a)
61
+ end
62
+
63
+
64
+ end
data/views/home.erb CHANGED
@@ -24,4 +24,5 @@ The system is designed as a PaaS (platform as a service) for the
24
24
  <% end %>
25
25
  <% end %>
26
26
 
27
- </div>
27
+ </div>
28
+ <script type="text/javascript">keepUpdating = false;</script>
data/views/index.erb CHANGED
@@ -4,9 +4,7 @@
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
5
  <title>Ardtweeno Application Gateway</title>
6
6
  <link href="/main.css" media="screen" rel="stylesheet" type="text/css" />
7
- <link rel="icon" href="/favicon.ico" type="image/x-icon">
8
- <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
9
-
7
+ <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
10
8
  <link rel="stylesheet" href="/highlightjs/styles/monokai.css" />
11
9
 
12
10
  </head>
@@ -30,6 +28,7 @@
30
28
  <ul class="mytabs" id="tabs">
31
29
  <li class="current"><a href="/home">Home</a></li>
32
30
  <li><a href="/status">Status</a></li>
31
+ <li><a href="/topology">Topology</a></li>
33
32
  </ul>
34
33
  <div class="mytabs-container" id="tabs-container">
35
34
  <img src="/img/ajax_preloader.gif" width="64" height="64" class="preloader" />
@@ -40,15 +39,20 @@
40
39
  <div id="footer">
41
40
  <hr/>
42
41
  <p id="licence">
43
- All content is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/deed.en_US">Attribution-NonCommercial 3.0 Unported</a>.<br /><br /><a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/deed.en_US"><img alt="Creative Commons License" style="border-width:0" src="/img/BY-NC.png" /></a>
42
+ Unless otherwise stated, all content is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/deed.en_US">Attribution-NonCommercial 3.0 Unported</a>.<br /><br /><a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/deed.en_US"><img alt="Creative Commons License" style="border-width:0" src="/img/BY-NC.png" /></a>
44
43
  </p>
45
44
  </div>
46
-
47
- <script type="text/javascript" src="/jquery-1.8.2.min.js"></script>
48
- <!--<script type="text/javascript" src="/jquery-2.0.1.min.js"></script>-->
49
- <script src="/highcharts.js"></script>
45
+
46
+ <!--<script type="text/javascript" src="/jquery/jquery-1.8.2.min.js"></script>-->
47
+ <!--<script type="text/javascript" src="/jquery/jquery-1.9.1.min.js"></script>-->
48
+ <!--<script type="text/javascript" src="/jquery/jquery-2.0.1.min.js"></script>-->
49
+ <script type="text/javascript" src="/jquery/jquery-2.0.2.min.js"></script>
50
+ <script type="text/javascript" src="/raphael/raphael-min.js"></script>
51
+ <link href="/flot/examples.css" rel="stylesheet" type="text/css">
52
+ <script language="javascript" type="text/javascript" src="/flot/jquery.flot.js"></script>
53
+ <script language="javascript" type="text/javascript" src="/flot/jquery.flot.time.js"></script>
50
54
  <script type="text/javascript" src="/main.js"></script>
51
- <script src="/highlightjs/highlight.pack.js"></script>
52
- <script>hljs.initHighlightingOnLoad();</script>
55
+ <script type="text/javascript" src="/highlightjs/highlight.pack.js"></script>
56
+ <script type="text/javascript">hljs.initHighlightingOnLoad();</script>
53
57
  </body>
54
58
  </html>
@@ -0,0 +1,55 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <% unless node.nil? %>
6
+ <title>Ardtweeno <%= node %> Punchcard Graph</title>
7
+ <% else %>
8
+ <title>Ardtweeno Punchcard Graph</title>
9
+ <% end %>
10
+ <link href="/main.css" media="screen" rel="stylesheet" type="text/css" />
11
+
12
+ <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
13
+
14
+ <link href="/bootstrap/bootstrap.min.css" media="screen" rel="stylesheet" type="text/css" />
15
+ <script type="text/javascript" src="/jquery/jquery-2.0.2.min.js"></script>
16
+ <script type="text/javascript" src="/bootstrap/bootstrap.min.js"></script>
17
+
18
+
19
+ <script type="text/javascript" src="/raphael/raphael-min.js"></script>
20
+ <script type="text/javascript" src="/raphael/g.raphael.js"></script>
21
+ <script type="text/javascript" src="/raphael/g.dot.js"></script>
22
+ <script type="text/javascript">
23
+ window.onload = function () {
24
+ var r = Raphael("punchcard-holder"),
25
+ xs = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],
26
+ ys = [7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
27
+
28
+ <% unless ourGraphData.nil? %>
29
+ data = <%= ourGraphData.to_s %>
30
+ <% end %>
31
+
32
+ <% unless ourGraphDays.nil? %>
33
+ axisy = <%= ourGraphDays %>,
34
+ <% end %>
35
+ axisx = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"];
36
+
37
+ r.dotchart(10, 10, 620, 260, xs, ys, data, {symbol: "o", max: 10, heat: true, axis: "0 0 1 1", axisxstep: 23, axisystep: 6, axisxlabels: axisx, axisxtype: " ", axisytype: " ", axisylabels: axisy}).hover(function () {
38
+ this.marker = this.marker || r.tag(this.x, this.y, this.value, 0, this.r + 2).insertBefore(this);
39
+ this.marker.show();
40
+ }, function () {
41
+ this.marker && this.marker.hide();
42
+ });
43
+ };
44
+ </script>
45
+ <script type="text/javascript">keepUpdating = false;</script>
46
+ </head>
47
+
48
+ <body>
49
+ <div id="content"><a href="/"><button id="punchcard-home" class="btn btn-large btn-inverse" type="button">Home</button></a></div>
50
+ <h3 id="punchcard-title">Punchcard Graph for <%= node %></h3>
51
+ <p id="punchcard-range"><%= ourGraphRange %></p>
52
+ <div id="punchcard-holder"></div>
53
+ </body>
54
+
55
+ </html>
data/views/status.erb CHANGED
@@ -1,158 +1,71 @@
1
1
  <p id="blurb">
2
- System Status
2
+ System Status
3
3
  </p>
4
4
 
5
5
  <script type="text/javascript">
6
- $(function () {
7
- $(document).ready(function() {
8
- Highcharts.setOptions({
9
- global: {
10
- useUTC: false
11
- }
12
- });
13
-
14
- var chart;
15
- $('#loadgraph').highcharts({
16
- chart: {
17
- type: 'spline',
18
- animation: Highcharts.svg, // don't animate in old IE
19
- height: 400,
20
- marginRight: 10,
21
- events: {
22
- load: function() {
23
-
24
- // set up the updating of the chart each second
25
- var series0 = this.series[0];
26
- var series1 = this.series[1];
27
- setInterval(function() {
6
+ $(function() {
28
7
 
29
- var x = (new Date()).getTime(); // current time
8
+ var options = {
9
+ xaxis: { mode: 'time' },
10
+ legend: { show: true,
11
+ container: null,
12
+ position: 'ne',
13
+ backgroundColor: '#DBBFFF',
14
+ backgroundOpacity: 0.5 }
15
+ };
30
16
 
31
- $.ajax({
32
- url: '/api/v1/system/status',
33
- dataType: 'json',
34
- success: function(data){
35
- var theData = JSON.parse(JSON.stringify(data));
36
- console.log(theData.running);
37
- console.log(theData.cpuload);
38
- console.log(theData.memload);
39
-
40
- var x = (new Date()).getTime();
41
- var y = parseFloat(theData.cpuload);
42
- var z = parseFloat(theData.memload);
43
-
44
- series0.addPoint([x, y], true, true);
45
- series1.addPoint([x, z], true, true);
46
- },
47
- error: function(xhr, status, error){
48
- console.log("fail");
49
- }
50
- });
17
+ var data = [];
18
+ alreadyFetched = {};
19
+ $.plot("#placeholder", data, options);
51
20
 
52
- }, 10000);
53
- }
54
- }
55
- },
56
- title: {
57
- text: 'Ardtweeno Gateway Statistics'
58
- },
59
- xAxis: {
60
- type: 'datetime',
61
- tickPixelInterval: 150
62
- },
63
- yAxis: {
64
- title: {
65
- text: '% Load'
66
- },
67
- plotLines: [{
68
- value: 0,
69
- width: 0.1,
70
- color: '#808080'
71
- }]
72
- },
73
- tooltip: {
74
- formatter: function() {
75
- return '<b>'+ this.series.name +'</b><br/>'+
76
- Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) +'<br/>'+
77
- Highcharts.numberFormat(this.y, 2);
78
- }
79
- },
80
- legend: {
81
- enabled: true
82
- },
83
- exporting: {
84
- enabled: false
85
- },
86
- series: [{
87
- name: 'CPU Load',
88
- marker: {
89
- symbol: 'square'
90
- },
91
- color: 'red',
92
- data: (function() {
93
- // generate an array of random data
94
- var data = [],
95
- time = (new Date()).getTime(),
96
- i;
97
-
98
- for (i = -89; i <= 0; i++) {
99
- data.push({
100
- x: time + i * 10000,
101
- y: 0.0
102
- });
103
- }
104
- return data;
105
- })()
106
- },
107
- {
108
- name: 'Mem Load',
109
- marker: {
110
- symbol: 'triangle'
111
- },
112
- data: (function() {
113
- // generate an array of random data
114
- var data = [],
115
- time = (new Date()).getTime(),
116
- i;
117
-
118
- for (i = -89; i <= 0; i++) {
119
- data.push({
120
- x: time + i * 10000,
121
- y: 0.0
122
- });
123
- }
124
- return data;
125
- })()
126
- }]
127
- });
128
- });
129
-
130
- });
21
+ function fetchData() {
22
+ function onDataReceived(series) {
23
+ var thePlot = [series.buffer[0], series.buffer[1]];
24
+ $.plot("#placeholder", thePlot, options);
25
+ }
26
+
27
+ $.ajax({
28
+ url: "/api/v1/system/status/list",
29
+ type: "GET",
30
+ dataType: "json",
31
+ success: onDataReceived
32
+ });
33
+
34
+ setTimeout(fetchData, 10000);
35
+ }
36
+
37
+ setTimeout(fetchData, 1000);
38
+ });
131
39
  </script>
132
40
 
133
41
  <table class="table table-bordered">
134
42
  <thead>
135
43
  <tr>
136
- <td>header</td>
137
- <td>header1</td>
138
- <td>header2</td>
44
+ <td><b>Device</b></td>
45
+ <td><b>Size</b></td>
46
+ <td><b>Used</b></td>
47
+ <td><b>Avail</b></td>
48
+ <td><b>Percent Used</b></td>
49
+ <td><b>Mount</b></td>
139
50
  </tr>
140
51
  </thead>
141
52
 
142
53
  <tbody>
54
+ <% diskusage.each do |i| %>
143
55
  <tr>
144
- <td>test</td>
145
- <td>test2</td>
146
- <td>test3</td>
147
- </tr>
148
- <tr>
149
- <td>test</td>
150
- <td>test2</td>
151
- <td>test3</td>
56
+ <td><%= i[:device] %></td>
57
+ <td><%= i[:size] %></td>
58
+ <td><%= i[:used] %></td>
59
+ <td><%= i[:avail] %></td>
60
+ <td><%= i[:use] %></td>
61
+ <td><%= i[:mount] %></td>
152
62
  </tr>
63
+ <% end %>
153
64
  </tbody>
154
65
  </table>
155
66
 
156
67
 
157
- <div id="loadgraph">
68
+ <div class="graph-container">
69
+ <div id="placeholder" class="graph-placeholder"></div>
70
+
158
71
  </div>
@@ -0,0 +1,12 @@
1
+ <p id="blurb">
2
+ System Topology
3
+ </p>
4
+
5
+ <script type='text/javascript'>
6
+ <% unless theTopology.nil? %>
7
+ <%= theTopology %>
8
+ <% end %>
9
+ </script>
10
+ <script type="text/javascript">keepUpdating = false;</script>
11
+
12
+ <div id="topology-canvas"></div>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ardtweeno
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Kirwan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-14 00:00:00.000000000 Z
11
+ date: 2013-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: 1.5.0
83
- - !ruby/object:Gem::Dependency
84
- name: rufus-scheduler
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - '>='
88
- - !ruby/object:Gem::Version
89
- version: 2.0.0
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - '>='
95
- - !ruby/object:Gem::Version
96
- version: 2.0.0
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: typhoeus
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -108,20 +94,6 @@ dependencies:
108
94
  - - '>='
109
95
  - !ruby/object:Gem::Version
110
96
  version: 0.6.3
111
- - !ruby/object:Gem::Dependency
112
- name: foreman
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - '>='
116
- - !ruby/object:Gem::Version
117
- version: 0.63.0
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - '>='
123
- - !ruby/object:Gem::Version
124
- version: 0.63.0
125
97
  description: "Ardtweeno - Application Gateway bridges device connected through a serial
126
98
  link to devices connected \nover Internet Protocol. It is designed as a PaaS capable
127
99
  of being run on the ARM powered Raspberry Pi\nModel B. It exposes a RESTAPI powered
@@ -142,6 +114,7 @@ files:
142
114
  - lib/ardtweeno/nodemanager.rb
143
115
  - lib/ardtweeno/packet.rb
144
116
  - lib/ardtweeno/restapi.rb
117
+ - lib/ardtweeno/ringbuffer.rb
145
118
  - lib/ardtweeno/serialparser.rb
146
119
  - CHANGELOG
147
120
  - COPYING
@@ -151,16 +124,15 @@ files:
151
124
  - Procfile
152
125
  - README.md
153
126
  - Rakefile
154
- - public/bootstrap.min.js
155
- - public/highcharts.js
156
- - public/jquery-1.8.2.min.js
157
- - public/jquery-2.0.1.min.js
127
+ - public/favicon.ico
158
128
  - public/main.css
159
129
  - public/main.js
160
130
  - views/createpost.erb
161
131
  - views/home.erb
162
132
  - views/index.erb
133
+ - views/punchcard.erb
163
134
  - views/status.erb
135
+ - views/topology.erb
164
136
  - resources/conf.yaml
165
137
  - resources/nodelist.yaml
166
138
  - resources/posts.yaml
@@ -192,6 +164,7 @@ files:
192
164
  - test/packet_test.rb
193
165
  - test/parser_test.rb
194
166
  - test/rest_api_test.rb
167
+ - test/ringbuffer_test.rb
195
168
  - test/serialport_mock.rb
196
169
  - test/test_helper.rb
197
170
  homepage: http://rubygems.org/gems/ardtweeno