Merge pull request #1364 from bergware/master

Miscellaneous updates
This commit is contained in:
tom mortensen
2023-06-22 12:57:10 -07:00
committed by GitHub
5 changed files with 262 additions and 80 deletions

View File

@@ -1,6 +1,6 @@
<?PHP
/* Copyright 2005-2022, Lime Technology
* Copyright 2012-2022, Bergware International.
/* Copyright 2005-2023, Lime Technology
* Copyright 2012-2023, Bergware International.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2,
@@ -36,6 +36,10 @@ function make_link($method, $arg, $extra='') {
$id = str_replace(['.',' ','_'],'',$plg);
$check = $method=='remove' ? "<input type='checkbox' data='$arg' class='remove' onClick='document.getElementById(\"$id\").disabled=!this.checked;multiRemove()'>" : "";
$disabled = $check ? ' disabled' : '';
if ($method == 'update' && $extra) {
$disabled = 'disabled';
$id = $extra;
}
if ($method == 'delete') {
$cmd = "plugin_rm $arg";
$func = "refresh";

View File

@@ -163,12 +163,16 @@ foreach (glob($plugins,GLOB_NOSORT) as $plugin_link) {
} else {
$latest = plugin('version',$filename);
if ($os ? version_compare($latest,$version,'>') : strcmp($latest,$version) > 0) {
$version .= "<br><span class='red-text'>$latest</span>";
if ($os) {
$version = "<small>"._('I have read the release notes')."</small><input type='checkbox' onclick=\"$('#cmdUpdate').prop('disabled',!this.checked)\"><br><span class='red-text'>$latest</span>";
} else {
$version .= "<br><span class='red-text'>$latest</span>";
}
$error = null;
if ( ! $os && (version_compare(plugin("min",$filename,$error) ?: "1.0",$Unraid['version'],">") || version_compare(plugin("max",$filename,$error) ?: "999.9.9",$Unraid['version'],"<") ) ) {
if (!$os && (version_compare(plugin("min",$filename,$error) ?: "1.0",$Unraid['version'],">") || version_compare(plugin("max",$filename,$error) ?: "999.9.9",$Unraid['version'],"<"))) {
$status = "<span class='warning'><i class='fa fa-exclamation-triangle' aria-hidden='true'></i> "._("Update Incompatible")."</span>";
} else {
$status = make_link("update",basename($plugin_file));
$status = make_link("update",basename($plugin_file),$os?'cmdUpdate':'');
}
$changes_file = $filename;
if (!$os) $updates++;

View File

@@ -174,20 +174,21 @@ switch ($display['theme']) {
<link type="text/css" rel="stylesheet" href="<?autov("/plugins/dynamix.docker.manager/styles/style-$theme.css")?>">
<style>
div.frame{padding-top:14px;padding-bottom:160px}
div.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(<?=$themes1?'610px':'570px'?>,1fr));column-gap:30px}
div.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(<?=$themes1?'610px':'580px'?>,1fr));column-gap:20px}
div.tile,i.tile{display:none}
div#iframe-popup{display:none;-webkit-overflow-scrolling:touch}
div.last{padding-bottom:12px}
div.leftside{float:left;width:66%}
div.rightside{float:right;margin:0;text-align:center}
div[id$=chart]{margin:-12px 8px -24px -18px}
span.green,span.red,span.orange{padding-left:0}
span.ctrl{float:right;margin-top:0;margin-right:10px}
span.ctrl span{font-size:2rem!important}
span.outer{float:left}
span.inner{width:143px}
span.rx{width:80px;display:inline-block}
span.busy,i.inactive{opacity:0.5}
span.dense{width:190px;display:inline-block}
span.dense{width:180px;display:inline-block}
span#ups_model{margin-right:30px}
span#chart-toggle{float:right}
span.header,tr.header{font-size:1.1rem!important;text-transform:uppercase;letter-spacing:1px}
@@ -218,13 +219,16 @@ i[class^="icon-u-"]{font-size:inherit}
i#mycase[class^="case-"]{font-size:128px}
i#mycase[class^="fa "]{font-size:96px}
a.cpu_close,span.hand{cursor:pointer;z-index:1001}
tr#var0,tr#var1,tr#var2,tr#var3,tr#var4{cursor:alias}
tr#var1,tr#var4,tr#cpu_chart,.cpu_open{display:none}
td.none{text-align:center;padding-top:12px}
input[value=Edit]{margin:12px 0 0 0;padding:5px 10px}
.share1,.share3,.user1,.user3,.view1,.view2,.view3,.view4{display:none}
.share1,.share3,.user1,.user3,.view1,.view2,.view3,.view4,.unused{display:none}
.port_view,.control,#apps,#vms{z-index:10000}
.flat{height:0;lineheight:0}
.wrap{white-space:normal}
.switch-button-background{margin-left:0;margin-top:4px}
.switch-button-label{margin-top:3px}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button[disabled]{cursor:default;color:#808080;background:-webkit-gradient(linear,left top,right top,from(#404040),to(#808080)) 0 0 no-repeat,-webkit-gradient(linear,left top,right top,from(#404040),to(#808080)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#404040),to(#404040)) 0 100% no-repeat,-webkit-gradient(linear,left bottom,left top,from(#808080),to(#808080)) 100% 100% no-repeat;background:linear-gradient(90deg,#404040 0,#808080) 0 0 no-repeat,linear-gradient(90deg,#404040 0,#808080) 0 100% no-repeat,linear-gradient(0deg,#404040 0,#404040) 0 100% no-repeat,linear-gradient(0deg,#808080 0,#808080) 100% 100% no-repeat;background-size:100% 2px,100% 2px,2px 100%,2px 100%}
</style>
<script src="<?autov('/webGui/javascript/jquery.apexcharts.js')?>"></script>
@@ -237,8 +241,9 @@ input[value=Edit]{margin:12px 0 0 0;padding:5px 10px}
<div class='tile' id='tile1'>
<table id='db-box1' class='share_status dashboard'>
<tbody class='system'>
<tr><td><?=_var($var,'NAME')?>
<i class='fa fa-fw fa-wrench control tile' onclick='contentMgmt()' title="_(Content Management)_"></i><a href='/Dashboard/Settings/Identification'><i class='fa fa-fw fa-cog control' title="_(Go to identification settings)_"></i></a>
<tr><td><i class='icon-performance f32'></i><div class='section'><?=_var($var,'NAME')?><br>
<span><?=_var($var,'COMMENT')?></span><br></div>
<a href='/Dashboard/Settings/Identification'><i class='fa fa-fw fa-cog control' title="_(Go to identification settings)_"></i></a><i class='fa fa-fw fa-wrench control tile' onclick='contentMgmt()' title="_(Tile Management)_"></i>
<span class='ctrl'>
<?if ($parity||$mover||$btrfs):?>
<span class='fa fa-fw fa-<?=$started?'stop':'play'?>-circle busy' title="<?=$started?_("Stop the array"):_("Start the array")?>"></span>
@@ -251,7 +256,7 @@ input[value=Edit]{margin:12px 0 0 0;padding:5px 10px}
</td></tr>
<tr><td>
<div class='leftside'>
<span class='header'><i class='indent fa fa-file-text-o'></i>_(Description)_</span><br><i class='indent'></i><?=_var($var,'COMMENT')?><br><i class='indent'></i><?=_var($var,'SYS_MODEL')?><br><br>
<span class='header'><i class='indent fa fa-file-text-o'></i>_(Description)_</span><br><i class='indent'></i><?=_var($var,'SYS_MODEL')?><br><br>
<span class='header'><i class='indent fa fa-id-badge'></i>_(Registration)_</span><br><i class='indent'></i>Unraid OS <b><em><?=_var($var,'regTy')?></em></b><br><br>
<span class='header'><i class='indent fa fa-clock-o'></i>_(Uptime)_</span><br><i class='indent'></i><span class='uptime'></span>
</div>
@@ -273,14 +278,14 @@ input[value=Edit]{margin:12px 0 0 0;padding:5px 10px}
</tbody>
<tbody title="_(Motherboard Information)_">
<tr><td><i class='icon-motherboard f32'></i><div class='section'>_(Motherboard)_<br><span id='mb-temp'></span><br><br></div>
<tr><td><i class='icon-motherboard f32'></i><div class='section'>_(Motherboard)_<br><span id='mb-temp'></span><br></div>
<a href='#' onclick='InfoButton();' title="_(Show Information)_"><i class='fa fa-fw fa-info-circle control'></i></a>
</td></tr>
<tr><td><?=$board?><br><?=$bios?><br><?=$biosdate?></td></tr>
</tbody>
<tbody title="_(Processor Information)_">
<tr><td><i class='icon-cpu f32'></i><div class='section'>_(Processor)_<br><span id='cpu-temp'></span><br><br></div>
<tbody title="_(Processor Information)_" data="toggleCPU(true)">
<tr><td><i class='icon-cpu f32'></i><div class='section'>_(Processor)_<br><span id='cpu-temp'></span><br></div>
<a href='/Dashboard/Settings/CPUset' title="_(Go to CPU pinning settings)_"><i class='fa fa-fw fa-cog control'></i></a>
</td></tr>
<tr><td><?=$cpumodel?></td></tr>
@@ -308,7 +313,7 @@ foreach ($cpus as $pair) {
</tbody>
<tbody title="_(Memory Utilization)_">
<tr><td><i class='icon-ram f32'></i><div class='section'>_(Memory)_<br><span><i class='ups fa fa-line-chart'></i><?="$memory_installed $unit $memory_type $ecc"?></span><br><br></div>
<tr><td><i class='icon-ram f32'></i><div class='section'>_(Memory)_<br><span><i class='ups fa fa-line-chart'></i><?="$memory_installed $unit $memory_type $ecc"?></span><br></div>
<a href='/Dashboard/Tools/Processes' title="_(View Running Processes)_"><i class='fa fa-fw fa-info-circle control'></i></a>
</td></tr>
<tr><td><span class='w36'><i class='ups fa fa-compress'></i>_(Usable size)_: <?=my_scale($total,$unit,1,null,1024)." $unit"?></span><i class='ups fa fa-expand'></i>_(Maximum size)_: <?="$memory_maximum $unit"?><?=$low?'*':''?></td></tr>
@@ -319,7 +324,7 @@ foreach ($cpus as $pair) {
<tr id='var4'><td><span class='w26'><i class='ups fa fa-fw fa-docker'></i>_(Docker)_</span><span class='w72'><span class='sys4 load'>0%</span><div class='usage-disk sys'><span id='sys4'></span><span></span></div></span></td></tr>
</tbody>
<tbody title="_(Interface Information)_">
<tbody title="_(Interface Information)_" class="mixed">
<tr><td><i class='icon-ethernet f32'></i><div class='section'>_(Interface)_<br>
<span><span class='dense'><i class='ups fa fa-angle-double-down'></i>_(Inbound)_: <span id='inbound'>---</span></span><span class='dense'><i class='ups fa fa-angle-double-up'></i>_(Outbound)_: <span id='outbound'>---</span></span>
<i class='ups fa fa-angle-right'></i><select name="port_select" onchange="portSelect(this.value)">
@@ -327,7 +332,7 @@ foreach ($cpus as $pair) {
<?=mk_option("",$port,_($port))?>
<?endforeach;?>
</select></span>
<br><br></div>
<br></div>
<a href='/Dashboard/Settings/NetworkSettings' title="_(Go to network settings)_"><i class='fa fa-fw fa-cog control'></i></a>
</td></tr>
<tr><td><span class='w26'><select name="enter_view" onchange="changeView(this.value)">
@@ -369,7 +374,7 @@ foreach ($ports as $port) {
<?if ($wireguard):?>
<tbody title="_(VPN Connections)_">
<tr><td><i class='icon-vpn f32'></i><div class='section'>_(VPN)_<br><span><span class='dense'><i class='ups fa fa-play-circle'></i>_(Active tunnels)_: <span id='vpn-active'><?=$up?></span></span><i class='ups fa fa-pause-circle'></i>_(Inactive tunnels)_: <span id='vpn-inactive'><?=$down?></span></span><br><br></div>
<tr><td><i class='icon-vpn f32'></i><div class='section'>_(VPN)_<br><span><span class='dense'><i class='ups fa fa-play-circle'></i>_(Active tunnels)_: <span id='vpn-active'><?=$up?></span></span><i class='ups fa fa-pause-circle'></i>_(Inactive tunnels)_: <span id='vpn-inactive'><?=$down?></span></span><br></div>
<a href='/Settings/VPNmanager' title="_(Go to VPN settings)_"><i class='fa fa-fw fa-cog control'></i></a>
</td></tr>
<?foreach ($conf as $wg):?>
@@ -386,7 +391,7 @@ foreach ($ports as $port) {
<?if ($apcupsd):?>
<tbody title="_(Power Status)_">
<tr><td><i class='icon-ups f32'></i><div class='section'>_(Power)_<br>
<span><i class='ups fa fa-bar-chart'></i>_(UPS Model)_: </span><span id='ups_model'></span><br><br></div>
<span><i class='ups fa fa-bar-chart'></i>_(UPS Model)_: </span><span id='ups_model'></span><br></div>
<a href='/Dashboard/Settings/UPSsettings' title="_(Go to UPS settings)_"><i class='fa fa-fw fa-cog control'></i></a>
</td></tr>
<tr><td><span class='w36'><i class='ups fa fa-fw fa-plug'></i>_(UPS status)_:</span><span id='ups_status'></span></td></tr>
@@ -400,7 +405,7 @@ foreach ($ports as $port) {
<?if ($fans):?>
<tbody title="_(Fan Information)_">
<tr><td><i class='icon-fan f32'></i><div class='section'>_(Airflow)_<br><span><i class='ups fa fa-sort-amount-asc'></i>_(Fan count)_: <?=$fans?></span><br><br></div>
<tr><td><i class='icon-fan f32'></i><div class='section'>_(Airflow)_<br><span><i class='ups fa fa-sort-amount-asc'></i>_(Fan count)_: <?=$fans?></span><br></div>
<?if ($autofan):?>
<a href='/Dashboard/Settings/FanSettings' title="_(Go to fan settings)_"><i class='fa fa-fw fa-cog control'></i></a>
@@ -440,27 +445,25 @@ echo "</td></tr>";
<table id='db-box2' class='share_status dashboard'>
<?if ($display['dashapps']!='none'):?>
<?if ($dockerd && ($display['dashapps']=='icons' || $display['dashapps']=='docker')):?>
<tbody id='docker_view' title="_(Docker Containers)_">
<tr><td>_(Docker Containers)_
<tbody id='docker_view' title="_(Docker Containers)_" data="noApps()">
<tr><td><i class='icon-docker f32'></i><div class='section'>_(Docker Containers)_<br>
<span class='apps'><input type='checkbox' id='apps'></span><br></div>
<a href='/Dashboard/Settings/DockerSettings' title="_(Go to Docker settings)_"><i class='fa fa-fw fa-cog control'></i></a>
<span class='info apps'><input type='checkbox' id='apps'></span>
</td></tr>
</tbody>
<?endif;?>
<?if ($libvirtd && ($display['dashapps']=='icons' || $display['dashapps']=='vms')):?>
<tbody id='vm_view' title="_(Virtual Machines)_">
<tr><td>_(Virtual Machines)_
<tbody id='vm_view' title="_(Virtual Machines)_" data="noVMs()">
<tr><td><i class='icon-virtualization f32'></i><div class='section'>_(Virtual Machines)_<br>
<span class='vms'><input type='checkbox' id='vms'></span><br></div>
<a href='/Dashboard/Settings/VMSettings' title="_(Go to VM settings)_"><i class='fa fa-fw fa-cog control'></i></a>
<span class='info vms'><input type='checkbox' id='vms'></span>
</td></tr>
</tbody>
<?endif;?>
<?endif;?>
<tbody title="_(Shares Information)_">
<tr><td>_(Shares)_
<a href='/Shares' title="_(Go to Share settings)_"><i class='fa fa-fw fa-cog control'></i></a>
<span class='info'><?=sprintf(_("Share count: %s with %s cache only and %s encrypted"),count($shares),$cache_only,$encrypted)?></span>
<tbody title="_(Shares Information)_"<?if ($group):?> class="mixed"<?endif;?>>
<tr><td><i class='icon-folder f32'></i><div class='section'>_(Shares)_
<?if ($group):?>
<select name="enter_share" onchange="changeMode(this.value)">
<?if (_var($var,'shareSMBEnabled')=='yes'):?>
@@ -471,6 +474,10 @@ echo "</td></tr>";
<?endif;?>
</select>
<?endif;?>
<br><span>
<?=sprintf(_("Share count: %s with %s cache only and %s encrypted"),count($shares),$cache_only,$encrypted)?>
</span><br></div>
<a href='/Shares' title="_(Go to Share settings)_"><i class='fa fa-fw fa-cog control'></i></a>
</td></tr>
<tr class='header'><td><span class='w26'>_(Name)_</span><span class='w44'>_(Description)_</span><span class='w18'>_(Security)_</span><span>_(Streams)_</span></td></tr>
<?
@@ -513,10 +520,22 @@ if (!$group) {
?>
</tbody>
<tbody title="_(Users Information)_">
<tr><td>_(Users)_
<tbody title="_(Users Information)_"<?if ($group):?> class="mixed"<?endif;?>>
<tr><td><i class='icon-users f32'></i><div class='section'>_(Users)_
<?if ($group):?>
<select name="enter_user" class="unused">
<?if (_var($var,'shareSMBEnabled')=='yes'):?>
<?=mk_option("", "0", "SMB")?>
<?endif;?>
<?if (_var($var,'shareNFSEnabled')=='yes'):?>
<?=mk_option("", "2", "NFS")?>
<?endif;?>
</select>
<?endif;?>
<br><span>
<?=sprintf(_("User count: %s with %s unprotected"),count($users),$nopass)?>
</span><br></div>
<a href='/Users' title="_(Go to User settings)_"><i class='fa fa-fw fa-cog control'></i></a>
<span class='info'><?=sprintf(_("User count: %s with %s unprotected"),count($users),$nopass)?></span>
</td></tr>
<tr class='header'><td><span class='w26'>_(Name)_</span><span class='w44'>_(Description)_</span><span class='w18'>_(Write)_</span><span>_(Read)_</span></td></tr>
<?
@@ -581,15 +600,19 @@ if (!$group) {
<div class='tile' id='tile3'>
<table id='db-box3' class='share_status dashboard'>
<tbody title="_(Parity Information)_">
<tr><td>_(Parity)_<a href='/Dashboard/Settings/Scheduler' title="_(Go to scheduler settings)_"><i class='fa fa-fw fa-cog control'></i></a>
<span class='info title'></span></td></tr>
<tr><td><i class='icon-health f32'></i><div class='section'>_(Parity)_<br>
<span class='parity'></span><br></div>
<a href='/Dashboard/Settings/Scheduler' title="_(Go to scheduler settings)_"><i class='fa fa-fw fa-cog control'></i></a>
</td></tr>
</td></tr>
<tr><td id='parity' class="wrap"></td></tr>
<tr><td id='program' class="wrap"></td></tr>
</tbody>
<tbody id='array_list' title="_(Array Information)_">
<tr><td>_(Array)_<?if (!$started):?> (_(stopped)_)<?endif;?><a href='/Dashboard/Settings/DiskSettings' title="_(Go to disk settings)_"><i class='fa fa-fw fa-cog control'></i></a>
<?if ($started):?><span class='info'><?=sprintf(_("%s used of %s (%s %%)"),my_scale($array_used*1024,$unit)." $unit",my_scale($array_size*1024,$unit,-1,-1)." $unit",$array_percent)?></span><?endif;?>
<tr><td><i class='icon-disks f32'></i><div class='section'>_(Array)_<?if (!$started):?> (_(stopped)_)<?endif;?><br>
<span><?if ($started):?><?=sprintf(_("%s used of %s (%s %%)"),my_scale($array_used*1024,$unit)." $unit",my_scale($array_size*1024,$unit,-1,-1)." $unit",$array_percent)?><?endif;?></span><br></div>
<a href='/Dashboard/Settings/DiskSettings' title="_(Go to disk settings)_"><i class='fa fa-fw fa-cog control'></i></a>
</td></tr>
<tr><td id='array_info'></td></tr>
<tr class='header'><td><span class='w26'>_(Device)_</span><span class='w18'>_(Status)_</span><span class='w18'>_(Temp)_</span><span class='w18'>_(SMART)_</span><span class='w18'>_(Utilization)_</span></td></tr>
@@ -598,8 +621,9 @@ if (!$group) {
<?$i=0?>
<?foreach ($pools as $pool):?>
<tbody id='pool_list<?=$i?>' title="_(<?=ucfirst($pool)?> Information)_">
<tr><td><?=ucfirst($pool)?><?if (!$started):?> (_(stopped)_)<?endif;?><a href='/Dashboard/Settings/Device?name=<?=$pool?>' title="_(Go to disk settings)_"><i class='fa fa-fw fa-cog control'></i></a>
<?if ($started):?><span class='info'><?=sprintf(_("%s used of %s (%s %%)"),my_scale($cache_used[$pool]*1024,$unit)." $unit",my_scale($cache_size[$pool]*1024,$unit,-1,-1)." $unit",$cache_rate[$pool])?></span><?endif;?>
<tr><td><i class='icon-disk f32'></i><div class='section'><?=ucfirst($pool)?><?if (!$started):?> (_(stopped)_)<?endif;?><br>
<span><?if ($started):?><?=sprintf(_("%s used of %s (%s %%)"),my_scale($cache_used[$pool]*1024,$unit)." $unit",my_scale($cache_size[$pool]*1024,$unit,-1,-1)." $unit",$cache_rate[$pool])?><?endif;?></span><br></div>
<a href='/Dashboard/Settings/Device?name=<?=$pool?>' title="_(Go to disk settings)_"><i class='fa fa-fw fa-cog control'></i></a>
</td></tr>
<tr><td id='pool_info<?=$i++?>'></td></tr>
<tr class='header'><td><span class='w26'>_(Device)_</span><span class='w18'>_(Status)_</span><span class='w18'>_(Temp)_</span><span class='w18'>_(SMART)_</span><span class='w18'>_(Utilization)_</span></td></tr>
@@ -608,7 +632,10 @@ if (!$group) {
<?if ($devs):?>
<tbody id='devs_list' title="_(Unassigned Devices)_">
<tr><td>_(Unassigned)_<span class='info'></span></td></tr>
<tr><td><i class='icon-disc f32'></i><div class='section'>_(Unassigned)_<?if (!$started):?> (_(stopped)_)<?endif;?><br>
<span></span><br></div>
<a href='/Dashboard/Settings/DiskSettings' title="_(Go to disk settings)_"><i class='fa fa-fw fa-cog control'></i></a>
</td></tr>
<tr><td id='devs_info'></td></tr>
<tr class='header'><td><span class='w26'>_(Device)_</span><span class='w18'>_(Status)_</span><span class='w18'>_(Temp)_</span><span class='w18'>_(SMART)_</span><span class='w18'>_(Utilization)_</span></td></tr>
</tbody>
@@ -675,18 +702,61 @@ function hideShow() {
Number.prototype.pad = function(size){var s=String(this);while(s.length<(size||2)){s='0'+s;}return s;}
Array.prototype.tail = function(t){return this.slice(-t).map(function(o){return o.y;}).join(';');}
String.prototype.build = function(){return this.replace(/\n(<!--!|!-->)\n/g,'');}
String.prototype.marker = function(){return this.substr(0,12).replace(/ /g,'').toLowerCase();}
String.prototype.md5 = function() {
// Original copyright (c) Paul Johnston & Greg Holt.
var hc = '0123456789abcdef';
function rh(n){var j,s='';for(j=0;j<=3;j++) s+=hc.charAt((n>>(j*8+4))&0x0F)+hc.charAt((n>>(j*8))&0x0F);return s;}
function ad(x,y){var l=(x&0xFFFF)+(y&0xFFFF);var m=(x>>16)+(y>>16)+(l>>16);return (m<<16)|(l&0xFFFF);}
function rl(n,c){return (n<<c)|(n>>>(32-c));}
function cm(q,a,b,x,s,t){return ad(rl(ad(ad(a,q),ad(x,t)),s),b);}
function ff(a,b,c,d,x,s,t){return cm((b&c)|((~b)&d),a,b,x,s,t);}
function gg(a,b,c,d,x,s,t){return cm((b&d)|(c&(~d)),a,b,x,s,t);}
function hh(a,b,c,d,x,s,t){return cm(b^c^d,a,b,x,s,t);}
function ii(a,b,c,d,x,s,t){return cm(c^(b|(~d)),a,b,x,s,t);}
function sb(x) {
var i;var nblk=((x.length+8)>>6)+1;var blks=new Array(nblk*16);for(i=0;i<nblk*16;i++) blks[i]=0;
for(i=0;i<x.length;i++) blks[i>>2]|=x.charCodeAt(i)<<((i%4)*8);
blks[i>>2]|=0x80<<((i%4)*8);blks[nblk*16-2]=x.length*8;return blks;
}
var i,x=sb(''+this),a=1732584193,b=-271733879,c=-1732584194,d=271733878,olda,oldb,oldc,oldd;
for(i=0;i<x.length;i+=16) {olda=a;oldb=b;oldc=c;oldd=d;
a=ff(a,b,c,d,x[i+ 0], 7, -680876936);d=ff(d,a,b,c,x[i+ 1],12, -389564586);c=ff(c,d,a,b,x[i+ 2],17, 606105819);
b=ff(b,c,d,a,x[i+ 3],22,-1044525330);a=ff(a,b,c,d,x[i+ 4], 7, -176418897);d=ff(d,a,b,c,x[i+ 5],12, 1200080426);
c=ff(c,d,a,b,x[i+ 6],17,-1473231341);b=ff(b,c,d,a,x[i+ 7],22, -45705983);a=ff(a,b,c,d,x[i+ 8], 7, 1770035416);
d=ff(d,a,b,c,x[i+ 9],12,-1958414417);c=ff(c,d,a,b,x[i+10],17, -42063);b=ff(b,c,d,a,x[i+11],22,-1990404162);
a=ff(a,b,c,d,x[i+12], 7, 1804603682);d=ff(d,a,b,c,x[i+13],12, -40341101);c=ff(c,d,a,b,x[i+14],17,-1502002290);
b=ff(b,c,d,a,x[i+15],22, 1236535329);a=gg(a,b,c,d,x[i+ 1], 5, -165796510);d=gg(d,a,b,c,x[i+ 6], 9,-1069501632);
c=gg(c,d,a,b,x[i+11],14, 643717713);b=gg(b,c,d,a,x[i+ 0],20, -373897302);a=gg(a,b,c,d,x[i+ 5], 5, -701558691);
d=gg(d,a,b,c,x[i+10], 9, 38016083);c=gg(c,d,a,b,x[i+15],14, -660478335);b=gg(b,c,d,a,x[i+ 4],20, -405537848);
a=gg(a,b,c,d,x[i+ 9], 5, 568446438);d=gg(d,a,b,c,x[i+14], 9,-1019803690);c=gg(c,d,a,b,x[i+ 3],14, -187363961);
b=gg(b,c,d,a,x[i+ 8],20, 1163531501);a=gg(a,b,c,d,x[i+13], 5,-1444681467);d=gg(d,a,b,c,x[i+ 2], 9, -51403784);
c=gg(c,d,a,b,x[i+ 7],14, 1735328473);b=gg(b,c,d,a,x[i+12],20,-1926607734);a=hh(a,b,c,d,x[i+ 5], 4, -378558);
d=hh(d,a,b,c,x[i+ 8],11,-2022574463);c=hh(c,d,a,b,x[i+11],16, 1839030562);b=hh(b,c,d,a,x[i+14],23, -35309556);
a=hh(a,b,c,d,x[i+ 1], 4,-1530992060);d=hh(d,a,b,c,x[i+ 4],11, 1272893353);c=hh(c,d,a,b,x[i+ 7],16, -155497632);
b=hh(b,c,d,a,x[i+10],23,-1094730640);a=hh(a,b,c,d,x[i+13], 4, 681279174);d=hh(d,a,b,c,x[i+ 0],11, -358537222);
c=hh(c,d,a,b,x[i+ 3],16, -722521979);b=hh(b,c,d,a,x[i+ 6],23, 76029189);a=hh(a,b,c,d,x[i+ 9], 4, -640364487);
d=hh(d,a,b,c,x[i+12],11, -421815835);c=hh(c,d,a,b,x[i+15],16, 530742520);b=hh(b,c,d,a,x[i+ 2],23, -995338651);
a=ii(a,b,c,d,x[i+ 0], 6, -198630844);d=ii(d,a,b,c,x[i+ 7],10, 1126891415);c=ii(c,d,a,b,x[i+14],15,-1416354905);
b=ii(b,c,d,a,x[i+ 5],21, -57434055);a=ii(a,b,c,d,x[i+12], 6, 1700485571);d=ii(d,a,b,c,x[i+ 3],10,-1894986606);
c=ii(c,d,a,b,x[i+10],15, -1051523);b=ii(b,c,d,a,x[i+ 1],21,-2054922799);a=ii(a,b,c,d,x[i+ 8], 6, 1873313359);
d=ii(d,a,b,c,x[i+15],10, -30611744);c=ii(c,d,a,b,x[i+ 6],15,-1560198380);b=ii(b,c,d,a,x[i+13],21, 1309151649);
a=ii(a,b,c,d,x[i+ 4], 6, -145523070);d=ii(d,a,b,c,x[i+11],10,-1120210379);c=ii(c,d,a,b,x[i+ 2],15, 718787259);
b=ii(b,c,d,a,x[i+ 9],21, -343485551);a=ad(a,olda);b=ad(b,oldb);c=ad(c,oldc);d=ad(d,oldd);
}
return rh(a)+rh(b)+rh(c)+rh(d);
}
var ports = [<?=implode(',',array_map('escapestring',$ports))?>];
var cpu = [];
var rxd = [];
var txd = [];
var cputime = 0;
var nettime = 0;
var cpuline = $.cookie('cpuline')||30;
var netline = $.cookie('netline')||30;
var update2 = true;
var box = null;
var ports = [<?=implode(',',array_map('escapestring',$ports))?>];
var cpu = [];
var rxd = [];
var txd = [];
var cputime = 0;
var nettime = 0;
var cpuline = $.cookie('cpuline')||30;
var netline = $.cookie('netline')||30;
var update2 = true;
var box = null;
var startup = true;
var options_cpu = {
series:[{name:'load', data:cpu.slice()}],
@@ -805,8 +875,8 @@ function noVMs() {
}
function loadlist(init) {
if (init) {
$('#apps').switchButton({labels_placement:'left', off_label:"_(All Apps)_", on_label:"_(Started only)_", checked:$.cookie('my_apps')=='startedOnly'});
$('#vms').switchButton({labels_placement:'left', off_label:"_(All VMs)_", on_label:"_(Started only)_", checked:$.cookie('my_vms')=='startedOnly'});
$('#apps').switchButton({labels_placement:'right', off_label:"_(All Apps)_", on_label:"_(Started only)_", checked:$.cookie('my_apps')=='startedOnly'});
$('#vms').switchButton({labels_placement:'right', off_label:"_(All VMs)_", on_label:"_(Started only)_", checked:$.cookie('my_vms')=='startedOnly'});
$('#apps').change(function(){
$('span.outer.apps.stopped').finish().toggle('fast',function(){noApps();})
$('#apps').is(':checked') ? $.cookie('my_apps','startedOnly',{expires:3650}) : $.removeCookie('my_apps');
@@ -820,8 +890,10 @@ function loadlist(init) {
var data = d.split('\0');
$('#docker_view tr.updated').remove();
$('#docker_view').append(data[0]);
hideMe($('#docker_view'));
$('#vm_view tr.updated').remove();
$('#vm_view').append(data[1]);
hideMe($('#vm_view'));
if ($.cookie('my_apps')!=null) $('span.apps.stopped').hide(0,noApps());
if ($.cookie('my_vms')!=null) $('span.vms.stopped').hide(0,noVMs());
});
@@ -841,13 +913,22 @@ function getCase() {
function changeMode(item) {
if (item==0) $.removeCookie('enter_share'); else $.cookie('enter_share',item,{expires:3650});
<?if (_var($var,'shareSMBEnabled')=='yes'):?>
if (item==0) $('.smb.user1').show(); else $('.smb.user1').hide();
if (item==0) $('.smb.share1').show(); else $('.smb.share1').hide();
if (startup || $('.smb.share1').parent().find('tr:eq(1)').is(':visible')) {
if (item==0) $('.smb.share1').show(); else $('.smb.share1').hide();
}
if (startup || $('.smb.user1').parent().find('tr:eq(1)').is(':visible')) {
if (item==0) $('.smb.user1').show(); else $('.smb.user1').hide();
}
<?endif;?>
<?if (_var($var,'shareNFSEnabled')=='yes'):?>
if (item==2) $('.nfs.user3').show(); else $('.nfs.user3').hide();
if (item==2) $('.nfs.share3').show(); else $('.nfs.share3').hide();
if ($('.nfs.share3').parent().find('tr:eq(1)').is(':visible')) {
if (item==2) $('.nfs.share3').show(); else $('.nfs.share3').hide();
}
if ($('.nfs.user3').parent().find('tr:eq(1)').is(':visible')) {
if (item==2) $('.nfs.user3').show(); else $('.nfs.user3').hide();
}
<?endif;?>
$('select[name="enter_user"]').val(item);
}
function changeView(item) {
if (item==0) $.removeCookie('enter_view'); else $.cookie('enter_view',item,{expires:3650});
@@ -942,7 +1023,7 @@ function dropdown(menu) {
var select = 'select[name="'+menu+'"]';
var size = $(select+' option').length;
var option = $.cookie(menu)||0;
if (option >= size) option = size - 1;
if (option >= size) option = 0;
$(select+' option')[option].selected = true;
$(select).change();
}
@@ -962,8 +1043,15 @@ function toggleChart(init) {
$('#cpu_main').removeClass('last');
$('.cpu_open:last').removeClass('last');
if ($.cookie('cpu-chart')==null) {
$('#cpu_chart').show();
$('#cpuline').show();
var hidden = $.cookie('hidden_content');
hidden = hidden==null ? [] : hidden.split(';');
if (hidden.indexOf($('#cpu_main').parent().attr('sort'))==-1) {
$('#cpu_chart').show();
$('#cpuline').show();
} else {
$('#cpu_chart').hide();
$('#cpuline').hide();
}
} else {
$('#cpu_chart').hide();
$('#cpuline').hide();
@@ -1050,17 +1138,24 @@ function sortTables() {
});
}
function addProperties() {
$('div.frame tbody.system').addClass('sortable').attr('sort','_system_information_');
$('div.frame tbody.system').addClass('sortable').attr('sort','_system_information_'.md5());
$('div.frame tbody.system').find('td:first').prepend("<i class='fa fa-fw fa-eject control' onclick='openClose()' title=\"_(Show/Hide All Content)_\"></i>");
$('div.frame tbody').each(function(){
$(this).find('td:first').prepend("<i class='fa fa-fw fa-chevron-up control openclose' onclick='openClose($(this))' title=\"_(Show/Hide Content)_\"></i>");
});
$('div.frame tbody').not('.system').each(function(){
$(this).addClass('sortable').attr('sort',$(this).attr('title').marker());
$(this).addClass('sortable').attr('sort',$(this).attr('title').md5());
$(this).find('td:first').prepend("<i class='fa fa-fw fa-close control tile' onclick='dismiss($(this))' title=\"_(Close Tile)_\"></i>");
});
$('div.frame tr').attr('title','');
$('tr#var0').hover(function(){$.post('/webGui/include/DashboardApps.php',{sys:0},function(val){$('.sys0').text(val);})});
<?if ($zfs):?>
$('tr#var1').show();
$('tr#var1').show().hover(function(){$.post('/webGui/include/DashboardApps.php',{sys:1},function(val){$('.sys1').text(val);})});
<?endif;?>
$('tr#var2').hover(function(){$.post('/webGui/include/DashboardApps.php',{sys:2},function(val){$('.sys2').text(val);})});
$('tr#var3').hover(function(){$.post('/webGui/include/DashboardApps.php',{sys:3},function(val){$('.sys3').text(val);})});
<?if ($dockerd):?>
$('tr#var4').show();
$('tr#var4').show().hover(function(){$.post('/webGui/include/DashboardApps.php',{sys:4},function(val){$('.sys4').text(val);})});
<?endif;?>
}
function showContent() {
@@ -1068,13 +1163,22 @@ function showContent() {
var inactive = $.cookie('inactive_content');
if (inactive) {
inactive = inactive.split(';');
for (var n=0,x; x=inactive[n]; n++) {
var tbody = $('table.dashboard tbody[sort="'+x+'"]');
for (var n=0,md5; md5=inactive[n]; n++) {
var tbody = $('table.dashboard tbody[sort="'+md5+'"]');
var id = tbody.parent().prop('id');
count[id]--;
tbody.hide();
}
}
var hidden = $.cookie('hidden_content');
if (hidden) {
hidden = hidden.split(';');
for (var n=0,md5; md5=hidden[n]; n++) {
var tbody = $('div.frame tbody[sort="'+md5+'"]');
tbody.find('.openclose').removeClass('fa-chevron-up fa-chevron-down').addClass('fa-chevron-down');
tbody.find('tr:gt(0)').hide();
}
}
if (count['db-box1']>0) $('div#tile1').show();
if (count['db-box2']>0) $('div#tile2').show();
if (count['db-box3']>0) $('div#tile3').show();
@@ -1085,8 +1189,62 @@ function setColor(l, t1, t2) {
case (t2 > 0 && l >= t2): return 'orangebar';
default: return '';}
}
function dismiss(close) {
var tbody = close.closest('tbody');
function hideMe(tbody) {
var hidden = $.cookie('hidden_content');
hidden = hidden==null ? [] : hidden.split(';');
if (hidden.indexOf(tbody.attr('sort'))>=0) tbody.find('tr:gt(0)').hide();
}
function mixed(tbody) {
if (tbody.attr('data')) {
setTimeout(tbody.attr('data'));
}
if (tbody.hasClass('mixed')) {
var select = tbody.find('select[name^="enter"]');
select = parseInt(select.val())+1;
tbody.find('tr:gt(0)').each(function(){
var names = ($(this).attr('class')||'').split(' ');
for (var n=0,name; name=names[n]; n++) if (/[0-9]/.test(name.slice(-1)) && name.slice(-1)!=select) $(this).hide();
});
}
}
function openClose(button) {
var hidden = $.cookie('hidden_content');
hidden = hidden==null ? [] : hidden.split(';');
if (button) {
// show/hide single tile content
var tbody = button.closest('tbody');
if (button.hasClass('fa-chevron-up')) {
button.removeClass('fa-chevron-up fa-chevron-down').addClass('fa-chevron-down');
tbody.find('tr:gt(0)').hide();
hidden.push(tbody.attr('sort'));
} else {
button.removeClass('fa-chevron-up fa-chevron-down').addClass('fa-chevron-up');
tbody.find('tr:gt(0)').show();
mixed(tbody);
hidden.splice(hidden.indexOf(tbody.attr('sort')),1);
}
$.cookie('hidden_content',hidden.join(';'),{expires:3650});
} else {
// show/hide all tiles content
if (hidden.length==0) {
$('div.frame tbody').each(function(){
$(this).find('.openclose').removeClass('fa-chevron-up fa-chevron-down').addClass('fa-chevron-down');
$(this).find('tr:gt(0)').hide();
hidden.push($(this).attr('sort'));
});
$.cookie('hidden_content',hidden.join(';'),{expires:3650});
} else {
$('div.frame tbody').each(function(){
$(this).find('.openclose').removeClass('fa-chevron-up fa-chevron-down').addClass('fa-chevron-up');
$(this).find('tr:gt(0)').show();
mixed($(this));
});
$.removeCookie('hidden_content');
}
}
}
function dismiss(button) {
var tbody = button.closest('tbody');
var table = tbody.parent();
var tile = table.parent();
var inactive = $.cookie('inactive_content');
@@ -1100,7 +1258,7 @@ function contentMgmt() {
box = $("#iframe-popup");
box.html($("#templateContentMgmt").html().build());
box.dialog({
title: "_(Content Management)_",
title: "_(Tile Management)_",
height: 350,
width: 900,
resizable: false,
@@ -1113,8 +1271,9 @@ function contentMgmt() {
$.removeCookie('db-box2');
$.removeCookie('db-box3');
$.removeCookie('inactive_content');
$.removeCookie('hidden_content');
box.dialog('close');
refresh();
location.reload();
},
"_(All)_": function(){
$('input.checker').each(function(){$(this).prop('checked',true);});
@@ -1222,6 +1381,7 @@ dashboard.on('message',function(msg,meta) {
// array devices
$('#array_list tr.updated').remove();
$('#array_list').append(data[0]);
hideMe($('#array_list'));
$('#array_info').parent().css('display',info?'':'none');
$('#array_info').html(info);
smartMenu('#array_list');
@@ -1232,6 +1392,7 @@ dashboard.on('message',function(msg,meta) {
var info = moreInfo(data,"_(Pool)_");
$('#pool_list'+i+' tr.updated').remove();
$('#pool_list'+i).append(t);
hideMe($('#pool_list'+i));
$('#pool_info'+i).parent().css('display',info?'':'none');
$('#pool_info'+i).html(info);
smartMenu('#pool_list'+i);
@@ -1242,12 +1403,13 @@ dashboard.on('message',function(msg,meta) {
var info = moreInfo(data,"_(Unassigned)_");
$('#devs_list tr.updated').remove();
$('#devs_list').append(data[0]);
hideMe($('#devs_list'));
$('#devs_info').parent().css('display',info?'':'none');
$('#devs_info').html(info);
smartMenu('#devs_list');
<?endif;?>
// parity status
$('span.info.title').html(part[3]);
$('span.parity').html(part[3]);
// parity schedule
var data = part[4].split('\0');
$('#parity').html(data[0]);
@@ -1320,6 +1482,7 @@ $(function() {
dropdown('enter_share');
<?endif;?>
dropdown('enter_view');
startup = false;
dashboard.start();
<?if ($apcupsd):?>
apcups.start();

View File

@@ -20,6 +20,19 @@ require_once "$docroot/plugins/dynamix.docker.manager/include/DockerClient.php";
require_once "$docroot/plugins/dynamix.vm.manager/include/libvirt_helpers.php";
require_once "$docroot/webGui/include/Helpers.php";
if (isset($_POST['sys'])) {
switch ($_POST['sys']) {
case 0: $size = exec("awk '/^MemTotal/{t=$2}/^MemAvailable/{a=$2}END{print (t-a)*1024}' /proc/meminfo 2>/dev/null"); break;
case 1: $size = exec("awk '/^size/{print \$3;exit}' /proc/spl/kstat/zfs/arcstats 2>/dev/null"); break;
case 2: $size = exec("df --output=used /boot 2>/dev/null|awk '$1!=\"Used\" {print $1*1024}'"); break;
case 3: $size = exec("df --output=used /var/log 2>/dev/null|awk '$1!=\"Used\" {print $1*1024}'"); break;
case 4: $size = exec("df --output=used /var/lib/docker 2>/dev/null|awk '$1!=\"Used\" {print $1*1024}'"); break;
default: $size = 0;
}
extract(parse_plugin_cfg('dynamix',true));
die(my_scale($size,$unit,null,-1,1024)." $unit");
}
$display = $_POST['display'];
if ($_POST['docker'] && ($display=='icons' || $display=='docker')) {

View File

@@ -232,17 +232,15 @@ fi
# generate our welcome text (management interface only)
if [[ -z $interface || "eth0 br0 bond0" =~ $interface ]]; then
source /etc/unraid-version
. /etc/unraid-version
echo -e "unRAID Server OS version: $version" >/etc/issue
# find management interface
ETH=eth0
[[ -e /sys/class/net/bond0 ]] && ETH=bond0
[[ -e /sys/class/net/br0 ]] && ETH=br0
IPv4=$(ip -4 addr show $ETH|awk '/inet /{print $2;exit}')
IPv6=$(ip -6 addr show $ETH noprefixroute|awk '/inet6 /{print $2;exit}')
[[ -z $IPv6 ]] && IPv6=$(ip -6 addr show $ETH scope global permanent|awk '/inet6 /{print $2;exit}')
[[ -n $IPv4 ]] && echo " IPv4 address: ${IPv4%%/*}">>/etc/issue || echo " IPv4 address: not set">>/etc/issue
[[ -n $IPv6 ]] && echo " IPv6 address: ${IPv6%%/*}">>/etc/issue || echo " IPv6 address: not set">>/etc/issue
[[ -e /sys/class/net/bond0 ]] && dev=bond0 || dev=eth0
[[ -e /sys/class/net/br0 ]] && dev=br0
IPv4=$(ip -br -4 addr show $dev|awk '{print $3}')
IPv6=$(ip -br -6 addr show $dev|awk '$3 !~ "^fe80" {print $3}')
[[ -n $IPv4 ]] && echo " IPv4 address: ${IPv4%/*}">>/etc/issue || echo " IPv4 address: not set">>/etc/issue
[[ -n $IPv6 ]] && echo " IPv6 address: ${IPv6%/*}">>/etc/issue || echo " IPv6 address: not set">>/etc/issue
echo >>/etc/issue
fi
exit 0