Search in sources :

Example 31 with Result

use of org.apache.sling.hc.api.Result in project sling by apache.

the class ScriptableHealthCheck method execute.

@Override
public Result execute() {
    final FormattingResultLog resultLog = new FormattingResultLog();
    resultLog.debug("Checking expression [{}], language extension=[{}]", expression, languageExtension);
    try {
        final ScriptEngine engine = scriptEngineManager.getEngineByExtension(languageExtension);
        if (engine == null) {
            resultLog.healthCheckError("No ScriptEngine available for extension {}", languageExtension);
        } else {
            // Set Bindings, with our ResultLog as a binding first, so that other bindings can use it
            final Bindings b = engine.createBindings();
            b.put(FormattingResultLog.class.getName(), resultLog);
            synchronized (bindingsValuesProviders) {
                for (BindingsValuesProvider bvp : bindingsValuesProviders) {
                    log.debug("Adding Bindings provided by {}", bvp);
                    bvp.addBindings(b);
                }
            }
            log.debug("All Bindings added: {}", b.keySet());
            final Object value = engine.eval(expression, b);
            if (value != null && "true".equals(value.toString().toLowerCase())) {
                resultLog.debug("Expression [{}] evaluates to true as expected", expression);
            } else {
                resultLog.warn("Expression [{}] does not evaluate to true as expected, value=[{}]", expression, value);
            }
        }
    } catch (final Exception e) {
        resultLog.healthCheckError("Exception while evaluating expression [{}] with language extension [{}]: {}", expression, languageExtension, e);
    }
    return new Result(resultLog);
}
Also used : BindingsValuesProvider(org.apache.sling.scripting.api.BindingsValuesProvider) FormattingResultLog(org.apache.sling.hc.util.FormattingResultLog) Bindings(javax.script.Bindings) ScriptEngine(javax.script.ScriptEngine) Result(org.apache.sling.hc.api.Result)

Example 32 with Result

use of org.apache.sling.hc.api.Result in project sling by apache.

the class JmxAdjustableStatusForTestingIT method assertResult.

private void assertResult(String tag, Result.Status expected) {
    final Result result = getOverallResult(executor.execute(HealthCheckSelector.tags(tag)));
    assertEquals("Expected status " + expected + " for tag " + tag, expected, result.getStatus());
}
Also used : Result(org.apache.sling.hc.api.Result) HealthCheckExecutionResult(org.apache.sling.hc.api.execution.HealthCheckExecutionResult)

Example 33 with Result

use of org.apache.sling.hc.api.Result in project sling by apache.

the class JmxAdjustableStatusForTestingIT method registerHC.

private void registerHC(final String... tags) {
    final HealthCheck hc = new HealthCheck() {

        @Override
        public Result execute() {
            return new Result(Result.Status.OK, "All good for " + tags[0]);
        }
    };
    final Dictionary<String, Object> props = new Hashtable<String, Object>();
    props.put(HealthCheck.NAME, "name_" + tags[0]);
    props.put(HealthCheck.TAGS, tags);
    regs.add(bundleContext.registerService(HealthCheck.class.getName(), hc, props));
}
Also used : Hashtable(java.util.Hashtable) HealthCheck(org.apache.sling.hc.api.HealthCheck) Result(org.apache.sling.hc.api.Result) HealthCheckExecutionResult(org.apache.sling.hc.api.execution.HealthCheckExecutionResult)

Example 34 with Result

use of org.apache.sling.hc.api.Result in project sling by apache.

the class HealthCheckMBeanTest method testBean.

