vulcain-corejs
Version:
Vulcain micro-service framework
90 lines (88 loc) • 5.95 kB
JavaScript
const commandMetricsFactory_1 = require("../metrics/commandMetricsFactory");
const circuitBreaker_1 = require("../command/circuitBreaker");
const actualTime_1 = require("../../utils/actualTime");
const rollingNumberEvent_1 = require("../metrics/hystrix/rollingNumberEvent");
const rx = require("rx");
class HystrixSSEStream {
static toObservable(delay = 2000) {
let observableMetrics = rx.Observable
.interval(delay)
.flatMap(() => {
return rx.Observable.from(commandMetricsFactory_1.CommandMetricsFactory.getAllMetrics());
})
.map((metrics) => {
return HystrixSSEStream.toCommandJson(metrics);
});
return observableMetrics;
}
static toCommandJson(metrics) {
let json = {};
json.type = "HystrixCommand";
json.name = metrics.commandName;
json.group = metrics.commandGroup;
json.currentTime = actualTime_1.default.getCurrentTime();
let circuitBreaker = circuitBreaker_1.CircuitBreakerFactory.get(metrics.commandName);
json.isCircuitBreakerOpen = circuitBreaker.isOpen();
let { totalCount, errorCount, errorPercentage } = metrics.getHealthCounts();
json.errorPercentage = errorPercentage;
json.errorCount = errorCount;
json.requestCount = totalCount;
json.rollingCountFailure = metrics.getRollingCount(rollingNumberEvent_1.default.FAILURE);
json.rollingCountTimeout = metrics.getRollingCount(rollingNumberEvent_1.default.TIMEOUT);
json.rollingCountSuccess = metrics.getRollingCount(rollingNumberEvent_1.default.SUCCESS);
json.rollingCountShortCircuited = metrics.getRollingCount(rollingNumberEvent_1.default.SHORT_CIRCUITED);
json.rollingCountBadRequests = metrics.getRollingCount(rollingNumberEvent_1.default.BAD_REQUEST);
json.rollingCountCollapsedRequests = 0;
json.rollingCountExceptionsThrown = metrics.getRollingCount(rollingNumberEvent_1.default.EXCEPTION_THROWN);
json.rollingCountFallbackFailure = metrics.getRollingCount(rollingNumberEvent_1.default.FALLBACK_FAILURE);
json.rollingCountFallbackRejection = metrics.getRollingCount(rollingNumberEvent_1.default.FALLBACK_REJECTION);
json.rollingCountFallbackSuccess = metrics.getRollingCount(rollingNumberEvent_1.default.FALLBACK_SUCCESS);
json.rollingCountResponsesFromCache = metrics.getRollingCount(rollingNumberEvent_1.default.RESPONSE_FROM_CACHE);
json.rollingCountSemaphoreRejected = metrics.getRollingCount(rollingNumberEvent_1.default.REJECTED);
json.rollingCountThreadPoolRejected = 0;
json.currentConcurrentExecutionCount = metrics.getCurrentExecutionCount();
json.latencyExecute_mean = metrics.getExecutionTime("mean") || 0;
json.latencyExecute = {};
json.latencyExecute["0"] = metrics.getExecutionTime(0) || 0;
json.latencyExecute["25"] = metrics.getExecutionTime(25) || 0;
json.latencyExecute["50"] = metrics.getExecutionTime(50) || 0;
json.latencyExecute["75"] = metrics.getExecutionTime(75) || 0;
json.latencyExecute["90"] = metrics.getExecutionTime(90) || 0;
json.latencyExecute["95"] = metrics.getExecutionTime(95) || 0;
json.latencyExecute["99"] = metrics.getExecutionTime(99) || 0;
json.latencyExecute["99.5"] = metrics.getExecutionTime(99.5) || 0;
json.latencyExecute["100"] = metrics.getExecutionTime(100) || 0;
json.latencyTotal_mean = metrics.getExecutionTime("mean") || 0;
json.latencyTotal = {};
json.latencyTotal["0"] = metrics.getExecutionTime(0) || 0;
json.latencyTotal["25"] = metrics.getExecutionTime(25) || 0;
json.latencyTotal["50"] = metrics.getExecutionTime(50) || 0;
json.latencyTotal["75"] = metrics.getExecutionTime(75) || 0;
json.latencyTotal["90"] = metrics.getExecutionTime(90) || 0;
json.latencyTotal["95"] = metrics.getExecutionTime(95) || 0;
json.latencyTotal["99"] = metrics.getExecutionTime(99) || 0;
json.latencyTotal["99.5"] = metrics.getExecutionTime(99.5) || 0;
json.latencyTotal["100"] = metrics.getExecutionTime(100) || 0;
json.propertyValue_circuitBreakerRequestVolumeThreshold = circuitBreaker.properties.circuitBreakerRequestVolumeThreshold.value;
json.propertyValue_circuitBreakerSleepWindowInMilliseconds = circuitBreaker.properties.circuitBreakerSleepWindowInMilliseconds.value;
json.propertyValue_circuitBreakerErrorThresholdPercentage = circuitBreaker.properties.circuitBreakerErrorThresholdPercentage.value;
json.propertyValue_circuitBreakerForceOpen = false;
json.propertyValue_circuitBreakerForceClosed = false;
json.propertyValue_circuitBreakerEnabled = true;
json.propertyValue_metricsRollingStatisticalWindowInMilliseconds = metrics.metricsRollingStatisticalWindowInMilliseconds;
//json.propertyValue_executionIsolationStrategy = "THREAD";
json.propertyValue_executionIsolationStrategy = 'unknown';
json.propertyValue_executionIsolationThreadTimeoutInMilliseconds = metrics.properties.executionTimeoutInMilliseconds.value;
json.propertyValue_executionIsolationThreadInterruptOnTimeout = 0;
json.propertyValue_executionIsolationThreadPoolKeyOverride = false;
json.propertyValue_executionIsolationSemaphoreMaxConcurrentRequests = metrics.properties.executionIsolationSemaphoreMaxConcurrentRequests.value;
json.propertyValue_fallbackIsolationSemaphoreMaxConcurrentRequests = metrics.properties.fallbackIsolationSemaphoreMaxConcurrentRequests.value;
json.propertyValue_requestCacheEnabled = false;
json.propertyValue_requestLogEnabled = true;
json.reportingHosts = 1;
return JSON.stringify(json);
}
}
exports.HystrixSSEStream = HystrixSSEStream;
//# sourceMappingURL=hystrixSSEStream.js.map
;