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);
}
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());
}
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));
}
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);
}
}
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());
}
Aggregations