Skip to content

Commit c023040

Browse files
committed
Added tut 14
1 parent 772fb51 commit c023040

5 files changed

Lines changed: 84 additions & 9 deletions

File tree

README.md

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,19 @@ Later we will get onto more complicated topics such as reaching a consensus of w
1414

1515
Questions comments and suggestions can be raised the specific blog post or by using issues here.
1616

17-
## Tutorial 13 - Abstracting Slave Code
17+
## Tutorial 14 - A simple webserver
1818

19-
This tutorial focuses on abstracting the slave code to be more extensible.
20-
I create a general purpose class which is used by each Slave Thread.
21-
This will include the ability to customise the slave more generally
22-
while maintaining a common core.
19+
This tutorial focuses on creating a simple webserver that displays
20+
the status of the master using the python library Bottle.
21+
This will form the basis of having a simple web interface to view
22+
the progress of the cluster and control it.
2323

24-
The next tutorial will focus on adding a simple webserver to the core of the code.
24+
The next tutorial will focus on improving the webserver to display
25+
slave information in addition to the current information.
2526

2627
The full details for
27-
[Tutorial 13 - Abstracting Slave Code](
28-
https://chewett.co.uk/blog/2090/raspberry-pi-cluster-node-13-abstracting-slave-code/
28+
[Tutorial 14 - A simple webserver](
29+
https://chewett.co.uk/blog/2127/raspberry-pi-cluster-node-14-a-simple-webserver/
2930
)
3031

3132
## Requirements
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import time
2+
import datetime
3+
from MainLogger import logger
4+
from DataPackager import create_payload, get_message, send_message
5+
from RpiBasicSlaveThread import RpiBasicSlaveThread
6+
7+
8+
class RpiWebserverSlaveThread(RpiBasicSlaveThread):
9+
10+
current_webserver_data = None
11+
webserver_data_updated = None
12+
13+
def perform_action(self):
14+
logger.info("Now sending a keepalive to the master")
15+
send_message(self.sock, create_payload("I am still alive, client: {num}".format(num=self.client_number)))
16+
send_message(self.sock, create_payload("computer_details", "info"))
17+
message = get_message(self.sock)
18+
RpiWebserverSlaveThread.current_webserver_data = message['payload']
19+
RpiWebserverSlaveThread.webserver_data_updated = datetime.datetime.now()
20+
time.sleep(5)
21+
22+
23+

basic_webserver_slave.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/usr/bin/env python2.7
2+
3+
import os
4+
import json
5+
import ConfigParser
6+
from RpiCluster.MainLogger import add_file_logger
7+
from RpiCluster.RpiWebserverSlaveThread import RpiWebserverSlaveThread
8+
from bottle import route, run, template
9+
10+
config = ConfigParser.ConfigParser()
11+
config.read(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'rpicluster.cfg'))
12+
13+
socket_port = config.getint("slave", "socket_port")
14+
master_ip = config.get("slave", "master_ip")
15+
webserver_host = config.get("webserver", "webserver_host")
16+
webserver_port = config.get("webserver", "webserver_port")
17+
18+
add_file_logger("webserver_slave.log")
19+
20+
webserver_slave_thread = RpiWebserverSlaveThread(master_ip, socket_port)
21+
webserver_slave_thread.start()
22+
23+
24+
@route('/')
25+
def index():
26+
return template("templates/ClusterHomepage.html",
27+
info=json.dumps(RpiWebserverSlaveThread.current_webserver_data, indent=4, sort_keys=True))
28+
29+
run(host=webserver_host, port=webserver_port)

rpicluster.cfg.dist

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,8 @@ socket_bind_ip =
44

55
[slave]
66
socket_port = 12345
7-
master_ip = 127.0.0.1
7+
master_ip = 127.0.0.1
8+
9+
[webserver]
10+
webserver_port = 8123
11+
webserver_host = localhost

templates/ClusterHomepage.html

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<title>Raspberry Pi Cluster</title>
5+
<meta name="description" content="Raspberry Pi Cluster Homepage">
6+
<meta name="author" content="Christopher Hewett">
7+
</head>
8+
9+
<body>
10+
<h1>Raspberry Pi Cluster Homepage</h1>
11+
12+
<p>This page shows the status of the Raspberry Pi Cluster</p>
13+
14+
<h2>Master Information</h2>
15+
<pre>{{info}}</pre>
16+
17+
</body>
18+
</html>

0 commit comments

Comments
 (0)