package pl.touk.sputnik.engine;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.jetbrains.annotations.NotNull;
import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.review.Review;
import pl.touk.sputnik.review.ReviewException;
import pl.touk.sputnik.review.ReviewProcessor;
import pl.touk.sputnik.review.ReviewResult;
@Slf4j
@AllArgsConstructor
public class ReviewRunner {
private static final long THOUSAND = 1000L;
@NotNull private final Review review;
public void review(@NotNull ReviewProcessor processor) {
log.info("Review started for processor {}", processor.getName());
long start = System.currentTimeMillis();
ReviewResult reviewResult = null;
try {
reviewResult = processor.process(review);
} catch (ReviewException e) {
log.error("Processor {} error", processor.getName(), e);
review.addProblem(processor.getName(), ExceptionUtils.getRootCauseMessage(e));
}
log.info("Review finished for processor {}. Took {} s", processor.getName(), (System.currentTimeMillis() - start) / THOUSAND);
if (reviewResult == null) {
log.warn("Review for processor {} returned empty review", processor.getName());
} else {
log.info("Review for processor {} returned {} violations", processor.getName(), reviewResult.getViolations().size());
review.add(processor.getName(), reviewResult);
}
}
}