PHP WebShell

Текущая директория: /opt/BitGoJS/node_modules/@lerna/profiler

Просмотр файла: profiler.js

"use strict";

const fs = require("fs-extra");
const npmlog = require("npmlog");
const upath = require("upath");

const hrtimeToMicroseconds = (hrtime) => {
  return (hrtime[0] * 1e9 + hrtime[1]) / 1000;
};

const range = (len) => {
  return Array(len)
    .fill()
    .map((_, idx) => idx);
};

const getTimeBasedFilename = () => {
  const now = new Date(); // 2011-10-05T14:48:00.000Z
  const datetime = now.toISOString().split(".")[0]; // 2011-10-05T14:48:00
  const datetimeNormalized = datetime.replace(/-|:/g, ""); // 20111005T144800
  return `Lerna-Profile-${datetimeNormalized}.json`;
};

/**
 * @typedef {object} ProfilerConfig
 * @property {number} concurrency
 * @property {typeof npmlog} [log]
 * @property {string} [outputDirectory]
 */

/**
 * A profiler to trace execution times across multiple concurrent calls.
 */
class Profiler {
  /**
   * @param {ProfilerConfig} options
   */
  constructor({ concurrency, log = npmlog, outputDirectory }) {
    this.events = [];
    this.logger = log;
    this.outputPath = upath.join(upath.resolve(outputDirectory || "."), getTimeBasedFilename());
    this.threads = range(concurrency);
  }

  run(fn, name) {
    let startTime;
    let threadId;

    return Promise.resolve()
      .then(() => {
        startTime = process.hrtime();
        threadId = this.threads.shift();
      })
      .then(() => fn())
      .then((value) => {
        const duration = process.hrtime(startTime);

        // Trace Event Format documentation:
        // https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview
        const event = {
          name,
          ph: "X",
          ts: hrtimeToMicroseconds(startTime),
          pid: 1,
          tid: threadId,
          dur: hrtimeToMicroseconds(duration),
        };

        this.events.push(event);

        this.threads.unshift(threadId);
        this.threads.sort();

        return value;
      });
  }

  output() {
    return fs
      .outputJson(this.outputPath, this.events)
      .then(() => this.logger.info("profiler", `Performance profile saved to ${this.outputPath}`));
  }
}

module.exports.Profiler = Profiler;

Выполнить команду


Для локальной разработки. Не используйте в интернете!