public BuildRecord storeResult ( BuildTask buildTask , Optional < BuildResult > buildResult , Throwable e ) throws DatastoreException { BuildRecord . Builder buildRecordBuilder = initBuildRecordBuilder ( buildTask ) ; buildRecordBuilder . status ( SYSTEM_ERROR ) ; StringBuilder errorLog = new StringBuilder ( ) ; buildResult . ifPresent ( result -> { result . getRepourResult ( ) . ifPresent ( repourResult -> { buildRecordBuilder . executionRootName ( repourResult . getExecutionRootName ( ) ) ; buildRecordBuilder . executionRootVersion ( repourResult . getExecutionRootVersion ( ) ) ; buildRecordBuilder . repourLog ( repourResult . getLog ( ) ) ; } ) ; result . getBuildDriverResult ( ) . ifPresent ( buildDriverResult -> { errorLog . append ( buildDriverResult . getBuildLog ( ) ) ; errorLog . append ( "\n---- End Build Log ----\n" ) ; } ) ; result . getRepositoryManagerResult ( ) . ifPresent ( rmr -> { errorLog . append ( rmr . getLog ( ) ) ; errorLog . append ( "\n---- End Repository Manager Log ----\n" ) ; } ) ; result . getEnvironmentDriverResult ( ) . ifPresent ( r -> { if ( r . getLog ( ) != null && ! r . getLog ( ) . equals ( "" ) ) errorLog . append ( r . getLog ( ) ) ; errorLog . append ( "\n---- End Environment Driver Log ----\n" ) ; } ) ; } ) ; errorLog . append ( "Build status: " ) . append ( getBuildStatus ( buildResult ) ) . append ( "\n" ) ; errorLog . append ( "Caught exception: " ) . append ( e . toString ( ) ) . append ( "\n" ) ; StringWriter stackTraceWriter = new StringWriter ( ) ; e . printStackTrace ( new PrintWriter ( stackTraceWriter ) ) ; errorLog . append ( stackTraceWriter . getBuffer ( ) ) ; buildRecordBuilder . buildLog ( errorLog . toString ( ) ) ; userLog . error ( "Build status: {}." , getBuildStatus ( buildResult ) ) ; log . debug ( "Storing ERROR result of buildTask.getBuildConfigurationAudited().getName() to datastore." , e ) ; return datastore . storeCompletedBuild ( buildRecordBuilder ) ; }
Store build result along with error information appended to the build log