Commit 727904ec246f1de212c7e1f9fc42d2f64ae4fcda
1 parent
f410645402
Exists in
master
template
Showing 2 changed files with 19 additions and 1 deletions Inline Diff
lib/modem-dashboard/index.js
1 | "use strict"; | 1 | "use strict"; |
2 | 2 | ||
3 | const express = require('express'); | 3 | const express = require('express'); |
4 | const nunjucks = require('nunjucks'); | 4 | const nunjucks = require('nunjucks'); |
5 | 5 | ||
6 | const config = require('komodo-sdk/config'); | 6 | const config = require('komodo-sdk/config'); |
7 | const logger = require('komodo-sdk/logger'); | 7 | const logger = require('komodo-sdk/logger'); |
8 | const matrix = require('komodo-sdk/matrix'); | 8 | const matrix = require('komodo-sdk/matrix'); |
9 | 9 | ||
10 | 10 | ||
11 | const routerSms = require('./router-sms'); | 11 | const routerSms = require('./router-sms'); |
12 | const routerUssd = require('./router-ussd'); | 12 | const routerUssd = require('./router-ussd'); |
13 | const routerStocks = require('./router-stocks'); | 13 | const routerStocks = require('./router-stocks'); |
14 | 14 | ||
15 | const app = express(); | 15 | const app = express(); |
16 | 16 | ||
17 | app.use(express.static(__dirname + '/public', {maxAge: 24 * 3600 * 1000})); | 17 | app.use(express.static(__dirname + '/public', {maxAge: 24 * 3600 * 1000})); |
18 | 18 | ||
19 | nunjucks.configure(__dirname + '/views', { | 19 | nunjucks.configure(__dirname + '/views', { |
20 | autoescape: true, | 20 | autoescape: true, |
21 | noCache: true, | 21 | noCache: true, |
22 | express: app | 22 | express: app |
23 | }); | 23 | }); |
24 | 24 | ||
25 | app.use(function(req, res, next) { | ||
26 | res.locals.site_name = config.handler_name; | ||
27 | }) | ||
28 | |||
25 | function modemSignal(req, res, next) { | 29 | function modemSignal(req, res, next) { |
26 | const signal_strength = matrix && matrix.modem && matrix.modem.signal_strength ? matrix.modem.signal_strength : 0; | 30 | const signal_strength = matrix && matrix.modem && matrix.modem.signal_strength ? matrix.modem.signal_strength : 0; |
27 | res.locals.signal_strength = signal_strength; | 31 | res.locals.signal_strength = signal_strength; |
28 | 32 | ||
29 | if (signal_strength < 2 || !signal_strength) { | 33 | if (signal_strength < 2 || !signal_strength) { |
30 | res.locals.signal_strength_image = 'signal-0.png'; | 34 | res.locals.signal_strength_image = 'signal-0.png'; |
31 | res.locals.signal_strength_title = 'No signal'; | 35 | res.locals.signal_strength_title = 'No signal'; |
32 | } | 36 | } |
33 | else if (signal_strength < 10) { | 37 | else if (signal_strength < 10) { |
34 | res.locals.signal_strength_image = 'signal-1.png'; | 38 | res.locals.signal_strength_image = 'signal-1.png'; |
35 | res.locals.signal_strength_title = 'Marginal'; | 39 | res.locals.signal_strength_title = 'Marginal'; |
36 | } | 40 | } |
37 | else if (signal_strength < 15) { | 41 | else if (signal_strength < 15) { |
38 | res.locals.signal_strength_image = 'signal-2.png'; | 42 | res.locals.signal_strength_image = 'signal-2.png'; |
39 | res.locals.signal_strength_title = 'OK'; | 43 | res.locals.signal_strength_title = 'OK'; |
40 | } | 44 | } |
41 | else if (signal_strength < 20) { | 45 | else if (signal_strength < 20) { |
42 | res.locals.signal_strength_image = 'signal-3.png'; | 46 | res.locals.signal_strength_image = 'signal-3.png'; |
43 | res.locals.signal_strength_title = 'Good'; | 47 | res.locals.signal_strength_title = 'Good'; |
44 | } | 48 | } |
45 | else { | 49 | else { |
46 | res.locals.signal_strength_image = 'signal-4.png'; | 50 | res.locals.signal_strength_image = 'signal-4.png'; |
47 | res.locals.signal_strength_title = 'Excelent'; | 51 | res.locals.signal_strength_title = 'Excelent'; |
48 | } | 52 | } |
49 | 53 | ||
50 | next(); | 54 | next(); |
51 | } | 55 | } |
52 | 56 | ||
53 | app.use(modemSignal); | 57 | app.use(modemSignal); |
54 | 58 | ||
55 | app.get('/', function(req, res, next) { | 59 | app.get('/', function(req, res, next) { |
56 | res.redirect('/sms'); | 60 | res.redirect('/sms'); |
57 | }) | 61 | }) |
58 | 62 | ||
59 | app.use('/sms', routerSms); | 63 | app.use('/sms', routerSms); |
60 | app.use('/ussd', routerUssd); | 64 | app.use('/ussd', routerUssd); |
61 | app.use('/stocks', routerStocks); | 65 | app.use('/stocks', routerStocks); |
62 | 66 | ||
63 | const modem_dashboard_port = (config && config.modem_dashboard && config.modem_dashboard.port) ? config.modem_dashboard.port : 22765; | 67 | const modem_dashboard_port = (config && config.modem_dashboard && config.modem_dashboard.port) ? config.modem_dashboard.port : 22765; |
64 | app.listen(modem_dashboard_port, function () { | 68 | app.listen(modem_dashboard_port, function () { |
65 | logger.info('Modem dashboard started', {listen_port: modem_dashboard_port}); | 69 | logger.info('Modem dashboard started', {listen_port: modem_dashboard_port}); |
66 | }); | 70 | }); |
67 | 71 |
lib/modem-dashboard/views/template.html
1 | <!DOCTYPE html> | 1 | <!DOCTYPE html> |
2 | <html lang="en"> | 2 | <html lang="en"> |
3 | <head> | 3 | <head> |
4 | <meta charset="utf-8"> | 4 | <meta charset="utf-8"> |
5 | <meta http-equiv="X-UA-Compatible" content="IE=edge"> | 5 | <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
6 | <meta name="viewport" content="width=device-width, initial-scale=1"> | 6 | <meta name="viewport" content="width=device-width, initial-scale=1"> |
7 | <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> | 7 | <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> |
8 | 8 | ||
9 | <meta name="description" content=""> | 9 | <meta name="description" content=""> |
10 | <meta name="author" content=""> | 10 | <meta name="author" content=""> |
11 | <link rel="icon" href="/favicon.ico"> | 11 | <link rel="icon" href="/favicon.ico"> |
12 | 12 | ||
13 | <title> | 13 | <title> |
14 | {% if page_title %} | 14 | {% if page_title %} |
15 | {{ page_title }} | 15 | {{ page_title }} |
16 | - | 16 | - |
17 | {% endif %} | 17 | {% endif %} |
18 | |||
18 | Modem Dashboard | 19 | Modem Dashboard |
20 | |||
21 | {% if site_name %} | ||
22 | - | ||
23 | {{ site_name }} | ||
24 | {% endif %} | ||
25 | |||
19 | </title> | 26 | </title> |
20 | 27 | ||
21 | <!-- Latest compiled and minified CSS --> | 28 | <!-- Latest compiled and minified CSS --> |
22 | <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> | 29 | <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> |
23 | 30 | ||
24 | <!-- Optional theme --> | 31 | <!-- Optional theme --> |
25 | <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> | 32 | <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> |
26 | 33 | ||
27 | 34 | ||
28 | 35 | ||
29 | <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> | 36 | <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> |
30 | <link href="/ie10-viewport-bug-workaround.css" rel="stylesheet"> | 37 | <link href="/ie10-viewport-bug-workaround.css" rel="stylesheet"> |
31 | 38 | ||
32 | <!-- Custom styles for this template --> | 39 | <!-- Custom styles for this template --> |
33 | <link href="starter-template.css" rel="stylesheet"> | 40 | <link href="starter-template.css" rel="stylesheet"> |
34 | 41 | ||
35 | <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> | 42 | <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> |
36 | <!--[if lt IE 9]> | 43 | <!--[if lt IE 9]> |
37 | <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script> | 44 | <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script> |
38 | <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> | 45 | <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> |
39 | <![endif]--> | 46 | <![endif]--> |
40 | 47 | ||
41 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> | 48 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> |
42 | 49 | ||
43 | {% block head %} | 50 | {% block head %} |
44 | {% endblock %} | 51 | {% endblock %} |
45 | </head> | 52 | </head> |
46 | 53 | ||
47 | <body> | 54 | <body> |
48 | 55 | ||
49 | <nav class="navbar navbar-inverse navbar-fixed-top"> | 56 | <nav class="navbar navbar-inverse navbar-fixed-top"> |
50 | <div class="container"> | 57 | <div class="container"> |
51 | <div class="navbar-header"> | 58 | <div class="navbar-header"> |
52 | <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> | 59 | <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> |
53 | <span class="sr-only">Toggle navigation</span> | 60 | <span class="sr-only">Toggle navigation</span> |
54 | <span class="icon-bar"></span> | 61 | <span class="icon-bar"></span> |
55 | <span class="icon-bar"></span> | 62 | <span class="icon-bar"></span> |
56 | <span class="icon-bar"></span> | 63 | <span class="icon-bar"></span> |
57 | </button> | 64 | </button> |
58 | <a class="navbar-brand" href="/">Modem Dashboard</a> | 65 | <a class="navbar-brand" href="/"> |
66 | {% if site_name %} | ||
67 | {{ site_name}} | ||
68 | {% else %} | ||
69 | Modem Dashboard | ||
70 | {% endif %} | ||
71 | </a> | ||
59 | </div> | 72 | </div> |
60 | <div id="navbar" class="collapse navbar-collapse"> | 73 | <div id="navbar" class="collapse navbar-collapse"> |
61 | <ul class="nav navbar-nav"> | 74 | <ul class="nav navbar-nav"> |
62 | <li><a href="/sms">SMS</a></li> | 75 | <li><a href="/sms">SMS</a></li> |
63 | <li><a href="/ussd">USSD</a></li> | 76 | <li><a href="/ussd">USSD</a></li> |
77 | <li><a href="/stocks">Stok</a></li> | ||
64 | </ul> | 78 | </ul> |
65 | </div><!--/.nav-collapse --> | 79 | </div><!--/.nav-collapse --> |
66 | </div> | 80 | </div> |
67 | </nav> | 81 | </nav> |
68 | 82 | ||
69 | <div class="container"> | 83 | <div class="container"> |
70 | 84 | ||
71 | <div class="starter-template"> | 85 | <div class="starter-template"> |
72 | 86 | ||
73 | <div style="text-align: right;"> | 87 | <div style="text-align: right;"> |
74 | <img src="/img/{{ signal_strength_image }}" alt="Signal: {{ signal_strength_title }}" title="Signal: {{ signal_strength_title }} ({{ signal_strength }})"> | 88 | <img src="/img/{{ signal_strength_image }}" alt="Signal: {{ signal_strength_title }}" title="Signal: {{ signal_strength_title }} ({{ signal_strength }})"> |
75 | </div> | 89 | </div> |
76 | 90 | ||
77 | {% if page_title%} | 91 | {% if page_title%} |
78 | <h1> {{ page_title }} </h1> | 92 | <h1> {{ page_title }} </h1> |
79 | {% endif %} | 93 | {% endif %} |
80 | 94 | ||
81 | {% block content %} | 95 | {% block content %} |
82 | 96 | ||
83 | | 97 | |
84 | 98 | ||
85 | {% endblock %} | 99 | {% endblock %} |
86 | 100 | ||
87 | </div> | 101 | </div> |
88 | 102 | ||
89 | </div><!-- /.container --> | 103 | </div><!-- /.container --> |
90 | 104 | ||
91 | 105 | ||
92 | <!-- Bootstrap core JavaScript | 106 | <!-- Bootstrap core JavaScript |
93 | ================================================== --> | 107 | ================================================== --> |
94 | <!-- Placed at the end of the document so the pages load faster --> | 108 | <!-- Placed at the end of the document so the pages load faster --> |
95 | <script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script> | 109 | <script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script> |
96 | <!-- Latest compiled and minified JavaScript --> | 110 | <!-- Latest compiled and minified JavaScript --> |
97 | <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> | 111 | <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> |
98 | 112 | ||
99 | <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> | 113 | <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> |
100 | <script src="/ie10-viewport-bug-workaround.js"></script> | 114 | <script src="/ie10-viewport-bug-workaround.js"></script> |
101 | </body> | 115 | </body> |
102 | </html> | 116 | </html> |
103 | 117 |