Как распечатать время, затраченное на выполнение sql-запроса в консоли loopback?

Я печатаю SQL-запросы, выполненные в моем приложении, используя приведенный ниже код

var chalk = require('chalk');

module.exports = (app) => {
  var connector = app.datasources.mysqlDs.connector;
  connector.observe('after execute', function(ctx, next) {
    console.log(chalk.green(ctx.req.sql));
    next();
  });
}

Приведенный выше код печатает sql-запрос в консоли следующим образом:

SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1

Мне интересно напечатать время, необходимое для выполнения запроса sql.

Приложения Ruby on rails выводят запрос sql вместе с временем, как показано ниже.

 User Load (0.2ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1

Есть ли способ добиться этого в loopback 3?

4
0
200
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я боюсь, что LoopBack не предоставляет информацию о времени из коробки. Вы можете использовать перехватчики before execute и after execute для самостоятельного сбора данных о времени.

module.exports = (app) => {
  var connector = app.datasources.mysqlDs.connector;
  connector.observe('before execute', function(ctx, next) {
    // store the start time in the context
    ctx.__started = process.hrtime();
    next();
  });

  connector.observe('after execute', function(ctx, next) {
    // compute the time difference as [seconds, nanoseconds]
    const delta = process.hrtime(ctx.__started);
    // convert the two-part value into number of milliseconds elapsed
    // and round it to a single decimal place
    const durationInMs = 10 * Math.round((delta[0]*1000 + delta[1]/1e6)/10);
    console.log('(%s ms) %s', durationInMs, chalk.green(ctx.req.sql));
    next();
  });
}

Другие вопросы по теме