Skip to content

Commit

Permalink
init commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Peter(Yongsik) Moon authored and scroix committed Apr 1, 2024
1 parent 5de7268 commit 9889dcb
Show file tree
Hide file tree
Showing 7 changed files with 110 additions and 8 deletions.
18 changes: 16 additions & 2 deletions nodel-jyhost/src/main/java/org/nodel/jyhost/NodelHost.java
Original file line number Diff line number Diff line change
Expand Up @@ -640,8 +640,22 @@ public List<NodeURL> getNodeURLs(String filter) throws IOException {

public List<NodeURL> getNodeURLsForNode(SimpleName name) throws IOException {
return Nodel.getNodeURLsForNode(name);
}

}

public List<Map<String, String>> getLocalNodes(String filter) {
String lcFilter = Strings.isNullOrEmpty(filter) ? null : filter.toLowerCase();
List<Map<String, String>> list = new ArrayList<>();
for (SimpleName sn : BaseNode.getNodes().keySet()) {
if (Strings.isNullOrEmpty(lcFilter) || sn.getOriginalName().toLowerCase().contains(lcFilter)) {
Map<String, String> item = new HashMap<>();
item.put("name", sn.getOriginalName());
item.put("node", sn.getReducedName());
list.add(item);
}
}
return list;
}

