bdcontract-web-ide/js/NodeContractInstances.js

558 lines
17 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var loadContractInstances = function(event) {
console.log("loadContractInstances"+event);
listContractProcess();
};
var listContractProcess = function(event) {
console.log("listContractProcess"+event);
setTimeout(function() {
var param = {};
param.action = "listContractProcess";
// param.data = event;
global.wssocket.send(JSON.stringify(param));
var request2 = {};
request2.action = "listLeakContractProcess";
global.wssocket.send(JSON.stringify(request2));
}, 300);
};
var onListContractProcess1 = function(obj) {
console.log("+++++++++="+obj.data);
var table = JSON.parse(obj.data);
global.contractList = table;
drawContractInstanceStatusPie(table);
// drawContractInstanceTimesPie(table);
drawContractInstanceTypeTimesPie(table);
drawciTable(table);
console.log(table);
$("#selectContractInstance").html("");
var x = document.getElementById("selectContractInstance");
x.options.length = 0;
x.add(new Option("选择...", " "));
global.permissionNameMap = {};
for (var i = 0; i < table.length; i++) {
if (table[i].contractStatus=="KILLED") {
continue;
}
var option = document.createElement("option");
option.text = table[i].name;
console.log(table[i].name);
global.permissionNameMap[table[i].id] = table[i].contractPermission;
// option.value=table[i].id;
option.value = table[i].id;
x.add(option, null);
}
};
var drawciTable = function(table) {
if ($("#ciTabDiv").css("height") == "0px") {
console.log("drawciTabDiv: ignore");
return;
}
var dtLang = {
"sProcessing" : "处理中...",
"lengthMenu" : '显示 <select>' + '<option value="10">10</option>'
+ '<option value="50">50</option>'
+ '<option value="100">100</option>'
+ '<option value="-1">全部</option>' + '</select> 项结果',
"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 = "<table id='ciTabDivTab' class='table display row-border' style='word-break:normal; word-break:keep-all'><thead><tr><th>序号</th><th>ID</th><th>名称</th><th>状态</th><th>端口</th><th>类型</th><th>通讯</th><th>共识</th><th>统计</th><th>次数</th><th>流量</th><th>内存</th><th>管理</th></tr></thead><tbody>";
var tableTail = "</tbody></table>";
console.log("drawciTable");
var html = tableHead;
for (var i = 0; i < table.length; i++) {
html += "<tr><td>";
html += (i + 1);
html += "</td> <td>";
html += table[i].id;
html += "</td> <td>";
html += "<a href='/client/bdwareclient.html?self=true&contract="
+ table[i].id + "' target='_blank'>" + table[i].name + "</>";
html += "</td> <td>";
html += table[i].contractStatus;
html += "</td> <td>";
html += table[i].port;
html += "</td><td>";
html += table[i].type;
html += "</td> <td>";
html += table[i].networkType == 0?"TCP":"P2P";
html += "</td><td>";
var consensusType;
switch(table[i].consensusType) {
case 0:
consensusType = "无";
break;
case 1:
consensusType = "PBFT";
break;
case 2:
consensusType = "RAFT";
break;
case 3:
consensusType = "Single";
break;
}
html += consensusType;
html += "</td><td>";
var responseType;
switch(table[i].responseType) {
case 0:
responseType = "ALL";
break;
case 1:
responseType = "MOST";
break;
case 2:
responseType = "FIRST";
break;
}
html += responseType;
html += "</td><td>";
html += table[i].times;
table[i].port;
html += "</td> <td>";
html += table[i].traffic;
html += "</td> <td>";
html += table[i].storage;
html += "</td> <td style='padding:2px 12px 2px 12px'>";
html +="<button onclick='stopContractByID(\""+table[i].id+"\")' class='btn btn-secondary'>"+"停止</button>"
//table[i].resultCheck;
// html += "</td> <td>";
// html += "<button class='btn btn-outline-secondary' type='button'
// onclick='viewContractInstance("+ table[i].contractID +
// ")'>更多</button>";
html += "</td> </tr>";
}
html += tableTail;
html = "<h5 class='card-title'>合约实例列表</h5>"+html;
$("#ciTabDiv").html(html);
$("#ciTabDivTab").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) {
if (data.length > 8)
return "<span title='" + data + "'>"
+ data.substring(0, 8)
+ " ...</span>";
else
return data;
}
},]
});
};
var stopContractByID = function(contractID){
$("#dialogBodyDiv").html("是否停止合约ContractID:"+contractID);
showDialog("请确认",function(){
var request = {};
request.action = "killContractProcess";
request.requestID = new Date().getTime() + "";
request.id = contractID;
global.wssocket.send(JSON.stringify(request));
});
};
var drawContractInstanceStatusPie = function(table) {
if ($("#ciStatusPieDiv").css("height") == "0px") {
console.log("drawContractInstanceStatusPie: ignore");
return;
}
$("#ciStatusPieDiv")
.html(
"<div class='col-12' id='ciStatusPieDivCanv' style='width:100%; min-height: 150px; padding: 0px'></div>");
var result = {};
for (var i = 0; i < table.length; i++) {
var obj = table[i];
if (result[obj.contractStatus] == undefined) {
result[obj.contractStatus] = 1;
} else
result[obj.contractStatus]++;
}
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($("#ciStatusPieDivCanv")[0], 'walden');
var option222 = {
tooltip : {
trigger : 'item',
formatter : '{a} <br/>{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 drawContractInstanceTimesPie = function(table) {
if ($("#ciTimesPieDiv").css("height") == "0px") {
console.log("drawContractInstanceTimesPie: ignore");
return;
}
$("#ciTimesPieDiv")
.html(
"<div class='col-12' id='ciTimesPieDivCanv' style='width:100%; min-height: 150px; padding: 0px'></div>");
var result = {};
for (var i = 0; i < table.length; i++) {
var obj = table[i];
result[obj.name] = obj.times;
}
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($("#ciTimesPieDivCanv")[0], 'walden');
var option222 = {
tooltip : {
trigger : 'item',
formatter : '{a} <br/>{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 changeContractInstance = function(obj) {
console.log(obj);
global.contractInstance = obj;
console.log(typeof(obj));
showPermissionList(global.contractInstance);
var contract;
for (var i = 0; i < global.contractList.length; i++) {
if (global.contractList[i].id == obj) {
contract = global.contractList[i];
global.instance = contract;
global.instanceName = contract.name;
global.instanceSequencing = contract.type;
global.useP2P = contract.useP2P;
listMemoryFiles(contract.name);
getSyncType(contract.name);
break;
}
}
$("#selectContractFunction").html("");
var x = document.getElementById("selectContractFunction");
x.options.length = 0;
x.add(new Option("选择方法...", " "));
console.log("contract ", contract);
for (var i = 0; i < contract.exportedFunctions.length; i++) {
var option = document.createElement("option");
option.text = contract.exportedFunctions[i].functionName;
option.value = contract.exportedFunctions[i].functionName;
x.add(option, null);
}
};
var changeMemeryFiles = function(obj) {
console.log(obj);
global.memoryFile = obj;
};
var executeContractWithDynamicResult = function() {
console.log("executeContractWithDynamicResult");
var request = {};
request.action = "executeContract";
request.requestID = new Date().getTime() + "";
request.contractName = global.contractInstance;
request.sequencing = global.instanceSequencing;
request.useP2P = global.useP2P;
request.isDebug = executeContractAsDebug.checked;
var operation = $("#selectContractFunction")[0].value;
if (operation == " " && operation == undefined) {
myToast("执行合约", "请选择合约方法!");
return;
}
request.arg = "{\"action\":\"" + operation + "\",\"arg\":\""
+ $("#arg")[0].value + "\"}";
request.pubkey = global.sm2Key.publicKey;
request.withDyanmicAnalysis = true;
request.signature = sm2.doSignature(request.contractID + "|" + operation
+ "|" + $("#arg")[0].value + "|" + global.sm2Key.publicKey,
global.sm2Key.privateKey,{hash:true,der:true});
localStorage.setItem("persisArg", JSON.stringify(request));
global.wssocket.send(JSON.stringify(request));
};
var executeContract = function() {
var request = {};
request.action = "executeContract";
request.requestID = new Date().getTime() + "";
request.contractID = global.contractInstance;
var operation = $("#selectContractFunction")[0].value;
if (operation == " " && operation == undefined) {
myToast("执行合约", "请选择合约方法!");
return;
}
request.operation = operation;
request.arg = $("#arg")[0].value ;
request.pubkey = global.sm2Key.publicKey;
request.isDebug = executeContractAsDebug.checked;
console.log(request.arg);
request.signature = sm2.doSignature(request.contractID + "|" + operation
+ "|" + $("#arg")[0].value + "|" + global.sm2Key.publicKey,
global.sm2Key.privateKey,{hash:true,der:true});
localStorage.setItem("persisArg", JSON.stringify(request));
global.wssocket.send(JSON.stringify(request));
};
var onExecuteResult = function(obj) {
console.log("onExecuteResult obj.data", obj.data);
try {
var result = obj;
var styleTail = "<br>字符串格式";
$("#responseStatus").html("执行状态:" + result.status);
if (result.analysis != undefined) {
$("#responseArea")[0].value = "执行结果:" + result.result + "\n动态分析结果:"
+ result.analysis;
} else {
if (result.result instanceof Object){
$("#responseArea")[0].value = JSON.stringify(result.result);
styleTail = "<br>JSON格式";
} else
$("#responseArea")[0].value = result.result;
}
$("#responseID").html("请求ID:" + obj.responseID);
$("#responseTime").html("响应时间:" + obj.executeTime + ("ms")+styleTail);
} catch (e) {
$("#responseStatus").html("执行状态:Fail");
$("#responseArea")[0].value = obj.data;
$("#responseID").html("请求ID:" + obj.responseID);
$("#responseTime").html("响应时间:" + obj.executeTime + ("ms"));
}
};
var onHashResult = function(obj) { $("#hashResult").html("数链指纹:" + obj.data); };
var drawCPTable = function(table) {
console.log("drawCPTable");
global.contractprocess = table.data;
if ($("#ciTabDiv").css("height") == "0px") {
console.log("drawciTabDiv: ignore");
return;
}
var dtLang = {
"sProcessing" : "处理中...",
"lengthMenu" : '显示 <select>' + '<option value="10">10</option>'
+ '<option value="50">50</option>'
+ '<option value="100">100</option>'
+ '<option value="-1">全部</option>' + '</select> 项结果',
"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 = "<table id='cpTabDivTab' class='table display row-border'><thead><tr><th>序号</th><th>PID</th><th>是否泄漏</th><th>启动时间</th><th>CPUUser</th><th>CPUSyss</th><th>resident</th><th>memory</th><th>管理</th></tr></thead><tbody>";
var tableTail = "</tbody></table>";
table = table.data;
console.log("drawciTable");
var html = tableHead;
for (var i = 0; i < table.length; i++) {
html += "<tr><td>";
html += (i + 1);
html += "</td> <td>";
html += table[i].pid;
html += "</td> <td>";
html += table[i].isLeak;
html += "</td> <td>";
html += new Date(table[i].cpuStart).toLocaleString();
html += "</td> <td>";
html += table[i].cpuTotal;
html += "</td> <td>";
html += table[i].cpuSys;
html += "</td> <td>";
html += ((table[i].resident)/(1024*1024)).toFixed(2)+"MB";
html += "</td><td>";
html += ((table[i].memsize)/(1024*1024)).toFixed(2)+"MB";
html += "</td> <td style='padding:2px 12px 2px 12px'>";
html +="<button onclick='stopContractByPID(\""+table[i].pid+"\")' class='btn btn-secondary'>"+"停止</button>"
//table[i].resultCheck;
// html += "</td> <td>";
// html += "<button class='btn btn-outline-secondary' type='button'
// onclick='viewContractInstance("+ table[i].contractID +
// ")'>更多</button>";
html += "</td> </tr>";
}
html += tableTail;
html = "<h5 class='card-title'>合约进程列表</h5>"+html;
$("#cpTabDiv").html(html);
$("#cpTabDivTab").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) {
if (data.length > 10)
// return "<span title='" + data + "'>"
// + data.substring(0, 10)
// + " ...</span>";
return data;
else
return data;
}
},]
});
};
var stopContractByPID = function(pid){
$("#dialogBodyDiv").html("是否停止PID:"+pid);
showDialog("请确认",function(){
var request = {};
request.action = "killProcessByPID";
request.pid = pid;
global.wssocket.send(JSON.stringify(request));
var request2 = {};
request2.action = "listLeakContractProcess";
global.wssocket.send(JSON.stringify(request2));
});
};