From 098a13252853d33c2c55ce8afe5a1bec95f5c90a Mon Sep 17 00:00:00 2001 From: donghee yang Date: Thu, 18 Apr 2013 01:01:09 +0900 Subject: [PATCH] [Title] Added time-stamping when job's status changes --- src/build_server/BuildJob.rb | 33 ++++++++++++++++++------------- src/build_server/BuildServer.rb | 2 +- src/build_server/CommonJob.rb | 17 ++++++++++++++++ src/build_server/JobManager.rb | 4 ++++ src/build_server/RemoteBuilder.rb | 4 ++++ 5 files changed, 45 insertions(+), 15 deletions(-) diff --git a/src/build_server/BuildJob.rb b/src/build_server/BuildJob.rb index 91a4ae5..490e58b 100644 --- a/src/build_server/BuildJob.rb +++ b/src/build_server/BuildJob.rb @@ -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 diff --git a/src/build_server/BuildServer.rb b/src/build_server/BuildServer.rb index a5af347..ae2e5de 100644 --- a/src/build_server/BuildServer.rb +++ b/src/build_server/BuildServer.rb @@ -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 diff --git a/src/build_server/CommonJob.rb b/src/build_server/CommonJob.rb index 7d4af20..283b39f 100644 --- a/src/build_server/CommonJob.rb +++ b/src/build_server/CommonJob.rb @@ -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 diff --git a/src/build_server/JobManager.rb b/src/build_server/JobManager.rb index 68fb7e6..e903c82 100644 --- a/src/build_server/JobManager.rb +++ b/src/build_server/JobManager.rb @@ -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" diff --git a/src/build_server/RemoteBuilder.rb b/src/build_server/RemoteBuilder.rb index bc0f661..260396b 100644 --- a/src/build_server/RemoteBuilder.rb +++ b/src/build_server/RemoteBuilder.rb @@ -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 -- 2.34.1