@Test
public void testBean() throws Exception {
    final ServiceReference ref = new ServiceReference() {

        @Override
        public boolean isAssignableTo(Bundle bundle, String className) {
            return false;
        }

        @Override
        public Bundle[] getUsingBundles() {
            return null;
        }

        @Override
        public String[] getPropertyKeys() {
            return null;
        }

        @Override
        public Object getProperty(String key) {
            return null;
        }

        @Override
        public Bundle getBundle() {
            return null;
        }

        @Override
        public int compareTo(Object reference) {
            return 0;
        }
    };
    final HealthCheckMBean mbean = new HealthCheckMBean(ref, new ExtendedHealthCheckExecutor() {

        @SuppressWarnings("deprecation")
        @Override
        public List<HealthCheckExecutionResult> execute(String... tags) {
            return null;
        }

        @Override
        public HealthCheckExecutionResult execute(ServiceReference ref) {
            // TODO Auto-generated method stub
            return new HealthCheckExecutionResult() {

                @Override
                public Result getHealthCheckResult() {
                    // TODO Auto-generated method stub
                    return testHealthCheck.execute();
                }

                @Override
                public HealthCheckMetadata getHealthCheckMetadata() {
                    // TODO Auto-generated method stub
                    return null;
                }

                @Override
                public Date getFinishedAt() {
                    // TODO Auto-generated method stub
                    return null;
                }

                @Override
                public long getElapsedTimeInMs() {
                    // TODO Auto-generated method stub
                    return 0;
                }

                @Override
                public boolean hasTimedOut() {
                    // TODO Auto-generated method stub
                    return false;
                }
            };
        }

        @SuppressWarnings("deprecation")
        @Override
        public List<HealthCheckExecutionResult> execute(HealthCheckExecutionOptions options, String... tags) {
            return null;
        }

        @Override
        public List<HealthCheckExecutionResult> execute(HealthCheckSelector selector) {
            return null;
        }

        @Override
        public List<HealthCheckExecutionResult> execute(HealthCheckSelector selector, HealthCheckExecutionOptions options) {
            return null;
        }
    });
    final ObjectName name = new ObjectName(OBJECT_NAME);
    jmxServer.registerMBean(mbean, name);
    try {
        resultOk = true;
        assertJmxValue(OBJECT_NAME, "ok", "true", true);
        Thread.sleep(1500);
        resultOk = false;
        assertJmxValue(OBJECT_NAME, "ok", "true", false);
        Thread.sleep(1500);
        assertJmxValue(OBJECT_NAME, "log", "contains message=Result is not ok!", true);
    } finally {
        jmxServer.unregisterMBean(name);
    }
}
Also used : HealthCheckMetadata(org.apache.sling.hc.util.HealthCheckMetadata) Bundle(org.osgi.framework.Bundle) ExtendedHealthCheckExecutor(org.apache.sling.hc.core.impl.executor.ExtendedHealthCheckExecutor) Date(java.util.Date) ServiceReference(org.osgi.framework.ServiceReference) Result(org.apache.sling.hc.api.Result) HealthCheckExecutionResult(org.apache.sling.hc.api.execution.HealthCheckExecutionResult) ObjectName(javax.management.ObjectName) HealthCheckSelector(org.apache.sling.hc.api.execution.HealthCheckSelector) HealthCheckExecutionOptions(org.apache.sling.hc.api.execution.HealthCheckExecutionOptions) List(java.util.List) HealthCheckExecutionResult(org.apache.sling.hc.api.execution.HealthCheckExecutionResult) Test(org.junit.Test)

Example 35 with Result

use of org.apache.sling.hc.api.Result in project sling by apache.

the class HealthCheckResultCacheTest method testHealthCheckResultCache.

@Test
public void testHealthCheckResultCache() {
    HealthCheckMetadata hc1 = setupHealthCheckMetadata(1, HC_TIMEOUT_NOT_SET);
    ExecutionResult executionResult1 = spy(new ExecutionResult(hc1, new Result(Result.Status.OK, "result for hc1"), 1));
    doReturn(new Date(new Date().getTime() - DUR_1_MIN)).when(executionResult1).getFinishedAt();
    healthCheckResultCache.updateWith(executionResult1);
    HealthCheckMetadata hc2 = setupHealthCheckMetadata(2, HC_TIMEOUT_NOT_SET);
    ExecutionResult executionResult2 = spy(new ExecutionResult(hc2, new Result(Result.Status.OK, "result for hc2"), 1));
    doReturn(new Date(new Date().getTime() - DUR_3_MIN)).when(executionResult2).getFinishedAt();
    healthCheckResultCache.updateWith(executionResult2);
    HealthCheckMetadata hc3 = setupHealthCheckMetadata(3, DUR_4_MIN);
    ExecutionResult executionResult3 = spy(new ExecutionResult(hc3, new Result(Result.Status.OK, "result for hc3"), 1));
    doReturn(new Date(new Date().getTime() - DUR_3_MIN)).when(executionResult3).getFinishedAt();
    healthCheckResultCache.updateWith(executionResult3);
    HealthCheckMetadata hc4 = setupHealthCheckMetadata(4, HC_TIMEOUT_NOT_SET);
    // no result for this yet
    List<HealthCheckMetadata> hcList = new ArrayList<HealthCheckMetadata>(Arrays.asList(hc1, hc2, hc3, hc4));
    List<HealthCheckExecutionResult> results = new ArrayList<HealthCheckExecutionResult>();
    healthCheckResultCache.useValidCacheResults(hcList, results, DUR_2_MIN);
    // result too old, left in hcList for later execution
    assertTrue(hcList.contains(hc2));
    // no result was added to cache via updateWith()
    assertTrue(hcList.contains(hc4));
    // true <= result one min old, global timeout 2min
    assertTrue(results.contains(executionResult1));
    // false <= result three min old, global timeout 2min
    assertFalse(results.contains(executionResult2));
    // true <= result one three old, HC timeout 4min
    assertTrue(results.contains(executionResult3));
    // values not found in cache are left in hcList
    assertEquals(2, hcList.size());
    assertEquals(2, results.size());
}
Also used : HealthCheckMetadata(org.apache.sling.hc.util.HealthCheckMetadata) ArrayList(java.util.ArrayList) 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)

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