From 65191835712a1e06dcfd8c718f5a91007fb718b1 Mon Sep 17 00:00:00 2001 From: bergware Date: Sat, 24 Jun 2017 08:40:11 +0200 Subject: [PATCH 1/7] Show condensed table in dashboard when fewer disks are present W...I...D...E == narrow --- plugins/dynamix/DashStats.page | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/dynamix/DashStats.page b/plugins/dynamix/DashStats.page index 79c229de1..df1a00fcd 100644 --- a/plugins/dynamix/DashStats.page +++ b/plugins/dynamix/DashStats.page @@ -114,6 +114,7 @@ $slots = count($disks) + count($devs); ?> From ee5e2ac5ef841a8f7f0dc3720b1710deecb55f8f Mon Sep 17 00:00:00 2001 From: Eric Schultz Date: Sun, 25 Jun 2017 11:15:14 -0500 Subject: [PATCH 2/7] webGui: use JSON for Slack notifications since it's preferred and may work better for 3rd party webhooks (e.g. Discord) --- plugins/dynamix/include/NotificationAgents.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/dynamix/include/NotificationAgents.xml b/plugins/dynamix/include/NotificationAgents.xml index a4a50cdc9..38dbf33f0 100644 --- a/plugins/dynamix/include/NotificationAgents.xml +++ b/plugins/dynamix/include/NotificationAgents.xml @@ -205,7 +205,8 @@ ############ TITLE=$(echo -e "$TITLE") MESSAGE=$(echo -e "$MESSAGE") - curl -X POST -d "payload={\"username\": \"$APP_NAME\", \"text\": \"*$TITLE* \n $MESSAGE\"}" $WEBH_URL 2>&1 + curl -X POST --header 'Content-Type: application/json' \ + -d "{\"username\": \"$APP_NAME\", \"text\": \"*$TITLE* \n $MESSAGE\"}" $WEBH_URL 2>&1 ]]> From 6ae0ee0c45f53cb13217f10e32374748326d4c06 Mon Sep 17 00:00:00 2001 From: Tom Mortensen Date: Fri, 30 Jun 2017 13:28:06 -0700 Subject: [PATCH 3/7] Support selective emhttpd state update. --- .../dynamix.docker.manager/DockerSettings.page | 1 + plugins/dynamix.vm.manager/VMSettings.page | 1 + plugins/dynamix/Dashboard.page | 6 +++++- plugins/dynamix/Main.page | 6 +++++- plugins/dynamix/event/heartbeat/cpuload | 10 ---------- plugins/dynamix/scripts/refresh_emhttp_state | 18 ++++++++++++++++++ plugins/dynamix/template.php | 3 +-- update.php | 1 + 8 files changed, 32 insertions(+), 14 deletions(-) delete mode 100755 plugins/dynamix/event/heartbeat/cpuload create mode 100755 plugins/dynamix/scripts/refresh_emhttp_state diff --git a/plugins/dynamix.docker.manager/DockerSettings.page b/plugins/dynamix.docker.manager/DockerSettings.page index 6b9aa0eff..53fa305c5 100644 --- a/plugins/dynamix.docker.manager/DockerSettings.page +++ b/plugins/dynamix.docker.manager/DockerSettings.page @@ -66,6 +66,7 @@ foreach ($custom as $network) {
+ Enable Docker: : +
Enable VMs:
diff --git a/plugins/dynamix/Dashboard.page b/plugins/dynamix/Dashboard.page index 3400fe911..fa28e5a58 100644 --- a/plugins/dynamix/Dashboard.page +++ b/plugins/dynamix/Dashboard.page @@ -1,3 +1,7 @@ Menu="Tasks:1" Type="xmenu" -Tabs="false" \ No newline at end of file +Tabs="false" +--- + diff --git a/plugins/dynamix/Main.page b/plugins/dynamix/Main.page index 7b626ef43..61dce54c4 100644 --- a/plugins/dynamix/Main.page +++ b/plugins/dynamix/Main.page @@ -1,2 +1,6 @@ Menu="Tasks:1" -Type="xmenu" \ No newline at end of file +Type="xmenu" +--- + diff --git a/plugins/dynamix/event/heartbeat/cpuload b/plugins/dynamix/event/heartbeat/cpuload deleted file mode 100755 index eeb7bfde9..000000000 --- a/plugins/dynamix/event/heartbeat/cpuload +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/php - diff --git a/plugins/dynamix/scripts/refresh_emhttp_state b/plugins/dynamix/scripts/refresh_emhttp_state new file mode 100755 index 000000000..f5c72f030 --- /dev/null +++ b/plugins/dynamix/scripts/refresh_emhttp_state @@ -0,0 +1,18 @@ +#!/usr/bin/php -q + + diff --git a/plugins/dynamix/template.php b/plugins/dynamix/template.php index 7a0423c23..b437714fb 100644 --- a/plugins/dynamix/template.php +++ b/plugins/dynamix/template.php @@ -22,7 +22,6 @@ require_once "$docroot/webGui/include/publish.php"; extract(parse_plugin_cfg('dynamix',true)); // Read emhttp status -refresh_emhttp_state(); $var = parse_ini_file('state/var.ini'); $sec = parse_ini_file('state/sec.ini',true); $devs = parse_ini_file('state/devs.ini',true); @@ -60,7 +59,7 @@ $myPage = $site[basename($path)]; $pageroot = $docroot.'/'.dirname($myPage['file']); $update = true; // set for legacy -// Maybe delete stale share size files +// hack: maybe delete stale share size files if ($myPage['name'] != 'Shares') foreach(glob('/var/local/emhttp/*.ssz*', GLOB_NOSORT) as $sszfile) @unlink($sszfile); diff --git a/update.php b/update.php index 04102b292..bd0bda501 100644 --- a/update.php +++ b/update.php @@ -38,6 +38,7 @@ function write_log($string) { } // unRAID update control readfile('update.htm'); +flush(); $docroot = $_SERVER['DOCUMENT_ROOT']; if (isset($_POST['#file'])) { From 0b955a38a9038caf8ced6e7a8b7259728537e1e9 Mon Sep 17 00:00:00 2001 From: Tom Mortensen Date: Wed, 5 Jul 2017 11:25:31 -0700 Subject: [PATCH 4/7] More websocket work. --- .../DockerSettings.page | 2 +- plugins/dynamix.vm.manager/VMSettings.page | 2 +- .../classes/libvirt_helpers.php | 2 - plugins/dynamix/DashStats.page | 40 +++++++++++++++++-- plugins/dynamix/Dashboard.page | 4 -- plugins/dynamix/Main.page | 4 -- plugins/dynamix/include/publish.php | 4 -- .../{refresh_emhttp_state => emhttpd_update} | 6 +-- plugins/dynamix/scripts/monitor | 2 - plugins/dynamix/scripts/statuscheck | 2 - plugins/dynamix/template.php | 1 - 11 files changed, 42 insertions(+), 27 deletions(-) rename plugins/dynamix/scripts/{refresh_emhttp_state => emhttpd_update} (75%) diff --git a/plugins/dynamix.docker.manager/DockerSettings.page b/plugins/dynamix.docker.manager/DockerSettings.page index 53fa305c5..7e69e4788 100644 --- a/plugins/dynamix.docker.manager/DockerSettings.page +++ b/plugins/dynamix.docker.manager/DockerSettings.page @@ -66,7 +66,7 @@ foreach ($custom as $network) { - + Enable Docker: : - +
Enable VMs:
diff --git a/plugins/dynamix.vm.manager/classes/libvirt_helpers.php b/plugins/dynamix.vm.manager/classes/libvirt_helpers.php index 9139832d6..a7b1395ec 100644 --- a/plugins/dynamix.vm.manager/classes/libvirt_helpers.php +++ b/plugins/dynamix.vm.manager/classes/libvirt_helpers.php @@ -12,11 +12,9 @@ ?> ,]. guest-percentage is that part of load-percentage that is being consumed by VM guests - var json = $.parseJSON(message); - $.each(json["cpuload"],function(k,v) { - $('#'+k).animate({width:v[0]+'%'},{step:function(){$('#'+k).css('overflow','visible');}}).text(v[0]+'%'); +// var json = $.parseJSON(message); +// $.each(json["cpuload"],function(k,v) { +// $('#'+k).animate({width:v[0]+'%'},{step:function(){$('#'+k).css('overflow','visible');}}).text(v[0]+'%'); +// }); + // message is the cpuload.ini file contents + var ini = parseINI(message); + $.each(ini,function(k,v) { + $('#'+k).animate({width:v['host']+'%'},{step:function(){$('#'+k).css('overflow','visible');}}).text(v['host']+'%'); }); }); cpuload_sub.start(); diff --git a/plugins/dynamix/Dashboard.page b/plugins/dynamix/Dashboard.page index fa28e5a58..4433ae9d1 100644 --- a/plugins/dynamix/Dashboard.page +++ b/plugins/dynamix/Dashboard.page @@ -1,7 +1,3 @@ Menu="Tasks:1" Type="xmenu" Tabs="false" ---- - diff --git a/plugins/dynamix/Main.page b/plugins/dynamix/Main.page index 61dce54c4..7dc742b4e 100644 --- a/plugins/dynamix/Main.page +++ b/plugins/dynamix/Main.page @@ -1,6 +1,2 @@ Menu="Tasks:1" Type="xmenu" ---- - diff --git a/plugins/dynamix/include/publish.php b/plugins/dynamix/include/publish.php index 5ed291cd3..7b4ead5e9 100644 --- a/plugins/dynamix/include/publish.php +++ b/plugins/dynamix/include/publish.php @@ -22,10 +22,6 @@ function curl_socket($socket, $url, $postdata = NULL) curl_exec($ch); curl_close($ch); } -function refresh_emhttp_state() -{ - curl_socket("/var/run/emhttpd.socket", "http://localhost/status.htm"); -} function publish($endpoint, $message) { curl_socket("/var/run/nginx.socket", "http://localhost/pub/$endpoint?buffer_length=1", $message); diff --git a/plugins/dynamix/scripts/refresh_emhttp_state b/plugins/dynamix/scripts/emhttpd_update similarity index 75% rename from plugins/dynamix/scripts/refresh_emhttp_state rename to plugins/dynamix/scripts/emhttpd_update index f5c72f030..e626c30c1 100755 --- a/plugins/dynamix/scripts/refresh_emhttp_state +++ b/plugins/dynamix/scripts/emhttpd_update @@ -1,7 +1,7 @@ #!/usr/bin/php -q diff --git a/plugins/dynamix/scripts/monitor b/plugins/dynamix/scripts/monitor index 2e0e77d6b..bd673d354 100755 --- a/plugins/dynamix/scripts/monitor +++ b/plugins/dynamix/scripts/monitor @@ -12,8 +12,6 @@ */ ?> Date: Wed, 5 Jul 2017 16:08:44 -0700 Subject: [PATCH 5/7] Get rid of 'heartbeat' event. Footer status now updated via websocket. --- plugins/dynamix/DashStats.page | 4 +- plugins/dynamix/event/heartbeat/watchdog | 26 --------- plugins/dynamix/include/DefaultPageLayout.php | 54 ++++++++++++++++++- 3 files changed, 54 insertions(+), 30 deletions(-) delete mode 100755 plugins/dynamix/event/heartbeat/watchdog diff --git a/plugins/dynamix/DashStats.page b/plugins/dynamix/DashStats.page index 742f69234..9598b3f12 100644 --- a/plugins/dynamix/DashStats.page +++ b/plugins/dynamix/DashStats.page @@ -545,8 +545,8 @@ function toggle_net(init) { } function parseINI(data){ var regex = { - section: /^\s*\[\s*([^\]]*)\s*\]\s*$/, - param: /^\s*([^=]+?)\s*=\s*(.*?)\s*$/, + section: /^\s*\[\s*\"*([^\]]*)\s*\"*\]\s*$/, + param: /^\s*([^=]+?)\s*=\s*\"*(.*?)\s*\"*$/, comment: /^\s*;.*$/ }; var value = {}; diff --git a/plugins/dynamix/event/heartbeat/watchdog b/plugins/dynamix/event/heartbeat/watchdog deleted file mode 100755 index 64af22059..000000000 --- a/plugins/dynamix/event/heartbeat/watchdog +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/php -Array Stopped"; -elseif ($fsState == "Starting") - $state = "Array Starting"; -else { - $state = "Array Started"; - $mdResync = $var['mdResync']; - if ($mdResync > 0) { - $mdResyncAction = $var['mdResyncAction']; - if (strstr($mdResyncAction, "recon")) $action="Parity-Sync / Data-Rebuild"; - elseif (strstr($mdResyncAction, "clear")) $action="Clearing"; - elseif ($mdResyncAction == "check") $action="Read-Check"; - elseif (strstr($mdResyncAction, "check")) $action="Parity-Check"; - $mdResyncPos = $var['mdResyncPos']; - $progress = number_format($mdResyncPos/($mdResync/100+1),1); - $state .= "•$action $progress %"; - } -} -publish("watchdog", $state); -?> diff --git a/plugins/dynamix/include/DefaultPageLayout.php b/plugins/dynamix/include/DefaultPageLayout.php index e9caf8b03..e4c199dc0 100644 --- a/plugins/dynamix/include/DefaultPageLayout.php +++ b/plugins/dynamix/include/DefaultPageLayout.php @@ -395,6 +395,35 @@ echo " $.post('/webGui/include/Notify.php',{cmd:'init'},function(){timers.notifier = setTimeout(notifier,0);}); @@ -470,8 +499,29 @@ $(function() { } $('form').append($('').attr({type:'hidden', name:'csrf_token', value:''})); - var watchdog = new NchanSubscriber('/sub/watchdog'); - watchdog.on('message', function(data){$('#statusbar').html(data);}); + + var watchdog = new NchanSubscriber('/sub/var'); + watchdog.on('message', function(data){ + var ini=parseINI(data); + var status; + if (ini['fsState']=="Stopped") { + status="Array Stopped"; + }else if (ini['fsState']=="Starting") { + status="Array Starting"; + }else { + status="Array Started"; + if (ini['mdResync'] > 0) { + var action; + if (ini['mdResyncAction'].indexOf("recon")) action="Parity-Sync / Data-Rebuild"; + else if (ini['mdResyncAction'].indexOf("clear")) action="Clearing"; + else if (ini['mdResyncAction'] == "check") action="Read-Check"; + else if (ini['mdResyncAction'].indexOf("check")) action="Parity-Check"; + action += " " + (ini['mdResyncPos']/(ini['mdResync']/100+1)).toFixed(1) + " %"; + status += "•"+action+""; + } + } + $('#statusbar').html(status); + }); watchdog.start(); }); From 2b87e51534f1a163dd5252c945af9fe2c75cdf47 Mon Sep 17 00:00:00 2001 From: Tom Mortensen Date: Wed, 5 Jul 2017 23:12:32 -0700 Subject: [PATCH 6/7] Added new 'fsProgress' string to footer. No more logging of text to progressFrame. Also fixed bug generating parity sync type text. Also removed stupid comment I put in diskload script some time ago. --- plugins/dynamix/include/DefaultPageLayout.php | 12 +++++++----- plugins/dynamix/scripts/diskload | 1 - 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/plugins/dynamix/include/DefaultPageLayout.php b/plugins/dynamix/include/DefaultPageLayout.php index e4c199dc0..562a6e3f8 100644 --- a/plugins/dynamix/include/DefaultPageLayout.php +++ b/plugins/dynamix/include/DefaultPageLayout.php @@ -503,7 +503,7 @@ $(function() { var watchdog = new NchanSubscriber('/sub/var'); watchdog.on('message', function(data){ var ini=parseINI(data); - var status; + var status, progress; if (ini['fsState']=="Stopped") { status="Array Stopped"; }else if (ini['fsState']=="Starting") { @@ -512,14 +512,16 @@ $(function() { status="Array Started"; if (ini['mdResync'] > 0) { var action; - if (ini['mdResyncAction'].indexOf("recon")) action="Parity-Sync / Data-Rebuild"; - else if (ini['mdResyncAction'].indexOf("clear")) action="Clearing"; - else if (ini['mdResyncAction'] == "check") action="Read-Check"; - else if (ini['mdResyncAction'].indexOf("check")) action="Parity-Check"; + if (ini['mdResyncAction'].indexOf("recon")>=0) action="Parity-Sync / Data-Rebuild"; + else if (ini['mdResyncAction'].indexOf("clear")>=0) action="Clearing"; + else if (ini['mdResyncAction'] == "check") action="Read-Check"; + else if (ini['mdResyncAction'].indexOf("check")>=0) action="Parity-Check"; action += " " + (ini['mdResyncPos']/(ini['mdResync']/100+1)).toFixed(1) + " %"; status += "•"+action+""; } } + if (ini['fsProgress'].length) + status += "•"+ini['fsProgress']+""; $('#statusbar').html(status); }); watchdog.start(); diff --git a/plugins/dynamix/scripts/diskload b/plugins/dynamix/scripts/diskload index 4440b9871..47161f9ca 100755 --- a/plugins/dynamix/scripts/diskload +++ b/plugins/dynamix/scripts/diskload @@ -1,5 +1,4 @@ #!/bin/bash -# todo: this should generate/publish json-encoded string ini=/var/local/emhttp/diskload.ini declare -a sector reads writes From 65fc2b4198389c5049ca6c04dab6a89108ce92ab Mon Sep 17 00:00:00 2001 From: Tom Mortensen Date: Thu, 6 Jul 2017 20:41:15 -0700 Subject: [PATCH 7/7] Got rid of var['currTime'] so get the current time from php time() function. --- plugins/dynamix/DateTime.page | 4 ++-- plugins/dynamix/include/DashUpdate.php | 2 +- plugins/dynamix/include/DeviceList.php | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/dynamix/DateTime.page b/plugins/dynamix/DateTime.page index f56452447..7d37b130d 100644 --- a/plugins/dynamix/DateTime.page +++ b/plugins/dynamix/DateTime.page @@ -18,7 +18,7 @@ Icon="date-time.png" Current date and time: -: +: Time zone: : "> +: "> > Enter the current time-of-day. Use format YYYY-MM-DD HH:MM:SS. Greyed out when using NTP. diff --git a/plugins/dynamix/include/DashUpdate.php b/plugins/dynamix/include/DashUpdate.php index 0e0695cd5..a1ef5fb0d 100644 --- a/plugins/dynamix/include/DashUpdate.php +++ b/plugins/dynamix/include/DashUpdate.php @@ -208,7 +208,7 @@ case 'parity': $mode = 'Parity-Check'; } echo "".$mode." in progress... Completed: ".number_format(($var['mdResyncPos']/($var['mdResync']/100+1)),0)." %."; - echo "
Elapsed time: ".my_clock(floor(($var['currTime']-$var['sbUpdated'])/60)).". Estimated finish: ".my_clock(round(((($var['mdResyncDt']*(($var['mdResync']-$var['mdResyncPos'])/($var['mdResyncDb']/100+1)))/100)/60),0)).""; + echo "
Elapsed time: ".my_clock(floor((time()-$var['sbUpdated'])/60)).". Estimated finish: ".my_clock(round(((($var['mdResyncDt']*(($var['mdResync']-$var['mdResyncPos'])/($var['mdResyncDb']/100+1)))/100)/60),0)).""; break; case 'shares': $names = explode(',',$_POST['names']); diff --git a/plugins/dynamix/include/DeviceList.php b/plugins/dynamix/include/DeviceList.php index aac1fbf03..8452047d4 100644 --- a/plugins/dynamix/include/DeviceList.php +++ b/plugins/dynamix/include/DeviceList.php @@ -338,7 +338,7 @@ case 'parity': $data = []; if ($var['mdResync']>0) { $data[] = my_scale($var['mdResync']*1024,$unit)." $unit"; - $data[] = my_clock(floor(($var['currTime']-$var['sbUpdated'])/60)); + $data[] = my_clock(floor((time()-$var['sbUpdated'])/60)); $data[] = my_scale($var['mdResyncPos']*1024,$unit)." $unit (".number_format(($var['mdResyncPos']/($var['mdResync']/100+1)),1,substr($display['number'],0,1),'')." %)"; $data[] = my_scale($var['mdResyncDb']*1024/$var['mdResyncDt'],$unit, 1)." $unit/sec"; $data[] = my_clock(round(((($var['mdResyncDt']*(($var['mdResync']-$var['mdResyncPos'])/($var['mdResyncDb']/100+1)))/100)/60),0));