SpringBoot-Admin集成诊断利器Arthas实践(1)

Select Application: Connect Disconnect Release
  • Arthas.js 存储页面控制的 js

var registerApplications = null;
var applications = null;
$(document).ready(function () {
reloadRegisterApplications();
reloadApplications();
});
/**

  • 获取注册的arthas客户端
    /
    function reloadRegisterApplications() {
    var result = reqSync(“/api/arthas/clients”, “get”);
    registerApplications = result;
    initSelect(“#selectServer”, registerApplications, “”);
    }
    /
    *

  • 获取注册的应用
    /
    function reloadApplications() {
    applications = reqSync(“/api/applications”, “get”);
    console.log(applications)
    }
    /
    *

  • 初始化下拉选择框
    /
    function initSelect(uiSelect, list, key) {
    $(uiSelect).html(‘’);
    var server;
    for (var i = 0; i < list.length; i++) {
    server = list[i].toLowerCase().split(“@”);
    if (“phantom-admin” === server[0]) continue;
    $(uiSelect).append(“” + server[0] + “”);
    }
    }
    /
    *

  • 重置配置文件
    */
    function release() {
    var currentServer = $(“#selectServer”).text();
    for (var i = 0; i < applications.length; i++) {
    serverId = applications[i].id;
    serverName = applications[i].name.toLowerCase();
    console.log(serverId + “/” + serverName);
    if (currentServer === serverName) {
    var result = reqSync(“/api/applications/” +serverId+ “/env/reset”, “post”);
    alert(“env reset success”);
    }
    }
    }
    function reqSync(url, method) {
    var result = null;
    $.ajax({
    url: url,
    type: method,
    async: false, //使用同步的方式,true为异步方式
    headers: {
    ‘Content-Type’: ‘application/json;charset=utf8;’,
    },
    success: function (data) {
    // console.log(data);
    result = data;
    },
    error: function (data) {
    console.log(“error”);
    }
    });
    return result;
    }

  • Web-console.js

修改了连接部分代码,参考一下。

var ws;
var xterm;
/有修改/
$(function () {
var url = window.location.href;
var ip = getUrlParam(‘ip’);
var port = getUrlParam(‘port’);
var agentId = getUrlParam(‘agentId’);
if (ip != ‘’ && ip != null) {
$(‘#ip’).val(ip);
} else {
$(‘#ip’).val(window.location.hostname);
}
if (port != ‘’ && port != null) {
$(‘#port’).val(port);
}
if (agentId != ‘’ && agentId != null) {
$(‘#selectServer’).val(agentId);
}
// startConnect(true);
});
/** get params in url /
function getUrlParam (name, url) {
if (!url) url = window.location.href;
name = name.replace(/[[]]/g, ‘\KaTeX parse error: Expected 'EOF', got '&' at position 1: &̲'); var regex =…)’),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return ‘’;
return decodeURIComponent(results[2].replace(/+/g, ’ ‘));
}
function getCharSize () {
var tempDiv = $(’

‘).attr({‘role’: ‘listitem’});
var tempSpan = $(’
').html(‘qwertyuiopasdfghjklzxcvbnm’);
tempDiv.append(tempSpan);
$(“html body”).append(tempDiv);
var size = {
width: tempSpan.outerWidth() / 26,
height: tempSpan.outerHeight(),
left: tempDiv.outerWidth() - tempSpan.outerWidth(),
top: tempDiv.outerHeight() - tempSpan.outerHeight(),
};
tempDiv.remove();
return size;
}
function getWindowSize () {
var e = window;
var a = ‘inner’;
if (!(‘innerWidth’ in window )) {
a = ‘client’;
e = document.documentElement || document.body;
}
var terminalDiv = document.getElementById(“terminal-card”);
var terminalDivRect = terminalDiv.getBoundingClientRect();
return {
width: terminalDivRect.width,
height: e[a + ‘Height’] - terminalDivRect.top
};
}
function getTerminalSize () {
var charSize = getCharSize();
var windowSize = getWindowSize();
console.log(‘charsize’);
console.log(charSize);
console.log(‘windowSize’);
console.log(windowSize);
return {
cols: Math.floor((windowSize.width - charSize.left) / 10),
rows: Math.floor((windowSize.height - charSize.top) / 17)
};
}
/ init websocket /
function initWs (ip, port, agentId) {
var protocol= location.protocol === ‘https:’ ? ‘wss://’ : ‘ws://’;
var path = protocol + ip + ‘:’ + port + ‘/ws?method=connectArthas&id=’ + agentId;
ws = new WebSocket(path);
}
/
init xterm /
function initXterm (cols, rows) {
xterm = new Terminal({
cols: cols,
rows: rows,
screenReaderMode: true,
rendererType: ‘canvas’,
convertEol: true
});
}
/
有修改 begin connect /
function startConnect (silent) {
var ip = $(‘#ip’).val();
var port = $(‘#port’).val();
var agentId = $(‘#selectServer’).val();
if (ip == ‘’ || port == ‘’) {
alert(‘Ip or port can not be empty’);
return;
}
if (agentId == ‘’) {
if (silent) {
return;
}
alert(‘AgentId can not be empty’);
return;
}
if (ws != null) {
alert(‘Already connected’);
return;
}
// init webSocket
initWs(ip, port, agentId);
ws.onerror = function () {
ws.close();
ws = null;
!silent && alert(‘Connect error’);
};
ws.onclose = function (message) {
if (message.code === 2000) {
alert(message.reason);
}
};
ws.onopen = function () {
console.log(‘open’);
$(‘#fullSc’).show();
var terminalSize = getTerminalSize()
console.log(‘terminalSize’)
console.log(terminalSize)
// init xterm
initXterm(terminalSize.cols, terminalSize.rows)
ws.onmessage = function (event) {
if (event.type === ‘message’) {
var data = event.data;
xterm.write(data);
}
};
xterm.open(document.getElementById(‘terminal’));
xterm.on(‘data’, function (data) {
ws.send(JSON.stringify({action: ‘read’, data: data}))
});
ws.send(JSON.stringify({action: ‘resize’, cols: terminalSize.cols, rows: terminalSize.rows}));
window.setInterval(function () {
if (ws != null && ws.readyState === 1) {
ws.send(JSON.stringify({action: ‘read’, data: “”}));
}
}, 30000);
}
}
function disconnect () {
try {
ws.close();
ws.onmessage = null;
ws.onclose = null;
ws = null;
xterm.destroy();
$(‘#fullSc’).hide();
alert(‘Connection was closed successfully!’);
} catch (e) {
alert(‘No connection, please start connect first.’);
}
}
/
full screen show **/
function xtermFullScreen () {
var ele = document.getElementById(‘terminal-card’);
requestFullScreen(ele);
}
function requestFullScreen (element) {
var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen;
if (requestMethod) {
requestMethod.call(element);
} else if (typeof window.ActiveXObject !== “undefined”) {
var wscript = new ActiveXObject(“WScript.Shell”);
if (wscript !== null) {
wscript.SendKeys(“{F11}”);
}
}
}

  • 其他文件

  • jquery-3.3.1.min.js 新加 Js

  • copy 过来的 js

  • popper-1.14.6.min.js

  • web-console.js

  • xterm.css

  • xterm.js

  • bootstrap.yml

arthas端口

arthas:
server:
port: 9898

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

独家面经总结,超级精彩

本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!

image

image

image

image

Java面试准备

准确的说这里又分为两部分:

  1. Java刷题
  2. 算法刷题

Java刷题:此份文档详细记录了千道面试题与详解;

image

image

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
4)]

[外链图片转存中…(img-p32xic0n-1712681237564)]

[外链图片转存中…(img-9Q90qXKz-1712681237564)]

Java面试准备

准确的说这里又分为两部分:

  1. Java刷题
  2. 算法刷题

Java刷题:此份文档详细记录了千道面试题与详解;

[外链图片转存中…(img-DAmFRKyy-1712681237564)]

[外链图片转存中…(img-PUX2mGF9-1712681237565)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值