package com.thinkbiganalytics.metadata.api.jobrepo.nifi;
/*-
* #%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 org.joda.time.DateTime;
import java.util.List;
/**
* A provider with methods to access statistical information about a feed and its job executions
* Statistics are of the type {@link NifiFeedProcessorStats} which are group stats by feed and then by processor
*/
public interface NifiFeedProcessorStatisticsProvider {
/**
* Save a new stats record
*
* @return save the stats record
*/
NifiFeedProcessorStats create(NifiFeedProcessorStats t);
/**
* find statistics within a given start and end time
*
* @return stats within a start and end time
*/
List<? extends NifiFeedProcessorStats> findWithinTimeWindow(DateTime start, DateTime end);
/**
* Find a list of stats for a given feed within a time window grouped by feed and processor
*
* @param feedName a feed name
* @param start a start date
* @param end an end date
* @return a list of feed processor statistics
*/
List<? extends NifiFeedProcessorStats> findFeedProcessorStatisticsByProcessorId(String feedName, DateTime start, DateTime end);
/**
* Find a list of stats for a given feed within a time window grouped by feed and processor
*
* @param feedName a feed name
* @param start a start date
* @param end an end date
* @return a list of feed processor statistics
*/
List<? extends NifiFeedProcessorStats> findFeedProcessorStatisticsByProcessorName(String feedName, DateTime start, DateTime end);
/**
* Find stats for a given feed within a given timeframe grouped by processor id related to the feed
*
* @param feedName the feed name
* @param timeFrame a timeframe to look back
* @return a list of feed processor statistics
*/
List<? extends NifiFeedProcessorStats> findFeedProcessorStatisticsByProcessorId(String feedName, TimeFrame timeFrame);
/**
* Find stats for a given feed within a given timeframe grouped by processor name related to the feed
*
* @param feedName the feed name
* @param timeFrame a timeframe to look back
* @return a list of feed processor statistics
*/
List<? extends NifiFeedProcessorStats> findFeedProcessorStatisticsByProcessorName(String feedName, TimeFrame timeFrame);
/**
* Find stats for a given feed and time frame grouped by the stats eventTime
*
* @return a list of feed processor statistics
*/
List<? extends NifiFeedProcessorStats> findForFeedStatisticsGroupedByTime(String feedName, DateTime start, DateTime end);
/**
* Find stats for a given feed and time frame grouped by the stats eventTime
*
* @return a list of feed processor statistics
*/
List<? extends NifiFeedProcessorStats> findForFeedStatisticsGroupedByTime(String feedName, TimeFrame timeFrame);
/**
* find the max event id processed by kylo
*
* @return the max event id processed by kylo
*/
Long findLastProcessedEventId();
/**
* find the max event id processed by kylo for the given cluster id
* @param clusterNodeId the cluseer node id
* @return the max event id processed by kylo for the given cluster id
*/
Long findLastProcessedEventId(String clusterNodeId);
/**
* Resets the value of the last processed event id for this cluster
* @param clusterNodeId the cluseer node id
* @return the reset value for this (should be 0L)
*/
Long resetLastProcessedEventId(String clusterNodeId);
/**
* allow for specifying a time to look back from when querying for statistical information
*/
public static enum TimeFrame {
ONE_MIN(new Long(1000 * 60), "Last Minute"), THREE_MIN(ONE_MIN.millis * 3, "Last 3 Minutes"), FIVE_MIN(ONE_MIN.millis * 5, "Last 5 Minutes"),
TEN_MIN(new Long(1000 * 60 * 10), "Last 10 Minutes"), THIRTY_MIN(new Long(1000 * 60 * 30), "Last 30 Minutes"),
HOUR(new Long(1000 * 60 * 60), "Last Hour"),
THREE_HOUR(HOUR.millis * 3, "Last 3 Hours"), FIVE_HOUR(HOUR.millis * 5, "Last 5 Hours"), TEN_HOUR(HOUR.millis * 10, "Last 10 Hours"),
DAY(HOUR.millis * 24, " Last Day"), THREE_DAYS(DAY.millis * 3, " Last 3 Days"), WEEK(DAY.millis * 7, "Last Week"), MONTH(DAY.millis * 30, " Last Month"),
THREE_MONTHS(MONTH.millis * 3, " Last 3 Months"), SIX_MONTHS(DAY.millis * (365 / 2), "Last 6 Months"), YEAR(DAY.millis * 365, "Last Year");
protected Long millis;
private String displayName;
private TimeFrame(long millis, String displayName) {
this.millis = millis;
this.displayName = displayName;
}
public String getDisplayName() {
return displayName;
}
public DateTime startTime() {
return DateTime.now().minus(millis);
}
public DateTime startTimeRelativeTo(DateTime dt) {
return dt.minus(millis);
}
}
}