[Title] Added time-stamping when job's status changes
authordonghee yang <donghee.yang@samsung.com>
Wed, 17 Apr 2013 16:01:09 +0000 (01:01 +0900)
committerdonghee yang <donghee.yang@samsung.com>
Wed, 17 Apr 2013 16:01:09 +0000 (01:01 +0900)
src/build_server/BuildJob.rb
src/build_server/BuildServer.rb
src/build_server/CommonJob.rb
src/build_server/JobManager.rb
src/build_server/RemoteBuilder.rb

index 91a4ae520d6df80159a859da182c8b9c45a98c39..490e58b97a1594928849f31992876476fae59b63 100644 (file)
@@ -776,25 +776,30 @@ class BuildJob < CommonJob
 
 
        def upload()
-               @log.info( "Uploading ...", Log::LV_USER)
+               begin
+                       add_timestamp("UPLOAD_START")
+                       @log.info( "Uploading ...", Log::LV_USER)
 
-               # get package path list
-               binpkg_path_list = Dir.glob("#{@source_path}/*_*_#{@os}.zip")
+                       # get package path list
+                       binpkg_path_list = Dir.glob("#{@source_path}/*_*_#{@os}.zip")
 
-               # upload
-               u_client = Client.new( @pkgsvr_url, nil, @log )
-               snapshot = u_client.upload( @pkgsvr_ip, @pkgsvr_port, binpkg_path_list, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd, @pkgsvr_password)
+                       # upload
+                       u_client = Client.new( @pkgsvr_url, nil, @log )
+                       snapshot = u_client.upload( @pkgsvr_ip, @pkgsvr_port, binpkg_path_list, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd, @pkgsvr_password)
 
-               if snapshot.nil? then
-                       @log.info( "Upload failed...", Log::LV_USER)
+                       if snapshot.nil? then
+                               @log.info( "Upload failed...", Log::LV_USER)
+                               return false
+                       end
 
-                       return false
-               end
+                       # update local
+                       @log.info( "Upload succeeded. Sync local pkg-server again...", Log::LV_USER)
+                       @pkgsvr_client.update
+                       @log.info("Snapshot: #{snapshot}", Log::LV_USER)
 
-               # update local
-               @log.info( "Upload succeeded. Sync local pkg-server again...", Log::LV_USER)
-               @pkgsvr_client.update
-               @log.info("Snapshot: #{snapshot}", Log::LV_USER)
+               ensure
+                       add_timestamp("UPLOAD_END")
+               end
 
                return true
        end
index a5af347b4a9e33f9934891d1ebd7daffba21c603..ae2e5deac7ce38876b14f0923394c2b61877886d 100644 (file)
@@ -109,7 +109,7 @@ class BuildServer
                @db_dsn = nil
                @db_user = nil
                @db_passwd = nil
-               @db_version = 3
+               @db_version = 4
                @sqlite3_db_mutex = Mutex.new
 
                #DB upgrade SQL command
index 7d4af202a54aafd8196e5c4a53428b17649671b9..283b39f7ff2bcee20bac344cc3f87319580532ed 100644 (file)
@@ -268,6 +268,11 @@ class CommonJob
                        CONSTRAINT fk_jobs_jobs1 FOREIGN KEY ( parent_job_id ) REFERENCES jobs ( id ),
                        CONSTRAINT fk_jobs_sources1 FOREIGN KEY ( source_id ) REFERENCES sources ( id ), 
                        CONSTRAINT fk_jobs_remote_build_servers1 FOREIGN KEY ( remote_build_server_id ) REFERENCES remote_build_servers ( id ) )#{post_fix}"
+               db.do "CREATE TABLE job_timestamps (
+                       id INTEGER PRIMARY KEY #{inc},
+                       job_id INTEGER, 
+                       stamp_name VARCHAR(64), 
+                       stamp_time DATETIME)#{post_fix}"
        end
 
 
@@ -303,6 +308,18 @@ class CommonJob
        end
 
 
+       public
+       def add_timestamp(name)
+               if not @server.has_db? then return end
+
+               now = @server.db_now()
+               @server.get_db_connection() do |db|
+                       db.do "INSERT INTO job_timestamps(job_id,stamp_name,stamp_time)
+                               VALUES (#{@id},'#{name}',#{now})"
+               end
+       end
+
+
        def kill_sub_process()
                if @sub_pid != 0 then
                        if not @log.nil? then
index 68fb7e66127cc9731f84180a7f56ee7c06e9ab7e..e903c82674e1743cc63f3388338cd42a642cbe7d 100644 (file)
@@ -158,6 +158,7 @@ class JobManager
                job.status = "INITIALIZING"
                job.thread = Thread.new do
                        save_job_status(job)
+                       job.add_timestamp("INIT_START")
                        begin
                                # init
                                if not job.init or job.status == "ERROR" then
@@ -171,6 +172,7 @@ class JobManager
                                if job.status == "INITIALIZING" then
                                        job.status = "WAITING"
                                        save_job_status(job)
+                                       job.add_timestamp("INIT_END")
                                end
                                @server.log.info "Checking the job \"#{job.id}\" was finished!"
                        rescue BuildServerException => e
@@ -190,6 +192,7 @@ class JobManager
        def execute(job)
                job.status = "WORKING"
                save_job_status(job)
+               job.add_timestamp("WORK_START")
 
                # start build
                job.execute
@@ -206,6 +209,7 @@ class JobManager
                        # status change & job control
                        job.status = "REMOTE_WORKING"
                        save_job_status(job)
+                       job.add_timestamp("WORK_START")
                        @server.log.info "Moved the job \"#{job.id}\" to remote job list"
                else
                        @server.log.info "Moving the job \"#{job.id}\" to remote failed"
index bc0f6611412d42f117e6f0370277848f09a10c63..260396bf6eba93ed9f7b3e92a992479be9b1f503 100644 (file)
@@ -99,6 +99,7 @@ class RemoteBuilder
                # send local packages if build is invoked from JOB
                if not @job.nil? and not options[:local_pkgs].empty? then
                        begin
+                               @job.add_timestamp("REMOTE_UPLOAD_START")
                                @job.get_remote_server().add_file_transfer()
                                options[:local_pkgs].each do |pkg_path|
                                        @log.info( "Sending file... : #{pkg_path}", Log::LV_USER )
@@ -115,6 +116,7 @@ class RemoteBuilder
                                end
                        ensure
                                @job.get_remote_server().remove_file_transfer()
+                               @job.add_timestamp("REMOTE_UPLOAD_END")
                        end
                end
 
@@ -158,6 +160,7 @@ class RemoteBuilder
 
                # receive binary package if not reverse build
                if options[:save] then
+                       @job.add_timestamp("REMOTE_DOWNLOAD_START") if not @job.nil?
                        result_files.each do |file_name|
                                @log.info( "Receiving file from remote server : #{file_name}", Log::LV_USER )
                                if Utils.is_unix_like_os(Utils::HOST_OS) then
@@ -170,6 +173,7 @@ class RemoteBuilder
                                        return false
                                end
                        end
+                       @job.add_timestamp("REMOTE_DOWNLOAD_END") if not @job.nil?
                end
 
                return true