8.10. Estimating the Amount of Time Left in a Process

Problem

You are running a program that takes a long time to execute, and you need to present the user with an estimated time until completion.

Solution

Use Commons Math’s SimpleRegression and Commons Lang’s StopWatch to create a ProcessEstimator class that can be used to predict when a particular program will be finished. Your program needs to process a number of records, and this program could take a few hours to finish. You would like to provide some feedback, and, if you are confident that each record will take roughly the same amount of time, you can use SimpleRegression’s slope and intercept to estimate the time when all records will be processed. Example 8-1 defines the ProcessEstimator class that combines the power of StopWatch and ProcessEstimator to estimate the time remaining in a process.

Example 8-1. ProcessEstimator to estimate time of program execution

package com.discursive.jccook.math.timeestimate; import org.apache.commons.lang.time.StopWatch; import org.apache.commons.math.stat.multivariate.SimpleRegression; public class ProcessEstimator { private SimpleRegression regression = new SimpleRegression( ); private StopWatch stopWatch = new StopWatch( ); // Total number of units private int units = 0; // Number of units completed private int completed = 0; // Sample rate for regression private int sampleRate = 1; public ProcessEstimator( int numUnits, int sampleRate ) { this.units = numUnits; this.sampleRate = sampleRate; ...

Get Jakarta Commons Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.