brewer-server 0.0.01 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 53e96f537223e39c6744346ae72f5cb415de4642
4
- data.tar.gz: ed8875e3b6d9050822baa2fca6649d83b52bc400
3
+ metadata.gz: f4bf3147a086fdf3d4860d1b7fcb1065e01d412b
4
+ data.tar.gz: 18308cd46cb5373c6535efd36b5ffbb12ba398aa
5
5
  SHA512:
6
- metadata.gz: ab75d4a830a8f11e0586f0050b3443609688308104a07806d9edb7de11f05c95a68bdf46bf63129f1db58c164be9164fed92002cfbe46bdd3d6e947972464835
7
- data.tar.gz: 1ccc22442ed4843fd94e9816a56f3a70b35559e35babdf70124c0b6e4b42ed163c91b9ae627b36956398cae740151cb3374c9c0e0151b114521c267ecf6629a8
6
+ metadata.gz: 76c4cb9aac7e26c44efcb855fb1e3394a7a107a22d9ce4715956d613b131c61984831a76966967eb033d465fd438a2ec05c9c330dbbb8a5f7a26b43f21640ee6
7
+ data.tar.gz: 6ab838e2a4ca214aefd8a87d56884ac1c4b944be95e01023a1011cf2af92f585fe683a4ad984e3f0a3b87974141e395137f17e3378fdb536f074e67bd0b8c982
@@ -0,0 +1,51 @@
1
+ require 'sinatra/base'
2
+ require "sinatra/sse"
3
+ require 'rack/flash'
4
+ require 'brewer'
5
+ require 'wannabe_bool'
6
+
7
+ module Brewer
8
+ class Server < Sinatra::Base
9
+ # SSE Mixin
10
+ include Sinatra::SSE
11
+
12
+ configure do
13
+
14
+ use Rack::Flash
15
+
16
+ set :sessions, true
17
+ set :bind, "0.0.0.0"
18
+ set :port, 8080
19
+ set :views, Proc.new { File.join(File.expand_path("../..", __dir__), "views") }
20
+ enable :sessions
21
+
22
+ $controller = Brewer::Controller.new
23
+ end
24
+
25
+ get '/' do
26
+ erb :index
27
+ end
28
+
29
+ get '/pid' do
30
+ sse_stream do |out|
31
+ EM.add_periodic_timer(2) do
32
+ out.push :event => "pid_status", :data => $controller.pid_to_web.to_json
33
+ end
34
+ end
35
+ end
36
+
37
+ get '/relays' do
38
+ sse_stream do |out|
39
+ EM.add_periodic_timer(2) do
40
+ out.push :event => "relays_status", :data => $controller.relays_status_to_web.to_json
41
+ end
42
+ end
43
+ end
44
+
45
+ get '/rspec-testing' do
46
+ 'tests are passing!'
47
+ end
48
+
49
+ run! if app_file == $0
50
+ end
51
+ end
@@ -0,0 +1,152 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Test Homepage</title>
8
+ <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
9
+ <link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.indigo-pink.min.css">
10
+ <script defer src="https://code.getmdl.io/1.3.0/material.min.js"></script>
11
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.bundle.js"></script>
12
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
13
+ </head>
14
+ <style>
15
+ body {
16
+ text-align: center;
17
+ }
18
+
19
+ .mdl_card {
20
+ max-width: 500px;
21
+ text-align: center;
22
+ margin: auto;
23
+ }
24
+
25
+ #result {
26
+ text-align: center;
27
+ }
28
+
29
+ .mdl-card__supporting-text {
30
+ color: #333;
31
+ }
32
+ </style>
33
+
34
+ <body>
35
+ <div class="mdl-grid">
36
+
37
+ <div id="result" class="mdl-cell mdl-cell--6-col">
38
+ <div class="mdl_card mdl-shadow--4dp">
39
+ <div class="mdl-card__supporting-text">
40
+ <div id="pidSpinner" class="mdl-spinner mdl-js-spinner is-active"></div>
41
+ <div id="pidInfo">
42
+ <h3 id="pid">PID STATUS: Loading...</h3>
43
+ <h3 id="sv">SV: Loading...</h3>
44
+ <h3 id="pv">PV: Loading...</h3>
45
+ </div>
46
+ </div>
47
+ </div>
48
+ </div>
49
+
50
+ <div id="result" class="mdl-cell mdl-cell--6-col">
51
+ <div class="mdl_card mdl-shadow--4dp">
52
+ <div class="mdl-card__supporting-text">
53
+ <div id="relaySpinner" class="mdl-spinner mdl-js-spinner is-active"></div>
54
+ <div id="relayInfo">
55
+ <h3 id="hltToMash">hltToMash: Loading...</h3>
56
+ <h3 id="hlt">hlt: Loading...</h3>
57
+ <h3 id="rimsToMash">rimsToMash: Loading...</h3>
58
+ <h3 id="pump">pump: Loading...</h3>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ </div>
63
+
64
+ <div class="mdl-cell mdl-cell--12-col" style="height: 500px;">
65
+ <canvas id="pvChart"></canvas>
66
+ </div>
67
+
68
+ </div>
69
+ </body>
70
+ <script type="text/javascript">
71
+ var labels = [];
72
+ var data = [];
73
+
74
+ pidInfo.style.display = "none";
75
+ relayInfo.style.display = "none";
76
+
77
+
78
+ var pidsource = new EventSource("/pid");
79
+ pidsource.addEventListener('pid_status', function (event) {
80
+ var result = JSON.parse(event.data);
81
+ console.log(data);
82
+ pid.innerText = "PID: " + (result.pid_running ? 'on' : 'off');
83
+ sv.innerText = "SV: " + result.sv + ' \u00B0F';
84
+ pv.innerText = "PV: " + result.pv + ' \u00B0F';
85
+ data.push(result.pv);
86
+ labels.push(moment().format());
87
+ if (data.length > 20) {
88
+ data.shift();
89
+ labels.shift();
90
+ }
91
+ myChart.update();
92
+ pidSpinner.style.display = "none";
93
+ pidInfo.style.display = "initial";
94
+ }, false);
95
+
96
+ var relaysource = new EventSource("/relays");
97
+ relaysource.addEventListener('relays_status', function (event) {
98
+ var data = JSON.parse(event.data);
99
+ console.log(data);
100
+ hltToMash.innerText = "HLT → " + (Boolean(data.hltToMash) ? 'mash' : 'boil');
101
+ hlt.innerText = "HLT: " + (Boolean(data.hlt) ? 'open' : 'closed');
102
+ rimsToMash.innerText = "RIMS → " + (Boolean(data.rimsToMash) ? 'mash' : 'boil');
103
+ pump.innerText = "PUMP: " + (Boolean(data.pump) ? 'on' : 'off');
104
+ relaySpinner.style.display = "none";
105
+ relayInfo.style.display = "initial";
106
+ }, false);
107
+
108
+ var ctx = document.getElementById("pvChart").getContext('2d');
109
+ var myChart = new Chart(ctx, {
110
+ type: 'line',
111
+ data: {
112
+ labels: labels,
113
+ datasets: [{
114
+ label: "PV",
115
+ tension: 0,
116
+ fill: true,
117
+ backgroundColor: "rgba(0, 0, 0, 0.5)",
118
+ borderColor: "#333",
119
+ data: data,
120
+ }]
121
+ },
122
+ options: {
123
+ maintainAspectRatio: false,
124
+ scales: {
125
+ xAxes: [{
126
+ type: "time",
127
+ time: {
128
+ format: 'HH:mm:ss',
129
+ tooltipFormat: 'HH:mm:ss'
130
+ },
131
+ ticks: {
132
+ autoSkip: true,
133
+ maxTicksLimit: 10
134
+ },
135
+ scaleLabel: {
136
+ display: true,
137
+ labelString: 'Time'
138
+ }
139
+ },],
140
+ yAxes: [{
141
+ scaleLabel: {
142
+ display: true,
143
+ labelString: 'PV Value'
144
+ }
145
+ }]
146
+ }
147
+ }
148
+ });
149
+
150
+ </script>
151
+
152
+ </html>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brewer-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.01
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luke Sweeney
@@ -25,6 +25,20 @@ dependencies:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: brewer-stats
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
28
42
  - !ruby/object:Gem::Dependency