/**
* Permanently shuts down this nodel host
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,11 @@ public BaseNode get(Object key) {
public Map<SimpleName, BaseNode> getNodes() {
return BaseNode.getNodes();
}

@Service(name = "locals", order = 1.5, title = "Locals", desc = "All the managed local nodes.")
public List<Map<String, String>> getLocalNodes(@Param(name = "filter", title = "Filter", desc = "Optional string filter.") String filter) {
return _nodelHost.getLocalNodes(filter);
}

@Service(name = "recipes", order = 1, title = "Recipes", desc = "Recipes that new nodes can be based on", genericClassA = String.class)
public RecipesEndPoint recipes() {
Expand Down
29 changes: 29 additions & 0 deletions nodel-webui-js/src/index.xsl
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,35 @@
</div>
]]>
</script>
<script id="localsTmpl" type="text/x-jsrender">
<![CDATA[
<div class="base">
<form class="form-inline">
<fieldset>
<div class="form-group">
<input class="form-control localslistfilter" type="text" data-link="flt" placeholder="filter"/>
<select class="form-control localslistshow" data-link="end">
<option value="10">10</option>
<option value="20">20</option>
<option value="50">50</option>
<option value="100">100</option>
<option value="99999">All</option>
</select>
</div>
<p class="lsttotal">total: {^{>lst.length}}</p>
</fieldset>
</form>
<div class="list-group list-group-basic">
{^{for lst sort='node' end=end sorted=~flst}}
<a class="list-group-item" data-link="href{:address} class{:~root^hosts[~encodr(host)].reachable ? 'list-group-item' : 'list-group-item unreachable'}"><img src="data:image/svg+xml;base64,{{:~root^hosts[~encodr(host)].icon}}"/>&nbsp;{^{:~highlight(name,~root.flt)}}</a>
{{/for}}
{^{if (~flst) && (end <= ~flst.length)}}
<a class="list-group-item listmore">more</a>
{{/if}}
</div>
</div>
]]>
</script>
<script id="diagsTmpl" type="text/x-jsrender">
<![CDATA[
<div class="base">
Expand Down
55 changes: 51 additions & 4 deletions nodel-webui-js/src/nodel.js
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,8 @@ var allowedtxt = ['py','xml','xsl','js','json','html','htm','css','java','groovy
var allowedbinary = ['png','jpg','ico','svg','zip','7z','exe'];
var nodeList = {'lst':[], 'flt':'', 'end':20, 'hosts':{}};
var nodeListreq = null;
var localsList = {'lst':[], 'flt':'', 'end':20, 'hosts':{}};
var localsListreq = null;

var t0;

Expand Down Expand Up @@ -425,6 +427,9 @@ $(function() {
getNodeList().then(function(){
refreshNodeList();
});
getLocalsList().then(function(){
// need to update again?
});
checkHostList();
setEvents();
updateLogForm();
Expand Down Expand Up @@ -700,6 +705,10 @@ var createDynamicElements = function(){
$.templates("#listTmpl").link(ele, nodeList);
$(ele).find('.base').addClass('bound');
d.resolve();
} else if($(ele).data('nodel') == 'locals'){
$.templates("#localsTmpl").link(ele, localsList);
$(ele).find('.base').addClass('bound');
d.resolve();
} else d.resolve();
p.push(d);
});
Expand Down Expand Up @@ -735,16 +744,17 @@ var generateHostIcon = function(host) {
return new Identicon(hash, options).toString();
}

var updateHost = function(host) {
var updateHost = function(host, targetList) {
var data = generateHostIcon(host);
var newhost = {};
newhost.icon = data;
newhost.reachable = false;
newhost.checked = false;
var hostobj = {}
hostobj[encodr(host)] = newhost;
var hosts = $.extend({}, nodeList['hosts'], hostobj);
$.observable(nodeList).setProperty('hosts', hosts);
var hosts = $.extend({}, targetList['hosts'], hostobj);
$.observable(targetList).setProperty('hosts', hosts);
return hosts;
};

var checkHostList = function(){
Expand Down Expand Up @@ -812,7 +822,7 @@ var getNodeList = function(filterstr){
data[i].host = getHost(data[i].address);
data[i].name = data[i].node;
data[i].node = getSimpleName(data[i].node);
if(_.isUndefined(nodeList['hosts'][encodr(data[i].host)])) updateHost(data[i].host);
if(_.isUndefined(nodeList['hosts'][encodr(data[i].host)])) updateHost(data[i].host, nodeList);
}
$.observable(nodeList['lst']).refresh(data);
}).always(function(){
Expand All @@ -821,6 +831,31 @@ var getNodeList = function(filterstr){
return d.promise();
}

var getLocalsList = function(filterstr){
if(!_.isUndefined(filterstr)) $.observable(localsList['flt'] = filterstr);
filter = {'filter': localsList['flt']};
var d = $.Deferred();
if(localsListreq) localsListreq.abort();
var localhost = 'localhost';
localsListreq = $.postJSON(proto+'//'+host+'/REST/locals', JSON.stringify(filter), function(data) {
for (i=0; i<data.length; i++) {
data[i].host = localhost;
data[i].address = '/nodes/' + encodeURIComponent(data[i].node) + '/nodel.xml';

if(_.isUndefined(localsList['hosts'][encodr(localhost)])) {
var hosts = updateHost(data[i].host, localsList);
hosts[localhost].checked = true; // always true
hosts[localhost].reachable = true; // always true
$.observable(localsList).setProperty('hosts', hosts);
}
}
$.observable(localsList['lst']).refresh(data);
}).always(function(){
d.resolve();
});
return d.promise();
}

var checkReachable = function(host){
var d = $.Deferred();
$.ajax({
Expand Down Expand Up @@ -1759,11 +1794,23 @@ var setEvents = function(){
getNodeList(filterstr);
};
});
$('body').on('keyup','.localslistfilter', function(e){
var charCode = e.charCode || e.keyCode;
if((charCode !== 40) && (charCode !== 38) && (charCode !== 13) && (charCode !== 27)) {
var filterstr = $(this).val();
getLocalsList(filterstr);
};
});
$('body').on('click','.nodel-list .listmore', function(){
var ele = $(this).closest('.base').find('.nodelistshow');
$(ele).find('option:selected').prop('selected', false).next().prop('selected', true);
$(ele).trigger('change');
});
$('body').on('click','.nodel-locals .listmore', function(){
var ele = $(this).closest('.base').find('.localslistshow');
$(ele).find('option:selected').prop('selected', false).next().prop('selected', true);
$(ele).trigger('change');
});
$('body').on('keydown','input', function(e){
var charCode = e.charCode || e.keyCode;
if(charCode == 27) {
Expand Down
7 changes: 7 additions & 0 deletions nodel-webui-js/src/nodes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,11 @@
</column>
</row>
</page>
<page title='Locals'>
<row>
<column>
<nodel type="locals"/>
</column>
</row>
</page>
</pages>
2 changes: 1 addition & 1 deletion nodel-webui-js/src/templates.xsl
Original file line number Diff line number Diff line change
Expand Up @@ -1312,7 +1312,7 @@
<!-- group -->
<!-- nodel -->
<xsl:template match="nodel">
<xsl:if test="@type='description' or @type='actsig' or @type='log' or @type='serverlog' or @type='charts' or @type='console' or @type='params' or @type='remote' or @type='list' or @type='diagnostics'">
<xsl:if test="@type='description' or @type='actsig' or @type='log' or @type='serverlog' or @type='charts' or @type='console' or @type='params' or @type='remote' or @type='list' or @type='locals' or @type='diagnostics'">
<div data-nodel="{@type}" class="nodel-{@type}"></div>
</xsl:if>
<xsl:if test="@type='add'">
Expand Down
2 changes: 1 addition & 1 deletion nodel-webui-js/src/theme.less
Original file line number Diff line number Diff line change
Expand Up @@ -808,7 +808,7 @@ div.nodel-charts {
}
}
}
.nodel-list {
.nodel-list, .nodel-locals {
a > img {
height: 20px;
width: 20px;
Expand Down

0 comments on commit 9889dcb

Please sign in to comment.