[Title] Modified to show error remote log urls
authordonghee yang <donghee.yang@samsung.com>
Fri, 24 Aug 2012 01:55:09 +0000 (10:55 +0900)
committerdonghee yang <donghee.yang@samsung.com>
Fri, 24 Aug 2012 01:55:09 +0000 (10:55 +0900)
src/build_server/BuildJob.rb
src/build_server/MultiBuildJob.rb
src/build_server/RegisterPackageJob.rb
src/build_server/RemoteBuilder.rb
src/build_server/ReverseBuildChecker.rb

index 6e01ea856934f661bbba30a6943fef33ba8ceb92..8d37a474df39797a4bdd952a27fc087fbfbef019 100644 (file)
@@ -510,6 +510,22 @@ class BuildJob
        end
 
 
+       def get_log_url()
+               # only when server support log url
+               if @server.job_log_url.empty? then
+                       return "",""
+               end
+
+               url = "#{@server.job_log_url}/#{@id}/log"
+               # if remote, the file existence must be checked
+               if File.exist? "#{@job_root}/remote_log" then
+                       return url,"#{@server.job_log_url}/#{@id}/remote_log"
+               else
+                       return url,""
+               end
+       end
+
+
        #
        # PROTECTED METHODS
        #
@@ -523,12 +539,15 @@ class BuildJob
                # checking build dependency
                if not @is_remote_job and not @is_internal_job and
                        not check_build_dependency() then
+                       if @is_internal_job then copy_log_file(@server.outgoing_path) end
                        @status = "ERROR"
                        return false
                end
 
                # clean build
                if not build() then
+                       if @is_internal_job then copy_log_file(@server.outgoing_path) end
+
                        @status = "ERROR"
                        return false
                end
@@ -543,6 +562,7 @@ class BuildJob
 
                # copy result files to outgoing path
                if @is_internal_job then
+                       copy_log_file(@server.outgoing_path)
                        copy_result_files(@server.outgoing_path)
                elsif not @parent.nil? and not @is_rev_build_check_job then
                        copy_result_files(@parent.source_path)
@@ -822,6 +842,7 @@ class BuildJob
                        end
                        if not result then
                                @log.error( "Building job failed", Log::LV_USER)
+                               write_log_url()
                                return false
                        end
                end
@@ -873,6 +894,7 @@ class BuildJob
                end
         if not result then
             @log.error( "Building job failed", Log::LV_USER)
+                       write_log_url()
             return false
         end
 
@@ -972,6 +994,7 @@ class BuildJob
                end
                if not result then
                        @log.error( "Building job failed", Log::LV_USER)
+                       write_log_url()
                        return false
                end
 
@@ -1049,6 +1072,16 @@ class BuildJob
        end
 
 
+       def copy_log_file(dst_path)
+               @log.info( "Copying log to #{dst_path}", Log::LV_USER)
+       
+               file = "#{@source_path}/../log"
+               FileUtils.copy_file(file,"#{dst_path}/remote_log")
+       
+               return true
+       end
+
+
        def get_local_package_of_dependency( dep, src_path )
                # use the target os if not specified
                if dep.target_os_list.count != 0 then
@@ -1133,4 +1166,15 @@ class BuildJob
        end
 
 
+       # write web url for log
+       private
+       def write_log_url()
+               url,remote_url = get_log_url()
+               if not url.empty? then
+                       @log.info( " ** Log1: #{url}", Log::LV_USER)
+               end
+               if not remote_url.empty? then
+                       @log.info( " ** Log2: #{remote_url}", Log::LV_USER)
+               end
+       end
 end
index b41bfc7096f277fc5251077becf21df5e759ffb6..de8b437f4cb073f0a4d4cd9f76df915ff1f22f37 100644 (file)
@@ -347,6 +347,15 @@ class MultiBuildJob
        end
 
 
+       def get_log_url()
+               # only when server support log url
+               if @server.job_log_url.empty? then
+                       return "",""
+               end
+
+               return "#{@server.job_log_url}/#{@id}/log",""
+       end
+
        #
        # PROTECTED METHODS
        #
@@ -394,7 +403,8 @@ class MultiBuildJob
                                # check there is some error or cancel
                                if stop_status == "FINISHED" and
                                        (job.status == "ERROR" or job.status == "CANCELED") then
-
+                                       # write url 
+                                       write_log_url(job)
                                        # cancel all other un-finished jobs
                        @sub_jobs.each do |sub|
                                if sub.status != "ERROR" and sub.status != "FINISHED" and 
@@ -454,4 +464,17 @@ class MultiBuildJob
                return true
        end
 
+
+       # write web url for log
+       private
+       def write_log_url(job)
+               url,remote_url = job.get_log_url()
+               if not url.empty? then
+                       @log.info( " ** Log1: #{url}", Log::LV_USER)
+               end
+               if not remote_url.empty? then
+                       @log.info( " ** Log2: #{remote_url}", Log::LV_USER)
+               end
+       end
+
 end
