mirror of
https://github.com/usebruno/bruno.git
synced 2025-02-16 17:51:48 +01:00
Use axios interceptor to measure response time
This commit is contained in:
parent
efbdde8252
commit
bb7d13d2d9
@ -10,6 +10,7 @@ const interpolateVars = require('./interpolate-vars');
|
|||||||
const { ScriptRuntime, TestRuntime, VarsRuntime, AssertRuntime } = require('@usebruno/js');
|
const { ScriptRuntime, TestRuntime, VarsRuntime, AssertRuntime } = require('@usebruno/js');
|
||||||
const { stripExtension } = require('../utils/filesystem');
|
const { stripExtension } = require('../utils/filesystem');
|
||||||
const { getOptions } = require('../utils/bru');
|
const { getOptions } = require('../utils/bru');
|
||||||
|
const { makeAxiosInstance } = require('../utils/axios-instance');
|
||||||
|
|
||||||
const runSingleRequest = async function (
|
const runSingleRequest = async function (
|
||||||
filename,
|
filename,
|
||||||
@ -123,15 +124,23 @@ const runSingleRequest = async function (
|
|||||||
}
|
}
|
||||||
|
|
||||||
let response, responseTime;
|
let response, responseTime;
|
||||||
const start = Date.now();
|
|
||||||
try {
|
try {
|
||||||
// run request
|
// run request
|
||||||
response = await axios(request);
|
const axiosInstance = makeAxiosInstance();
|
||||||
responseTime = Date.now() - start;
|
|
||||||
|
/** @type {import('axios').AxiosResponse} */
|
||||||
|
response = await axiosInstance(request);
|
||||||
|
|
||||||
|
// Prevents the duration on leaking to the actual result
|
||||||
|
responseTime = response.headers.get('request-duration');
|
||||||
|
response.headers.delete('request-duration');
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err && err.response) {
|
if (err && err.response) {
|
||||||
response = err.response;
|
response = err.response;
|
||||||
responseTime = Date.now() - start;
|
|
||||||
|
// Prevents the duration on leaking to the actual result
|
||||||
|
responseTime = response.headers.get('request-duration');
|
||||||
|
response.headers.delete('request-duration');
|
||||||
} else {
|
} else {
|
||||||
console.log(chalk.red(stripExtension(filename)) + chalk.dim(` (${err.message})`));
|
console.log(chalk.red(stripExtension(filename)) + chalk.dim(` (${err.message})`));
|
||||||
return {
|
return {
|
||||||
@ -155,10 +164,7 @@ const runSingleRequest = async function (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(
|
console.log(chalk.green(stripExtension(filename)) + chalk.dim(` (${response.status} ${response.statusText}) - ${responseTime} ms`));
|
||||||
chalk.green(stripExtension(filename)) +
|
|
||||||
chalk.dim(` (${response.status} ${response.statusText}) - ${responseTime} ms`)
|
|
||||||
);
|
|
||||||
|
|
||||||
// run post-response vars
|
// run post-response vars
|
||||||
const postResponseVars = get(bruJson, 'request.vars.res');
|
const postResponseVars = get(bruJson, 'request.vars.res');
|
||||||
|
40
packages/bruno-cli/src/utils/axios-instance.js
Normal file
40
packages/bruno-cli/src/utils/axios-instance.js
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
const axios = require('axios');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function that configures axios with timing interceptors
|
||||||
|
* Important to note here that the timings are not completely accurate.
|
||||||
|
* @see https://github.com/axios/axios/issues/695
|
||||||
|
* @returns {import('axios').AxiosStatic}
|
||||||
|
*/
|
||||||
|
function makeAxiosInstance() {
|
||||||
|
/** @type {import('axios').AxiosStatic} */
|
||||||
|
const instance = axios.create();
|
||||||
|
|
||||||
|
instance.interceptors.request.use((config) => {
|
||||||
|
config.headers['request-start-time'] = Date.now();
|
||||||
|
return config;
|
||||||
|
});
|
||||||
|
|
||||||
|
instance.interceptors.response.use(
|
||||||
|
(response) => {
|
||||||
|
const end = Date.now();
|
||||||
|
const start = response.config.headers['request-start-time'];
|
||||||
|
response.headers['request-duration'] = end - start;
|
||||||
|
return response;
|
||||||
|
},
|
||||||
|
(error) => {
|
||||||
|
if (error.response) {
|
||||||
|
const end = Date.now();
|
||||||
|
const start = error.config.headers['request-start-time'];
|
||||||
|
error.response.headers['request-duration'] = end - start;
|
||||||
|
}
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
makeAxiosInstance
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user