2021-06-15 11:56:39 +00:00
|
|
|
|
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++) {
|
2021-06-16 04:11:09 +00:00
|
|
|
|
if (table[i].contractStatus=="KILLED") {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
2021-06-15 11:56:39 +00:00
|
|
|
|
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;
|
2021-06-16 04:11:09 +00:00
|
|
|
|
request.isDebug = executeContractAsDebug.checked;
|
2021-06-15 11:56:39 +00:00
|
|
|
|
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;
|
2021-06-16 04:11:09 +00:00
|
|
|
|
request.isDebug = executeContractAsDebug.checked;
|
2021-06-15 11:56:39 +00:00
|
|
|
|
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));
|
|
|
|
|
});
|
|
|
|
|
};
|