index 83451fd13a277f087bade6c73a1fb8acaf938b6a..6d00fe54662f9779e3a53bbf163799e12be7810f 100644 (file)
@@ -350,6 +350,15 @@ class RegisterPackageJob
        end
 
 
+       def get_log_url()
+               # only when server support log url
+               if @server.job_log_url.empty? then
+                       return "",""
+               end
+
+               return "#{@server.job_log_url}/#{@id}/log",""
+       end
+
        #
        # PROTECTED METHODS
        #
index 1e5bb2a3697c2b806de9a3b69033a53669f3f318..f6e1b8902603fb840e9447471a8e21c9923c81c6 100644 (file)
@@ -51,10 +51,11 @@ class RemoteBuilder
        
        # build
        def build( git_repos, source_path, os, is_rev_build, srcinfo, local_pkgs )
+               @log.info( "Start to build on remote server...", Log::LV_USER )
                # send local packages
                for pkg_path in local_pkgs
                @log.info( "Sending file... : #{pkg_path}", Log::LV_USER )
-                       result = send_binary_package( pkg_path )
+                       result = send_file_to_remote( pkg_path )
                        if not result then
                @log.error( "File transfering failed!", Log::LV_USER )
                                return false
@@ -62,9 +63,15 @@ class RemoteBuilder
                end
 
                # send build request
-               @log.info( "Sending build request to remote server")
+               @log.info( "Sending build request to remote server...", Log::LV_USER )
                result, result_files = send_build_request(git_repos, os,
                        is_rev_build, srcinfo, local_pkgs)
+
+        @log.info( "Receiving log file from remote server...", Log::LV_USER )
+               if not receive_file_from_remote( "#{source_path}/../remote_log" ) then
+               @log.warn( "File transfering failed! : remote_log", Log::LV_USER )
+               end
+
                if not result then
                @log.error( "Building job on remote server failed!", Log::LV_USER )
                        return false
@@ -73,9 +80,9 @@ class RemoteBuilder
                # receive binary package
                for file_name in result_files
                @log.info( "Receiving file from remote server : #{file_name}", Log::LV_USER )
-                       result = receive_binary_package( "#{source_path}/#{file_name}" )
+                       result = receive_file_from_remote( "#{source_path}/#{file_name}" )
                        if not result then
-               @log.error( "File transfering failed!", Log::LV_USER )
+               @log.error( "File transfering failed! : #{file_name}", Log::LV_USER )
                                return false
                        end
                end     
@@ -86,7 +93,8 @@ class RemoteBuilder
 
        # upload binary packages that is need to be overwrite 
        # before remote package
-       def send_binary_package(file_path)
+       protected
+       def send_file_to_remote(file_path)
                # create client
         client = BuildCommClient.create( @addr, @port, @log ) 
         if client.nil? then
@@ -112,6 +120,7 @@ class RemoteBuilder
 
 
        # send build request 
+       protected
        def send_build_request(git_repos, os, is_rev_build, commit,local_pkgs)
                result_files = []
 
@@ -133,6 +142,9 @@ class RemoteBuilder
                rev= is_rev_build ? "YES":"NO"
         if client.send("BUILD|GIT|#{git_repos}||#{os}|NO|YES|#{rev}|#{commit}|#{pkg_list}") then 
             result = client.read_lines do |l|
+                # write log first
+                @log.output( l.strip, Log::LV_USER)
                                # check build result
                 if l.include? "Job is stopped by ERROR" or
                                        l.include? "Error:" then                                           
@@ -146,8 +158,6 @@ class RemoteBuilder
                                        result_files.push file_name
                                end
 
-                # ddd list
-                @log.output( l.strip, Log::LV_USER)                                                    
             end
         end                                                                                            
         
@@ -159,7 +169,8 @@ class RemoteBuilder
 
 
        # receive binary package of remote server
-       def receive_binary_package(file_path)
+       protected
+       def receive_file_from_remote(file_path)
                # create client
         client = BuildCommClient.create( @addr, @port, @log ) 
         if client.nil? then
index bd2d3440d5eea4d2461362217e04f7f785fd87e7..f7aa897c765b77cdcf2c90331227a4613965931f 100644 (file)
@@ -152,6 +152,7 @@ class ReverseBuildChecker
                                        if not is_project_included?(failure_list, rev_prj, rev_os) then
                                                log.info( " * Reverse-build FAIL ... #{rev_prj.name}(#{rev_os}) (#{rev_job.id})", Log::LV_USER)
                                                failure_list.push [ rev_prj, rev_os ]
+                                               write_log_url(log, rev_job)
                                        end
 
                                        #  if "exist on error" cancel all other jobs
@@ -201,4 +202,17 @@ class ReverseBuildChecker
 
                return false
        end 
+
+
+       # write web url for log
+       private
+       def self.write_log_url(log, job)
+               url,remote_url = job.get_log_url()
+               if not url.empty? then
+                       log.info( " ** Log1: #{url}", Log::LV_USER)
+               end
+               if not remote_url.empty? then
+                       log.info( " ** Log2: #{remote_url}", Log::LV_USER)
+               end
+       end
 end