29
43
  name: wannabe_bool
30
44
  requirement: !ruby/object:Gem::Requirement
@@ -53,6 +67,20 @@ dependencies:
53
67
  - - ">="
54
68
  - !ruby/object:Gem::Version
55
69
  version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: thin
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
56
84
  - !ruby/object:Gem::Dependency
57
85
  name: sinatra
58
86
  requirement: !ruby/object:Gem::Requirement
@@ -67,6 +95,20 @@ dependencies:
67
95
  - - ">="
68
96
  - !ruby/object:Gem::Version
69
97
  version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: sinatra-sse
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
70
112
  - !ruby/object:Gem::Dependency
71
113
  name: rack-flash3
72
114
  requirement: !ruby/object:Gem::Requirement
@@ -210,13 +252,11 @@ executables:
210
252
  extensions: []
211
253
  extra_rdoc_files: []
212
254
  files:
213
- - Gemfile
214
- - Gemfile.lock
215
- - README.md
216
- - Rakefile
217
255
  - bin/brewer-server
256
+ - lib/brewer/server.rb
218
257
  - spec/server_spec.rb
219
258
  - spec/spec_helper.rb
259
+ - views/index.erb
220
260
  homepage: https://rubygems.org/gems/brewer-server
221
261
  licenses:
222
262
  - MIT
