lib/selenium-log-utils.js (69 lines of code) (raw):
const Promise = require('bluebird');
const url = require('url');
const urlJoin = require('url-join');
const request = Promise.promisify(require('request'));
//const { logger } = require('./log');
const logMap = {
/* * /
:sessionId: {
browser: [],
client: [],
driver: [],
performance: [],
server: [],
// GitLab proprietary log, used for CI views
gitlab: []
}
/* */
};
function updateLog(sessionId, type, logValue) {
logMap[sessionId] = (logMap[sessionId] || {});
const resultantLog = (logMap[sessionId][type] || []).concat(logValue);
logMap[sessionId][type] = resultantLog;
//logger.log('debug', 'updateLog resultantLog', sessionId, resultantLog);
return resultantLog;
}
function fetchLogTypes(target, sessionId) {
const parsedTargetUrl = url.parse(target);
const resultantTargetUrl = url.format(Object.assign({}, parsedTargetUrl, {
pathname: urlJoin('/', parsedTargetUrl.pathname, `/session/${sessionId}/log/types`),
}));
return request({
method: 'get',
uri: resultantTargetUrl,
json: true
})
.then((res) => {
if(res.status === 200) {
return res.body.value;
}
});
}
function fetchLog(target, sessionId, type) {
const parsedTargetUrl = url.parse(target);
const resultantTargetUrl = url.format(Object.assign({}, parsedTargetUrl, {
pathname: urlJoin('/', parsedTargetUrl.pathname, `/session/${sessionId}/log`),
}));
return request({
method: 'post',
uri: resultantTargetUrl,
// For some reason the `json` option results in an error
// `java.lang.ClassCastException` -> `java.lang.String cannot be cast to java.util.HashMap`
//json: true,
body: JSON.stringify({
type
})
})
.then((res) => {
let log = [];
try {
const resData = JSON.parse(res.body);
log = resData.value;
} catch(err) {
// swallow
}
return log;
});
}
function fetchAllLogs(target, sessionId) {
return fetchLogTypes(target, sessionId)
.then((types = []) => {
const logPromises = types.map((type) => {
return fetchLog(target, sessionId, type)
.then((log) => {
return updateLog(sessionId, type, log);
});
});
return Promise.all(logPromises)
.then(() => logMap[sessionId]);
});
}
module.exports = {
updateLog,
fetchLogTypes,
fetchLog,
fetchAllLogs
};