package com.thinkbiganalytics.metadata.api.jobrepo.job;
/*-
* #%L
* thinkbig-operational-metadata-api
* %%
* 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.thinkbiganalytics.metadata.api.jobrepo.nifi.NifiEvent;
import com.thinkbiganalytics.nifi.provenance.model.ProvenanceEventRecordDTO;
import org.joda.time.DateTime;
import org.joda.time.ReadablePeriod;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Set;
/**
* Provider for accessing and creating {@link BatchJobExecution}
*/
public interface BatchJobExecutionProvider extends BatchJobExecutionFilters {
/**
* Execution Context key that determines the type of job {@link com.thinkbiganalytics.metadata.api.feed.OpsManagerFeed.FeedType}
* This is is deprecated and the {@link this#NIFI_KYLO_JOB_TYPE_PROPERTY} should be used instead
*/
@Deprecated
String NIFI_JOB_TYPE_PROPERTY = "tb.jobType";
/**
* Execution Context key that determines the type of job {@link com.thinkbiganalytics.metadata.api.feed.OpsManagerFeed.FeedType}
*/
String NIFI_KYLO_JOB_TYPE_PROPERTY = "kylo.jobType";
/**
* Execution context property name that references the name of the Feed on a job
*/
String NIFI_FEED_PROPERTY = "feed";
/**
* Execution context property name that references the name of the category on a job
*/
String NIFI_CATEGORY_PROPERTY = "category";
/**
* Execution context property name that appends the value of this property to the overall {@link BatchJobExecution#getExitMessage()}
*/
String NIFI_JOB_EXIT_DESCRIPTION_PROPERTY = "kylo.jobExitDescription";
/**
* Create a new job instance record for a provenance event
*
* @return the job execution
*/
BatchJobInstance createJobInstance(ProvenanceEventRecordDTO event);
/**
* save the Provenance event and return the associated job execution
*
* @return the job execution
*/
BatchJobExecution save(ProvenanceEventRecordDTO event, NifiEvent nifiEvent);
/**
* save the Provenance event and return the associated job execution
*
* @return the job execution
*/
BatchJobExecution save(BatchJobExecution jobExecution, ProvenanceEventRecordDTO event, NifiEvent nifiEvent);
/**
* find a job exeuction by its unique key
*
* @return the job execution
*/
BatchJobExecution findByJobExecutionId(Long jobExecutionId);
/**
* save/update a job execution
*
* @return the updated job execution
*/
BatchJobExecution save(BatchJobExecution jobExecution);
/**
* find or create the job execution from the provenance event
* This will create a new job execution if one does not exist for this event using the {@link ProvenanceEventRecordDTO#jobFlowFileId}
*
* @param event a provenance event
* @return the job execution
*/
BatchJobExecution getOrCreateJobExecution(ProvenanceEventRecordDTO event);
/**
* find the job execution from the provenance event
*
* @param event a provenance event
* @return the job execution
*/
BatchJobExecution findJobExecution(ProvenanceEventRecordDTO event);
/**
* Returns all completed JobExecution records that were started since {@code sinceDate}
*
* @return the set of job executions
*/
Set<? extends BatchJobExecution> findJobsForFeedCompletedSince(String feedName, DateTime sinceDate);
/**
* Returns the latest completed job execution for a feed
*
* @return the job execution
*/
BatchJobExecution findLatestCompletedJobForFeed(String feedName);
/**
* Returns the latest job execution of any status for a feed
*
* @return the job execution
*/
BatchJobExecution findLatestJobForFeed(String feedName);
/**
* check if a feed is running
*
* @return true if running, false if not
*/
Boolean isFeedRunning(String feedName);
/**
* find all job executions matching a particular filter string, returning a paged result set
*
* @return a paged result set of job executions matching the filter and pageable criteria
*/
Page<? extends BatchJobExecution> findAll(String filter, Pageable pageable);
/**
* Return a list of job status objects grouped by day
*
* @return a list of job status objects grouped by day
*/
List<JobStatusCount> getJobStatusCountByDate();
/**
* Return a list of job status objects grouped by day using a supplied filter and looking back a specific period
*
* @return a list of job status objects grouped by day since the passed in period
*/
List<JobStatusCount> getJobStatusCountByDateFromNow(ReadablePeriod period, String filter);
/**
* Return a list of job status objects matching a specific filter
*
* @param filter a filter string
* @return a list of job status objects matching a specific filter
*/
List<JobStatusCount> getJobStatusCount(String filter);
/**
* Find all flowFiles that are related to the supplied flow file
*
* @param flowFileId a flowfile id
* @return a list of related flowfile ids
*/
List<String> findRelatedFlowFiles(String flowFileId);
}