public AttemptDetailsUI(final JobAttempt jobAttempt, final JobId jobId, final int attemptIndex) { reason = AttemptsUIHelper.constructAttemptReason(jobAttempt.getReason()); result = jobAttempt.getState(); profileUrl = "/profiles/" + jobId.getId() + "?attempt=" + attemptIndex; enqueuedTime = AttemptsHelper.getEnqueuedTime(jobAttempt); planningTime = AttemptsHelper.getPlanningTime(jobAttempt); executionTime = AttemptsHelper.getExecutionTime(jobAttempt); }
public static long getPlanningTime(JobAttempt jobAttempt) { long planningScheduling = Optional.ofNullable(jobAttempt.getDetails().getTimeSpentInPlanning()).orElse(0L); final long enqueuedTime = getEnqueuedTime(jobAttempt); // take into account the fact that JobDetails.timeSpentInPlanning will only be set after the query starts executing planningScheduling = Math.max(planningScheduling, enqueuedTime); return planningScheduling - enqueuedTime; }
@Test public void testGetPlanningTime() { // enqueued job final ResourceSchedulingInfo schedulingInfo = new ResourceSchedulingInfo() .setResourceSchedulingStart(System.currentTimeMillis() - TimeUnit.HOURS.toMillis(3)) .setResourceSchedulingEnd(0L); final JobInfo info = new JobInfo() .setResourceSchedulingInfo(schedulingInfo); final JobAttempt attempt = new JobAttempt() .setInfo(info) .setState(JobState.ENQUEUED) .setDetails(new JobDetails()); assertEquals(0L, AttemptsHelper.getPlanningTime(attempt)); }
@Test public void testGetExecutionTime() { // enqueued job final ResourceSchedulingInfo schedulingInfo = new ResourceSchedulingInfo() .setResourceSchedulingStart(System.currentTimeMillis() - TimeUnit.HOURS.toMillis(3)) .setResourceSchedulingEnd(0L); final JobInfo info = new JobInfo() .setResourceSchedulingInfo(schedulingInfo); final JobAttempt attempt = new JobAttempt() .setInfo(info) .setState(JobState.ENQUEUED) .setDetails(new JobDetails()); assertEquals(0L, AttemptsHelper.getExecutionTime(attempt)); }
@Test public void testGetEnqueuedTime() { // job that has been enqueued for at 3 hours final ResourceSchedulingInfo schedulingInfo = new ResourceSchedulingInfo() .setResourceSchedulingStart(System.currentTimeMillis() - TimeUnit.HOURS.toMillis(3)) .setResourceSchedulingEnd(0L); final JobInfo info = new JobInfo() .setResourceSchedulingInfo(schedulingInfo); final JobAttempt attempt = new JobAttempt() .setInfo(info) .setState(JobState.ENQUEUED); assertTrue("Enqueued job has wrong enqueued time", AttemptsHelper.getEnqueuedTime(attempt) >= TimeUnit.HOURS.toMillis(3)); }
@Test public void testGetEnqueuedTimeFailedJob() { // job that has been enqueued for at 3 hours final ResourceSchedulingInfo schedulingInfo = new ResourceSchedulingInfo() .setResourceSchedulingStart(System.currentTimeMillis() - TimeUnit.HOURS.toMillis(3)) .setResourceSchedulingEnd(0L); final JobInfo info = new JobInfo() .setResourceSchedulingInfo(schedulingInfo); final JobAttempt attempt = new JobAttempt() .setInfo(info) .setState(JobState.FAILED); assertEquals(0L, AttemptsHelper.getEnqueuedTime(attempt)); }