Skip to content

Commit

Permalink
safe mode (close #164)
Browse files Browse the repository at this point in the history
  • Loading branch information
hobbyquaker committed Mar 14, 2019
1 parent c2af3a9 commit f8e5b2b
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 17 deletions.
6 changes: 5 additions & 1 deletion addon_files/redmatic/bin/redmaticLoader
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,12 @@ while [[ $status != 0 ]]; do
else
echo "Starting Node-RED" | logger -p daemon.info -t redmatic
fi
if [[ -f $ADDON_DIR/var/safe_mode ]]; then
SAFE="--safe"
rm $ADDON_DIR/var/safe_mode
fi
set -o pipefail
$NODE $RED -s $SETTINGS 2>&1 | logger -p daemon.err -t node-red
$NODE $RED $SAFE -s $SETTINGS 2>&1 | logger -p daemon.err -t node-red
status=$?
if [[ $status != 0 ]]; then
echo "Node-RED exited with non-zero exit status $status" | logger -p daemon.err -t node-red
Expand Down
55 changes: 41 additions & 14 deletions addon_files/redmatic/www/js/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,11 @@ $(document).ready(() => {
$alertExec.hide();

const $restart = $('#restart');
const $restartSafe = $('#restartSafe');
const $dropdownRestart = $('#dropdownRestart');
const $start = $('#start');
const $startSafe = $('#startSafe');
const $dropdownStart = $('#dropdownStart');
const $stop = $('#stop');

const $linkRed = $('#link-red');
Expand Down Expand Up @@ -91,11 +95,11 @@ $(document).ready(() => {
$status.html('<span class="status-running">running</span>');
$memory.html(`vsz ${vsz}, rss ${rss}`);
found = true;
$restart.removeClass('disabled');
$dropdownRestart.removeClass('disabled');
$stop.removeClass('disabled');
$linkRed.removeClass('disabled');
$linkUi.removeClass('disabled');
$start.addClass('disabled');
$dropdownStart.addClass('disabled');
psInterval = 5000;
return;
}
Expand All @@ -113,9 +117,9 @@ $(document).ready(() => {
$status.html('<span class="status-starting">starting</span>');
$memory.html(`vsz ${vsz}, rss ${rss}`);
found = true;
$restart.addClass('disabled');
$dropdownRestart.addClass('disabled');
$stop.addClass('disabled');
$start.addClass('disabled');
$dropdownStart.addClass('disabled');
$linkRed.addClass('disabled');
$linkUi.addClass('disabled');
psInterval = 2500;
Expand All @@ -125,9 +129,9 @@ $(document).ready(() => {
if (!found) {
$status.html('<span class="status-stopped">stopped</span>');
$memory.html('');
$restart.addClass('disabled');
$dropdownRestart.addClass('disabled');
$stop.addClass('disabled');
$start.removeClass('disabled');
$dropdownStart.removeClass('disabled');
$linkRed.addClass('disabled');
$linkUi.addClass('disabled');
psInterval = 5000;
Expand Down Expand Up @@ -472,11 +476,11 @@ $(document).ready(() => {
}
});

$restart.click(() => {
function restart() {
clearTimeout(psTimeout);
$restart.addClass('disabled');
$dropdownRestart.addClass('disabled');
$stop.addClass('disabled');
$start.addClass('disabled');
$dropdownStart.addClass('disabled');
$status.html('<span class="status-starting">stopping</span>');
$memory.html('');
$.get({
Expand All @@ -493,12 +497,27 @@ $(document).ready(() => {
}
}
});
}

$restart.click(() => {
restart();
});

$start.click(() => {
$restart.addClass('disabled');
function safeMode(cb) {
$.get({
url: `safemode.cgi?sid=${sid}`,
success: cb
});
}

$restartSafe.click(() => {
safeMode(restart);
});

function start() {
$dropdownRestart.addClass('disabled');
$stop.addClass('disabled');
$start.addClass('disabled');
$dropdownStart.addClass('disabled');
$status.html('<span class="status-starting">starting</span>');
$memory.html('');
$.get({
Expand All @@ -515,13 +534,21 @@ $(document).ready(() => {
}
}
});
}

$start.click(() => {
start();
});

$startSafe.click(() => {
safeMode(start);
});

$stop.click(() => {
clearTimeout(psTimeout);
$restart.addClass('disabled');
$dropdownRestart.addClass('disabled');
$stop.addClass('disabled');
$start.addClass('disabled');
$dropdownStart.addClass('disabled');
$status.html('<span class="status-starting">stopping</span>');
$memory.html('');
$.get({
Expand Down
13 changes: 13 additions & 0 deletions addon_files/redmatic/www/safemode.cgi
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/tclsh

source ../lib/querystring.tcl
source ../lib/session.tcl

puts -nonewline "Content-Type: text/plain; charset=utf-8\r\n\r\n"

if {[info exists sid] && [check_session $sid]} {
catch {exec touch /usr/local/addons/redmatic/var/safe_mode} result
puts $result
} else {
puts {error: invalid session}
}
23 changes: 21 additions & 2 deletions addon_files/redmatic/www/settings.html
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,29 @@
<a id="link-ui" role="button" class="btn btn-sm btn-outline-info mr-3" target="_blank" href="/addons/red/ui/"><i class="fa fa-external-link-alt"></i> Dashboard</a>

<!--<a id="backup" role="button" class="btn btn-sm btn-primary mr-3 disabled">Backup</a>-->
<div class="dropdown" style="display: inline-block">
<button type="button" class="btn btn-sm btn-warning dropdown-toggle" id="dropdownRestart" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-sync-alt"></i> Restart
</button>

<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a id="restart" class="dropdown-item" href="#">Normal</a>
<a id="restartSafe" class="dropdown-item" href="#">Safe Mode</a>
</div>
</div>

<button id="restart" type="button" class="btn btn-sm btn-warning"><i class="fa fa-sync-alt"></i> Restart</button>
<button id="stop" type="button" class="btn btn-sm btn-warning"><i class="fa fa-stop"></i> Stop</button>
<button id="start" type="button" class="btn btn-sm btn-warning mr-1"><i class="fa fa-play"></i> Start</button>

<div class="dropdown" style="display: inline-block">
<button type="button" class="btn btn-sm btn-warning dropdown-toggle" id="dropdownStart" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-play"></i> Start
</button>

<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a id="start" class="dropdown-item" href="#">Normal</a>
<a id="startSafe" class="dropdown-item" href="#">Safe Mode</a>
</div>
</div>

<div style="vertical-align: middle; display: inline-block; width: 148px; font-size: 11px; color: grey;" class="">
<div>Node-RED: <span id="node-red-status" style="font-weight: bold;"></span></div>
Expand Down

0 comments on commit f8e5b2b

Please sign in to comment.