@@ -290,11 +308,27 @@ function uptimeStr(s){var d=Math.floor(s/86400),h=Math.floor(s%86400/3600),m=Mat
function getFiltered(){
var filter=document.getElementById('tag-filter').value;
var taskOnly=document.getElementById('task-filter').checked;
+ var onlineOnly=document.getElementById('online-filter').checked;
+ var sortBy=document.getElementById('sort-select').value;
var result=allNodes;
if(filter){var q=filter.toLowerCase().replace(/^#/,'');result=result.filter(function(n){return n.tags&&n.tags.some(function(t){return t.indexOf(q)>=0})})}
if(taskOnly){result=result.filter(function(n){return n.task_exec})}
+ if(onlineOnly){result=result.filter(function(n){return n.online})}
+
+ // Apply sorting
+ if(sortBy==='polo_desc'){result.sort(function(a,b){return (b.polo_score||0)-(a.polo_score||0)})}
+ else if(sortBy==='polo_asc'){result.sort(function(a,b){return (a.polo_score||0)-(b.polo_score||0)})}
+ else if(sortBy==='trust_desc'){result.sort(function(a,b){return (b.trust_links||0)-(a.trust_links||0)})}
+ else if(sortBy==='online'){result.sort(function(a,b){return b.online-a.online})}
+ else{result.sort(function(a,b){return a.address.localeCompare(b.address)})}
+
return result;
}
+function getPoloClass(score){
+ if(score>=50)return 'polo-high';
+ if(score>=0)return 'polo-medium';
+ return 'polo-low';
+}
function renderNodes(){
var tb=document.getElementById('nodes-body');
tb.innerHTML='';
@@ -310,14 +344,17 @@ function renderNodes(){
var td2=document.createElement('td');
var dot=document.createElement('span');dot.style.cssText='display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;background:'+(n.online?'#3fb950':'#484f58');
td2.appendChild(dot);td2.appendChild(document.createTextNode(n.online?'Online':'Offline'));td2.style.color=n.online?'#3fb950':'#484f58';
- var td3=document.createElement('td');td3.textContent=n.trust_links||0;td3.style.color=n.trust_links?'#58a6ff':'#484f58';
- var td4=document.createElement('td');
- if(n.tags&&n.tags.length){n.tags.forEach(function(t){var s=document.createElement('span');s.className='tag';s.textContent='#'+t;td4.appendChild(s)})}else{td4.textContent='\u2014'}
+ var td3=document.createElement('td');
+ var score=n.polo_score||0;
+ td3.textContent=score;td3.className='polo-score '+getPoloClass(score);
+ var td4=document.createElement('td');td4.textContent=n.trust_links||0;td4.style.color=n.trust_links?'#58a6ff':'#484f58';
var td5=document.createElement('td');
- if(n.task_exec){var b=document.createElement('span');b.className='task-badge';b.textContent='executor';td5.appendChild(b)}else{td5.textContent='\u2014'}
- tr.appendChild(td1);tr.appendChild(td2);tr.appendChild(td3);tr.appendChild(td4);tr.appendChild(td5);tb.appendChild(tr);
+ if(n.tags&&n.tags.length){n.tags.forEach(function(t){var s=document.createElement('span');s.className='tag';s.textContent='#'+t;td5.appendChild(s)})}else{td5.textContent='\u2014'}
+ var td6=document.createElement('td');
+ if(n.task_exec){var b=document.createElement('span');b.className='task-badge';b.textContent='executor';td6.appendChild(b)}else{td6.textContent='\u2014'}
+ tr.appendChild(td1);tr.appendChild(td2);tr.appendChild(td3);tr.appendChild(td4);tr.appendChild(td5);tr.appendChild(td6);tb.appendChild(tr);
});
- }else{tb.innerHTML='
No nodes'+(document.getElementById('tag-filter').value||document.getElementById('task-filter').checked?' matching filter':' registered')+'
'}
+ }else{tb.innerHTML='
No nodes'+(document.getElementById('tag-filter').value||document.getElementById('task-filter').checked||document.getElementById('online-filter').checked?' matching filter':' registered')+'
'}
var pg=document.getElementById('pagination');
if(filtered.length<=pageSize){pg.innerHTML='';return}
pg.innerHTML='';
@@ -329,6 +366,7 @@ function renderNodes(){
function update(){
fetch('/api/stats').then(function(r){return r.json()}).then(function(d){
document.getElementById('total-requests').textContent=fmt(d.total_requests);
+ document.getElementById('total-nodes').textContent=fmt(d.total_nodes||0);
document.getElementById('active-nodes').textContent=fmt(d.active_nodes||0);
document.getElementById('trust-links').textContent=fmt(d.total_trust_links||0);
document.getElementById('unique-tags').textContent=fmt(d.unique_tags||0);
@@ -341,7 +379,11 @@ function update(){
var tr=document.createElement('tr');
var td1=document.createElement('td');td1.textContent=n.id;
var td2=document.createElement('td');td2.textContent=n.name;
- var td3=document.createElement('td');td3.textContent=n.members;
+ var td3=document.createElement('td');
+ var onlineMembers=n.online_members||0;
+ var totalMembers=n.members||0;
+ td3.textContent=onlineMembers+' / '+totalMembers;
+ if(onlineMembers>0){td3.style.color='#3fb950'}else{td3.style.color='#8b949e'}
tr.appendChild(td1);tr.appendChild(td2);tr.appendChild(td3);nb.appendChild(tr);
});
}else{nb.innerHTML='