feat(sourcemaps-reader): extracted sourcemaps reader
This commit is contained in:
parent
d4dbb7c8bc
commit
364b9c40f2
9 changed files with 1303 additions and 6 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "utilities_server",
|
"name": "utilities-server",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "assist server to get live sessions & sourcemaps reader to get stack trace",
|
"description": "assist server to get live sessions & sourcemaps reader to get stack trace",
|
||||||
"main": "peerjs-server.js",
|
"main": "peerjs-server.js",
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
"url": "git+https://github.com/openreplay/openreplay.git"
|
"url": "git+https://github.com/openreplay/openreplay.git"
|
||||||
},
|
},
|
||||||
"author": "KRAIEM Taha Yassine <tahayk2@gmail.com>",
|
"author": "KRAIEM Taha Yassine <tahayk2@gmail.com>",
|
||||||
"license": "MIT",
|
"license": "Elastic License 2.0 (ELv2)",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/openreplay/openreplay/issues"
|
"url": "https://github.com/openreplay/openreplay/issues"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "utilities_server",
|
"name": "peers-server",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "assist server to get live sessions & sourcemaps reader to get stack trace",
|
"description": "assist server to get live sessions & sourcemaps reader to get stack trace",
|
||||||
"main": "peerjs-server.js",
|
"main": "peerjs-server.js",
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
"url": "git+https://github.com/openreplay/openreplay.git"
|
"url": "git+https://github.com/openreplay/openreplay.git"
|
||||||
},
|
},
|
||||||
"author": "KRAIEM Taha Yassine <tahayk2@gmail.com>",
|
"author": "KRAIEM Taha Yassine <tahayk2@gmail.com>",
|
||||||
"license": "MIT",
|
"license": "Elastic License 2.0 (ELv2)",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/openreplay/openreplay/issues"
|
"url": "https://github.com/openreplay/openreplay/issues"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
6
sourcemap-reader/.gitignore
vendored
Normal file
6
sourcemap-reader/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
.idea
|
||||||
|
node_modules
|
||||||
|
npm-debug.log
|
||||||
|
.cache
|
||||||
|
test.html
|
||||||
|
/utils/
|
||||||
1113
sourcemap-reader/package-lock.json
generated
Normal file
1113
sourcemap-reader/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
25
sourcemap-reader/package.json
Normal file
25
sourcemap-reader/package.json
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
"name": "sourcemaps-reader",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "assist server to get live sessions & sourcemaps reader to get stack trace",
|
||||||
|
"main": "peerjs-server.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
|
"start": "node server.js"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/openreplay/openreplay.git"
|
||||||
|
},
|
||||||
|
"author": "KRAIEM Taha Yassine <tahayk2@gmail.com>",
|
||||||
|
"license": "Elastic License 2.0 (ELv2)",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/openreplay/openreplay/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/openreplay/openreplay#readme",
|
||||||
|
"dependencies": {
|
||||||
|
"aws-sdk": "^2.992.0",
|
||||||
|
"express": "^4.17.1",
|
||||||
|
"source-map": "^0.7.3"
|
||||||
|
}
|
||||||
|
}
|
||||||
19
sourcemap-reader/server.js
Normal file
19
sourcemap-reader/server.js
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
const dumps = require('./utils/HeapSnapshot');
|
||||||
|
const sourcemapsReaderServer = require('./servers/sourcemaps-server');
|
||||||
|
const express = require('express');
|
||||||
|
const {request_logger} = require("./utils/helper");
|
||||||
|
|
||||||
|
const HOST = '0.0.0.0';
|
||||||
|
const PORT = 9000;
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
app.use(request_logger("[wsapp]"));
|
||||||
|
|
||||||
|
app.use('/sourcemaps', sourcemapsReaderServer);
|
||||||
|
app.use('/heapdump', dumps.router);
|
||||||
|
|
||||||
|
const server = app.listen(PORT, HOST, () => {
|
||||||
|
console.log(`WS App listening on http://${HOST}:${PORT}`);
|
||||||
|
console.log('Press Ctrl+C to quit.');
|
||||||
|
});
|
||||||
|
module.exports = {server};
|
||||||
104
sourcemap-reader/servers/sourcemaps-handler.js
Normal file
104
sourcemap-reader/servers/sourcemaps-handler.js
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
'use strict';
|
||||||
|
const sourceMap = require('source-map');
|
||||||
|
const AWS = require('aws-sdk');
|
||||||
|
const sourceMapVersion = require('../package.json').dependencies["source-map"];
|
||||||
|
const URL = require('url');
|
||||||
|
const getVersion = version => version.replace(/[\^\$\=\~]/, "");
|
||||||
|
|
||||||
|
module.exports.sourcemapReader = async event => {
|
||||||
|
sourceMap.SourceMapConsumer.initialize({
|
||||||
|
"lib/mappings.wasm": `https://unpkg.com/source-map@${getVersion(sourceMapVersion)}/lib/mappings.wasm`
|
||||||
|
});
|
||||||
|
let s3;
|
||||||
|
if (event.S3_HOST) {
|
||||||
|
s3 = new AWS.S3({
|
||||||
|
endpoint: event.S3_HOST,
|
||||||
|
accessKeyId: event.S3_KEY,
|
||||||
|
secretAccessKey: event.S3_SECRET,
|
||||||
|
region: event.region,
|
||||||
|
s3ForcePathStyle: true, // needed with minio?
|
||||||
|
signatureVersion: 'v4'
|
||||||
|
});
|
||||||
|
} else if (process.env.S3_HOST) {
|
||||||
|
s3 = new AWS.S3({
|
||||||
|
endpoint: process.env.S3_HOST,
|
||||||
|
accessKeyId: process.env.S3_KEY,
|
||||||
|
secretAccessKey: process.env.S3_SECRET,
|
||||||
|
s3ForcePathStyle: true, // needed with minio?
|
||||||
|
signatureVersion: 'v4'
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
s3 = new AWS.S3({
|
||||||
|
'AccessKeyID': process.env.aws_access_key_id,
|
||||||
|
'SecretAccessKey': process.env.aws_secret_access_key,
|
||||||
|
'Region': process.env.aws_region
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var options = {
|
||||||
|
Bucket: event.bucket,
|
||||||
|
Key: event.key
|
||||||
|
};
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
s3.getObject(options, (err, data) => {
|
||||||
|
if (err) {
|
||||||
|
console.log("Get S3 object failed");
|
||||||
|
console.log(err);
|
||||||
|
return reject(err);
|
||||||
|
}
|
||||||
|
let sourcemap = data.Body.toString();
|
||||||
|
|
||||||
|
return new sourceMap.SourceMapConsumer(sourcemap)
|
||||||
|
.then(consumer => {
|
||||||
|
let results = [];
|
||||||
|
for (let i = 0; i < event.positions.length; i++) {
|
||||||
|
let original = consumer.originalPositionFor({
|
||||||
|
line: event.positions[i].line,
|
||||||
|
column: event.positions[i].column
|
||||||
|
});
|
||||||
|
let url = URL.parse("");
|
||||||
|
let preview = [];
|
||||||
|
if (original.source) {
|
||||||
|
preview = consumer.sourceContentFor(original.source, true);
|
||||||
|
if (preview !== null) {
|
||||||
|
preview = preview.split("\n")
|
||||||
|
.map((line, i) => [i + 1, line]);
|
||||||
|
if (event.padding) {
|
||||||
|
let start = original.line < event.padding ? 0 : original.line - event.padding;
|
||||||
|
preview = preview.slice(start, original.line + event.padding);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log("source not found, null preview for:");
|
||||||
|
console.log(original.source);
|
||||||
|
preview = []
|
||||||
|
}
|
||||||
|
url = URL.parse(original.source);
|
||||||
|
} else {
|
||||||
|
console.log("couldn't find original position of:");
|
||||||
|
console.log({
|
||||||
|
line: event.positions[i].line,
|
||||||
|
column: event.positions[i].column
|
||||||
|
});
|
||||||
|
}
|
||||||
|
let result = {
|
||||||
|
"absPath": url.href,
|
||||||
|
"filename": url.pathname,
|
||||||
|
"lineNo": original.line,
|
||||||
|
"colNo": original.column,
|
||||||
|
"function": original.name,
|
||||||
|
"context": preview
|
||||||
|
};
|
||||||
|
// console.log(result);
|
||||||
|
results.push(result);
|
||||||
|
}
|
||||||
|
consumer = undefined;
|
||||||
|
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
|
||||||
|
return resolve(results);
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
sourcemap = undefined;
|
||||||
|
})
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
30
sourcemap-reader/servers/sourcemaps-server.js
Normal file
30
sourcemap-reader/servers/sourcemaps-server.js
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
var express = require('express');
|
||||||
|
var handler = require('./sourcemaps-handler');
|
||||||
|
var router = express.Router();
|
||||||
|
|
||||||
|
router.post('/', (req, res) => {
|
||||||
|
let data = '';
|
||||||
|
req.on('data', chunk => {
|
||||||
|
data += chunk;
|
||||||
|
});
|
||||||
|
req.on('end', function () {
|
||||||
|
data = JSON.parse(data);
|
||||||
|
console.log("Starting parser for: " + data.key);
|
||||||
|
// process.env = {...process.env, ...data.bucket_config};
|
||||||
|
handler.sourcemapReader(data)
|
||||||
|
.then((results) => {
|
||||||
|
res.statusCode = 200;
|
||||||
|
res.setHeader('Content-Type', 'application/json');
|
||||||
|
res.end(JSON.stringify(results));
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
console.error("Something went wrong");
|
||||||
|
console.error(e);
|
||||||
|
res.statusCode(500);
|
||||||
|
res.end(e);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "utilities_server",
|
"name": "utilities-server",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "assist server to get live sessions & sourcemaps reader to get stack trace",
|
"description": "assist server to get live sessions & sourcemaps reader to get stack trace",
|
||||||
"main": "peerjs-server.js",
|
"main": "peerjs-server.js",
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
"url": "git+https://github.com/openreplay/openreplay.git"
|
"url": "git+https://github.com/openreplay/openreplay.git"
|
||||||
},
|
},
|
||||||
"author": "KRAIEM Taha Yassine <tahayk2@gmail.com>",
|
"author": "KRAIEM Taha Yassine <tahayk2@gmail.com>",
|
||||||
"license": "MIT",
|
"license": "Elastic License 2.0 (ELv2)",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/openreplay/openreplay/issues"
|
"url": "https://github.com/openreplay/openreplay/issues"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue