use of org.apache.sling.hc.api.Result in project sling by apache.
the class ScriptableHealthCheckTest method assertExpression.
private void assertExpression(String expression, String languageExtension, boolean expected) throws Exception {
final ScriptEngine rhino = new ScriptEngineManager().getEngineByExtension("js");
assertNotNull("With the rhino jar in our classpath, we should get a js script engine", rhino);
final ScriptEngineManager manager = Mockito.mock(ScriptEngineManager.class);
Mockito.when(manager.getEngineByExtension(Matchers.same("ecma"))).thenReturn(rhino);
final Field f = hc.getClass().getDeclaredField("scriptEngineManager");
f.setAccessible(true);
f.set(hc, manager);
props.put(ScriptableHealthCheck.PROP_EXPRESSION, expression);
if (languageExtension != null) {
props.put(ScriptableHealthCheck.PROP_LANGUAGE_EXTENSION, languageExtension);
}
Mockito.when(ctx.getProperties()).thenReturn(props);
hc.activate(ctx);
final Result r = hc.execute();
assertEquals("Expecting result " + expected, expected, r.isOk());
}
use of org.apache.sling.hc.api.Result in project sling by apache.
the class HealthCheckExecutorImplTest method testCollectResultsFromFutures.
@Test
public void testCollectResultsFromFutures() throws Exception {
List<HealthCheckFuture> futures = new LinkedList<HealthCheckFuture>();
futures.add(future);
Collection<HealthCheckExecutionResult> results = new TreeSet<HealthCheckExecutionResult>();
when(future.isDone()).thenReturn(true);
ExecutionResult testResult = new ExecutionResult(HealthCheckMetadata, new Result(Result.Status.OK, "test"), 10L);
when(future.get()).thenReturn(testResult);
healthCheckExecutorImpl.collectResultsFromFutures(futures, results);
verify(future, times(1)).get();
assertEquals(1, results.size());
assertTrue(results.contains(testResult));
}
use of org.apache.sling.hc.api.Result in project sling by apache.
the class HealthCheckResultCacheTest method testHealthCheckResultCacheTtl.
@Test
public void testHealthCheckResultCacheTtl() {
//-- test cache miss due to HC TTL
HealthCheckMetadata hcWithTtl = setupHealthCheckMetadata(1, DUR_1_MIN);
ExecutionResult executionResult = spy(new ExecutionResult(hcWithTtl, new Result(Result.Status.OK, "result for hc"), 1));
doReturn(new Date(new Date().getTime() - DUR_2_MIN)).when(executionResult).getFinishedAt();
healthCheckResultCache.updateWith(executionResult);
HealthCheckExecutionResult result = healthCheckResultCache.getValidCacheResult(hcWithTtl, DUR_3_MIN);
// even though global timeout would be ok (2min<3min, the hc timeout of 1min invalidates the result)
assertNull(result);
//-- test cache hit due to HC TTL
hcWithTtl = setupHealthCheckMetadata(2, DUR_3_MIN);
executionResult = spy(new ExecutionResult(hcWithTtl, new Result(Result.Status.OK, "result for hc"), 1));
doReturn(new Date(new Date().getTime() - DUR_2_MIN)).when(executionResult).getFinishedAt();
healthCheckResultCache.updateWith(executionResult);
result = healthCheckResultCache.getValidCacheResult(hcWithTtl, DUR_1_MIN);
// even though global timeout would invalidate this result (1min<2min, the hc timeout of 3min allows the result)
assertEquals(executionResult, result);
//-- test Long.MAX_VALUE
hcWithTtl = setupHealthCheckMetadata(3, Long.MAX_VALUE);
executionResult = spy(new ExecutionResult(hcWithTtl, new Result(Result.Status.OK, "result for hc"), 1));
doReturn(new Date(new Date().getTime() - DUR_4_MIN)).when(executionResult).getFinishedAt();
healthCheckResultCache.updateWith(executionResult);
result = healthCheckResultCache.getValidCacheResult(hcWithTtl, DUR_1_MIN);
assertEquals(executionResult, result);
}
use of org.apache.sling.hc.api.Result in project sling by apache.
the class HealthCheckExecutorServletTest method testDoGetVerboseTxt.
@Test
public void testDoGetVerboseTxt() throws ServletException, IOException {
String testTag = "testTag";
doReturn(testTag).when(request).getParameter(HealthCheckExecutorServlet.PARAM_TAGS.name);
doReturn(HealthCheckExecutorServlet.FORMAT_VERBOSE_TXT).when(request).getParameter(HealthCheckExecutorServlet.PARAM_FORMAT.name);
List<HealthCheckExecutionResult> executionResults = getExecutionResults(Result.Status.WARN);
doReturn(executionResults).when(healthCheckExecutor).execute(selector(new String[] { testTag }, new String[0]), any(HealthCheckExecutionOptions.class));
healthCheckExecutorServlet.doGet(request, response);
verifyZeroInteractions(htmlSerializer);
verifyZeroInteractions(jsonSerializer);
verifyZeroInteractions(txtSerializer);
verify(verboseTxtSerializer).serialize(resultEquals(new Result(Result.Status.WARN, "Overall Status WARN")), eq(executionResults), eq(false));
}
use of org.apache.sling.hc.api.Result in project sling by apache.
the class HealthCheckExecutorServlet method doGet.
protected void doGet(final HttpServletRequest request, final HttpServletResponse response, final String format) throws ServletException, IOException {
HealthCheckSelector selector = HealthCheckSelector.empty();
String pathInfo = request.getPathInfo();
String pathTokensStr = StringUtils.removeStart(splitFormat(pathInfo)[0], "/");
List<String> tags = new ArrayList<String>();
List<String> names = new ArrayList<String>();
if (StringUtils.isNotBlank(pathTokensStr)) {
String[] pathTokens = pathTokensStr.split(PARAM_SPLIT_REGEX);
for (String pathToken : pathTokens) {
if (pathToken.indexOf(' ') >= 0) {
// token contains space. assume it is a name
names.add(pathToken);
} else {
tags.add(pathToken);
}
}
}
if (tags.size() == 0) {
// if not provided via path use parameter or default
tags = Arrays.asList(StringUtils.defaultIfEmpty(request.getParameter(PARAM_TAGS.name), "").split(PARAM_SPLIT_REGEX));
}
selector.withTags(tags.toArray(new String[0]));
if (names.size() == 0) {
// if not provided via path use parameter or default
names = Arrays.asList(StringUtils.defaultIfEmpty(request.getParameter(PARAM_NAMES.name), "").split(PARAM_SPLIT_REGEX));
}
selector.withNames(names.toArray(new String[0]));
final Boolean includeDebug = Boolean.valueOf(request.getParameter(PARAM_INCLUDE_DEBUG.name));
final Map<Result.Status, Integer> statusMapping = request.getParameter(PARAM_HTTP_STATUS.name) != null ? getStatusMapping(request.getParameter(PARAM_HTTP_STATUS.name)) : null;
HealthCheckExecutionOptions executionOptions = new HealthCheckExecutionOptions();
executionOptions.setCombineTagsWithOr(Boolean.valueOf(StringUtils.defaultString(request.getParameter(PARAM_COMBINE_TAGS_WITH_OR.name), "true")));
executionOptions.setForceInstantExecution(Boolean.valueOf(request.getParameter(PARAM_FORCE_INSTANT_EXECUTION.name)));
String overrideGlobalTimeoutVal = request.getParameter(PARAM_OVERRIDE_GLOBAL_TIMEOUT.name);
if (StringUtils.isNumeric(overrideGlobalTimeoutVal)) {
executionOptions.setOverrideGlobalTimeout(Integer.valueOf(overrideGlobalTimeoutVal));
}
List<HealthCheckExecutionResult> executionResults = this.healthCheckExecutor.execute(selector, executionOptions);
Result.Status mostSevereStatus = Result.Status.DEBUG;
for (HealthCheckExecutionResult executionResult : executionResults) {
Status status = executionResult.getHealthCheckResult().getStatus();
if (status.ordinal() > mostSevereStatus.ordinal()) {
mostSevereStatus = status;
}
}
Result overallResult = new Result(mostSevereStatus, "Overall status " + mostSevereStatus);
sendNoCacheHeaders(response);
if (statusMapping != null) {
Integer httpStatus = statusMapping.get(overallResult.getStatus());
response.setStatus(httpStatus);
}
if (FORMAT_HTML.equals(format)) {
sendHtmlResponse(overallResult, executionResults, request, response, includeDebug);
} else if (FORMAT_JSON.equals(format)) {
sendJsonResponse(overallResult, executionResults, null, response, includeDebug);
} else if (FORMAT_JSONP.equals(format)) {
String jsonpCallback = StringUtils.defaultIfEmpty(request.getParameter(PARAM_JSONP_CALLBACK.name), JSONP_CALLBACK_DEFAULT);
sendJsonResponse(overallResult, executionResults, jsonpCallback, response, includeDebug);
} else if (StringUtils.endsWith(format, FORMAT_TXT)) {
sendTxtResponse(overallResult, response, StringUtils.equals(format, FORMAT_VERBOSE_TXT), executionResults, includeDebug);
} else {
response.setContentType("text/plain");
response.getWriter().println("Invalid format " + format + " - supported formats: html|json|jsonp|txt|verbose.txt");
}
}
Aggregations