Skip to content

Commit

Permalink
Added Companion Recovery Server
Browse files Browse the repository at this point in the history
  • Loading branch information
mariyachanniwala committed Aug 28, 2018
1 parent 37c9649 commit 384c5d2
Show file tree
Hide file tree
Showing 6 changed files with 280 additions and 0 deletions.
6 changes: 6 additions & 0 deletions .companion.rc
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ for default_param_file in *; do
done

if [ ! -f /home/pi/.updating ]; then
sudo python $COMPANION_DIR/tools/PingEnumerator.py || true
if [ -d /dev/serial/ping ]; then
sudo -H -u pi screen -dm -S pingproxy python -m Ping/PingProxy --device $(ls -d /dev/serial/ping/* | head -1)
sudo -H -u pi screen -dm -S pingmav python $COMPANION_DIR/tools/Ping1DMavlinkDriver.py
fi
sudo -H -u pi screen -dm -S mavproxy $COMPANION_DIR/tools/telem.py
sudo -H -u pi screen -dm -S video $COMPANION_DIR/tools/streamer.py
sudo -H -u pi screen -dm -S webui $COMPANION_DIR/scripts/start_webui.sh
Expand All @@ -22,6 +27,7 @@ if [ ! -f /home/pi/.updating ]; then
sudo -H -u pi screen -dm -S file-manager node --harmony $COMPANION_DIR/br-webui/node_modules/node-file-manager/lib/index.js -p 7777 -d /
sudo -H -u pi screen -dm -S nmearx $COMPANION_DIR/tools/nmea-receiver.py
sudo -H -u pi screen -dm -S wldriver $COMPANION_DIR/tools/underwater-gps.py --ip=192.168.2.94 --port=80
sudo -H -u pi screen -dm -S recovery $COMPANION_DIR/scripts/start-recovery-server.sh
else
sudo -H -u pi echo 'UPDATE FAILED!' >> /home/pi/.update_log
rm -f /home/pi/.updating
Expand Down
68 changes: 68 additions & 0 deletions br-webui/recovery-client/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
var socket = io();
var uploader = new SocketIOFileClient(socket);
var form = document.getElementById('form');

uploader.on('ready', function() {
console.log('SocketIOFile ready to go!');
});
uploader.on('loadstart', function() {
console.log('Loading file to browser before sending...');
});
uploader.on('progress', function(progress) {
console.log('Loaded ' + progress.loaded + ' / ' + progress.total);
});
uploader.on('start', function(fileInfo) {
console.log('Start uploading', fileInfo);
});
uploader.on('stream', function(fileInfo) {
console.log('Streaming... sent ' + fileInfo.sent + ' bytes.');
});
uploader.on('complete', function(fileInfo) {
console.log('Upload Complete', fileInfo);
});
uploader.on('error', function(err) {
console.log('Error!', err);
});
uploader.on('abort', function(fileInfo) {
console.log('Aborted: ', fileInfo);
});

form.onsubmit = function(ev) {
ev.preventDefault();

// Send File Element to upload
var fileEl = document.getElementById('file');
// var uploadIds = uploader.upload(fileEl);

// Or just pass file objects directly
var uploadIds = uploader.upload(fileEl.files);
};

function updateNew() {
console.log("Update button pressed");
};

socket.on('terminal output', function(data) {
var terminalEl = document.getElementById("terminal-output");
var html = terminalEl.innerHTML + data;
var autoscroll = terminalEl.scrollHeight - terminalEl.scrollTop
=== terminalEl.clientHeight;
terminalEl.innerHTML = html.replace(/\n.*?\r/g, "\n");
if (autoscroll) {
terminalEl.scrollTop = terminalEl.scrollHeight;
}
});

socket.on('terminal-output', function(data) {
var terminalEl = document.getElementById("terminal-output");
var html = terminalEl.innerHTML + data;
var autoscroll = terminalEl.scrollHeight - terminalEl.scrollTop
=== terminalEl.clientHeight;
//terminalEl.innerHTML = html;
terminalEl.innerHTML = html.replace(/\n.*?\r/g, "\n");
if (autoscroll) {
terminalEl.scrollTop = terminalEl.scrollHeight;
}
});


30 changes: 30 additions & 0 deletions br-webui/recovery-client/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<html>
<head>
<meta charset="UTF-8">
<title>Companion Recovery Server</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<h1>Companion Recovery Server</h1>
<hr>
<div id="First">
Select an appropriate ".lrz" file to update Companion
</div><hr>
<div>
<form id="form">
<input type="file" id="file"/>
<input id= "submit-button" type="submit" class="button" value= "Upload" />
</form>
<div id="update-div">
<button id="update-button" onclick='updateNew()'> Update </button>
</div>
<div id="textarea1">
<textarea rows="30" cols="90" id="terminal-output" class="dynamic-parent-width" readonly></textarea>
</div>
</div>

<script src="socket.io.js"></script>
<script src="socket.io-file-client.js"></script>
<script src="app.js"></script>
</body>
</html>
93 changes: 93 additions & 0 deletions br-webui/recovery-client/styles.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
<!-- CSS file for Companion Recovery Server -->

html, body {
height: 100%;
}

html {
padding-top: 85px;
padding-bottom: 90px;
display: table;
margin: auto;
}

body {
border: medium solid grey;
margin-top: 100px;
margin-left: 600px;
margin-right: 600px;
margin-bottom: 100px;
border-radius: 10px;
display: table-cell;
vertical-align: middle;
}

h1 {
font-family: verdana;
font-size: 1.5em;
text-align: center;
padding: 20px;
padding-top: 30px;
}

hr {
text-align: center;
width: 80%;
}

#First {
font-size: 14pt;
font-family: verdana;
color: #2699d0;
padding: 10px;
text-align: center;
}

form {
padding: 20px;
text-align: center;
padding-bottom: 10px;
}

textarea {

font-family: verdana;
resize: vertical;
border-radius: 10px;
}

#textarea1 {
margin-left: 30px;
margin-right: 30px;
padding-bottom: 30px;
}

#submit-button {
border-radius: 5px;
background-color: #2699d0;
border: thin solid #2699d0;
color: #ffffff;
width: 80px;
height: 30px;
}

#update-button {
border-radius: 5px;
background-color: #bbbbbb;
border: thin solid #bbbbbb;
color: #000000;
width: 80px;
height: 30px;
}

#update-div {
padding-bottom: 20px;
text-align: center;
}


<!-- Styles that are divs start with a # sign -->
<!-- Styles that are classes start with a . -->



79 changes: 79 additions & 0 deletions br-webui/recovery-server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
const express = require('express');
const app = express();
const SocketIOFile = require('socket.io-file');

var server = app.listen(3000, function() {
console.log("Server running successfully on Port:3000");
});
var io = require('socket.io')(server);

app.get('/', (req, res, next) => {
return res.sendFile(__dirname + '/recovery-client/index.html');
});

app.get('/app.js', (req, res, next) => {
return res.sendFile(__dirname + '/recovery-client/app.js');
});

app.get('/socket.io.js', (req, res, next) => {
return res.sendFile(__dirname + '/node_modules/socket.io-client/dist/socket.io.js');
});

app.get('/socket.io-file-client.js', (req, res, next) => {
return res.sendFile(__dirname + '/node_modules/socket.io-file-client/socket.io-file-client.js');
});

app.get('/styles.css', (req,res,next) => {
return res.sendFile(__dirname + '/recovery-client/styles.css'); // redirect CSS bootstrap
});


io.on('connection', function(socket) {
console.log('Socket connected.');

var count = 0;
var uploader = new SocketIOFile(socket, {
// uploadDir: { // multiple directories
// music: 'data/music',
// document: 'data/document'
// },
uploadDir: '/mnt/Imagefile', // simple directory
// accepts: ['application/octet-stream'], // chrome and some of browsers checking mp3 as 'audio/mp3', not 'audio/mpeg'
// maxFileSize: 4294967296, // 4 GB. default is undefined(no limit)
chunkSize: 26214400, // default is 10240(1KB) 94371840 52428800
transmissionDelay: 0, // delay of each transmission, higher value saves more cpu resources, lower upload speed. default is 0(no delay)
overwrite: false, // overwrite file if exists, default is true.
/*rename: function(filename) {
var split = filename.split('.'); // split filename by .(extension)
var fname = split[0]; // filename without extension
var ext = split[1];
return `${fname}_${count++}.${ext}`;
}*/
});
uploader.on('start', (fileInfo) => {
console.log('Start uploading');
console.log(fileInfo);
socket.emit('terminal output', "\n" + "Start Uploading" + "\n" + "\n");
socket.emit('terminal output', JSON.stringify(fileInfo, null, 2) + '\n' + '\n');
});
uploader.on('stream', (fileInfo) => {
console.log(`${fileInfo.wrote} / ${fileInfo.size} byte(s)`);
socket.emit('terminal-output', '\r' + "Progress --> " + Math.round(fileInfo.wrote / fileInfo.size * 100) + " %");
});
uploader.on('complete', (fileInfo) => {
console.log('Upload Complete.');
console.log(fileInfo);
socket.emit('terminal output', "\n" + "\n" + "Upload Complete" + "\n");
socket.emit('terminal output', '\n' + JSON.stringify(fileInfo, null, 2) + '\n');
});
uploader.on('error', (err) => {
console.log('Error!', err);
socket.emit('terminal output', "\n" + err + "\n");
});
uploader.on('abort', (fileInfo) => {
console.log('Aborted: ', fileInfo);
socket.emit('terminal output', "\n" + JSON.stringify(fileInfo, null, 2) + "\n");
});
});

4 changes: 4 additions & 0 deletions scripts/start-recovery-server.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/bash

cd /home/pi/companion/br-webui
node recovery-server.js

0 comments on commit 384c5d2

Please sign in to comment.