use of com.thinkbiganalytics.metadata.sla.api.ObligationGroup in project kylo by Teradata.
the class SimpleServiceLevelAssessor method assess.
/*
* (non-Javadoc)
*
* @see
* com.thinkbiganalytics.metadata.sla.spi.ServiceLevelAssessor#assess(com.
* thinkbiganalytics.metadata.sla.api.ServiceLevelAgreement)
*/
@Override
public ServiceLevelAssessment assess(ServiceLevelAgreement sla) {
Log.info("Assessing SLA: {}", sla.getName());
AssessmentResult combinedResult = AssessmentResult.FAILURE;
try {
SimpleServiceLevelAssessment slaAssessment = new SimpleServiceLevelAssessment(sla);
List<ObligationGroup> groups = sla.getObligationGroups();
for (ObligationGroup group : groups) {
ObligationGroup.Condition condition = group.getCondition();
AssessmentResult groupResult = AssessmentResult.SUCCESS;
for (Obligation ob : group.getObligations()) {
ObligationAssessment obAssessment = assess(ob);
slaAssessment.add(obAssessment);
groupResult = groupResult.max(obAssessment.getResult());
}
// Short-circuit required or sufficient if necessary.
switch(condition) {
case REQUIRED:
if (groupResult == AssessmentResult.FAILURE) {
return completeAssessment(slaAssessment, groupResult);
}
break;
case SUFFICIENT:
if (groupResult != AssessmentResult.FAILURE) {
return completeAssessment(slaAssessment, groupResult);
}
break;
default:
}
// Required condition but non-failure, sufficient condition but non-success, or optional condition:
// continue assessing groups and retain the best of the group results.
combinedResult = combinedResult.min(groupResult);
}
return completeAssessment(slaAssessment, combinedResult);
} finally {
Log.debug("Completed assessment of SLA {}: {}", sla.getName(), combinedResult);
}
}
use of com.thinkbiganalytics.metadata.sla.api.ObligationGroup in project kylo by Teradata.
the class ServiceLevelAgreementModelTransform method toModel.
public static com.thinkbiganalytics.metadata.rest.model.sla.ServiceLevelAgreement toModel(ServiceLevelAgreement domain, boolean deep) {
com.thinkbiganalytics.metadata.rest.model.sla.ServiceLevelAgreement sla = new com.thinkbiganalytics.metadata.rest.model.sla.ServiceLevelAgreement(domain.getId().toString(), domain.getName(), domain.getDescription());
if (domain.getSlaChecks() != null) {
List<ServiceLevelAgreementCheck> checks = new ArrayList<>();
sla.setSlaChecks(checks);
for (com.thinkbiganalytics.metadata.sla.spi.ServiceLevelAgreementCheck check : domain.getSlaChecks()) {
ServiceLevelAgreementCheck restModel = new ServiceLevelAgreementCheck();
restModel.setCronSchedule(check.getCronSchedule());
if (deep) {
try {
restModel.setActionConfigurations(check.getActionConfigurations());
} catch (Exception e) {
if (ExceptionUtils.getRootCause(e) instanceof ClassNotFoundException) {
String msg = ExceptionUtils.getRootCauseMessage(e);
// get just the simpleClassName stripping the package info
msg = StringUtils.substringAfterLast(msg, ".");
sla.addSlaCheckError("Unable to find the SLA Action Configurations of type: " + msg + ". Check with an administrator to ensure the correct plugin is installed with this SLA configuration. ");
} else {
throw new RuntimeException(e);
}
}
}
checks.add(restModel);
}
}
if (deep) {
if (domain.getObligationGroups().size() == 1 && domain.getObligationGroups().get(0).getCondition() == ObligationGroup.Condition.REQUIRED) {
for (Obligation domainOb : domain.getObligations()) {
com.thinkbiganalytics.metadata.rest.model.sla.Obligation ob = toModel(domainOb, true);
sla.addObligation(ob);
}
} else {
for (ObligationGroup domainGroup : domain.getObligationGroups()) {
// Force it to be required
// TODO Rework once the SLA page allows for Sufficient/Required settings
// TODO use the domainGroup.condition instead
com.thinkbiganalytics.metadata.rest.model.sla.ObligationGroup group = new com.thinkbiganalytics.metadata.rest.model.sla.ObligationGroup(ObligationGroup.Condition.REQUIRED.name());
for (Obligation domainOb : domainGroup.getObligations()) {
com.thinkbiganalytics.metadata.rest.model.sla.Obligation ob = toModel(domainOb, true);
group.addObligation(ob);
}
sla.addGroup(group);
}
}
}
return sla;
}
use of com.thinkbiganalytics.metadata.sla.api.ObligationGroup in project kylo by Teradata.
the class JpaServiceLevelAssessor method assess.
/**
* Assess the SLA (coming from JCR)
*
* @param sla the SLA to be assessed
*/
public ServiceLevelAssessment assess(ServiceLevelAgreement sla) {
log.info("Assessing SLA: {}", sla.getName());
ServiceLevelAssessment assessment = null;
ServiceLevelAgreement serviceLevelAgreement = sla;
assessment = this.metadataAccess.commit(() -> {
AssessmentResult combinedResult = AssessmentResult.SUCCESS;
try {
// create the new Assessment
JpaServiceLevelAssessment slaAssessment = new JpaServiceLevelAssessment();
slaAssessment.setId(JpaServiceLevelAssessment.SlaAssessmentId.create());
slaAssessment.setAgreement(serviceLevelAgreement);
List<ObligationGroup> groups = sla.getObligationGroups();
for (ObligationGroup group : groups) {
Condition condition = group.getCondition();
AssessmentResult groupResult = AssessmentResult.SUCCESS;
Set<ObligationAssessment> obligationAssessments = new HashSet<>();
log.debug("Assessing obligation group {} with {} obligations", group, group.getObligations().size());
for (Obligation ob : group.getObligations()) {
ObligationAssessment obAssessment = assess(ob, slaAssessment);
obligationAssessments.add(obAssessment);
// slaAssessment.add(obAssessment);
groupResult = groupResult.max(obAssessment.getResult());
}
slaAssessment.setObligationAssessments(obligationAssessments);
// Short-circuit required or sufficient if necessary.
switch(condition) {
case REQUIRED:
if (groupResult == AssessmentResult.FAILURE) {
return completeAssessment(slaAssessment, groupResult);
}
break;
case SUFFICIENT:
if (groupResult != AssessmentResult.FAILURE) {
return completeAssessment(slaAssessment, groupResult);
}
break;
default:
}
// Required condition but non-failure, sufficient condition but non-success, or optional condition:
// continue assessing groups and retain the best of the group results.
combinedResult = combinedResult.max(groupResult);
}
return completeAssessment(slaAssessment, combinedResult);
} finally {
log.debug("Completed assessment of SLA {}: {}", sla.getName(), combinedResult);
}
}, MetadataAccess.SERVICE);
return assessment;
}
use of com.thinkbiganalytics.metadata.sla.api.ObligationGroup in project kylo by Teradata.
the class FeedExecutedSinceFeeds method buildPreconditionObligation.
/**
* Builds the ObligationGroup that holds the metric that will be used to assess if this precondition is met or not
*/
public com.thinkbiganalytics.metadata.rest.model.sla.ObligationGroup buildPreconditionObligation() {
Set<Metric> metrics = new HashSet<>();
for (String categoryAndFeed : categoryAndFeedList) {
FeedExecutedSinceFeed metric = new FeedExecutedSinceFeed(sinceCategoryAndFeedName, categoryAndFeed);
metrics.add(metric);
}
Obligation obligation = new Obligation();
obligation.setMetrics(Lists.newArrayList(metrics));
com.thinkbiganalytics.metadata.rest.model.sla.ObligationGroup group = new com.thinkbiganalytics.metadata.rest.model.sla.ObligationGroup();
group.addObligation(obligation);
group.setCondition(ObligationGroup.Condition.REQUIRED.name());
return group;
}
Aggregations