private Result fetchSonarStatusWithRetries ( URL queryURL , String version ) throws IOException , SonarBreakException { DateTime oneMinuteAgo = DateTime . now ( ) . minusSeconds ( sonarLookBackSeconds ) ; DateTime waitUntil = DateTime . now ( ) . plusSeconds ( waitForProcessingSeconds ) ; do { // If this is the first time the job is running on sonar the URL might not be available. Return null and wait. if ( isURLAvailable ( queryURL , 1 ) ) { Result result = fetchSonarStatus ( queryURL ) ; if ( result . getVersion ( ) . equals ( version ) && result . getDatetime ( ) . isAfter ( oneMinuteAgo ) ) { log . debug ( "Found a sonar job run that matches version and in the correct time frame" ) ; return result ; } String message = String . format ( "Sleeping while waiting for sonar to process job. Target Version: %s. " + "Sonar reporting Version: %s. Looking back until: %s Last result time: %s" , version , result . getVersion ( ) , oneMinuteAgo . toString ( ) , result . getDatetime ( ) . toString ( ) ) ; log . debug ( message ) ; } else { log . debug ( String . format ( "Query url not available yet: %s" , queryURL ) ) ; } try { Thread . sleep ( SONAR_PROCESSING_WAIT_TIME ) ; } catch ( InterruptedException e ) { // Do nothing } } while ( ! waitUntil . isBeforeNow ( ) ) ; String message = String . format ( "Timed out while waiting for Sonar. Waited %d seconds. This time can be extended " + "using the \"waitForProcessingSeconds\" configuration parameter." , waitForProcessingSeconds ) ; throw new SonarBreakException ( message ) ; }
Get the status from sonar for the currently executing build . This waits for sonar to complete its processing before returning the results .