@@ -238,7 +278,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
238
278
  version: '0'
239
279
  requirements: []
240
280
  rubyforge_project:
241
- rubygems_version: 2.2.2
281
+ rubygems_version: 2.6.12
242
282
  signing_key:
243
283
  specification_version: 4
244
284
  summary: A web interface for llamicron/brewer
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in brewer-server.gemspec
4
- gemspec
@@ -1,70 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- brewer-server (0.0.01)
5
- rack-flash3
6
- rack-test
7
- require_all
8
- sinatra
9
- wannabe_bool
10
-
11
- GEM
12
- remote: https://rubygems.org/
13
- specs:
14
- addressable (2.5.1)
15
- public_suffix (~> 2.0, >= 2.0.2)
16
- diff-lcs (1.3)
17
- docile (1.1.5)
18
- json (2.1.0)
19
- launchy (2.4.3)
20
- addressable (~> 2.3)
21
- public_suffix (2.0.5)
22
- rack (1.6.5)
23
- rack-flash3 (1.0.5)
24
- rack
25
- rack-protection (1.5.3)
26
- rack
27
- rack-test (0.6.3)
28
- rack (>= 1.0)
29
- rake (12.0.0)
30
- rdoc (5.1.0)
31
- require_all (1.4.0)
32
- rspec (3.5.0)
33
- rspec-core (~> 3.5.0)
34
- rspec-expectations (~> 3.5.0)
35
- rspec-mocks (~> 3.5.0)
36
- rspec-core (3.5.4)
37
- rspec-support (~> 3.5.0)
38
- rspec-expectations (3.5.0)
39
- diff-lcs (>= 1.2.0, < 2.0)
40
- rspec-support (~> 3.5.0)
41
- rspec-mocks (3.5.0)
42
- diff-lcs (>= 1.2.0, < 2.0)
43
- rspec-support (~> 3.5.0)
44
- rspec-support (3.5.0)
45
- simplecov (0.13.0)
46
- docile (~> 1.1.0)
47
- json (>= 1.8, < 3)
48
- simplecov-html (~> 0.10.0)
49
- simplecov-html (0.10.0)
50
- sinatra (1.4.8)
51
- rack (~> 1.5)
52
- rack-protection (~> 1.4)
53
- tilt (>= 1.3, < 3)
54
- tilt (2.0.7)
55
- wannabe_bool (0.6.0)
56
-
57
- PLATFORMS
58
- ruby
59
-
60
- DEPENDENCIES
61
- brewer-server!
62
- launchy (~> 2.4, >= 2.4.0)
63
- rake (~> 12.0, >= 12.0.0)
64
- rdoc (~> 5.1, >= 5.1.0)
65
- rspec (~> 3.5.0, >= 3.5.0)
66
- simplecov (~> 0.13.0)
67
- simplecov-html (~> 0.10.0)
68
-
69
- BUNDLED WITH
70
- 1.14.6
data/README.md DELETED
@@ -1,46 +0,0 @@
1
- # Brewer::Server
2
-
3
- This gem is a web interface for [llamicron/brewer](http://github.com/llamicron/brewer)
4
-
5
- ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- ```ruby
10
- gem 'brewer-server'
11
- ```
12
-
13
- And then execute:
14
-
15
- ```shell
16
- $ bundle
17
- ```
18
-
19
- Or install it yourself as:
20
-
21
- ```shell
22
- $ gem install brewer-server
23
- ```
24
-
25
- ## Usage
26
- Run
27
-
28
- ```shell
29
- $ brewer-server -p [port]
30
- ```
31
-
32
- replacing, `[port]` with a port of your choosing. Ports under 1024 will need sudo.
33
-
34
- Visit `localhost:[port]`
35
-
36
- If you're working on a raspberry pi as is intended, replace localhost with the ip of the pi, eg. `192.168.0.224:8080`
37
-
38
- ## Contributing
39
-
40
- Bug reports and pull requests are welcome on [GitHub](https://github.com/llamicron/brewer-server).
41
-
42
- ## License
43
-
44
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
45
-
46
- Luke Sweeney, 2017
data/Rakefile DELETED
@@ -1,6 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- task :default => :spec