forked from TarsCloud/TarsWeb
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexecPod.js
More file actions
140 lines (105 loc) · 4.11 KB
/
execPod.js
File metadata and controls
140 lines (105 loc) · 4.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
const CommonService = require('./k8s/service/common/CommonService');
const logger = require("./logger");
const ExecOperator = {};
const _ = require('lodash');
function originIsAllowed(origin) {
// put logic here to detect whether the specified origin is allowed.
return true;
}
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
let exec = async () => {
global.wsServer.on('request', async function (request) {
var connection;
connection = request.accept('echo-protocol', request.origin);
// console.log(connection);
logger.info((new Date()) + ' Connection accepted');
connection.on('close', function (reasonCode, description) {
logger.info((new Date()) + ' peer ' + connection.remoteAddress + ' disconnected.');
});
let params = request.resourceURL.query;
// logger.info('request:', params);
let command = ['bash', '-c'];
let sh;
if (params.History == 'true') {
sh = `#!/bin/sh
dir=/usr/local/app/${CommonService.TServerType1}/app_log/${params.PodName}/${params.ServerApp}/${params.ServerName}
if [ -d $dir ]; then
cd $dir
fi
if [ ! -f /bin/bash ]; then
sh
else
bash
fi`;
let pod = await CommonService.getDaemonPodByHostIp(params.NodeIP);
// console.log(pod);
params.PodName = pod.metadata.name;
} else {
sh = `#!/bin/sh
dir=/usr/local/app/${CommonService.TServerType1}/app_log/${params.ServerApp}/${params.ServerName}
if [ -d $dir ]; then
cd $dir
fi
if [ ! -f /bin/bash ]; then
sh
else
bash
fi`
}
command.push(sh);
try {
let pod = (await CommonService.getPod(params.PodName)).body;
logger.info('PodName:', params.PodName, pod.spec.containers[0].name);
let ws = await CommonService.connectPodExec(params.PodName, command, pod.spec.containers[0].name);
ws.on('error', (error) => {
logger.error(error);
});
ws.on('ping', (data) => {
logger.info("ping:", data);
});
ws.on('open', () => {
logger.info('connected to container');
});
ws.on('message', (data) => {
// logger.info("api->nodejs:'" + data.toString() + "'");
let msg = {
operation: "stdout",
data: data.toString()
}
connection.send(JSON.stringify(msg));
});
connection.on('message', function (message) {
if (ws && ws.readyState === 1) {
// logger.info("web->nodejs:", JSON.stringify(message));
let msg = JSON.parse(message.utf8Data);
switch (msg.operation) {
case "stdin":
var buffer = Buffer.from(msg.data, 'utf8');
var panddingBuffer = Buffer.concat([Buffer.from('00', 'hex'), buffer]);
ws.send(panddingBuffer);
break;
case "resize":
process.stdout.rows = msg.height;
process.stdout.columns = msg.width;
process.stdout.emit("resize");
break;
case "ping":
let rsp = {
operation: "pong",
data: ""
};
connection.send(JSON.stringify(rsp));
break;
default:
}
}
});
} catch (e) {
logger.error(e);
}
});
}
ExecOperator.start = () => {
exec();
}
module.exports = ExecOperator;