realm-object-server
Version:
55 lines • 2.78 kB
JavaScript
;
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