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": '显示 项结果', "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 = "" + "" + "" + "" + "" + "" + "" + // "" + // "" + "" + "" + "" + ""; var tableTail = "
序号Name状态合约数目事件数目PeerIDUDPIDTCP地址公钥
"; 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 += ''; } 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": '显示 项结果', "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 = ``; var tableTail = "
序号 ID 创建者 节点数目 节点列表
"; 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": '显示 项结果', "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 = ""; var tableTail = "
序号合约名称合约ID管理
"; 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)); };