diff options
Diffstat (limited to 'modules-available/dnbd3/templates')
9 files changed, 611 insertions, 0 deletions
diff --git a/modules-available/dnbd3/templates/fragment-server-settings.html b/modules-available/dnbd3/templates/fragment-server-settings.html new file mode 100644 index 00000000..61b0626d --- /dev/null +++ b/modules-available/dnbd3/templates/fragment-server-settings.html @@ -0,0 +1,14 @@ +<input type="hidden" name="server" value="{{serverid}}"> + +<div class="checkbox"> + <input type="checkbox" name="bgr" id="bgr" {{#bgr}}checked{{/bgr}}> + <label for="bgr">{{lang_backgroundReplication}}</label> +</div> +<i>{{lang_backgroundReplicationInfo}}</i> +<br> +<div class="checkbox"> + <input type="checkbox" name="firewall" id="firewall" {{#firewall}}checked{{/firewall}}> + <label for="firewall">{{lang_firewalled}}</label> +</div> +<i>{{lang_firewallInfo}}</i> +<br> diff --git a/modules-available/dnbd3/templates/page-proxy-altservers.html b/modules-available/dnbd3/templates/page-proxy-altservers.html new file mode 100644 index 00000000..00a884cc --- /dev/null +++ b/modules-available/dnbd3/templates/page-proxy-altservers.html @@ -0,0 +1,36 @@ +<div class="col-md-6"> + <h2>{{lang_altservers}}</h2> + <table class="table table-condensed"> + <tr> + <th>{{lang_proxyServerTHead}}</th> + <th>{{lang_numFails}}</th> + <th class="text-right">{{lang_latency}}</th> + <th>{{lang_flags}}</th> + <th>{{lang_comment}}</th> + </tr> + {{#altservers}} + <tr> + <td class="text-nowrap">{{host}}</td> + <td> + {{^isClientOnly}} + {{numFails}} + {{/isClientOnly}} + </td> + <td class="text-right text-nowrap"> + {{^isClientOnly}} + {{rtt}} ms + {{/isClientOnly}} + </td> + <td> + {{#isClientOnly}} + [CO] + {{/isClientOnly}} + {{#isPrivate}} + [PO] + {{/isPrivate}} + </td> + <td><table class="slx-ellipsis"><tr><td>{{comment}}</td></tr></table></td> + </tr> + {{/altservers}} + </table> +</div>
\ No newline at end of file diff --git a/modules-available/dnbd3/templates/page-proxy-clients.html b/modules-available/dnbd3/templates/page-proxy-clients.html new file mode 100644 index 00000000..9e7cec4c --- /dev/null +++ b/modules-available/dnbd3/templates/page-proxy-clients.html @@ -0,0 +1,20 @@ +<div class="col-md-6"> + <h2>{{lang_clientList}}</h2> + + <table class="table table-condensed"> + <tr> + <th>{{lang_client}}</th> + <th class="text-right">{{lang_bytesSent}}</th> + </tr> + {{#clients}} + <tr> + <td> + {{address}} + </td> + <td data-sort="int" data-sort-value="{{bytesSent}}" class="text-right"> + {{bytesSent_s}} + </td> + </tr> + {{/clients}} + </table> +</div>
\ No newline at end of file diff --git a/modules-available/dnbd3/templates/page-proxy-config.html b/modules-available/dnbd3/templates/page-proxy-config.html new file mode 100644 index 00000000..adc73a57 --- /dev/null +++ b/modules-available/dnbd3/templates/page-proxy-config.html @@ -0,0 +1,4 @@ +<div class="col-md-6"> + <h2>{{lang_proxyConfig}}</h2> + <pre>{{config}}</pre> +</div>
\ No newline at end of file diff --git a/modules-available/dnbd3/templates/page-proxy-header.html b/modules-available/dnbd3/templates/page-proxy-header.html new file mode 100644 index 00000000..6f3f1b7f --- /dev/null +++ b/modules-available/dnbd3/templates/page-proxy-header.html @@ -0,0 +1 @@ +<h1>{{ip}}</h1>
\ No newline at end of file diff --git a/modules-available/dnbd3/templates/page-proxy-loclist.html b/modules-available/dnbd3/templates/page-proxy-loclist.html new file mode 100644 index 00000000..67c90683 --- /dev/null +++ b/modules-available/dnbd3/templates/page-proxy-loclist.html @@ -0,0 +1,27 @@ +<div class="col-md-6"> + <h2>{{lang_clientsByLocation}}</h2> + + <table class="table table-condensed"> + <tr> + <th>{{lang_location}}</th> + <th class="text-right">{{lang_count}}</th> + <th class="text-right">{{lang_recursiveCount}}</th> + </tr> + {{#list}} + <tr> + <td> + {{#depth}} + <div style="display:inline-block;width:{{depth}}em"></div> + {{/depth}} + {{locationname}} + </td> + <td class="text-right"> + {{clientCount}} + </td> + <td class="text-right"> + {{recCount}} + </td> + </tr> + {{/list}} + </table> +</div>
\ No newline at end of file diff --git a/modules-available/dnbd3/templates/page-proxy-stats.html b/modules-available/dnbd3/templates/page-proxy-stats.html new file mode 100644 index 00000000..e7811028 --- /dev/null +++ b/modules-available/dnbd3/templates/page-proxy-stats.html @@ -0,0 +1,9 @@ +<div class="panel panel-default"> + <div class="panel-body"> + {{lang_sessionTx}}: <b>{{bytesSent_s}}</b> + –– + {{lang_sessionRx}}: <b>{{bytesReceived_s}}</b> + –– + {{lang_uptime}}: <b>{{uptime_s}}</b> + </div> +</div>
\ No newline at end of file diff --git a/modules-available/dnbd3/templates/page-server-locations.html b/modules-available/dnbd3/templates/page-server-locations.html new file mode 100644 index 00000000..20dddaac --- /dev/null +++ b/modules-available/dnbd3/templates/page-server-locations.html @@ -0,0 +1,96 @@ +<h1>{{lang_manageAccessTo}} {{ip}}</h1> + +<p><i>{{lang_proxyLocationText}}</i></p> + +<form method="post" action="?do=dnbd3"> + <input type="hidden" name="token" value="{{token}}"> + <input type="hidden" name="server" value="{{serverid}}"> + + <div class="buttonbar text-right"> + <button type="submit" class="btn btn-primary" name="action" value="savelocations"> + <span class="glyphicon glyphicon-floppy-disk"></span> + {{lang_save}} + </button> + </div> + + <div class="row"> + <div class="col-md-6"> + <h3>{{lang_allowedSubnets}}</h3> + <div id="subnet-list"> + + </div> + </div> + <div class="col-md-6"> + <h3>{{lang_locations}}</h3> + {{#locations}} + <div class="checkbox"> + {{#depth}} + <div style="display:inline-block;width:{{depth}}em"></div> + {{/depth}} + <input id="cb-{{locationid}}" class="loc-check" type="checkbox" name="location[]" value="{{locationid}}" {{checked_s}}> + <label for="cb-{{locationid}}">{{locationname}}</label> + </div> + {{/locations}} + </div> + </div> + + <div class="buttonbar text-right"> + <button type="submit" class="btn btn-success" name="action" value="savelocations"> + <span class="glyphicon glyphicon-floppy-disk"></span> + {{lang_save}} + </button> + </div> +</form> + +<script type="application/javascript"><!-- +document.addEventListener('DOMContentLoaded', function() { + + const locData = {{{jsonLocations}}}; + const $snList = $('#subnet-list'); + + function updateLocations() { + var allLocs = []; + $('.loc-check:checked').each(function () { + var lid = parseInt(this.value); + var locs = getAllLocs(lid); + for (var i = 0; i < locs.length; ++i) { + if (allLocs.indexOf(locs[i]) === -1) allLocs.push(locs[i]); + } + }); + var subnets = []; + $snList.empty(); + for (var i = 0; i < allLocs.length; ++i) { + var loc = locData['l'+allLocs[i]]; + if (!loc || !loc.subnets) continue; + for (var j = 0; j < loc.subnets.length; ++j) { + var line = long2ip(loc.subnets[j].startaddr) + ' - ' + long2ip(loc.subnets[j].endaddr); + if (subnets.indexOf(line) === -1) { + subnets.push(line); + $snList.append($('<div>').text(line)); + } + } + } + if (subnets.length === 0) { + $snList.text('{{lang_global}}'); + } + } + + function getAllLocs(lid) { + var e = locData['l'+lid]; + if (!e || !e.children) return []; + var ret = e.children; + ret.push(lid); + return ret; + } + + function long2ip(ip) { + // discuss at: http://locutus.io/php/long2ip/ + // original by: Waldo Malqui Silva (http://waldo.malqui.info) + if (!isFinite(ip)) return false; + return [ip >>> 24, ip >>> 16 & 0xFF, ip >>> 8 & 0xFF, ip & 0xFF].join('.'); + } + + $('.loc-check').change(updateLocations); + updateLocations(); +}); +//--></script>
\ No newline at end of file diff --git a/modules-available/dnbd3/templates/page-serverlist.html b/modules-available/dnbd3/templates/page-serverlist.html new file mode 100644 index 00000000..c5905dcd --- /dev/null +++ b/modules-available/dnbd3/templates/page-serverlist.html @@ -0,0 +1,404 @@ +<h1>{{lang_dnbd3Management}}</h1> +<p><i>{{lang_dnbd3IntroText}}</i></p> + +<div class="panel panel-default"> + <div class="panel-heading"> + {{lang_dnbd3Status}}: + <b> + {{#enabled}}{{lang_enabled}}{{/enabled}} + {{^enabled}}{{lang_disabled}} (NFS/CIFS){{/enabled}} + </b> + – <a href="#" data-toggle="collapse" data-target="#toggle-div">{{lang_changeDnbd3Status}}</a> + </div> + <div class="panel-collapse collapse" id="toggle-div"> + <div class="panel-body"> + <form method="post" action="?do=dnbd3"> + <input type="hidden" name="token" value="{{token}}"> + <div class="checkbox"> + <input id="enable-dnbd3" type="checkbox" name="enabled" {{enabled_checked_s}}> + <label for="enable-dnbd3">{{lang_enableDnbd3}}</label> + </div> + <div class="checkbox"> + <input id="allow-nfs" type="checkbox" name="with-nfs" {{nfs_checked_s}}> + <label for="allow-nfs">{{lang_allowNfsFallback}}</label> + </div> + <button type="submit" name="action" value="toggle-usage" class="btn btn-success"> + <span class="glyphicon glyphicon-floppy-disk"></span> + {{lang_save}} + </button> + </form> + </div> + </div> +</div> + +<form method="post" onsubmit="$('#refbtn').prop('disabled', true).find('span').addClass('slx-rotation')" action="?do=dnbd3"> + <input type="hidden" name="token" value="{{token}}"> + <input type="hidden" name="action" value="refresh"> + <h2> + {{lang_serverList}} + <button id="refbtn" type="submit" class="btn btn-default"><span class="glyphicon glyphicon-refresh"></span></button> + </h2> +</form> + +<form method="post" action="?do=dnbd3"> + <input type="hidden" name="token" value="{{token}}"> + <input type="hidden" name="action" value="delserver"> + <table class="table"> + <thead> + <tr> + <th></th> + <th>{{lang_proxyServerTHead}}</th> + <th class="text-right">{{lang_storageSize}}</th> + <th class="text-right">{{lang_clientCount}}</th> + <th class="text-right">{{lang_lastSeen}}</th> + <th class="text-right">{{lang_uptime}}</th> + <th class="text-right">{{lang_txTotal}}</th> + <th class="text-right">{{lang_rxTotal}}</th> + <th class="text-right">{{lang_locations}}</th> + <th></th> + </tr> + </thead> + + <tbody> + {{#list}} + <tr> + <td class="text-right text-nowrap"> + {{#slxOk}} + <span class="glyphicon glyphicon-ok text-success"></span> + {{/slxOk}} + {{#slxDown}} + <span class="glyphicon glyphicon-off"></span> + {{/slxDown}} + {{#uptime}} + <span class="glyphicon glyphicon-ok text-success"></span> + {{/uptime}} + {{^uptime}} + <span class="glyphicon glyphicon-remove text-danger"></span> + {{/uptime}} + </td> + <td class="{{#self}}slx-bold{{/self}}"> + {{#machineuuid}} + <a class="pull-right btn btn-default btn-xs" href="?do=Statistics&uuid={{machineuuid}}"> + <span class="glyphicon glyphicon-eye-open"></span> + </a> + {{/machineuuid}} + <a href="?do=dnbd3&show=proxy&server={{serverid}}"> + {{fixedip}} + <span class="small">{{clientip}}</span> + </a> + <div class="small">{{hostname}}</div> + </td> + <td data-sort="int" data-sort-default="desc" data-sort-value="{{disktotal}}"> + <div style="border:1px solid #ddd;background:linear-gradient(to right, #f85 {{diskUsePercent}}%, transparent {{diskUsePercent}}%)" + class="text-center text-nowrap" + title="{{lang_diskFree}}: {{diskfree_s}}"> + {{disktotal_s}} + </div> + {{#errormsg}} + <div class="small text-nowrap text-danger" style="margin-right:-500px"> + {{errormsg}} + </div> + {{/errormsg}} + </td> + <td data-sort="int" data-sort-default="desc" class="text-right"> + {{clientcount}} + </td> + <td data-sort="int" data-sort-default="desc" data-sort-value="{{dnbd3lastseen}}" class="text-right text-nowrap"> + {{dnbd3lastseen_s}} + </td> + <td data-sort="int" data-sort-default="desc" data-sort-value="{{uptime}}" class="text-right text-nowrap"> + {{uptime_s}} + </td> + <td data-sort="int" data-sort-default="desc" data-sort-value="{{totalup}}" class="text-right text-nowrap"> + {{totalup_s}} + </td> + <td data-sort="int" data-sort-default="desc" data-sort-value="{{totaldown}}" class="text-right text-nowrap"> + {{totaldown_s}} + </td> + <td class="text-right text-nowrap"> + {{^self}} + {{^locations}} + <i>{{lang_global}}</i> + {{/locations}} + {{#locations}} + {{locations}} + {{/locations}} + <a href="?do=dnbd3&show=locations&server={{serverid}}" class="btn btn-default btn-xs"> + <span class="glyphicon glyphicon-map-marker"></span> + </a> + {{/self}} + </td> + <td class="text-right text-nowrap"> + {{#machineuuid}} + {{#rebootcontrol}} + <button class="btn btn-warning btn-xs reboot-btn" type="button" data-id="{{serverid}}" + data-toggle="modal" data-target="#server-reboot-modal" title="{{lang_reboot}}"> + <span class="glyphicon glyphicon-repeat"></span> + </button> + {{/rebootcontrol}} + <button class="btn btn-default btn-xs edit-btn" type="button" data-id="{{serverid}}" + data-toggle="modal" data-target="#server-edit-modal" title="{{lang_settings}}"> + <span class="glyphicon glyphicon-cog"></span> + </button> + {{/machineuuid}} + {{^self}} + <button class="btn btn-danger btn-xs" name="server" value="{{serverid}}" + onclick="return confirm('{{lang_wantToDelete}}')" title="{{lang_delete}}"> + <span class="glyphicon glyphicon-trash"></span> + </button> + {{/self}} + </td> + </tr> + {{/list}} + </tbody> + </table> +</form> + +<div class="btn-toolbar pull-right"> + <div class="btn-group"> + <button type="button" class="btn btn-success" data-toggle="modal" data-target="#add-modal"> + <span class="glyphicon glyphicon-plus"></span> + {{lang_externalServerAdd}} + </button> + <button type="button" class="btn btn-default" data-toggle="modal" data-target="#help-external"> + <span class="glyphicon glyphicon-question-sign"></span> + </button> + </div> + <div class="btn-group"> + <a class="btn btn-success" href="?do=runmode&module=dnbd3&modeid=proxy&redirect=?do=dnbd3"> + <span class="glyphicon glyphicon-plus"></span> + {{lang_managedServerAdd}} + </a> + <button type="button" class="btn btn-default" data-toggle="modal" data-target="#help-automatic"> + <span class="glyphicon glyphicon-question-sign"></span> + </button> + </div> +</div> + +<div id="help-external" class="modal fade" role="dialog"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal">×</button> + <h4 class="modal-title"><b>{{lang_externalServer}}</b></h4> + </div> + <div class="modal-body"> + {{lang_externalServerHelp}} + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-primary pull-right" data-dismiss="modal"> + {{lang_close}} + </button> + </div> + </div> + </div> +</div> + +<div id="help-automatic" class="modal fade" role="dialog"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal">×</button> + <h4 class="modal-title"><b>{{lang_managedServer}}</b></h4> + </div> + <div class="modal-body"> + {{lang_managedServerHelp}} + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-primary pull-right" data-dismiss="modal"> + {{lang_close}} + </button> + </div> + </div> + </div> +</div> + +<div id="server-edit-modal" class="modal fade" role="dialog"> + <div class="modal-dialog"> + <div class="modal-content"> + <form method="post" action="?do=dnbd3"> + <input type="hidden" name="token" value="{{token}}"> + <input type="hidden" name="action" value="editserver"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal">×</button> + <h4 class="modal-title"><b>{{lang_editProxyHeading}}</b></h4> + </div> + <div class="modal-body" id="server-edit-body"> + . + </div> + <div class="modal-footer"> + <button type="submit" class="btn btn-primary pull-right"> + <span class="glyphicon glyphicon-floppy-disk"></span> + {{lang_save}} + </button> + </div> + </form> + </div> + </div> +</div> + +<div id="server-reboot-modal" class="modal fade" role="dialog"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal">×</button> + <h4 class="modal-title"><b>{{lang_rebootProxyHeading}}</b></h4> + </div> + <div class="modal-body"> + <p>{{lang_rebootProxyText}}</p> + <p id="reboot-status"></p> + </div> + <div class="modal-footer text-right"> + <button type="button" class="btn btn-default" data-dismiss="modal">{{lang_close}}</button> + <button id="btn-exec-reboot" type="button" class="btn btn-primary"> + <span class="glyphicon glyphicon-repeat"></span> + {{lang_reboot}} + </button> + </div> + </div> + </div> +</div> + +<div id="add-modal" class="modal fade" role="dialog"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal">×</button> + <h4 class="modal-title"><b>{{lang_addServer}}</b></h4> + </div> + <form id="addform" method="post" action="?do=dnbd3"> + <div class="modal-body"> + <p>{{lang_enterIpOfServer}}</p> + + <input type="hidden" name="token" value="{{token}}"> + <input type="text" class="form-control" name="newip" id="newip"> + <div id="addtest" class="text-danger"></div> + </div> + <div class="modal-footer"> + <div class="btn-toolbar pull-right"> + <button id="testbtn" type="submit" class="btn btn-warning" name="action" value="addserver"> + <span class="glyphicon glyphicon-question-sign"></span> + {{lang_test}} + </button> + <button id="savebtn" type="submit" class="btn btn-primary" name="action" value="addserver" disabled> + <span class="glyphicon glyphicon-floppy-disk"></span> + {{lang_save}} + </button> + </div> + </div> + </form> + </div> + </div> +</div> + +<div class="clearfix"></div> + +<script type="application/javascript"><!-- +document.addEventListener('DOMContentLoaded', function () { + var slxWorking = false; + var testedIp; + const $form = $('#addform'); + const $inputs = $form.find(':input'); + const $result =$('#addtest'); + const $ip = $('#newip'); + const $save = $('#savebtn'); + + const changeFunc = function() { + $save.prop('disabled', $ip.val() !== testedIp); + }; + $ip.change(changeFunc).keypress(function () { setTimeout(changeFunc, 1); }); + + $form.submit(function (event) { + console.log('pre-sub'); + console.log($save.prop('disabled')); + if (!$save.prop('disabled')) return; + console.log('post-sub'); + event.preventDefault(); + runTest(); + }); + + $('#testbtn').click(function (event) { + console.log('pre-focus'); + if ($ip.is(':focus')) return; + console.log('post-focus'); + event.preventDefault(); + runTest(); + }); + + function runTest() { + if (slxWorking === false) { + var ip = $ip.val(); + var form = $('#addform'); + slxWorking = Math.random(); + var workCopy = slxWorking; + $inputs.prop('disabled', true); + $result.empty().removeClass('text-danger').text('...working...'); + var resetFunc = function(ok) { + if (slxWorking === workCopy) { + slxWorking = false; + $inputs.prop('disabled', false); + if (!ok) $result.empty().addClass('text-danger').text('Timeout.'); + } + }; + setTimeout(resetFunc, 3000); + testedIp = ip; + $.post('?do=dnbd3', {action:'servertest', ip:ip, token:TOKEN}, function (data) { + if (workCopy !== slxWorking) return; + resetFunc(true); + if (!data || data.fatal) { + $save.prop('disabled', true); + } + if (data && data.error) { + $result.empty().addClass('text-danger').text(data.error); + } else { + $result.empty().removeClass('text-danger').text('OK, Uptime: ' + data.uptime + ', Clients: ' + data.clientCount); + } + }, 'json').fail(function(oh, what) { + resetFunc(true); + $result.empty().addClass('text-danger').text('Fail ' + what); + }); + } + } + + $('.edit-btn').click(function() { + var id = $(this).data('id'); + $('#server-edit-body').text('loading').load('?do=dnbd3&action=editserver&server=' + id); + }); + + var rebootServerId = 0; + $('.reboot-btn').click(function() { + rebootServerId = $(this).data('id'); + $('#btn-exec-reboot').prop('disabled', false); + $('#reboot-status').empty(); + }); + $('#btn-exec-reboot').click(function() { + $(this).prop('disabled', true); + var $t = $('#reboot-status'); + if (rebootServerId === 0) { + $t.text('No ID!?'); + return; + } + $t.html('<span class="glyphicon glyphicon-refresh slx-rotation"></span>'); + var sid = rebootServerId; + var query = function() { + $.ajax({ + "data": {"token": TOKEN, "action": "reboot", "server": sid}, + "method": "POST", + "dataType": "text", + "url": "?do=dnbd3" + }).done(function (data) { + $t.text(data); + if (data.indexOf('REBOOTING') !== -1 || data.indexOf('CONNECTING') !== -1) { + setTimeout(query, 5000); + $t.append($('<span class="glyphicon glyphicon-refresh slx-rotation"></span>')); + } + }).fail(function () { + $.text('Failed'); + }); + }; + query(); + rebootServerId = 0; + }); +}); + +//--></script>
\ No newline at end of file |