/** * Retrieve all jobs * * @param lookupType Query type * @return List of all jobs (limited by results limit) */ public List<JobExecutionInfo> queryAllJobs(QueryListType lookupType, int resultsLimit) throws RemoteInvocationException { JobExecutionQuery query = new JobExecutionQuery(); query.setIdType(QueryIdTypeEnum.LIST_TYPE); query.setId(JobExecutionQuery.Id.create(lookupType)); // Disable properties and task executions (prevents response size from ballooning) query.setJobProperties(ConfigurationKeys.JOB_RUN_ONCE_KEY + "," + ConfigurationKeys.JOB_SCHEDULE_KEY); query.setIncludeTaskExecutions(false); query.setLimit(resultsLimit); return executeQuery(query); }
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; if (!query.isIncludeJobsWithoutTasks()) { jobsWithoutTaskFilter = " WHERE " + FILTER_JOBS_WITH_TASKS; int limit = query.getLimit(); if (limit > 0) { queryStatement.setMaxRows(limit);
@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> processQueryByTable(Connection connection, JobExecutionQuery query) throws SQLException { Preconditions.checkArgument(query.getId().isTable()); Filter tableFilter = constructTableFilter(query.getId().getTable()); String jobsWithoutTaskFilter = ""; if (!query.isIncludeJobsWithoutTasks()) { jobsWithoutTaskFilter = " AND " + FILTER_JOBS_WITH_TASKS; } // Construct the query for job names by table definition String jobNameByTableQuery = String.format(JOB_NAME_QUERY_BY_TABLE_STATEMENT_TEMPLATE, tableFilter.getFilter(), jobsWithoutTaskFilter); 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; } }
@Test(dependsOnMethods = {"testUpdate"}) public void testQueryByJobId() throws IOException { JobExecutionQuery queryByJobId = new JobExecutionQuery(); queryByJobId.setIdType(QueryIdTypeEnum.JOB_ID); queryByJobId.setId(JobExecutionQuery.Id.create(this.expectedJobExecutionInfos.get(0).getJobId())); List<JobExecutionInfo> result = this.jobHistoryStore.get(queryByJobId); Assert.assertEquals(result.size(), 1); JobExecutionInfo actual = result.get(0); JobExecutionInfo expected = this.expectedJobExecutionInfos.get(0); assertJobExecution(actual, expected); }
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 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
@Test(dependsOnMethods = {"testUpdate"}) public void testQueryByJobName() throws IOException { JobExecutionQuery queryByJobName = new JobExecutionQuery(); queryByJobName.setIdType(QueryIdTypeEnum.JOB_NAME); queryByJobName.setId(JobExecutionQuery.Id.create(this.expectedJobExecutionInfos.get(0).getJobName())); List<JobExecutionInfo> result = this.jobHistoryStore.get(queryByJobName); Assert.assertEquals(result.size(), 1); JobExecutionInfo actual = result.get(0); JobExecutionInfo expected = this.expectedJobExecutionInfos.get(0); assertJobExecution(actual, expected); }
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 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; }
private List<JobExecutionInfo> processQueryByTable(Connection connection, JobExecutionQuery query) throws SQLException { Preconditions.checkArgument(query.getId().isTable()); Filter tableFilter = constructTableFilter(query.getId().getTable()); String jobsWithoutTaskFilter = ""; if (!query.isIncludeJobsWithoutTasks()) { jobsWithoutTaskFilter = " AND " + FILTER_JOBS_WITH_TASKS; } // Construct the query for job names by table definition String jobNameByTableQuery = String.format(JOB_NAME_QUERY_BY_TABLE_STATEMENT_TEMPLATE, tableFilter.getFilter(), jobsWithoutTaskFilter); 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 (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
/** * Query jobs by name * * @param name Name of the job to query for * @param resultsLimit Max # of results to return * @return List of jobs with the name (empty list if none can be found) */ public List<JobExecutionInfo> queryByJobName(String name, int resultsLimit) throws RemoteInvocationException { JobExecutionQuery query = new JobExecutionQuery(); query.setIdType(QueryIdTypeEnum.JOB_NAME); query.setId(JobExecutionQuery.Id.create(name)); query.setIncludeTaskExecutions(false); query.setLimit(resultsLimit); return executeQuery(query); }