| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- /*
- * decaffeinate suggestions:
- * DS101: Remove unnecessary use of Array.from
- * DS102: Remove unnecessary code created because of implicit returns
- * DS207: Consider shorter variations of null checks
- * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
- */
- let Metrics;
- console.log("using prometheus");
- const prom = require('./prom_wrapper');
- const {
- collectDefaultMetrics
- } = prom;
- let appname = "unknown";
- const hostname = require('os').hostname();
- const destructors = [];
- require("./uv_threadpool_size");
- module.exports = (Metrics = {
- register: prom.registry,
- initialize(_name, opts) {
- if (opts == null) { opts = {}; }
- appname = _name;
- collectDefaultMetrics({ timeout: 5000, prefix: Metrics.buildPromKey()});
- if (opts.ttlInMinutes) {
- prom.ttlInMinutes = opts.ttlInMinutes;
- }
- console.log(`ENABLE_TRACE_AGENT set to ${process.env['ENABLE_TRACE_AGENT']}`);
- if (process.env['ENABLE_TRACE_AGENT'] === "true") {
- console.log("starting google trace agent");
- const traceAgent = require('@google-cloud/trace-agent');
- const traceOpts =
- {ignoreUrls: [/^\/status/, /^\/health_check/]};
- traceAgent.start(traceOpts);
- }
- console.log(`ENABLE_DEBUG_AGENT set to ${process.env['ENABLE_DEBUG_AGENT']}`);
- if (process.env['ENABLE_DEBUG_AGENT'] === "true") {
- console.log("starting google debug agent");
- const debugAgent = require('@google-cloud/debug-agent');
- debugAgent.start({
- allowExpressions: true,
- serviceContext: {
- service: appname,
- version: process.env['BUILD_VERSION']
- }
- });
- }
- console.log(`ENABLE_PROFILE_AGENT set to ${process.env['ENABLE_PROFILE_AGENT']}`);
- if (process.env['ENABLE_PROFILE_AGENT'] === "true") {
- console.log("starting google profile agent");
- const profiler = require('@google-cloud/profiler');
- profiler.start({
- serviceContext: {
- service: appname,
- version: process.env['BUILD_VERSION']
- }
- });
- }
- return Metrics.inc("process_startup");
- },
- registerDestructor(func) {
- return destructors.push(func);
- },
- injectMetricsRoute(app) {
- return app.get('/metrics', function(req, res) {
- res.set('Content-Type', prom.registry.contentType);
- return res.end(prom.registry.metrics());
- });
- },
- buildPromKey(key){
- if (key == null) { key = ""; }
- return key.replace(/[^a-zA-Z0-9]/g, "_");
- },
- sanitizeValue(value) {
- return parseFloat(value);
- },
- set(key, value, sampleRate){
- if (sampleRate == null) { sampleRate = 1; }
- return console.log("counts are not currently supported");
- },
- inc(key, sampleRate, opts){
- if (sampleRate == null) { sampleRate = 1; }
- if (opts == null) { opts = {}; }
- key = Metrics.buildPromKey(key);
- opts.app = appname;
- opts.host = hostname;
- prom.metric('counter', key).inc(opts);
- if (process.env['DEBUG_METRICS']) {
- return console.log("doing inc", key, opts);
- }
- },
- count(key, count, sampleRate, opts){
- if (sampleRate == null) { sampleRate = 1; }
- if (opts == null) { opts = {}; }
- key = Metrics.buildPromKey(key);
- opts.app = appname;
- opts.host = hostname;
- prom.metric('counter', key).inc(opts, count);
- if (process.env['DEBUG_METRICS']) {
- return console.log("doing count/inc", key, opts);
- }
- },
- summary(key, value, opts){
- if (opts == null) { opts = {}; }
- key = Metrics.buildPromKey(key);
- opts.app = appname;
- opts.host = hostname;
- prom.metric('summary', key).observe(opts, value);
- if (process.env['DEBUG_METRICS']) {
- return console.log("doing summary", key, value, opts);
- }
- },
- timing(key, timeSpan, sampleRate, opts){
- if (opts == null) { opts = {}; }
- key = Metrics.buildPromKey("timer_" + key);
- opts.app = appname;
- opts.host = hostname;
- prom.metric('summary', key).observe(opts, timeSpan);
- if (process.env['DEBUG_METRICS']) {
- return console.log("doing timing", key, opts);
- }
- },
- Timer : class {
- constructor(key, sampleRate, opts){
- if (sampleRate == null) { sampleRate = 1; }
- this.start = new Date();
- key = Metrics.buildPromKey(key);
- this.key = key;
- this.sampleRate = sampleRate;
- this.opts = opts;
- }
- done() {
- const timeSpan = new Date - this.start;
- Metrics.timing(this.key, timeSpan, this.sampleRate, this.opts);
- return timeSpan;
- }
- },
- gauge(key, value, sampleRate, opts){
- if (sampleRate == null) { sampleRate = 1; }
- key = Metrics.buildPromKey(key);
- prom.metric('gauge', key).set({app: appname, host: hostname, status: (opts != null ? opts.status : undefined)}, this.sanitizeValue(value));
- if (process.env['DEBUG_METRICS']) {
- return console.log("doing gauge", key, opts);
- }
- },
- globalGauge(key, value, sampleRate, opts){
- if (sampleRate == null) { sampleRate = 1; }
- key = Metrics.buildPromKey(key);
- return prom.metric('gauge', key).set({app: appname, status: (opts != null ? opts.status : undefined)},this.sanitizeValue(value));
- },
- mongodb: require("./mongodb"),
- http: require("./http"),
- open_sockets: require("./open_sockets"),
- event_loop: require("./event_loop"),
- memory: require("./memory"),
- timeAsyncMethod: require('./timeAsyncMethod'),
- close() {
- return Array.from(destructors).map((func) =>
- func());
- }
- });
|