All Downloads are FREE. Search and download functionalities are using the official Maven repository.

package.dist.src.config.middleware.experimental-metrics-csv-middleware.js Maven / Gradle / Ivy

The newest version!
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ExperimentalMetricsCsvMiddleware = void 0;
const fs = require("fs");
const experimental_metrics_middleware_1 = require("./impl/experimental-metrics-middleware");
class ExperimentalMetricsCsvMiddlewareRequestHandler extends experimental_metrics_middleware_1.ExperimentalMetricsMiddlewareRequestHandler {
    constructor(parent, logger, context, csvPath) {
        super(parent, logger, context);
        this.csvPath = csvPath;
    }
    async emitMetrics(metrics) {
        const csvRow = [
            metrics.momento.numActiveRequestsAtStart,
            metrics.momento.numActiveRequestsAtFinish,
            metrics.momento.requestType,
            metrics.momento.status,
            metrics.momento.startTime,
            metrics.momento.requestBodyTime,
            metrics.momento.endTime,
            metrics.momento.duration,
            metrics.momento.requestSize,
            metrics.momento.responseSize,
            metrics.momento.connectionID,
        ].join(',');
        try {
            await fs.promises.appendFile(this.csvPath, `${csvRow}\n`);
        }
        catch (err) {
            if (err !== null) {
                this.logger.error('Error writing to metrics csv file at path: %s : %s', this.csvPath, err);
            }
        }
    }
}
/**
 * This middleware enables per-request client-side metrics.  Metrics for each
 * request will be written to a CSV file; this file can be analyzed or shared
 * with Momento to diagnose performance issues.
 *
 * The metrics format is currently considered experimental; in a future release,
 * once the format is considered stable, this class will be renamed to remove
 * the Experimental prefix.
 *
 * WARNING: enabling this middleware may have minor performance implications,
 * so enable with caution.
 *
 * WARNING: depending on your request volume, the CSV file size may grow quickly;
 * neither sampling nor file compression / rotation are included at this time
 * (though they may be added in the future).
 *
 * See `advanced.ts` in the examples directory for an example of how to set up
 * your {Configuration} to enable this middleware.
 */
