var loadNodesListMan = function (event) {
console.log("loadNodesListMan");
listNodes();
listTrustUnits();
listMultiCP();
};
var listMultiCP = function () {
setTimeout(function () {
var listMPContractProcess = {};
listMPContractProcess.action = "listMultiPointContractProcess";
global.wssocket.send(JSON.stringify(listMPContractProcess));
});
};
var listNodes = function (event) {
console.log("listNodes");
setTimeout(function () {
var param = {};
param.action = "listNodes";
param.pubKey = global.sm2Key.publicKey;
global.wssocket.send(JSON.stringify(param));
}, 300);
};
var listTrustUnits = function (event) {
console.log("listTrustUnits");
setTimeout(function () {
var param = {};
param.action = "listTrustUnits";
param.pubKey = global.sm2Key.publicKey;
global.wssocket.send(JSON.stringify(param));
}, 300);
};
function queryNodeByName(name) {
for (const i = 0; i < global.nodeInfo.online.length; i++) {
const node = global.nodeInfo.online[i];
if (node.nodeName === name)
return node;
}
return undefined;
}
var submitTrustUnitNodes = function (event) {
const options = document.querySelector('#selectTrustUnitNodes').options;
var list = [];
for (let i = 0; i < options.length; i++) {
// 如果该option被选中,则将它的value存入数组
if (options[i].selected) {
const node = queryNodeByName(options[i].text);
if (!node) {
console.log("Error, can't find node:" + option.text);
continue;
}
// item.masterAddress = node.masterAddress;
// item.peerID = node.peerID;
// item.udpID = node.udpID;
// item.ipPort = node.ipPort;
list.push({
nodeName: node.nodeName,
// masterAddress: node.masterAddress,
// peerID: node.peerID,
// udpID: node.udpID,
// ipPort: node.ipPort,
pubKey: node.pubKey
});
}
}
const param = {
action: 'createTrustUnit',
};
param.action = "createTrustUnit";
param.data = list;
const name = $("#newUnitName")[0].value;
if (!name) {
myToast("失败", "请输入集群名称");
}
param.msg = name;
global.wssocket.send(JSON.stringify(param));
};
var onCreateTrustUnit = function (event) {
myToast("Success", "创建可信集群成功")
listTrustUnits();
};
// if ($("#nodesStatusPieDiv").css("height") == "0px") {
var drawNodesStatusPie = function (id, obj) {
// if ($("#nodesStatusPieDiv").css("height") == "0px") {
if ($("#" + id).css("height") == "0px") {
console.log("drawNodesStatusPie: ignore");
return;
}
$("#" + id)
.html(
"
");
var result = {};
if (obj.offline.length > obj.online.length) {
result["Offline"] = obj.offline.length - obj.online.length;
result["Online"] = obj.online.length;
} else {
result["Offline"] = 0;
result["Online"] = obj.online.length;
}
global.result = result;
var dataList = [];
var valDataList = [];
for (var key in result) {
dataList.push(key);
var l = {};
l.name = key
l.value = result[key];
valDataList.push(l);
}
var myChart = echarts.init($("#" + id + "Canv")[0], 'walden');
var option222 = {
tooltip: {
trigger: 'item',
formatter: '{a} {b}: {c} ({d}%)'
},
legend: {
orient: 'vertical',
left: 10,
data: dataList
},
series: [{
name: '节点数目',
type: 'pie',
radius: ['50%', '70%'],
avoidLabelOverlap: false,
label: {
normal: {
show: false,
position: 'center'
},
emphasis: {
show: true,
textStyle: {
fontSize: '15',
fontWeight: 'bold'
}
}
},
labelLine: {
normal: {
show: false
}
},
data: valDataList
}]
};
myChart.setOption(option222);
};
var onListNodes = function (obj) {
// mainVue
console.log("onListNodes");
console.log(obj);
global.nodeInfo = obj;
var len = 0;
if (obj.offline) {
len += obj.offline.length;
}
if (obj.online) {
len += obj.online.length;
}
mainVue.nodeCount = len;
var count = 0;
let i;
if (obj.online) {
for (i = 0; i < obj.online.length; i++) {
count += obj.online[i].contracts.length;
}
}
mainVue.contractCount = count;
// nodesStatusPieDiv
// dashNodesStatusPieDiv
drawNodesStatusPie("nodesStatusPieDiv", obj);
drawNodesStatusPie("dashNodesStatusPieDiv", obj);
if ($("#nodesTabDiv").css("height") === "0px") {
console.log("nodesTabDiv: ignore");
return;
}
var dtLang = {
"sProcessing": "处理中...",
"lengthMenu": '显示 ' + '10 '
+ '50 '
+ '100 '
+ '全部 ' + ' 项结果',
"sZeroRecords": "没有匹配结果",
"sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
"sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
"sInfoFiltered": "(由 _MAX_ 项结果过滤)",
"sInfoPostFix": "",
"sSearch": "搜索:",
"sUrl": "",
"sEmptyTable": "表中数据为空",
"sLoadingRecords": "载入中...",
"sInfoThousands": ",",
"oPaginate": {
"sFirst": "首页",
"sPrevious": "上页",
"sNext": "下页",
"sLast": "末页"
},
"oAria": {
"sSortAscending": ": 以升序排列此列",
"sSortDescending": ": 以降序排列此列"
}
};
let html = "" +
"" +
"序号 " +
"Name " +
"状态 " +
"合约数目 " +
"事件数目 " +
// "PeerID " +
// "UDPID " +
"TCP地址 " +
"公钥 " +
" " +
"";
var tableTail = "
";
var contractCount = 0;
var eventCount = 0;
$("#selectTrustUnitNodes").html("");
var x = document.getElementById("selectTrustUnitNodes");
x.options.length = 0;
for (i = 0; i < obj.online.length; i++) {
let node = obj.online[i];
let nodeEventCount = node.events | '-';
let nameHtml = ''
if (node.masterAddress) {
const ipPort = node.masterAddress.split(":")
nameHtml =
`` +
`${node.nodeName} `
} else {
nameHtml = node.nodeName;
}
html += `${i + 1}
${nameHtml}
Online
${node.contracts ? node.contracts.length : 0}
${nodeEventCount}
${node.masterAddress}
${node.pubKey}
`
if (node.contracts && node.contracts.length) {
contractCount += node.contracts.length;
}
eventCount += nodeEventCount;
var option = document.createElement("option");
option.text = node.nodeName;
option.value = node.peerID;
x.add(option);// new
// Option(obj.online[i].pubKey,obj.online[i].pubKey),0);
// option += '' +
// obj.online[i].pubKey.substring(0,15) + ' ';
}
console.log("offline: ", obj.offline.length);
for (var j = 0; j < obj.offline.length; j++) {
html += `
${i + j + 1}
${obj.offline[j]}
Offline
-
-
-
${obj.offline[j]}
`
}
$("#selectTrustUnitNodes").selectpicker('refresh');
mainVue.contractCount = contractCount;
mainVue.eventCount = eventCount;
html += tableTail;
$("#nodesTabDiv").html(html);
function abbrRender(data, type, row, meta) {
if (data.length > 8)
return ""
+ data.substring(0, 8)
+ " ... ";
else
return data;
}
$("#nodesTabDivTab").DataTable(
{
"language": dtLang,
"rowCallback": function (row, data, displayNum, displayIndex,
dataIndex) {
},
"headerCallback": function (thead, data, start, end, display) {
$(thead).css("background", primaryColor);
$(thead).css("color", "white");
$(thead).children().css("background", primaryColor);
$(thead).children().css("color", "white");
},
scrollCollapse: false,
paging: true,
pageLength: 10,
order: [[0, 'desc']],
"columnDefs": [
{
"targets": 1,
"render": function (data, type, row, meta) {
const firstBg = data.indexOf(">");
const secondSl = data.substring(1).indexOf("<");
const aTag = data.substring(0, firstBg + 1)
const aTagTail = data.substring(secondSl + 1)
const name = data.substring(firstBg + 1, secondSl + 1)
let html = name.length > 15 ?
`${name.substring(0, 15)} ... ` :
name;
return aTag + html + aTagTail;
}
},
// { // for PeerID
// "targets": 5,
// "render": abbrRender
// },
{
"targets": 6,
"render": abbrRender
}]
});
};
var onListTrustUnits = function (obj) {
// mainVue
mainVue.unitCount = obj.data.length;
if ($("#trustNodesUnitTabDiv").css("height") == "0px") {
console.log("trustNodesUnitTabDiv: ignore");
return;
}
var dtLang = {
"sProcessing": "处理中...",
"lengthMenu": '显示 ' + '10 '
+ '50 '
+ '100 '
+ '全部 ' + ' 项结果',
"sZeroRecords": "没有匹配结果",
"sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
"sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
"sInfoFiltered": "(由 _MAX_ 项结果过滤)",
"sInfoPostFix": "",
"sSearch": "搜索:",
"sUrl": "",
"sEmptyTable": "表中数据为空",
"sLoadingRecords": "载入中...",
"sInfoThousands": ",",
"oPaginate": {
"sFirst": "首页",
"sPrevious": "上页",
"sNext": "下页",
"sLast": "末页"
},
"oAria": {
"sSortAscending": ": 以升序排列此列",
"sSortDescending": ": 以降序排列此列"
}
};
var tableHead = `
序号
ID
创建者
节点数目
节点列表
`;
var tableTail = "
";
var html = tableHead;
for (var i = 0; i < obj.data.length; i++) {
var at_ = obj.data[i].key.indexOf("_");
var nodes = JSON.parse(obj.data[i].value);
html += `${i + 1}
${obj.data[i].key.substring(at_ + 1)}
${obj.data[i].key.substring(0, at_ - 1)}
${nodes.length}
${nodes.map(x => x.nodeName).sort().join(",")}
删除
`
}
html += tableTail;
$("#trustNodesUnitTabDiv").html(html);
$("#trustNodesUnitTabDivTab").DataTable(
{
"language": dtLang,
"rowCallback": function (row, data, displayNum, displayIndex,
dataIndex) {
},
"headerCallback": function (thead, data, start, end, display) {
$(thead).css("background", primaryColor);
$(thead).css("color", "white");
$(thead).children().css("background", primaryColor);
$(thead).children().css("color", "white");
},
scrollCollapse: false,
paging: true,
pageLength: 10,
order: [[0, 'desc']],
"columnDefs": [
{
"targets": 2,
"render": function (data, type, row, meta) {
if (data.length > 15)
return ""
+ data.substring(0, 15)
+ " ... ";
else
return data;
}
},
{
"targets": 4,
"render": function (data, type, row, meta) {
let arr = data.split(',')
if (arr.length > 2) {
arr = [arr[0], arr[1], '...']
}
for (let i = 0; i < arr.length; ++i) {
if (arr[i].length > 20) {
arr[i] = arr[i].substring(0, 20) + ' ...';
}
}
return arr.join(', ')
}
}]
});
};
var deleteTrustUnit = function (data) {
var param = {};
param.action = "deleteTrustUnit";
param.data = data;
global.wssocket.send(JSON.stringify(param));
};
var onDeleteTrustUnit = function (event) {
myToast("Success", "删除可信集群成功")
listTrustUnits();
};
var onListMultiPointContractProcess = function (data) {
var dtLang = {
"sProcessing": "处理中...",
"lengthMenu": '显示 ' + '10 '
+ '50 '
+ '100 '
+ '全部 ' + ' 项结果',
"sZeroRecords": "没有匹配结果",
"sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
"sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
"sInfoFiltered": "(由 _MAX_ 项结果过滤)",
"sInfoPostFix": "",
"sSearch": "搜索:",
"sUrl": "",
"sEmptyTable": "表中数据为空",
"sLoadingRecords": "载入中...",
"sInfoThousands": ",",
"oPaginate": {
"sFirst": "首页",
"sPrevious": "上页",
"sNext": "下页",
"sLast": "末页"
},
"oAria": {
"sSortAscending": ": 以升序排列此列",
"sSortDescending": ": 以降序排列此列"
}
};
var tableHead = "序号 合约名称 合约ID 管理 ";
var tableTail = "
";
var html = tableHead;
var list = JSON.parse(data.data);
for (var i = 0; i < list.length; i++) {
var nodes = list[i];
html += "";
html += (i + 1);
html += " ";
html += nodes.contractName;
html += " ";
html += nodes.contractID;
html += " ";
html += "停止 ";
html += " ";
}
html += tableTail;
$("#MPContractTabDiv").html(html);
$("#MPContractTabDivTab").DataTable(
{
"language": dtLang,
"rowCallback": function (row, data, displayNum, displayIndex,
dataIndex) {
},
"headerCallback": function (thead, data, start, end, display) {
$(thead).css("background", primaryColor);
$(thead).css("color", "white");
$(thead).children().css("background", primaryColor);
$(thead).children().css("color", "white");
},
scrollCollapse: false,
paging: true,
pageLength: 10,
order: [[0, 'desc']],
"columnDefs": [
{
"targets": 2,
"render": function (data, type, row, meta) {
if (data.length > 15)
return ""
+ data.substring(0, 15)
+ " ... ";
else
return data;
}
}]
});
};
var openclient = function (contractID) {
var path = document.location.origin;
var url = path + "/client/bdwareclient.html?self=true&contract="
+ contractID + "&withNodeCenterWS=true";
window.open(url);
};
var stopMultiPointCP = function (contractID) {
var arg = {};
arg.action = "stopMultiPointContractProcess";
arg.contractID = contractID;
global.wssocket.send(JSON.stringify(arg));
};