mirror of
https://github.com/alibaba/arthas.git
synced 2024-04-21 10:21:39 +00:00
polish #2331, fix package
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
/nb-configuration.xml
|
||||
**/target
|
||||
core/src/main/resources/com/taobao/arthas/core/res/version
|
||||
tunnel-server/src/main/resources/static
|
||||
**/*.orig
|
||||
|
||||
site/src/site/sphinx/_build
|
||||
|
||||
+1
-1
@@ -101,7 +101,7 @@
|
||||
</copy>
|
||||
<!-- 从web-ui复制打包好的js/html -->
|
||||
<copy overwrite="true" todir="${project.build.directory}/tmp_out/com/taobao/arthas/core/http/">
|
||||
<fileset dir="${project.build.directory}/../../web-ui/arthasWebConsole/dist/" />
|
||||
<fileset dir="${project.build.directory}/../../web-ui/arthasWebConsole/dist/ui/" />
|
||||
</copy>
|
||||
<zip basedir="${project.build.directory}/tmp_out" destfile="${project.build.directory}/${project.build.finalName}-shade.${project.packaging}" />
|
||||
</tasks>
|
||||
|
||||
@@ -131,6 +131,39 @@
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<artifactId>maven-antrun-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>generate-resources</phase>
|
||||
<configuration>
|
||||
<tasks>
|
||||
<!-- 从web-ui复制打包好的js/html -->
|
||||
<copy overwrite="true" todir="${project.basedir}/src/main/resources/static/">
|
||||
<fileset dir="${project.basedir}/../web-ui/arthasWebConsole/dist/tunnel/" />
|
||||
</copy>
|
||||
</tasks>
|
||||
</configuration>
|
||||
<goals>
|
||||
<goal>run</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>resources-clean</id>
|
||||
<phase>clean</phase>
|
||||
<configuration>
|
||||
<tasks>
|
||||
<!-- 清理从web-ui复制的js/html -->
|
||||
<delete dir="${project.basedir}/src/main/resources/static"/>
|
||||
</tasks>
|
||||
</configuration>
|
||||
<goals>
|
||||
<goal>run</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
|
||||
@@ -1,95 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<!-- Required meta tags -->
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
|
||||
<!-- Bootstrap CSS -->
|
||||
<link rel="stylesheet" href="https://g.alicdn.com/code/lib/twitter-bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS"
|
||||
crossorigin="anonymous">
|
||||
|
||||
<script src="https://g.alicdn.com/code/lib/vue/2.6.4/vue.min.js" integrity="sha256-isEQDc5Dw7wea1s5iMZjBvPuYzjzMrvtlPwE6LtavFA=" crossorigin="anonymous"></script>
|
||||
<script src="https://g.alicdn.com/code/lib/axios/0.18.0/axios.min.js"></script>
|
||||
|
||||
<title>Arthas Tutorials</title>
|
||||
|
||||
<style>
|
||||
/* This is all that's required */
|
||||
.dropdown-item-checked::before {
|
||||
position: absolute;
|
||||
left: .4rem;
|
||||
content: '✓';
|
||||
font-weight: 600;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- Optional JavaScript -->
|
||||
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
||||
<script src="https://g.alicdn.com/code/lib/jquery/3.3.1/jquery.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
|
||||
<script src="https://g.alicdn.com/code/lib/popper.js/1.14.7/umd/popper.min.js" integrity="sha512-5WvZa4N7Jq3TVNCp4rjcBMlc6pT3lZ7gVxjtI6IkKW+uItSa+rFgtFljvZnCxQGj8SUX5DHraKE6Mn/4smK1Cg==" crossorigin="anonymous"></script>
|
||||
<script src="https://g.alicdn.com/code/lib/twitter-bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k"
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
<div id="app">
|
||||
|
||||
<table class="table table-hover issue-tracker">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>IP</th>
|
||||
<th>AgentId</th>
|
||||
<th>Version</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="(agentInfo, agentId) in agentInfos">
|
||||
<td>
|
||||
<a class="btn btn-primary btn-xs" v-bind:href="tunnelWebConsoleLink(agentId, agentInfo.clientConnectHost)">{{agentInfo.host}}</a>
|
||||
</td>
|
||||
<td>
|
||||
<span class="label label-default">{{agentId}}</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="label label-default">{{agentInfo.arthasVersion}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
||||
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data: {
|
||||
agentInfos: [],
|
||||
},
|
||||
methods: {
|
||||
fetchMyApps: function () {
|
||||
var vm = this;
|
||||
var params = new window.URLSearchParams(window.location.search);
|
||||
var appName = params.get('app');
|
||||
axios.get('/api/tunnelAgentInfo?app=' + appName)
|
||||
.then(function (response) {
|
||||
vm.agentInfos = response.data
|
||||
})
|
||||
.catch(function (error) {
|
||||
console.log('api error ' + error)
|
||||
})
|
||||
},
|
||||
tunnelWebConsoleLink: function (agentId, targetServer) {
|
||||
return "/?targetServer=" + targetServer + "&agentId=" + agentId;
|
||||
}
|
||||
},
|
||||
mounted: function() {
|
||||
this.fetchMyApps()
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
</html>
|
||||
@@ -1,85 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<!-- Required meta tags -->
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
|
||||
<!-- Bootstrap CSS -->
|
||||
<link rel="stylesheet" href="https://g.alicdn.com/code/lib/twitter-bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS"
|
||||
crossorigin="anonymous">
|
||||
|
||||
<script src="https://g.alicdn.com/code/lib/vue/2.6.4/vue.min.js" integrity="sha256-isEQDc5Dw7wea1s5iMZjBvPuYzjzMrvtlPwE6LtavFA=" crossorigin="anonymous"></script>
|
||||
<script src="https://g.alicdn.com/code/lib/axios/0.18.0/axios.min.js"></script>
|
||||
|
||||
<title>Arthas Tutorials</title>
|
||||
|
||||
<style>
|
||||
/* This is all that's required */
|
||||
.dropdown-item-checked::before {
|
||||
position: absolute;
|
||||
left: .4rem;
|
||||
content: '✓';
|
||||
font-weight: 600;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- Optional JavaScript -->
|
||||
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
||||
<script src="https://g.alicdn.com/code/lib/jquery/3.3.1/jquery.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
|
||||
<script src="https://g.alicdn.com/code/lib/popper.js/1.14.7/umd/popper.min.js" integrity="sha512-5WvZa4N7Jq3TVNCp4rjcBMlc6pT3lZ7gVxjtI6IkKW+uItSa+rFgtFljvZnCxQGj8SUX5DHraKE6Mn/4smK1Cg==" crossorigin="anonymous"></script>
|
||||
<script src="https://g.alicdn.com/code/lib/twitter-bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k"
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
<div id="app">
|
||||
|
||||
<table class="table table-hover issue-tracker">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>应用名</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="myApp in myApps">
|
||||
<td>
|
||||
<a class="btn btn-primary btn-xs" v-bind:href="detailLink(myApp)">{{myApp}}</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
||||
|
||||
<script>
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data: {
|
||||
myApps: {},
|
||||
},
|
||||
methods: {
|
||||
fetchMyApps: function () {
|
||||
var vm = this
|
||||
axios.get('/api/tunnelApps')
|
||||
.then(function (response) {
|
||||
vm.myApps = response.data
|
||||
})
|
||||
.catch(function (error) {
|
||||
console.log('api error ' + error)
|
||||
})
|
||||
},
|
||||
detailLink: function (appName) {
|
||||
return "agents.html?app=" + appName;
|
||||
}
|
||||
},
|
||||
mounted: function() {
|
||||
this.fetchMyApps()
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
</html>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
|
Before Width: | Height: | Size: 542 B |
@@ -1,113 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<!-- Required meta tags -->
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
|
||||
<!-- Bootstrap CSS -->
|
||||
<link rel="stylesheet" href="bootstrap-4.2.1.min.css">
|
||||
|
||||
<!-- Optional JavaScript -->
|
||||
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
||||
<script src="jquery-3.3.1.slim.min.js"></script>
|
||||
<script src="popper-1.14.6.min.js"></script>
|
||||
<script src="bootstrap-4.2.1.min.js"></script>
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
window.addEventListener('resize', function () {
|
||||
if(ws !== undefined && ws !== null){
|
||||
let terminalSize = getTerminalSize();
|
||||
ws.send(JSON.stringify({ action: 'resize', cols: terminalSize.cols, rows: terminalSize.rows }));
|
||||
xterm.resize(terminalSize.cols, terminalSize.rows);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<link href="xterm.css" rel="stylesheet" />
|
||||
<link href="main.css" rel="stylesheet" />
|
||||
<script src="xterm.js" type="text/javascript"></script>
|
||||
<script src="web-console.js"></script>
|
||||
<title>Arthas Console</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<nav class="navbar navbar-expand navbar-light bg-light flex-column flex-md-row bd-navbar">
|
||||
<a href="https://github.com/alibaba/arthas" target="_blank" title="" class="navbar-brand"><img src="logo.png"
|
||||
alt="Arthas" title="Welcome to Arthas web console" style="height: 25px;" class="img-responsive"></a>
|
||||
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
|
||||
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<ul class="navbar-nav mr-auto">
|
||||
<li class="nav-item active">
|
||||
<a class="nav-link" href="https://arthas.aliyun.com/doc" target="_blank">Documentation
|
||||
<span class="sr-only">(current)</span></a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="https://arthas.aliyun.com/doc/arthas-tutorials.html" target="_blank">Online Tutorials</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="https://github.com/alibaba/arthas" target="_blank">Github</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<form class="form-inline my-2 my-lg-0">
|
||||
<div class="col">
|
||||
<div class="input-group ">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text" id="ip-addon">IP</span>
|
||||
</div>
|
||||
<input value="127.0.0.1" v-model="ip" type="text" class="form-control" name="ip" id="ip"
|
||||
placeholder="please enter ip address" aria-label="ip" aria-describedby="ip-addon">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col">
|
||||
<div class="input-group ">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text" id="port-addon">Port</span>
|
||||
</div>
|
||||
<input value="7777" v-model="port" type="text" class="form-control" name="port" id="port"
|
||||
placeholder="please enter port" aria-label="port" aria-describedby="port-addon">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col">
|
||||
<div class="input-group ">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text" id="agentId-addon">AgentId</span>
|
||||
</div>
|
||||
<input value="" v-model="agentId" type="text" class="form-control" name="agentId" id="agentId"
|
||||
placeholder="please enter agentId" aria-label="agentId" aria-describedby="agentId-addon">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-inline">
|
||||
<button title="connect" type="button" class="btn btn-info form-control" onclick="startConnect()">Connect</button>
|
||||
<button title="disconnect" type="button" class="btn btn-info form-control" onclick="disconnect()">Disconnect</button>
|
||||
<a id="arthasOutputA" target="_blank" href="arthas-output/" class="btn btn-info" role="button" onclick="updateArthasOutputLink()">Arthas Output</a>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
</nav>
|
||||
|
||||
<div class="container-fluid px-0">
|
||||
<div class="col px-0" id="terminal-card">
|
||||
<div id="terminal"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div title="fullscreen" id="fullSc" class="fullSc">
|
||||
<button id="fullScBtn" onclick="xtermFullScreen()"><img src="fullsc.png"></button>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
|
Before Width: | Height: | Size: 6.2 KiB |
@@ -1,20 +0,0 @@
|
||||
#terminal:-webkit-full-screen{
|
||||
background-color: rgb(255, 255, 12);
|
||||
}
|
||||
.container {
|
||||
width: 100%;
|
||||
min-height: 600px;
|
||||
}
|
||||
.fullSc {
|
||||
z-index: 10000;
|
||||
position: fixed;
|
||||
top: 25%;
|
||||
left: 90%;
|
||||
display: none;
|
||||
}
|
||||
#fullScBtn {
|
||||
border-radius:17px;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
background-color: black;
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -1,217 +0,0 @@
|
||||
var ws;
|
||||
var xterm;
|
||||
const DEFAULT_SCROLL_BACK = 1000
|
||||
const MAX_SCROLL_BACK = 9999999
|
||||
const MIN_SCROLL_BACK = 1
|
||||
|
||||
$(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) {
|
||||
$('#agentId').val(agentId);
|
||||
}
|
||||
|
||||
var iframe = getUrlParam('iframe');
|
||||
if (iframe != null && iframe != 'false') {
|
||||
$("nav").hide()
|
||||
}
|
||||
|
||||
startConnect(true);
|
||||
});
|
||||
|
||||
/** get params in url **/
|
||||
function getUrlParam (name, url) {
|
||||
if (!url) url = window.location.href;
|
||||
name = name.replace(/[\[\]]/g, '\\$&');
|
||||
var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
|
||||
results = regex.exec(url);
|
||||
if (!results) return null;
|
||||
if (!results[2]) return '';
|
||||
return decodeURIComponent(results[2].replace(/\+/g, ' '));
|
||||
}
|
||||
|
||||
function getCharSize () {
|
||||
var tempDiv = $('<div />').attr({'role': 'listitem'});
|
||||
var tempSpan = $('<div />').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, path, agentId, targetServer) {
|
||||
var protocol= location.protocol === 'https:' ? 'wss://' : 'ws://';
|
||||
var uri = protocol + ip + ':' + port + '/' + encodeURIComponent(path) + '?method=connectArthas&id=' + agentId;
|
||||
if (targetServer != null) {
|
||||
uri = uri + '&targetServer=' + encodeURIComponent(targetServer);
|
||||
}
|
||||
ws = new WebSocket(uri);
|
||||
}
|
||||
|
||||
/** init xterm **/
|
||||
function initXterm (cols, rows,scrollback) {
|
||||
let scrollNumber = parseInt(scrollback,10)
|
||||
xterm = new Terminal({
|
||||
cols: cols,
|
||||
rows: rows,
|
||||
screenReaderMode: false,
|
||||
rendererType: 'canvas',
|
||||
convertEol: true,
|
||||
scrollback: isValidNumber(scrollNumber) ? scrollNumber : DEFAULT_SCROLL_BACK
|
||||
});
|
||||
}
|
||||
|
||||
function isValidNumber(scrollNumber){
|
||||
return scrollNumber >= MIN_SCROLL_BACK &&
|
||||
scrollNumber <= MAX_SCROLL_BACK;
|
||||
}
|
||||
|
||||
/** begin connect **/
|
||||
function startConnect (silent) {
|
||||
var ip = $('#ip').val();
|
||||
var port = $('#port').val();
|
||||
var agentId = $('#agentId').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;
|
||||
}
|
||||
|
||||
var path = getUrlParam('path');
|
||||
if (path == null) {
|
||||
path = "ws";
|
||||
}
|
||||
|
||||
var targetServer = getUrlParam('targetServer');
|
||||
|
||||
// init webSocket
|
||||
initWs(ip, port, path, agentId, targetServer);
|
||||
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)
|
||||
let scrollback = getUrlParam('scrollback');
|
||||
// init xterm
|
||||
initXterm(terminalSize.cols, terminalSize.rows,scrollback)
|
||||
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.');
|
||||
}
|
||||
}
|
||||
|
||||
function updateArthasOutputLink() {
|
||||
$('#arthasOutputA').prop("href", "proxy/" + $('#agentId').val() + "/arthas-output/")
|
||||
}
|
||||
|
||||
/** 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}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,164 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2014 The xterm.js authors. All rights reserved.
|
||||
* Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
|
||||
* https://github.com/chjj/term.js
|
||||
* @license MIT
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*
|
||||
* Originally forked from (with the author's permission):
|
||||
* Fabrice Bellard's javascript vt100 for jslinux:
|
||||
* http://bellard.org/jslinux/
|
||||
* Copyright (c) 2011 Fabrice Bellard
|
||||
* The original design remains. The terminal itself
|
||||
* has been extended to include xterm CSI codes, among
|
||||
* other features.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Default styles for xterm.js
|
||||
*/
|
||||
|
||||
.xterm {
|
||||
font-family: courier-new, courier, monospace;
|
||||
font-feature-settings: "liga" 0;
|
||||
position: relative;
|
||||
user-select: none;
|
||||
-ms-user-select: none;
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
|
||||
.xterm.focus,
|
||||
.xterm:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.xterm .xterm-helpers {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
/**
|
||||
* The z-index of the helpers must be higher than the canvases in order for
|
||||
* IMEs to appear on top.
|
||||
*/
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.xterm .xterm-helper-textarea {
|
||||
/*
|
||||
* HACK: to fix IE's blinking cursor
|
||||
* Move textarea out of the screen to the far left, so that the cursor is not visible.
|
||||
*/
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
left: -9999em;
|
||||
top: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
z-index: -10;
|
||||
/** Prevent wrapping so the IME appears against the textarea at the correct position */
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
resize: none;
|
||||
}
|
||||
|
||||
.xterm .composition-view {
|
||||
/* TODO: Composition position got messed up somewhere */
|
||||
background: #000;
|
||||
color: #FFF;
|
||||
display: none;
|
||||
position: absolute;
|
||||
white-space: nowrap;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.xterm .composition-view.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.xterm .xterm-viewport {
|
||||
/* On OS X this is required in order for the scroll bar to appear fully opaque */
|
||||
background-color: #000;
|
||||
overflow-y: scroll;
|
||||
cursor: default;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.xterm .xterm-screen {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.xterm .xterm-screen canvas {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.xterm .xterm-scroll-area {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.xterm-char-measure-element {
|
||||
display: inline-block;
|
||||
visibility: hidden;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -9999em;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
.xterm {
|
||||
cursor: text;
|
||||
}
|
||||
|
||||
.xterm.enable-mouse-events {
|
||||
/* When mouse events are enabled (eg. tmux), revert to the standard pointer cursor */
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.xterm.xterm-cursor-pointer {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.xterm.column-select.focus {
|
||||
/* Column selection mode */
|
||||
cursor: crosshair;
|
||||
}
|
||||
|
||||
.xterm .xterm-accessibility,
|
||||
.xterm .xterm-message {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
z-index: 100;
|
||||
color: transparent;
|
||||
}
|
||||
|
||||
.xterm .live-region {
|
||||
position: absolute;
|
||||
left: -9999px;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
overflow: hidden;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user