bdcontract-web-ide/js/codeManage/operManage.js
2022-09-02 21:26:21 +08:00

370 lines
11 KiB
JavaScript
Raw Permalink 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 initUnitsocket = function() {
if (global.config == undefined) {
var param = {};
param.action = "loadNodeConfig";
global.wssocket.send(JSON.stringify(param));
setTimeout(initUnitsocket, 1000);
return;
}
var port = global.config.nodeCenter.replace(/.*:/g, "");
var len = global.config.nodeCenter.length - port.length;
port = port - 1;
var url = global.config.nodeCenter.substring(0, len) + port
+ "/NodeCenterWS";
if (window.location.origin == "https://contract.internetapi.cn") {
url = "wss://cluster.contract.internetapi.cn/NodeCenterWS";
}
if (window.location.origin == "http://contract.internetapi.cn") {
url = "ws://cluster.contract.internetapi.cn/NodeCenterWS";
}
console.log("connect :" + url);
global.unitsocket = createWssocket(url, function() {
getUnitSession();
}, WSUnitHandler);
}
// TODO we should get the address from config!
var getUnitWsUrl = function(host) {
var prefix = "ws://";
if (document.location.href.startsWith("https"))
prefix = "wss://";
var path = "NodeCenterWS";
var port = ":18001";
if (host == "contract.internetapi.cn") {
host = "cluster.contract.internetapi.cn";
port = "";
}
return prefix + host + port + "/" + path;
};
var getUnitSession = function() {
if(global.centerportalws == undefined || global.centerportalws == null || global.centerportalws.send == undefined || global.centerportalws.send == null){
}
global.centerportalws.send("{\"action\":\"getSessionID\"}");
};
var onSessionID = function(data) {
global.session = data.session;
var loginParam = {};
loginParam.pubKey = global.sm2Key.publicKey;
loginParam.signature = sm2.doSignature(global.session,
global.sm2Key.privateKey,{hash:true,der:true});
loginParam.action = "login";
global.centerportalws.send(JSON.stringify(loginParam));
};
var onLogin = function(data) {
// console.log(data);
};
var distributeContract = function() {
var place = $("#selectUnits")[0].value;
if (place === "选择节点集群") {
myToast("提示","请选择集群分发合约!");
return;
}
if(!global.ypkName || global.ypkName === "请选择ypk文件"){
myToast("提示","请选择文件!");
return;
}
var unitsID = place.split("_")[1];
var nodeIDs = ""; //公钥
for ( var i in global.units[unitsID]) {
if(global.units[unitsID][i].nodeName == global.config.nodeName)
continue;
nodeIDs += global.units[unitsID][i].pubKey + ",";
}
if(nodeIDs == ""){
myToast("提示","集群中无需要分发的节点!");
return;
}
var request = {};
request.action = "distributeContract";
request.nodeIDs = nodeIDs;
request.projectName = global.ypkName;
request.isPrivate = global.ypkIsPrivate;
//request.sponsorName = global.config.nodeName;
request.signature = sm2.doSignature("DistributeContract|"
+ request.projectName + "|" + global.sm2Key.publicKey,
global.sm2Key.privateKey,{hash:true,der:true}); // 合约的签名
console.log(request);
//global.centerportalws.send(JSON.stringify(request));
global.wssocket.send(JSON.stringify(request));
};
var onDistributeContract = function(obj) {
updateResultDisplay(obj);
};
var onDistributeFinish = function(obj) {
customAlert("合约分发完成!");
};
// 将所选周期转化为毫秒
var switchPeriod = function(per) {
switch (per) {
case '/12hours自动保存':
return (12 * 3600 * 1000) + "";
case '/1day自动保存':
return (24 * 3600 * 1000) + "";
case '/2days自动保存':
return (48 * 3600 * 1000) + "";
default:
return "";
}
};
// 本地启动
var startContractAtSlave = function(isDebug) {
//this is for fixed contract,not for the unit contract
var period = $("#selectDumpPeriod")[0].value;
if (period == "选择状态保存模式") {
myToast("提示","请选择状态保存模式!");
return;
}
var dumpPeriod = switchPeriod(period);
var project = global.ypkName;
$("#result")[0].innerHTML="正在启动,请稍候";
var request = {};
request.action = "startContractByYPK";
if (createParam.value !='') {
request.createParam = createParam.value;
$("#createParam").css("color","");
if (autoConvertStr.value=='on') {
try{
request.createParam = JSON.parse(request.createParam);
$("#createParam").css("color","");
}catch(e){
console.log(e);
$("#createParam").css("color","red");
alert("Create Param not JSON Format");
return;
}
}else{
}
}
if (remoteDebugPort.value !='') {
request.remoteDebugPort = remoteDebugPort.value;
}
request.isDebug = isDebug;
request.dumpPeriod = dumpPeriod;
request.isPrivate = global.ypkIsPrivate;
request.owner = global.sm2Key.publicKey;
request.requestID = new Date().getTime() + "";
// request.contractid = $("#tabdiv")[0].value;
// request.script = global.scriptEditor.getValue();
request.path = "/" + project;
localStorage.setItem("persisStatus", JSON.stringify(request));
{
request.signature = sm2.doSignature("Fixed|" + request.path + "|"
+ global.sm2Key.publicKey, global.sm2Key.privateKey,{hash:true,der:true});
request.script = "empty";
}
console.log(request);
global.wssocket.send(JSON.stringify(request));
};
var onStartContract = function(obj) {
listContractProcess();
updateResultDisplay(obj);
};
// 集群启动合约
function startContractUnits(place) {
// ZYX
const unitsID = $("#selectUnits")[0].value.split("_")[1];
if (!unitsID || unitsID === "选择节点集群") {
myToast("提示", "请选择节点集群!");
return;
}
let peersID = "";
for (let i in global.units[unitsID]) {
peersID += global.units[unitsID][i].pubKey + ",";
}
const request = {};
request.action = "startContractMultiPoint";
request.peersID = peersID;
request.type = $("#sequence")[0].value;
console.log(request.type);
if (request.type == 0) {
myToast("提示", "请选择集群合约模式!");
return;
}
request.selectUnitNum = Number($("#selectUnitNum")[0].value);
if (!request.selectUnitNum || isNaN(request.selectUnitNum)) {
myToast("提示", "请填写集群规模!");
return;
}
request.projectName = global.ypkName;
if (!request.projectName || request.projectName == "请选择ypk文件") {
myToast("提示", "请选择合约!");
return;
}
request.isPrivate = global.ypkIsPrivate;
request.sponsorPeerID = global.peerID; //peerID of the node
if (createParam.value !='') {
request.createParam = createParam.value;
$("#createParam").css("color","");
if (autoConvertStr.value=='on') {
try{
request.createParam = JSON.parse(request.createParam);
$("#createParam").css("color","");
}catch(e){
console.log(e);
$("#createParam").css("color","red");
alert("Create Param not JSON Format");
return;
}
}else{
}
}
console.log(request);
global.wssocket.send(JSON.stringify(request));
}
var onStartTrustfulContract = function(obj) {
console.log(obj);
$("#dialogBodyDiv").html("");
customAlert("集群启动合约已完成!请等待各节点的结果(<span id='countDown'>20</span>)");
setTimeout(decreaseCountDown,1000);
};
var decreaseCountDown = function(){
if ($("#countDown").length!=1){
return;
}
var val = $("#countDown").html();
val/=1;
if (val>0) val--;
$("#countDown").html(val);
setTimeout(decreaseCountDown,1000);
}
var onStartContractTrustfullyResult = function(obj){
var data = JSON.parse(obj.data);
$("#countDown").remove();
$("#customAlertSpan").html("集群启动合约已完成!总共用时("+obj.executionTime+"ms)");
if ($("#startP2PResultTable").length>0){
}else{
var html = "<table id='startP2PResultTable' style='width:100%' ><thead><tr><td>PubKey</td><td>结果</td></tr></thead><tbody>";
html+="</tbody></table>";
$("#customAlertSpan").parent().append(html);
$("#startP2PResultTable").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 : 5,
order : [ [ 1, 'desc' ] ],
"columnDefs" : []
});
}
var p = $("#startP2PResultTable").DataTable();
p.row.add([data.pubKey.substr(0,6),data.result]);
p.row().draw();
};
var customAlert = function(msg){
if ($("#customAlertSpan").length>0){
$("#customAlertSpan").append("<br/>"+msg);
} else {
var body = "<div class='row'><div class='col-sm-12'><span id='customAlertSpan'>";
body +=msg;
body += "</span></div></div>";
$("#dialogBodyDiv").html(body);
showDialog("提示",function(){
$("#dialogBodyDiv").html("");
});
}
};
var startContractConfig = function() {
if (global.ypkIsPrivate) {
myToast("提示","私有合约不支持随机执行");
return
}
var project = global.ypkName;
if(project==undefined) {
myToast("提示","未选择合约");
return
}
var num = document.getElementById("selectUnitNum").value;
var re = /^[0-9]+.?[0-9]*/;//判断字符串是否为数字//判断正整数/[19]+[09]]/
if (!re.test(num)) {
myToast("提示","请选择合理节点数量");
return
}
var nameParts = $("#selectUnits")[0].value.split("_");
var unitsID = nameParts[1];
var request = {};
var peers;
var network = $("#network")[0].value;
if (unitsID == undefined) {
console.log("unitsID " + unitsID);
} else if (network == 1) {
peers = global.p2pNodes;
} else {
peers = global.units[unitsID];
}
if (peers.length < num) {
myToast("失败","节点数量 > 集群节点数量");
return
}
var peersID = "";
for ( var i in peers) {
if (peers[i].peerID) {
peersID += peers[i].peerID +" ";
} else {
peersID += peers[i] + " ";
}
}
console.log("peers ", peersID)
request.action = "startContractConfig";
request.type = network;
request.peersID = peersID;
request.num = num;
request.path = "/" + project;
request.contractName = project;
request.signature = sm2.doSignature("Trusted|" + request.path + "|"
+ global.sm2Key.publicKey, global.sm2Key.privateKey); // 合约的签名
request.sequencing = $("#sequence")[0].value;
request.response = $("#response")[0].value;
console.log("startContractConfig",request)
global.wssocket.send(JSON.stringify(request));
}
var onStartContractConfig = function(obj) {
updateResultDisplay(obj);
listContractProcess();
};
var onHashResult = function(obj) {
$("#hashDisplayDiv").html("溯源指纹:"+obj.data);
};
var startTestADSP = function(obj){
var request = {};
request.action = "startTestADSP";
global.centerportalws.send(JSON.stringify(request));
};
var onStartTestADSP = function(obj){
myToast("提示","开始测试ADSP!");
};