diff --git a/bintest.sh b/bintest.sh deleted file mode 100644 index 9fb9840d06f..00000000000 --- a/bintest.sh +++ /dev/null @@ -1 +0,0 @@ -echo $1 diff --git a/package-lock.json b/package-lock.json index 17ca4c08cbb..1c3c63f5022 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,9 +13,11 @@ "nan": "^2.15.0", "net": "^1.0.2", "node-go-require": "^2.0.0", + "node-netstat": "^1.8.0", "ref-array-napi": "^1.2.2", "ref-napi": "^3.0.3", - "ref-struct-napi": "^1.1.1" + "ref-struct-napi": "^1.1.1", + "shortid": "^2.2.16" }, "devDependencies": { "@types/glob": "^7.2.0", @@ -2470,6 +2472,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "engines": { + "node": ">=4" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -2899,6 +2909,14 @@ "node-gyp-build-test": "build-test.js" } }, + "node_modules/node-netstat": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/node-netstat/-/node-netstat-1.8.0.tgz", + "integrity": "sha512-P1a5Sh9FfjTXxI6hC9q/Nqre8kT63FQxBCr1qz5ffk76EkQBH62+XEhIhlzfz6Bz+FRwOFqidW2FDGXnOXvyJQ==", + "dependencies": { + "is-wsl": "^1.1.0" + } + }, "node_modules/node.extend": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-2.0.2.tgz", @@ -3612,6 +3630,19 @@ "node": ">=4" } }, + "node_modules/shortid": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz", + "integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==", + "dependencies": { + "nanoid": "^2.1.0" + } + }, + "node_modules/shortid/node_modules/nanoid": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", + "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==" + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -5867,6 +5898,11 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -6202,6 +6238,14 @@ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" }, + "node-netstat": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/node-netstat/-/node-netstat-1.8.0.tgz", + "integrity": "sha512-P1a5Sh9FfjTXxI6hC9q/Nqre8kT63FQxBCr1qz5ffk76EkQBH62+XEhIhlzfz6Bz+FRwOFqidW2FDGXnOXvyJQ==", + "requires": { + "is-wsl": "^1.1.0" + } + }, "node.extend": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-2.0.2.tgz", @@ -6728,6 +6772,21 @@ "rechoir": "^0.6.2" } }, + "shortid": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz", + "integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==", + "requires": { + "nanoid": "^2.1.0" + }, + "dependencies": { + "nanoid": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", + "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==" + } + } + }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", diff --git a/package.json b/package.json index dc3261c7520..ab312ce68c5 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,10 @@ "nan": "^2.15.0", "net": "^1.0.2", "node-go-require": "^2.0.0", + "node-netstat": "^1.8.0", "ref-array-napi": "^1.2.2", "ref-napi": "^3.0.3", - "ref-struct-napi": "^1.1.1" + "ref-struct-napi": "^1.1.1", + "shortid": "^2.2.16" } } diff --git a/src/extension.ts b/src/extension.ts index c08515926e6..fd125992eab 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -36,31 +36,41 @@ export async function activate(context: vscode.ExtensionContext) { let pods = await k8sApi.listNamespacedPod('default'); let podNames = pods.body.items.map((pod: { metadata: { name: any; }; }) => { return pod.metadata.name; }); - vscode.window.showQuickPick(podNames, { placeHolder: 'Select pod to mirror' }).then(async pod => { - // Find the debugged process' port - + vscode.window.showQuickPick(podNames, { placeHolder: 'Select pod to mirror' }).then(async podName => { // Infer container id from pod name - let containerID = cp.execSync('kubectl get -o jsonpath="{.status.containerStatuses[*].containerID}" pod ' + pod); + let containerID = pods.body.items.find((pod: { metadata: { name: any; }; }) => pod.metadata.name === podName) + .status.containerStatuses[0].containerID; // Infert port from process ID - let port: string; + let port: string = ''; if (session.configuration.mirrord && session.configuration.mirrord.port) { port = session.configuration.mirrord.port; } else { - port = ProcessCapturer.pid.toString(); - let result = []; - try { - result = cp.execSync(`lsof -a -P -p ${ProcessCapturer.pid} -iTCP -sTCP:LISTEN -Fn`); - port = result.toString('utf-8').split('\n').reverse()[1].split(':')[1]; - } - catch (e) { - console.log(e); - } + var netstat = require('node-netstat'); + netstat.commands['darwin'].args.push('-a'); // The default args don't list LISTEN ports on OSX + // TODO: Check on other linux, windows + netstat({ + filter: { + pid: ProcessCapturer.pid, + protocol: 'tcp', + }, + sync: true, + limit: 5, + }, (data: { state: string; local: { port: string; }; }) => { + if (data.state === 'LISTEN') { + port = data.local.port; + } + }); } + if (!port) { + throw new Error("Could not find the debugged process' port"); + } + const shortid = require('shortid'); + const agentPodName = 'mirrord-' + shortid.generate().toLowerCase(); let agentPod = { - metadata: { name: 'agentpod' }, + metadata: { name: agentPodName }, spec: { hostPID: true, hostIPC: true, @@ -85,9 +95,9 @@ export async function activate(context: vscode.ExtensionContext) { command: [ "./mirrord-agent", "--container-id", - containerID, + 'abc', "--ports", - port + port.toString() ] } ] @@ -95,8 +105,11 @@ export async function activate(context: vscode.ExtensionContext) { }; - await k8sApi.createNamespacedPod('default', agentPod); - + try { + await k8sApi.createNamespacedPod('default', agentPod); + } catch (e) { + console.log(e); + } const net = require('net'); const stream = require('stream'); let log = new k8s.Log(kc);