Search in sources :

Example 41 with Result

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());
}
Also used : Field(java.lang.reflect.Field) ScriptEngineManager(javax.script.ScriptEngineManager) ScriptEngine(javax.script.ScriptEngine) Result(org.apache.sling.hc.api.Result)

Example 42 with Result

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));
}
Also used : TreeSet(java.util.TreeSet) HealthCheckExecutionResult(org.apache.sling.hc.api.execution.HealthCheckExecutionResult) LinkedList(java.util.LinkedList) HealthCheckExecutionResult(org.apache.sling.hc.api.execution.HealthCheckExecutionResult) Result(org.apache.sling.hc.api.Result) HealthCheckExecutionResult(org.apache.sling.hc.api.execution.HealthCheckExecutionResult) Test(org.junit.Test)

Example 43 with Result

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);
}
Also used : HealthCheckMetadata(org.apache.sling.hc.util.HealthCheckMetadata) HealthCheckExecutionResult(org.apache.sling.hc.api.execution.HealthCheckExecutionResult) Date(java.util.Date) HealthCheckExecutionResult(org.apache.sling.hc.api.execution.HealthCheckExecutionResult) Result(org.apache.sling.hc.api.Result) HealthCheckExecutionResult(org.apache.sling.hc.api.execution.HealthCheckExecutionResult) Test(org.junit.Test)

Example 44 with 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));
}
Also used : HealthCheckExecutionOptions(org.apache.sling.hc.api.execution.HealthCheckExecutionOptions) Matchers.anyString(org.mockito.Matchers.anyString) HealthCheckExecutionResult(org.apache.sling.hc.api.execution.HealthCheckExecutionResult) ExecutionResult(org.apache.sling.hc.core.impl.executor.ExecutionResult) Result(org.apache.sling.hc.api.Result) HealthCheckExecutionResult(org.apache.sling.hc.api.execution.HealthCheckExecutionResult) Test(org.junit.Test)

Example 45 with Result

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");
    }
}
Also used : Status(org.apache.sling.hc.api.Result.Status) ArrayList(java.util.ArrayList) Result(org.apache.sling.hc.api.Result) HealthCheckExecutionResult(org.apache.sling.hc.api.execution.HealthCheckExecutionResult) Status(org.apache.sling.hc.api.Result.Status) HealthCheckSelector(org.apache.sling.hc.api.execution.HealthCheckSelector) HealthCheckExecutionOptions(org.apache.sling.hc.api.execution.HealthCheckExecutionOptions) HealthCheckExecutionResult(org.apache.sling.hc.api.execution.HealthCheckExecutionResult)

Aggregations

Result (org.apache.sling.hc.api.Result)50 HealthCheckExecutionResult (org.apache.sling.hc.api.execution.HealthCheckExecutionResult)25 Test (org.junit.Test)19 FormattingResultLog (org.apache.sling.hc.util.FormattingResultLog)16 HealthCheckExecutionOptions (org.apache.sling.hc.api.execution.HealthCheckExecutionOptions)9 ExecutionResult (org.apache.sling.hc.core.impl.executor.ExecutionResult)9 ArrayList (java.util.ArrayList)8 HealthCheckMetadata (org.apache.sling.hc.util.HealthCheckMetadata)8 Matchers.anyString (org.mockito.Matchers.anyString)8 Date (java.util.Date)7 ServiceReference (org.osgi.framework.ServiceReference)6 HealthCheck (org.apache.sling.hc.api.HealthCheck)5 HealthCheckSelector (org.apache.sling.hc.api.execution.HealthCheckSelector)5 Hashtable (java.util.Hashtable)4 DistributionAgent (org.apache.sling.distribution.agent.DistributionAgent)4 DistributionQueue (org.apache.sling.distribution.queue.DistributionQueue)4 SimpleDateFormat (java.text.SimpleDateFormat)3 HashSet (java.util.HashSet)3 ObjectName (javax.management.ObjectName)3 DistributionQueueEntry (org.apache.sling.distribution.queue.DistributionQueueEntry)3