/** * Existence checker for timeRange * * @see JobExecutionQuery.Fields#timeRange */ public boolean hasTimeRange() { return contains(FIELD_TimeRange); }
if (query.isIncludeJobMetrics()) { try (PreparedStatement jobMetricQueryStatement = connection .prepareStatement(JOB_METRIC_QUERY_STATEMENT_TEMPLATE)) { if (query.hasJobProperties()) { requestedJobPropertyKeys = new HashSet<>(Arrays.asList(query.getJobProperties().split(","))); if (query.isIncludeTaskExecutions()) { TaskExecutionInfoArray taskExecutionInfos = new TaskExecutionInfoArray(); String taskExecutionQuery = TASK_EXECUTION_QUERY_STATEMENT_TEMPLATE; if (query.isIncludeTaskMetrics()) { try (PreparedStatement taskMetricQueryStatement = connection .prepareStatement(TASK_METRIC_QUERY_STATEMENT_TEMPLATE)) { if (query.hasTaskProperties()) { queryTaskPropertyKeys = new HashSet<>(Arrays.asList(query.getTaskProperties().split(",")));
@Override public synchronized List<JobExecutionInfo> get(JobExecutionQuery query) throws IOException { Preconditions.checkArgument(query.hasId() && query.hasIdType()); Optional<Connection> connectionOptional = Optional.absent(); try { Connection connection = connectionOptional.get(); switch (query.getIdType()) { case JOB_ID: return processQueryByIds(connection, query, Filter.MISSING, Lists.newArrayList(query.getId().getString())); case JOB_NAME: return processQueryByJobName(connection, query.getId().getString(), query, Filter.MISSING); case TABLE: return processQueryByTable(connection, query); return processListQuery(connection, query); default: throw new IOException("Unsupported query ID type: " + query.getIdType().name());
private List<JobExecutionInfo> processListQuery(Connection connection, JobExecutionQuery query) throws SQLException { Preconditions.checkArgument(query.getId().isQueryListType()); QueryListType queryType = query.getId().getQueryListType(); String listJobExecutionsQuery = ""; if (queryType == QueryListType.DISTINCT) { listJobExecutionsQuery = LIST_DISTINCT_JOB_EXECUTION_QUERY_TEMPLATE; if (query.hasTimeRange()) { try { timeRangeFilter = constructTimeRangeFilter(query.getTimeRange()); if (timeRangeFilter.isPresent()) { listJobExecutionsQuery += " AND " + timeRangeFilter; int limit = query.getLimit(); if (limit > 0) { queryStatement.setMaxRows(limit);
@Override public JobExecutionQueryResult get(ComplexResourceKey<JobExecutionQuery, EmptyRecord> key) { JobExecutionQuery query = key.getKey(); JobExecutionInfoArray jobExecutionInfos = new JobExecutionInfoArray(); try { for (JobExecutionInfo jobExecutionInfo : this.jobHistoryStore.get(query)) { jobExecutionInfos.add(jobExecutionInfo); } } catch (Throwable t) { LOGGER .error(String.format("Failed to execute query [id = %s, type = %s]", query.getId(), query.getIdType().name()), t); return null; } JobExecutionQueryResult result = new JobExecutionQueryResult(); result.setJobExecutions(jobExecutionInfos); ResourceContext rc = this.getContext(); rc.setResponseHeader("Access-Control-Allow-Origin", "*"); this.setContext(rc); return result; }
if (query.hasTimeRange()) { timeRangeFilter = constructTimeRangeFilter(query.getTimeRange()); if (timeRangeFilter.isPresent()) { jobIdByNameQuery += " AND " + timeRangeFilter; int limit = query.getLimit(); if (limit > 0) { queryStatement.setMaxRows(limit);
private List<JobExecutionInfo> processQueryByTable(Connection connection, JobExecutionQuery query) throws SQLException { Preconditions.checkArgument(query.getId().isTable()); Filter tableFilter = constructTableFilter(query.getId().getTable()); // Construct the query for job names by table definition String jobNameByTableQuery = String.format(JOB_NAME_QUERY_BY_TABLE_STATEMENT_TEMPLATE, tableFilter); List<JobExecutionInfo> jobExecutionInfos = Lists.newArrayList(); // Query job names by table definition try (PreparedStatement queryStatement = connection.prepareStatement(jobNameByTableQuery)) { if (tableFilter.isPresent()) { tableFilter.addParameters(queryStatement, 1); } try (ResultSet rs = queryStatement.executeQuery()) { while (rs.next()) { jobExecutionInfos.addAll(processQueryByJobName(connection, rs.getString(1), query, tableFilter)); } } } return jobExecutionInfos; }
if (jobExecutionInfos.size() > 0) { Set<String> propertyKeys = null; if (query.hasJobProperties()) { propertyKeys = Sets.newHashSet(Iterables.filter(Arrays.asList(query.getJobProperties().split(",")), new Predicate<String>() { @Override
if (taskExecutionInfos.size() > 0) { Set<String> propertyKeys = null; if (query.hasTaskProperties()) { propertyKeys = Sets.newHashSet(Iterables.filter(Arrays.asList(query.getTaskProperties().split(",")), new Predicate<String>() { @Override
@Override public synchronized List<JobExecutionInfo> get(JobExecutionQuery query) throws IOException { Preconditions.checkArgument(query.hasId() && query.hasIdType()); Connection connection = connectionOptional.get(); switch (query.getIdType()) { case JOB_ID: List<JobExecutionInfo> jobExecutionInfos = Lists.newArrayList(); JobExecutionInfo jobExecutionInfo = processQueryById(connection, query.getId().getString(), query, Filter.MISSING); if (jobExecutionInfo != null) { jobExecutionInfos.add(jobExecutionInfo); return processQueryByJobName(connection, query.getId().getString(), query, Filter.MISSING); case TABLE: return processQueryByTable(connection, query); return processListQuery(connection, query); default: throw new IOException("Unsupported query ID type: " + query.getIdType().name());
private List<JobExecutionInfo> processListQuery(Connection connection, JobExecutionQuery query) throws SQLException { Preconditions.checkArgument(query.getId().isQueryListType()); QueryListType queryType = query.getId().getQueryListType(); String listJobExecutionsQuery; if (queryType == QueryListType.DISTINCT) { listJobExecutionsQuery = LIST_DISTINCT_JOB_EXECUTION_QUERY_TEMPLATE; if (query.hasTimeRange()) { try { timeRangeFilter = constructTimeRangeFilter(query.getTimeRange()); if (timeRangeFilter.isPresent()) { listJobExecutionsQuery += " AND " + timeRangeFilter; int limit = query.getLimit(); if (limit > 0) { queryStatement.setMaxRows(limit);
if (query.hasTimeRange()) { filter = constructTimeRangeFilter(query.getTimeRange()); if (filter.isPresent()) { jobIdByNameQuery += " AND " + filter; int limit = query.getLimit(); if (limit > 0) { queryStatement.setMaxRows(limit);
private List<JobExecutionInfo> processQueryByTable(Connection connection, JobExecutionQuery query) throws SQLException { Preconditions.checkArgument(query.getId().isTable()); Filter tableFilter = constructTableFilter(query.getId().getTable()); // Construct the query for job names by table definition String jobNameByTableQuery = String.format(JOB_NAME_QUERY_BY_TABLE_STATEMENT_TEMPLATE, tableFilter.getFilter()); List<JobExecutionInfo> jobExecutionInfos = Lists.newArrayList(); // Query job names by table definition try (PreparedStatement queryStatement = connection.prepareStatement(jobNameByTableQuery)) { if (tableFilter.isPresent()) { tableFilter.addParameters(queryStatement, 1); } try (ResultSet rs = queryStatement.executeQuery()) { while (rs.next()) { jobExecutionInfos.addAll(processQueryByJobName(connection, rs.getString(1), query, tableFilter)); } } return jobExecutionInfos; } }
/** * Existence checker for id * * @see JobExecutionQuery.Fields#id */ public boolean hasId() { return contains(FIELD_Id); }
/** * Existence checker for includeTaskExecutions * * @see JobExecutionQuery.Fields#includeTaskExecutions */ public boolean hasIncludeTaskExecutions() { return contains(FIELD_IncludeTaskExecutions); }
/** * Existence checker for idType * * @see JobExecutionQuery.Fields#idType */ public boolean hasIdType() { return contains(FIELD_IdType); }
/** * Existence checker for jobProperties * * @see JobExecutionQuery.Fields#jobProperties */ public boolean hasJobProperties() { return contains(FIELD_JobProperties); }
/** * Existence checker for includeJobMetrics * * @see JobExecutionQuery.Fields#includeJobMetrics */ public boolean hasIncludeJobMetrics() { return contains(FIELD_IncludeJobMetrics); }
/** * Existence checker for taskProperties * * @see JobExecutionQuery.Fields#taskProperties */ public boolean hasTaskProperties() { return contains(FIELD_TaskProperties); }
/** * Existence checker for limit * * @see JobExecutionQuery.Fields#limit */ public boolean hasLimit() { return contains(FIELD_Limit); }