Opened 14 years ago
Last modified 14 years ago
#1140 new Defect
Time Remaining Calculation
| Reported by: | res1233 | Owned by: | romw |
|---|---|---|---|
| Priority: | Undetermined | Milestone: | Undetermined |
| Component: | Manager | Version: | 6.13.1 |
| Keywords: | Cc: |
Description
The calculation for time remaining is wildy inaccurate. I don't know how it's done in the source, but my method seems to return a much more accurate number as the project progresses. At about 50%, the time remaining number stays fairly steady, and doesn't skip massive numbers of seconds like BOINC currently does. I don't know C very well or I would attempt to send a diff, but I have made an app in AppleScript? that uses the boinccmd command for its data. Here's the script:
set curGraphs to {} --list of paragraphs (lines in bounccmd's output)
set curResults to {} --list of results. Each list member contains CPUTime and fractionDone. Pretty self-explanatory.
set finalResults to {} --list of the final results, after calculation and formatting is done on CPUTime and fractionDone to get the amount of time remaining
set x to do shell script "/usr/bin/boinccmd --get_tasks|grep active_task_state:\\ 1 -A 8 -B 13"
repeat with i from 1 to 22000
try
set curGraphs to curGraphs & {paragraphs (i * 22 - 21) through (i * 22) of x}
on error errorMessage
exit repeat
end try
end repeat
get curGraphs
repeat with selCurGraphs in curGraphs
repeat with curItem in selCurGraphs
try
set projName to do shell script "echo " & quoted form of curItem & "|grep name|grep -v WU"
end try
try
set curCPUTime to do shell script "echo " & quoted form of curItem & "|grep \"current CPU time\""
end try
try
set fracDoneString to do shell script "echo " & quoted form of curItem & "|grep \"fraction done\""
exit repeat
end try
end repeat
set formattedName to last word of projName
set CPUTime to last word of curCPUTime
set fractionDone to last word of fracDoneString
set curResults to curResults & {{CPUTime, fractionDone, formattedName}}
end repeat
repeat with curResultList in curResults
--Actual calculations start here
set finalResultsSeconds to ((((1 - (item 2 of curResultList)) / (item 2 of curResultList)) * (item 1 of curResultList)))
set finalResultsHours to (finalResultsSeconds / 60 / 60) div 1
set finalResultsMinutes to ((finalResultsSeconds / 60) div 1) - 60 * finalResultsHours
set finalResultsSeconds to (finalResultsSeconds - 60 * 60 * finalResultsHours - 60 * finalResultsMinutes) div 1
set finalResults to finalResults & {{item 3 of curResultList, (finalResultsHours & ":" & finalResultsMinutes & ":" & finalResultsSeconds) as string}}
end repeat
Most of this code is parsing of boinccmd's output. The actual calculation starts where I indicate. I know I should comment my code more, but AppleScript?'s syntax has always seemed about as clear as any comments I could write... I hope this is of help. The time remaining currently tells me very little as to when the project will actually finish. Run it and see what happens.

To be clear, this is here for the basic syntax so that you can convert it to C. However you guys are getting the current time remaining is clearly wrong, so I hope you can incorporate this into your code.