UNPKG

realm-object-server

Version:

Realm Object Server

55 lines 2.78 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const URI = require("urijs"); const superagent = require("superagent"); class PrometheusStatsStorage { constructor(config) { this.prometheusUrl = config.url; } getInstantValues(name, labels) { return __awaiter(this, void 0, void 0, function* () { const query = this.generateQuery(name, labels); const url = new URI(this.prometheusUrl).segment("/api/v1/query").toString(); const response = yield superagent.get(url).query({ query }); if (response.body.status !== "success") { throw new Error("Expected a successful response from Prometheus"); } if (!response.body.data || response.body.data.resultType !== "vector") { throw new Error("Expected a vector response from Prometheus"); } const timeSeries = response.body.data.result; return timeSeries.map(timeSeries => { if (typeof (timeSeries.metric) !== "object") { throw new Error("Expected timeseries from Prometheus to have a metric property"); } if (!Array.isArray(timeSeries.value) || timeSeries.value.length !== 2) { throw new Error("Expected timeseries from Prometheus to have a two element value property"); } return { labels: timeSeries.metric, value: parseFloat(timeSeries.value[1]), }; }); }); } generateQuery(name, labels = {}) { const labelsString = Object.keys(labels).map(metricName => { const value = labels[metricName]; if (value.indexOf('"') !== -1) { throw new Error(`The value for the "${metricName}" must not contain a double-quote (")`); } return `${metricName}="${value}"`; }).join(","); return labelsString.length > 0 ? `${name}{${labelsString}}` : name; } } exports.PrometheusStatsStorage = PrometheusStatsStorage; //# sourceMappingURL=PrometheusStatsStorage.js.map