class ExperimentalMetricsCsvMiddleware extends experimental_metrics_middleware_1.ExperimentalMetricsMiddleware {
    constructor(csvPath, loggerFactory) {
        super(loggerFactory, (p, l, c) => new ExperimentalMetricsCsvMiddlewareRequestHandler(p, l, c, csvPath));
        this.csvPath = csvPath;
        fs.writeFileSync(this.csvPath, `${this.fieldNames().join(',')}\n`);
    }
}
exports.ExperimentalMetricsCsvMiddleware = ExperimentalMetricsCsvMiddleware;
ExperimentalMetricsCsvMiddleware.numActiveRequests = 0;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZXJpbWVudGFsLW1ldHJpY3MtY3N2LW1pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29uZmlnL21pZGRsZXdhcmUvZXhwZXJpbWVudGFsLW1ldHJpY3MtY3N2LW1pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUJBQXlCO0FBRXpCLDRGQUlnRDtBQUdoRCxNQUFNLDhDQUErQyxTQUFRLDZFQUEyQztJQUd0RyxZQUNFLE1BQXFDLEVBQ3JDLE1BQXFCLEVBQ3JCLE9BQXdDLEVBQ3hDLE9BQWU7UUFFZixLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFtQztRQUNuRCxNQUFNLE1BQU0sR0FBRztZQUNiLE9BQU8sQ0FBQyxPQUFPLENBQUMsd0JBQXdCO1lBQ3hDLE9BQU8sQ0FBQyxPQUFPLENBQUMseUJBQXlCO1lBQ3pDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVztZQUMzQixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTO1lBQ3pCLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZTtZQUMvQixPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU87WUFDdkIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRO1lBQ3hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVztZQUMzQixPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVk7WUFDNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZO1NBQzdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1osSUFBSTtZQUNGLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUM7U0FDM0Q7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtnQkFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2Ysb0RBQW9ELEVBQ3BELElBQUksQ0FBQyxPQUFPLEVBQ1osR0FBRyxDQUNKLENBQUM7YUFDSDtTQUNGO0lBQ0gsQ0FBQztDQUNGO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQWEsZ0NBQWlDLFNBQVEsK0RBQTZCO0lBS2pGLFlBQVksT0FBZSxFQUFFLGFBQW1DO1FBQzlELEtBQUssQ0FDSCxhQUFhLEVBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ1YsSUFBSSw4Q0FBOEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FDdkUsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JFLENBQUM7O0FBYkgsNEVBY0M7QUFiUSxrREFBaUIsR0FBRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQge01vbWVudG9Mb2dnZXIsIE1vbWVudG9Mb2dnZXJGYWN0b3J5fSBmcm9tICcuLi8uLi8nO1xuaW1wb3J0IHtcbiAgRXhwZXJpbWVudGFsTWV0cmljc01pZGRsZXdhcmUsXG4gIEV4cGVyaW1lbnRhbE1ldHJpY3NNaWRkbGV3YXJlUmVxdWVzdEhhbmRsZXIsXG4gIEV4cGVyaW1lbnRhbFJlcXVlc3RNZXRyaWNzLFxufSBmcm9tICcuL2ltcGwvZXhwZXJpbWVudGFsLW1ldHJpY3MtbWlkZGxld2FyZSc7XG5pbXBvcnQge01pZGRsZXdhcmVSZXF1ZXN0SGFuZGxlckNvbnRleHR9IGZyb20gJy4vbWlkZGxld2FyZSc7XG5cbmNsYXNzIEV4cGVyaW1lbnRhbE1ldHJpY3NDc3ZNaWRkbGV3YXJlUmVxdWVzdEhhbmRsZXIgZXh0ZW5kcyBFeHBlcmltZW50YWxNZXRyaWNzTWlkZGxld2FyZVJlcXVlc3RIYW5kbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjc3ZQYXRoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyZW50OiBFeHBlcmltZW50YWxNZXRyaWNzTWlkZGxld2FyZSxcbiAgICBsb2dnZXI6IE1vbWVudG9Mb2dnZXIsXG4gICAgY29udGV4dDogTWlkZGxld2FyZVJlcXVlc3RIYW5kbGVyQ29udGV4dCxcbiAgICBjc3ZQYXRoOiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIocGFyZW50LCBsb2dnZXIsIGNvbnRleHQpO1xuICAgIHRoaXMuY3N2UGF0aCA9IGNzdlBhdGg7XG4gIH1cblxuICBhc3luYyBlbWl0TWV0cmljcyhtZXRyaWNzOiBFeHBlcmltZW50YWxSZXF1ZXN0TWV0cmljcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNzdlJvdyA9IFtcbiAgICAgIG1ldHJpY3MubW9tZW50by5udW1BY3RpdmVSZXF1ZXN0c0F0U3RhcnQsXG4gICAgICBtZXRyaWNzLm1vbWVudG8ubnVtQWN0aXZlUmVxdWVzdHNBdEZpbmlzaCxcbiAgICAgIG1ldHJpY3MubW9tZW50by5yZXF1ZXN0VHlwZSxcbiAgICAgIG1ldHJpY3MubW9tZW50by5zdGF0dXMsXG4gICAgICBtZXRyaWNzLm1vbWVudG8uc3RhcnRUaW1lLFxuICAgICAgbWV0cmljcy5tb21lbnRvLnJlcXVlc3RCb2R5VGltZSxcbiAgICAgIG1ldHJpY3MubW9tZW50by5lbmRUaW1lLFxuICAgICAgbWV0cmljcy5tb21lbnRvLmR1cmF0aW9uLFxuICAgICAgbWV0cmljcy5tb21lbnRvLnJlcXVlc3RTaXplLFxuICAgICAgbWV0cmljcy5tb21lbnRvLnJlc3BvbnNlU2l6ZSxcbiAgICAgIG1ldHJpY3MubW9tZW50by5jb25uZWN0aW9uSUQsXG4gICAgXS5qb2luKCcsJyk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLnByb21pc2VzLmFwcGVuZEZpbGUodGhpcy5jc3ZQYXRoLCBgJHtjc3ZSb3d9XFxuYCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICAgICdFcnJvciB3cml0aW5nIHRvIG1ldHJpY3MgY3N2IGZpbGUgYXQgcGF0aDogJXMgOiAlcycsXG4gICAgICAgICAgdGhpcy5jc3ZQYXRoLFxuICAgICAgICAgIGVyclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgbWlkZGxld2FyZSBlbmFibGVzIHBlci1yZXF1ZXN0IGNsaWVudC1zaWRlIG1ldHJpY3MuICBNZXRyaWNzIGZvciBlYWNoXG4gKiByZXF1ZXN0IHdpbGwgYmUgd3JpdHRlbiB0byBhIENTViBmaWxlOyB0aGlzIGZpbGUgY2FuIGJlIGFuYWx5emVkIG9yIHNoYXJlZFxuICogd2l0aCBNb21lbnRvIHRvIGRpYWdub3NlIHBlcmZvcm1hbmNlIGlzc3Vlcy5cbiAqXG4gKiBUaGUgbWV0cmljcyBmb3JtYXQgaXMgY3VycmVudGx5IGNvbnNpZGVyZWQgZXhwZXJpbWVudGFsOyBpbiBhIGZ1dHVyZSByZWxlYXNlLFxuICogb25jZSB0aGUgZm9ybWF0IGlzIGNvbnNpZGVyZWQgc3RhYmxlLCB0aGlzIGNsYXNzIHdpbGwgYmUgcmVuYW1lZCB0byByZW1vdmVcbiAqIHRoZSBFeHBlcmltZW50YWwgcHJlZml4LlxuICpcbiAqIFdBUk5JTkc6IGVuYWJsaW5nIHRoaXMgbWlkZGxld2FyZSBtYXkgaGF2ZSBtaW5vciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsXG4gKiBzbyBlbmFibGUgd2l0aCBjYXV0aW9uLlxuICpcbiAqIFdBUk5JTkc6IGRlcGVuZGluZyBvbiB5b3VyIHJlcXVlc3Qgdm9sdW1lLCB0aGUgQ1NWIGZpbGUgc2l6ZSBtYXkgZ3JvdyBxdWlja2x5O1xuICogbmVpdGhlciBzYW1wbGluZyBub3IgZmlsZSBjb21wcmVzc2lvbiAvIHJvdGF0aW9uIGFyZSBpbmNsdWRlZCBhdCB0aGlzIHRpbWVcbiAqICh0aG91Z2ggdGhleSBtYXkgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZSkuXG4gKlxuICogU2VlIGBhZHZhbmNlZC50c2AgaW4gdGhlIGV4YW1wbGVzIGRpcmVjdG9yeSBmb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8gc2V0IHVwXG4gKiB5b3VyIHtDb25maWd1cmF0aW9ufSB0byBlbmFibGUgdGhpcyBtaWRkbGV3YXJlLlxuICovXG5leHBvcnQgY2xhc3MgRXhwZXJpbWVudGFsTWV0cmljc0Nzdk1pZGRsZXdhcmUgZXh0ZW5kcyBFeHBlcmltZW50YWxNZXRyaWNzTWlkZGxld2FyZSB7XG4gIHN0YXRpYyBudW1BY3RpdmVSZXF1ZXN0cyA9IDA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjc3ZQYXRoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY3N2UGF0aDogc3RyaW5nLCBsb2dnZXJGYWN0b3J5OiBNb21lbnRvTG9nZ2VyRmFjdG9yeSkge1xuICAgIHN1cGVyKFxuICAgICAgbG9nZ2VyRmFjdG9yeSxcbiAgICAgIChwLCBsLCBjKSA9PlxuICAgICAgICBuZXcgRXhwZXJpbWVudGFsTWV0cmljc0Nzdk1pZGRsZXdhcmVSZXF1ZXN0SGFuZGxlcihwLCBsLCBjLCBjc3ZQYXRoKVxuICAgICk7XG4gICAgdGhpcy5jc3ZQYXRoID0gY3N2UGF0aDtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuY3N2UGF0aCwgYCR7dGhpcy5maWVsZE5hbWVzKCkuam9pbignLCcpfVxcbmApO1xuICB9XG59XG4iXX0=




© 2015 - 2024 Weber Informatics LLC | Privacy Policy