UNPKG

@studion/infra-code-blocks

Version:
64 lines (63 loc) 3.2 kB
"use strict"; 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}}` : ''}`; }