package com.thinkbiganalytics.jobrepo.query.model; /*- * #%L * thinkbig-job-repository-core * %% * Copyright (C) 2017 ThinkBig Analytics * %% * Licensed 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. * #L% */ import com.fasterxml.jackson.annotation.JsonIgnore; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; /** * Summary object for the Data Confidence jobs * Used in the overview of Kylo in the Data Confidence KPI */ public class DataConfidenceSummary { List<CheckDataJob> latestCheckDataFeeds; private Float confidencePercentage = 0f; private Integer failedCount = 0; private Integer successCount = 0; private Integer totalCount = 0; private Date minCompleteDate; private List<CheckDataJob> failedJobs; private String timeSinceLastCheck; // in minutes private List<String> warnings; private Integer warningTimeThreshold; // in minutes public DataConfidenceSummary() { } public DataConfidenceSummary(List<CheckDataJob> latestCompletedFeeds, Integer warningTimeThreshold) { failedJobs = new ArrayList<CheckDataJob>(); this.latestCheckDataFeeds = latestCompletedFeeds; this.warningTimeThreshold = warningTimeThreshold; this.warnings = new ArrayList<String>(); parse(); } @JsonIgnore private void parse() { if (latestCheckDataFeeds != null && !latestCheckDataFeeds.isEmpty()) { this.totalCount = latestCheckDataFeeds.size(); Date minCompleteDate = null; for (CheckDataJob job : latestCheckDataFeeds) { if (minCompleteDate == null || minCompleteDate.getTime() < job.getEndTime().getMillis()) { minCompleteDate = job.getEndTime().toDate(); } if (job.isValid()) { this.successCount++; } else { this.failedCount++; this.failedJobs.add(job); warnings .add(job.getFeedName() + " failed Validation at " + job.getEndTime() + " because: " + job.getValidationMessage()); } } Date now = new Date(); long duration = now.getTime() - minCompleteDate.getTime(); long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(duration); this.timeSinceLastCheck = diffInMinutes + " min "; if (diffInMinutes == 0) { long diffInSeconds = TimeUnit.MILLISECONDS.toSeconds(duration); this.timeSinceLastCheck = diffInSeconds + " sec "; } this.confidencePercentage = ((float) successCount / totalCount) * 100; if (this.confidencePercentage > 0) { DecimalFormat twoDForm = new DecimalFormat("##.##"); this.confidencePercentage = Float.valueOf(twoDForm.format(this.confidencePercentage)); } if (this.warningTimeThreshold != null && diffInMinutes > this.warningTimeThreshold) { warnings.add(" Warning it has been over " + this.warningTimeThreshold + " minutes since some of the check data jobs have been run"); } this.minCompleteDate = minCompleteDate; } else { warnings.add("No Check Data Jobs Found"); } } public Float getConfidencePercentage() { return confidencePercentage; } public Integer getFailedCount() { return failedCount; } public Integer getSuccessCount() { return successCount; } public Integer getTotalCount() { return totalCount; } public Date getMinCompleteDate() { return minCompleteDate; } public String getTimeSinceLastCheck() { return timeSinceLastCheck; } public List<String> getWarnings() { return warnings; } public Integer getWarningTimeThreshold() { return warningTimeThreshold; } public List<CheckDataJob> getLatestCheckDataFeeds() { return latestCheckDataFeeds; } public void setLatestCheckDataFeeds(List<CheckDataJob> latestCheckDataFeeds) { this.latestCheckDataFeeds = latestCheckDataFeeds; } public List<CheckDataJob> getFailedJobs() { return failedJobs; } public void setFailedJobs(List<CheckDataJob> failedJobs) { this.failedJobs = failedJobs; } }