String methodName = "getProjection";
String retVal = "";
try {
WorkItemStateHelper workItemStateHelper = new WorkItemStateHelper(job);
IDuccSchedulingInfo schedulingInfo = job.getSchedulingInfo();
IDuccPerWorkItemStatistics perWorkItemStatistics = schedulingInfo.getPerWorkItemStatistics();
if (perWorkItemStatistics == null) {
return "";
}
int total = schedulingInfo.getIntWorkItemsTotal();
int completed = schedulingInfo.getIntWorkItemsCompleted();
int error = schedulingInfo.getIntWorkItemsError();
int remainingWorkItems = total - (completed + error);
if(remainingWorkItems > 0) {
int usableProcessCount = job.getProcessMap().getUsableProcessCount();
if(usableProcessCount > 0) {
if(completed > 0) {
int threadsPerProcess = schedulingInfo.getIntThreadsPerShare();
int totalThreads = usableProcessCount * threadsPerProcess;
double remainingIterations = remainingWorkItems / totalThreads;
double avgMillis = perWorkItemStatistics.getMean();
double leastOperatingMillis = workItemStateHelper.getLeastOperatingMillis(job);
double mostCompletedMillis = workItemStateHelper.getMostCompletedMillis(job);
double projectedTime = (avgMillis * remainingIterations) + (mostCompletedMillis - leastOperatingMillis);
duccLogger.trace(methodName, job.getDuccId(), "avgMillis:"+avgMillis+" "+"remainingIterations:"+remainingIterations+" "+"mostCompleteMillis:"+mostCompletedMillis+" "+"leastOperatingMillis:"+leastOperatingMillis);
if(projectedTime > 0) {