blob: bab65a4099bf75fb06912ca7b053b5e100d0fe98 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The SF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package org.apache.sling.hc.core.impl.executor;
import java.text.Collator;
import java.util.Date;
import org.apache.sling.hc.api.HealthCheck;
import org.apache.sling.hc.api.Result;
import org.apache.sling.hc.api.execution.HealthCheckExecutionResult;
import org.apache.sling.hc.util.HealthCheckMetadata;
/**
* The result of executing a {@link HealthCheck}.
*/
public class ExecutionResult implements Comparable<ExecutionResult>, HealthCheckExecutionResult {
private final Result resultFromHC;
private final HealthCheckMetadata metaData;
private final Date finishedAt;
private final long elapsedTimeInMs;
private final boolean timedOut;
/**
* Full constructor
*/
public ExecutionResult(final HealthCheckMetadata metadata,
final Result simpleResult,
final long elapsedTimeInMs,
final boolean timedout) {
this.metaData = metadata;
this.resultFromHC = simpleResult;
this.finishedAt = new Date();
this.timedOut = timedout;
this.elapsedTimeInMs = elapsedTimeInMs;
}
/**
* Shortcut constructor for a result
*/
public ExecutionResult(final HealthCheckMetadata metadata,
final Result simpleResult,
final long elapsedTimeInMs) {
this(metadata, simpleResult, elapsedTimeInMs, false);
}
/**
* Shortcut constructor to create error/timed out result.
*/
public ExecutionResult(final HealthCheckMetadata metadata,
final Result.Status status,
final String errorMessage,
final long elapsedTime, boolean timedOut) {
this(metadata, new Result(status, errorMessage), elapsedTime, timedOut);
}
@Override
public Result getHealthCheckResult() {
return this.resultFromHC;
}
@Override
public String toString() {
return "ExecutionResult [status=" + this.resultFromHC.getStatus() +
", finishedAt=" + finishedAt +
", elapsedTimeInMs=" + elapsedTimeInMs +
", timedOut=" + timedOut +
"]";
}
@Override
public long getElapsedTimeInMs() {
return elapsedTimeInMs;
}
@Override
public HealthCheckMetadata getHealthCheckMetadata() {
return this.metaData;
}
@Override
public Date getFinishedAt() {
return finishedAt;
}
@Override
public boolean hasTimedOut() {
return this.timedOut;
}
/**
* Natural order of results (failed results are sorted before ok results).
*/
@Override
public int compareTo(ExecutionResult otherResult) {
int retVal = otherResult.getHealthCheckResult().getStatus().compareTo(this.getHealthCheckResult().getStatus());
if (retVal == 0) {
retVal = Collator.getInstance().compare(this.getHealthCheckMetadata().getTitle(), otherResult.getHealthCheckMetadata().getTitle());
}
return retVal;
}
long getServiceId() {
return this.metaData.getServiceId();
}
}