bdcontract-web-ide/js/codeManage/operManage.js

370 lines
11 KiB
JavaScript
Raw Normal View History

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 "";
}
};
// 本地启动
2022-09-02 13:26:21 +00:00
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 !='') {
2022-04-21 02:14:00 +00:00
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;
2022-04-21 02:14:00 +00:00
}
}else{
}
}
2022-09-02 13:26:21 +00:00
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!");
};