| 1 |
- <html>
<head>
</head>
<style>
table{
width:100%;
word-break: break-all;
}
fieldset fieldset{
margin-left:0;
margin-right:0;
margin-bottom:0;
border-left:0;
border-right:0;
}
fieldset fieldset{
padding-left:1em;
min-width:90%;
}
fieldset{
min-width:90%;
border:1px dashed lightgray;
margin:1em;
}
[rowspan]{
vertical-align: middle;
}
td,th{
border-bottom:1px solid lightgray;
}
canvas{
margin:3px;
}
</style>
<body>
<%-- 来自 xmsl_gn.jsp,值来自 HDDev_scgl:XmslService.$updateCheck() --%>
<equal.ss val="${empty gx}" val2="false">
<%-- 去掉 form/submit,直接用 button。加确认,详细信息移到确认页面。Lin
<form action="<serv@ss name='pxmhj_rerls' dest='Info' parm='{pxmhjid:"${pxmhjid}"}'/>" method="post"> --%>
发布不成功(或正在执行):
<input type="button" class="list-button"
onclick='<serv.ss dlg="true" name="pxmhj_initRerls" dest="pxmhj_rerlsSure" parm="{pxmid:"${pxmid}",pxmhjid:"${pxmhjid}"}"/>'
value="重新发布"/>
<div style='font-weight:bold;overflow:hidden;width:100%;white-space:nowrap;text-overflow:ellipsis;'>
<txt.ss val='${gx.fbsj}' fmt='MM-dd HH:mm'/>,“${gx.ms}”
</div>
<%-- 去掉,详细信息移到确认页面。Lin
<div id="container" class='gxnr' align="center">
<table>
<rpt.ss name="gxnr" id="w">
<tr id="${w.pwjid}" >
<td>${w.pwjlb.desc}</td>
<td>${w.ycpwjDesc}</td>
</tr>
<rpt.ss name="${w.xgwjSet}" id="xw">
<tr id="${xw.pwjid}" pId="${w.pwjid}">
<!--<td></td>-->
<td>${xw.pwjlb.desc}</td>
<td>${xw.ycpwjDesc}</td>
</tr>
</rpt.ss>
</rpt.ss>
</table>
</div>
--%>
<%-- 去掉 form/submit,直接用 button。移到 "发布不成功(或正在执行):" 右侧 Lin
<div class="bottom-div">
<input type="submit" value="确认" onclick="" class="bottom-button"/>
</div>
</form>
--%>
</equal.ss>
<equal.ss val="${empty processor}" val2="false">
正在发布,请稍候
</equal.ss>
<fieldset>
<legend>环境:<%-- 运行状态:。Lin --%>
<input type="button" value="查看环境" class="list-button"
onclick='<serv.ss dlg="true" name="pxmhj_ck" dest="objPlay" parm="{pxmhjid:"${pxmhjid}",ssObjId:"${pxmhjid}",ssObjName:"pxmhj"}"/>'/>
<input type="button" value="查看发布" class="list-button"
onclick='<serv.ss dlg="true" name="pxmhj_searchRls" dest="pxmhj_rlsList" parm="{pxmid:"${pxmid}",pxmhjid:"${pxmhjid}"}"/>'/>
<%-- 再改,去掉 ${haveDeploy},只用 ${haveRlsJob}。Lin
<equal.ss val="${haveDeploy}" val2="false">
全部已发布
</equal.ss>
--%>
<equal.ss val="${haveRlsJob}" val2="false">
全部已发布
</equal.ss>
<%-- 来自 xmsl_gn.jsp,值来自 HDDev_scgl:XmslService.$undeployBusinessCheck(Xmsl pXmsl, Xmsl xmsl) --%>
<%-- 再去掉 ${haveDeploy},只用 ${haveRlsJob}。Lin
<equal.ss val="${haveDeploy}" val2="true"> --%>
<%-- 先去掉,应该是母体到项目时才有用。另,发布业务 改为无需受控(重装)。Lin
<input type="button" value="发布业务" class="list-button"
onclick='<serv.ss dlg="true" dest="pxmhj_bizRls" parm="{pxmhjid:"${pxmhjid}",pxmid:"${pxmid}"}"/>'/>
--%>
<equal.ss val="${haveRlsJob}" val2="true"> <%-- 增加,细化控制。Lin --%>
... <%-- 间开查看按钮和工作按钮。Lin --%>
<input type="button" value="发布任务" class="list-button"
onclick='<serv.ss dlg="true" name="pxmhj_searchJobRls" dest="pxmhj_jobRls" parm="{pxmhjid:"${pxmhjid}",pxmid:"${pxmid}",compatible:"true"}"/>'/>
</equal.ss>
<%-- 再去掉 ${haveDeploy},只用 ${haveRlsJob}。Lin
</equal.ss> --%>
<%-- 来自 xmsl_gn.jsp,值来自 HDDev_scgl:XmslService.$execdbcheck() --%>
<equal.ss val="${execdb}" val2="true">
<input type="button" value="建数据库" class="list-button"
onclick='<serv.ss dlg="true" name="pxmhj_initDbRls" dest="pxmhj_dbRlsSure" parm="{pxmid:"${pxmid}",pxmhjid:"${pxmhjid}"}"/>'/>
</equal.ss>
<%-- 再去掉,"部署数据库" 里会自动生成。需要重新生成时,下面有临时的、专门生成 PO 的按钮。Lin
<equal@ss val="${execdb}" val2="false">
<input type="button" class="list-button"
onclick='<serv@ss dlg="true" name="pxmhj_initDbRls" dest="pxmhj_dbRlsSure" parm="{pxmid:"${pxmid}",pxmhjid:"${pxmhjid}"}"/>'
value="生成 PO"/>
</equal.ss>
--%>
<%-- 增加,把 "建全文库" 从 "更新数据库、生成pojo、初始化全文库" 独立出来 -- 建全文库依赖的是 obj.xml。Lin --%>
<equal.ss val="${execFts}" val2="true">
<input type="button" value="建全文库" class="list-button"
onclick='<serv.ss dlg="true" name="pxmhj_initFtsMake" dest="pxmhj_ftsMakeSure" parm="{pxmid:"${pxmid}",pxmhjid:"${pxmhjid}"}"/>'/>
</equal.ss>
<%-- 增加,把 生成Po 独立出来。改为最后处理包里的 sqlView 文件 -- 建视图时,用到的 系统字段(记录状态码、管理部门ID等) 还没创建。Lin --%>
<equal.ss val="${execPo}" val2="true">
<input type="button" value="生成PO" class="list-button"
onclick='<serv.ss dlg="true" dest="pxmhj_poJarMakeSure" parm="{pxmid:"${pxmid}",pxmhjid:"${pxmhjid}"}"/>'/>
</equal.ss>
<%-- 增加,建 上传 或 富文本编辑器生成 的文件序列号。Lin --%>
<equal.ss val="${execPo}" val2="true">
<input type="button" value="建文件序列号" class="list-button"
onclick='<serv.ss dlg="true" dest="pxmhj_fileSeqMakeSure" parm="{pxmid:"${pxmid}",pxmhjid:"${pxmhjid}"}"/>'/>
</equal.ss>
<%-- 增加,把 "创建系统会议" 从 "更新数据库、生成pojo" 独立出来。Lin --%>
<equal.ss val="${execSysNm}" val2="true">
<input type="button" value="建系统会议" class="list-button"
onclick='<serv.ss dlg="true" dest="pxmhj_sysNmMakeSure" parm="{pxmid:"${pxmid}",pxmhjid:"${pxmhjid}"}"/>'/>
</equal.ss>
<%-- 增加,把 "创建 sys 用户" 从 "更新数据库、生成pojo" 独立出来。Lin --%>
<equal.ss val="${execSysUser}" val2="true">
<input type="button" value="建sys用户" class="list-button"
onclick='<serv.ss dlg="true" dest="pxmhj_sysUserMakeSure" parm="{pxmid:"${pxmid}",pxmhjid:"${pxmhjid}"}"/>'/>
</equal.ss>
<%-- 再去掉,项目到环境不用挑选,用常规的发布功能。Lin
程序、页面先保留,用于母体发布到项目
<equal@ss val="${execCms}" val2="true">
<input type="button" value="发布CMS" class="list-button"
onclick='<serv@ss dlg="true" name="pxmhj_initCmsRls" dest="pxmhj_cmsRls" parm="{pxmid:"${pxmid}",pxmhjid:"${pxmhjid}"}"/>'/>
</equal@ss>
--%>
</legend>
<fieldset>
<legend>服务器:
<%-- 去掉,只是查看。Lin
<input type='button' class="list-button"
onclick='@service{name:"xmsl_webserver_config_sz",dest:"xmsl_webserver_config",show:"wdDialog",param:{xmid:"${xmid}",xmslid:"${xmslid}"}}@'
value="TOMCAT设置启动命令">;
--%>
<input type="button" class="list-button refresh" onclick="loadStatus()" value="刷新状态"/>
<input type="button" value="重启AS" class="list-button"
onclick='<serv.ss dlg="true" dest="pxmhj_kubeRestartSure" parm="{pxmid:"${pxmid}",pxmhjid:"${pxmhjid}"}"/>'/>
<input type="button" value="重启DB" class="list-button refresh" onclick="loadStatus()"/>
<input type="button" value="重启FTS" class="list-button refresh" onclick="loadStatus()"/>
<input type="button" value="重建FTS索引" class="list-button refresh"
onclick='<serv.ss dlg="true" name="pxmhj_initFtsIdxRemakePick" dest="pxmhj_ftsIdxRemakePick" parm="{pxmid:"${pxmid}",pxmhjid:"${pxmhjid}"}"/>'/>
</legend>
<table>
<tr>
<td width="15%" style="text-align:right">PMS</td>
<td align='center'><span class='status ssh'></span></td>
<td>服务器</td>
</tr>
<tr>
<td style="text-align:right">tomcat</td>
<td align='center'><span class='status es'></span></td>
<td>全文库(大概状态)(<spam class='status host es'></spam>)</td>
</tr>
<tr>
<td >tomcat</td>
<td align='center'><span class='status server'></span></td>
<td><span class='status host web'></span>:<span class="status port web"></span></td>
</tr>
<%-- 去掉,只是查看。Lin
<wd:equal leftValue="${noconfig}" rightValue="true">
<tr>
<td>没设置启动命</td>
</tr>
</wd:equal>
<wd:equal leftValue="${empty noconfig}" rightValue="true">
<tr>
<td>操作</td>
<td colspan='2'>
<input type="button" class="start list-button confirm"
_click='@service{name:"xmsl_webserver_start",dest:"sys_info",show:"wdDialog",param:{xmid:"${xmid}",xmslid:"${xmslid}"}}@'
value="启动服务器" />
<input type="button" class="restart list-button confirm"
_click='@service{name:"xmsl_webserver_restart",dest:"sys_info",show:"wdDialog",param:{xmid:"${xmid}",upload_env:"r",xmslid:"${xmslid}"}}@'
value="重启服务器" />
<input type="button" class="stop list-button confirm"
_click='@service{name:"xmsl_webserver_stop",dest:"sys_info",show:"wdDialog",param:{xmid:"${xmid}",xmslid:"${xmslid}"}}@'
value="关闭服务器" />
</td>
</tr>
</wd:equal>
--%>
</table>
</fieldset>
<%-- 去掉,只是查看。Lin
<fieldset class="java">
<legend>其他</legend>
<input type="button" class="list-button confirm"
_click='@service{name:"xmsl_recompile_dc",dest:"sys_info",show:"wdDialog",param:{xmid:"${xmid}",xmslid:"${xmslid}"}}@'
value="重新编译DC" />
<input type="button" class="list-button confirm"
_click='@service{name:"xmsl_jar_wd_rebuild",dest:"sys_info",show:"wdDialog",param:{xmid:"${xmid}",upload_env:"r",xmslid:"${xmslid}"}}@'
value="重新编译当前WD" />
<input type="button" class="list-button confirm"
_click='@service{name:"xmsl_jar_wd_update",dest:"sys_info",show:"wdDialog",param:{xmid:"${xmid}",upload_env:"r",xmslid:"${xmslid}"}}@'
value="更新并编译WD" />
</fieldset>
--%>
<fieldset>
<legend>系统资源:
<input id='loadbtn' type="button" class='list-button' value="已暂停,点击继续" onclick="continueLoad()"/>
</legend>
<div><canvas id="cpu"></canvas><canvas id="cpu1"></canvas></div>
<div><canvas id="mem"></canvas><canvas id="mem1"></canvas></div>
</fieldset>
</fieldset>
<script>
$(".confirm").click(function(){
var $this=$(this);
wd.display.confirm("消息",this.value+"?",function(){
eval($this.attr('_click'));
})
});
function loadStatus(){
continueLoad(); // 增加,同时 loadSysStatus(。Lin
$("span.status").html("状态获取,稍等");
$("span.status.host").html("");
$("input.status").hide();
$("input.refresh").hide();
$(".java input").hide();
$(".start,.restart,.stop").hide();
$.ajax({
url: "<serv.ss name='pxmhj_rdServerState' parm='{pxmhjid:"${pxmhjid}",obj:"check-webserver"}'/>",
dataType:"json",
success: function (result) {
var connect="---√---",connectfailure="---× ";
$(".refresh").show();
if(result["ssh-connected"]){
$(".java input").show();
$(".status.ssh").html(connect);
if(result["server-started"]){
$(".restart,.stop").show();
$(".start").hide();
$(".status.server").html("已启动");
}else{
$(".restart,.stop").hide();
$(".start").show();
$(".status.server").html("未启动");
}
$.ajax({
url: "<serv.ss name='pxmhj_rdServerState' parm='{pxmhjid:"${pxmhjid}",obj:"info-webserver"}'/>",
dataType:"json",
success:function(result){
$(".status.host.web").html(result["host-server"]);
<%-- 改为只有一个 port。Lin
var ports=[],ps=result["ports-server"];
for(var i=0;i<ps.length;i++){
ports=ports.concat(ps[i].ports);
}
$(".status.port.web").html(ports);
--%> $(".status.port.web").html(result["ports-server"]);
}
})
$.ajax({
url: "<serv.ss name='pxmhj_rdServerState' parm='{pxmhjid:"${pxmhjid}",obj:"check-elastic"}'/>",
dataType:"json",
success:function(result){
if(result['elastic-started']){
$(".status.es").not(".host").html(connect);
}else{
$(".status.es").not(".host").html(connectfailure);
}
}
})
$.ajax({
url: "<serv.ss name='pxmhj_rdServerState' parm='{pxmhjid:"${pxmhjid}",obj:"info-elastic"}'/>",
dataType:"json",
success:function(result){
$(".status.host.es").html(result["host-elastic"]+":"+result["port-elastic"]);
}
})
}else{
$(".start,.restart,.stop").hide();
$(".java input").hide();
$(".status.ssh").html(connectfailure);
$(".status.es").html("-------");
}
}
});
}
loadStatus();
var cpuChar=new CreateMovingLineDiagram("cpu","系统CPU使用率",100,60,300,120);
cpuChar.play();
var cpuChar1=new CreateMovingLineDiagram("cpu1","服务器CPU使用率",100,60,300,120);
cpuChar1.play();
var memChar=new CreateMovingLineDiagram("mem","系统内存使用",100,100,300,120);
memChar.play();
var memChar1=new CreateMovingLineDiagram("mem1","服务器内存使用",100,100,300,120);
memChar1.play();
var loading=true;
window.top.addEventListener("blur",function(){
loading=false;
console.log("blur",loading)
});
window.addEventListener("blur",function(){
loading=false;
console.log("blur",loading)
});
var count=0;
// window.onfocus=function(){
// if(!loading){
// count=0;
// loadSysStatus();
// }
// loading=true;
// }
window.focus();
loadSysStatus();
function continueLoad(){
loading=true;
count=0;
loadSysStatus();
}
function loadSysStatus(){
$("#loadbtn").hide();
$.ajax({
url: "<serv.ss name='pxmhj_rdSysState' parm='{pxmhjid:"${pxmhjid}"}'/>",
dataType:"json",
success: function (result) {
// console.log(result); // 再去掉,太多信息。Lin
if(result.err||result.connect==false){
console.log("err",result)
}else{
try {
var top=result;
var topInf=top.system;
cpuChar.push(parseFloat(topInf.userCpu));
cpuChar.render();
var mem_used=parseInt(topInf.useMem);
var mem_total=parseInt(topInf.totalMem);
memChar.push(mem_used/mem_total*100);
memChar.render();
/* 先去掉,不分 system、server -- 看机器(system)的,不看进程的(server)。Lin
var topServer;
for(var i=0;i< top.server.length;i++){
topServer=top.server[i];
cpuChar1.push(parseFloat(topServer.cpu));
cpuChar1.render();
memChar1.push(parseFloat(topServer.mem));
memChar1.render();
break;
}
*/
} catch (error) {
console.err(error);
}
}
count++;
if(!loading||count>100){
$("#loadbtn").show();
}else{
loadSysStatus();
}
}
});
}
// var val=Math.random()*100;
// cpuChar.push(val);
// cpuChar.render();
// val=Math.random()*100;
// cpuChar1.push(val);
// cpuChar1.render();
// val=0;
// while(val<50||val>60){
// val=Math.random()*100;
// }
// memChar.push(val);
// memChar.render();
// val=0;
// while(val<50||val>60){
// val=Math.random()*100;
// }
// memChar1.push(val);
// memChar1.render();
function CreateMovingLineDiagram(name, title, maxvalue, segmentationNum, width, height) {
let _this = this;
//默认参数
_this.SetData = {
canvasid: "#" + name,// 画布ID
canvaswidth: width || 600,//画布宽度
canvasheight: height || 300,//画布高度
maxvalue: maxvalue || 100,
segmentationNum: segmentationNum || 100,//分段数,将画布宽度分割成多少分
title: title || "untitled",
}
_this.push = function (value) {
if (_this.XYAttr.length > _this.segmentation) {
_this.XYAttr.shift();
}
_this.XYAttr.push(parseFloat(parseFloat(value).toFixed(1)));
}
_this.drawline = function (x, y, tx, ty, color) {
var context = _this.context;
context.beginPath();
context.moveTo(x, y);
context.lineTo(tx, ty);
context.strokeStyle = color;
context.stroke();
}
_this.render = function () {
var count = _this.count = _this.count || 0;
_this.count++;
var xys = [], context = _this.context, canvas = _this.canvas, datas = _this.XYAttr;
var segmentation = _this.segmentation;
var maxvalue = _this.maxvalue;
for (var i = 0; i < datas.length; i++) {
xys.push(datas[i]);
}
while (xys.length < segmentation + 1) {
xys.unshift(0);
}
context.clearRect(0, 0, canvas.width, canvas.height);
var a = canvas.width / segmentation;
for (var i = 0; i <= Math.floor(xys.length / 10) + 1; i++) {
var x = (i * 10 - count % 10) * a - 1;
_this.drawline(x, 0, x, canvas.height, 'lightblue');
}
for (var i = 0; i < 10; i++) {
var y = (canvas.height / 10 * i) - 1
_this.drawline(0, y, canvas.width, y, 'lightblue');
}
context.beginPath(); //清除上一次的绘制参数 开始绘制
context.moveTo(0, canvas.height * (1 - xys[0] / maxvalue) - 1); //线条起点moveToX,moveToY
context.fillStyle = "rgba(161,195,255,.65)";
context.strokeStyle = "blue";
for (var i = 1; i < xys.length; i++) {
context.lineTo((i) * a, canvas.height * (1 - xys[i] / maxvalue) - 1);
}
context.lineTo(canvas.width, canvas.height);
context.lineTo(0, canvas.height);
context.closePath();
context.stroke(); //结束绘制
context.fill(); //多边形填充
context.fillStyle = "rgba(100,100,255,.65)";
context.font="1em bold 宋体";
context.textBaseline = "middle";
context.fillText(_this.SetData.title, 5, 15);
context.font="12px bold 宋体";
context.fillStyle = "green";
context.textAligh = "right";
var valll=xys[xys.length-1];
var xxx=canvas.width-35
var yyy=canvas.height * (1 - valll / maxvalue) - 12;
if(yyy<0){
yyy=18;
}else if(yyy<15){
yyy=canvas.height * (1 - valll / maxvalue) + 12;
}
context.fillText(valll.toFixed(1)+"%",xxx,yyy);
}
_this.play = function () {
let canvas = _this.canvas = document.querySelector(_this.SetData.canvasid); //获取Canvas元素
canvas.width = _this.SetData.canvaswidth; //设置画布宽
canvas.height = _this.SetData.canvasheight; //设置画布高
canvas.style.border = "1px solid darkblue";
_this.context = canvas.getContext("2d"); //使用Context绘画2D
_this.segmentation = _this.SetData.segmentationNum //分段数
_this.XYAttr = []; //分段坐标数组
_this.maxvalue = _this.SetData.maxvalue;
_this.render();
}
}
</script>
</body>
</html>
|