From: hataejun Date: Fri, 22 Mar 2013 05:38:09 +0000 (+0900) Subject: [Title] add build-cli query-log command X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=af3685778ff8d03733e5ec08f9721b6b4630a339;p=sdk%2Ftools%2Fsdk-build.git [Title] add build-cli query-log command [Type] [Module] [Priority] [Jira#] [Redmine#] 8188 [Problem] [Cause] [Solution] [TestCase] Change-Id: Id4db16af9b78c6772d6fca727ac5904741861ec2 --- diff --git a/build-cli b/build-cli index e6120db..f700c3a 100755 --- a/build-cli +++ b/build-cli @@ -251,6 +251,26 @@ begin query_job_list( result[0], result[1] ) + when "query-log" + result = Utils.parse_server_addr(option[:domain]) + if result.nil? then + puts "Server address is incorrect. (#{option[:domain]})" + puts "Tune as following format." + puts " :" + exit 1 + end + + client = BuildCommClient.create( result[0], result[1], nil, 0 ) + if client.nil? then + puts "Connection to server failed!" + return nil + end + client.send "LOG|#{option[:job].strip}" + client.read_lines do |line| + puts line + end + client.terminate + when "cancel" result = Utils.parse_server_addr(option[:domain]) if result.nil? then diff --git a/src/build_server/BuildClientOptionParser.rb b/src/build_server/BuildClientOptionParser.rb index d2c98a1..3bdc5d0 100644 --- a/src/build_server/BuildClientOptionParser.rb +++ b/src/build_server/BuildClientOptionParser.rb @@ -37,6 +37,7 @@ class BuildClientUsage QUERY_SYSTEM="build-cli query-system -d " QUERY_PROJECT="build-cli query-project -d " QUERY_JOB="build-cli query-job -d " + QUERY_LOG="build-cli query-log -d -j " CANCEL="build-cli cancel -j -d [-w ] [-U user-email]" REGISTER="build-cli register -P -d [-t ] [-w ] [-D ] [-U user-email]" end @@ -77,6 +78,12 @@ def option_error_check( options ) raise ArgumentError, "Usage: " + BuildClientUsage::QUERY_JOB end + when "query-log" then + if options[:domain].nil? or options[:domain].empty? or + options[:job].nil? or options[:job].empty? then + raise ArgumentError, "Usage: " + BuildClientUsage::QUERY_LOG + end + when "cancel" then if options[:job].nil? or options[:job].empty? or options[:domain].nil? or options[:domain].empty? then @@ -107,6 +114,7 @@ def option_parse + "\t" + "query-system Query system information about build-server." + "\n" \ + "\t" + "query-project Query project information about build-server." + "\n" \ + "\t" + "query-job Query job information about build-server." + "\n" \ + + "\t" + "query-log Query log contents about job in build-server." + "\n" \ + "\t" + "cancel Cancel a building project." + "\n" \ + "\t" + "register Register the package to the build-server." + "\n" \ + "\n" + "Subcommand usage:" + "\n" \ @@ -115,6 +123,7 @@ def option_parse + "\t" + BuildClientUsage::QUERY_SYSTEM + "\n" \ + "\t" + BuildClientUsage::QUERY_PROJECT + "\n" \ + "\t" + BuildClientUsage::QUERY_JOB + "\n" \ + + "\t" + BuildClientUsage::QUERY_LOG + "\n" \ + "\t" + BuildClientUsage::CANCEL + "\n" \ + "\t" + BuildClientUsage::REGISTER + "\n" \ + "\n" + "Options:" + "\n" @@ -206,6 +215,7 @@ def option_parse if cmd.eql? "build" or #cmd.eql? "resolve" or cmd.eql? "query" or cmd.eql? "query-system" or cmd.eql? "query-project" or cmd.eql? "query-job" or + cmd.eql? "query-log" or cmd.eql? "cancel" or cmd.eql? "register" or cmd =~ /(-v)|(--version)/ or diff --git a/src/build_server/BuildServer.rb b/src/build_server/BuildServer.rb index 0d4fbee..6645d0e 100644 --- a/src/build_server/BuildServer.rb +++ b/src/build_server/BuildServer.rb @@ -30,6 +30,7 @@ require 'rubygems' require 'fileutils' require 'dbi' require 'thread' +require 'file/tail' $LOAD_PATH.unshift File.dirname(__FILE__) $LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common" require "SocketJobRequestListener.rb" @@ -781,5 +782,46 @@ class BuildServer end end end + + def query_job_log(job_number, conn) + @log.info "Sending job log : #{job_number}" + + job = nil + (@jobmgr.jobs + @jobmgr.internal_jobs + @jobmgr.reverse_build_jobs).each do |manager_job| + if manager_job.id.eql? job_number then + job = manager_job + end + end + + Thread.new do + job_log_path = File.join(@path, "jobs", job_number, "log") + + if File.exist? job_log_path then + begin + File::Tail::Logfile.open(job_log_path) do |log| + log.tail { |line| + BuildCommServer.send(conn, line) + + if log.eof? and (job.nil? or + job.status.eql? "FINISHED" or + job.status.eql? "ERROR" or + job.status.eql? "CANCELED") then + break + end + } + end + rescue => e + @log.error e.message + @log.error e.backtrace.inspect + end + else + @log.error "Can't find job log file : #{job_log_path}" + BuildCommServer.send(conn, "Can't find job log file : #{job_number}") + end + + BuildCommServer.send_end(conn) + BuildCommServer.disconnect(conn) + end + end end diff --git a/src/build_server/SocketJobRequestListener.rb b/src/build_server/SocketJobRequestListener.rb index a6dbba1..6d921ad 100644 --- a/src/build_server/SocketJobRequestListener.rb +++ b/src/build_server/SocketJobRequestListener.rb @@ -142,6 +142,8 @@ class SocketJobRequestListener handle_cmd_register( req_line, req ) when "MONITOR" handle_cmd_monitor( req_line, req ) + when "LOG" + handle_cmd_log( req_line, req ) when "DOWNLOAD" Thread.new do begin @@ -913,6 +915,23 @@ class SocketJobRequestListener end + # "LOG" + def handle_cmd_log( line, req ) + @log.info "Received REQ: #{line.strip}" + + begin + handle_cmd_log_internal( line, req ) + rescue BuildServerException => e + @log.error(e.message) + BuildCommServer.send(req, e.err_message()) + BuildCommServer.send_end(req) + BuildCommServer.disconnect(req) + end + + @log.info "Handled REQ: #{line.strip}" + end + + def handle_cmd_monitor_internal( line, req ) tok = line.split("|").map { |x| x.strip } if tok.count < 2 then @@ -929,6 +948,17 @@ class SocketJobRequestListener end + def handle_cmd_log_internal( line, req ) + tok = line.split("|").map { |x| x.strip } + if tok.count < 2 then + raise BuildServerException.new("ERR001"), line + end + + job_number = tok[1] + @parent_server.query_job_log(job_number, req) + end + + # "UPLOAD" def handle_cmd_upload( line, req ) @log.info "Received File transfer REQ : #{line}" diff --git a/test/build-server.basic1/build-cli-01.testcase b/test/build-server.basic1/build-cli-01.testcase index 8461051..7602874 100644 --- a/test/build-server.basic1/build-cli-01.testcase +++ b/test/build-server.basic1/build-cli-01.testcase @@ -13,6 +13,7 @@ query Query information about build-server. query-system Query system information about build-server. query-project Query project information about build-server. query-job Query job information about build-server. +query-log Query log contents about job in build-server. cancel Cancel a building project. register Register the package to the build-server. @@ -22,6 +23,7 @@ build-cli query -d build-cli query-system -d build-cli query-project -d build-cli query-job -d +build-cli query-log -d -j build-cli cancel -j -d [-w ] build-cli register -P -d [-t ] [-w ] [-D ] [-U user-email]