We use a loop that has a pause built in with a specific time interval, say 1 minute. So every minute an iteration occurs, and it checks to see if the deployment activity is complete. If not, it compares the iteration count to a value (say 120 in your case). If the iteration count exceeds the value, then a notification is sent, and the deployment is put is a fail-pause state.
Using this technique, we don't need to query RA for deployment time.
You can extend on this by adding an outer loop that allows for the user to elect "Continue to wait" when fail-pause is reached. This basically just increases the iteration check value by a set amount (say 30) so that if you know it's close, or you can correct the environment issue, your deployment does not need to fail.