@studion/infra-code-blocks
Version:
Studion common infra components
64 lines (63 loc) • 3.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getBurnRateQuery = getBurnRateQuery;
exports.getAvailabilityQuery = getAvailabilityQuery;
exports.getAvailabilityPercentageQuery = getAvailabilityPercentageQuery;
exports.getSuccessRateQuery = getSuccessRateQuery;
exports.getSuccessPercentageQuery = getSuccessPercentageQuery;
exports.getPercentileLatencyQuery = getPercentileLatencyQuery;
exports.getLatencyRateQuery = getLatencyRateQuery;
exports.getLatencyPercentageQuery = getLatencyPercentageQuery;
const metricName = 'http_server_duration_milliseconds';
const countPostfix = 'count';
const bucketPostfix = 'bucket';
const httpStatusCodeLabel = 'http_status_code';
function getBurnRateQuery(metricQuery, target) {
return `(1 - ${metricQuery}) / ${(1 - target).toFixed(5)}`;
}
function getAvailabilityQuery(namespace, timeRange) {
const successFilter = `${httpStatusCodeLabel}!~"5.."`;
const successfulRequestsQuery = getCountRate(namespace, timeRange, successFilter);
const totalRequestsQuery = getCountRate(namespace, timeRange);
return `${successfulRequestsQuery} / ${totalRequestsQuery}`;
}
function getAvailabilityPercentageQuery(namespace, timeRange) {
return `${getAvailabilityQuery(namespace, timeRange)} * 100`;
}
function getSuccessRateQuery(namespace, timeRange, filter) {
const successFilter = [`${httpStatusCodeLabel}=~"[2-4].."`, filter].join(',');
const totalFilter = filter;
const successfulRequestsQuery = getCountRate(namespace, timeRange, successFilter);
const totalRequestsQuery = getCountRate(namespace, timeRange, totalFilter);
return `${successfulRequestsQuery} / ${totalRequestsQuery}`;
}
function getSuccessPercentageQuery(namespace, timeRange, filter) {
return `${getSuccessRateQuery(namespace, timeRange, filter)} * 100`;
}
function getPercentileLatencyQuery(namespace, timeRange, percentile, filter) {
const bucketMetric = getMetric(namespace, bucketPostfix, filter);
const bucketRate = `sum by(le) (rate(${bucketMetric}[${timeRange}]))`;
return `histogram_quantile(${percentile}, ${bucketRate})`;
}
function getLatencyRateQuery(namespace, timeRange, threshold, filter) {
const filterWithThreshold = [`le="${threshold}"`, filter]
.filter(it => it != null)
.join(',');
const requestsUnderThreshold = getBucketRate(namespace, timeRange, filterWithThreshold);
const totalRequests = getCountRate(namespace, timeRange, filter);
return `${requestsUnderThreshold} / ${totalRequests}`;
}
function getLatencyPercentageQuery(namespace, timeRange, threshold, filter) {
return `${getLatencyRateQuery(namespace, timeRange, threshold, filter)} * 100`;
}
function getCountRate(namespace, timeRange, filter) {
const countMetric = getMetric(namespace, countPostfix, filter);
return `sum(rate(${countMetric}[${timeRange}]))`;
}
function getBucketRate(namespace, timeRange, filter) {
const bucketMetric = getMetric(namespace, bucketPostfix, filter);
return `sum(rate(${bucketMetric}[${timeRange}]))`;
}
function getMetric(namespace, postfix, filter) {
return `${namespace}_${metricName}_${postfix}${filter ? `{${filter}}` : ''}`;
}