require "BuildComm"
require "FileTransferViaFTP"
require "FileTransferViaDirect"
+require "JobLog"
#option parsing
job_error = data[2]
next
end
+
# print log
- puts line
+ category, level, contents = JobLog.parse_log(line)
+ if level < Log::LV_USER then next end
+
+ if category == "INFO" then
+ puts "Info: #{contents}"
+ elsif category == "WARN" then
+ puts "Warn: #{contents}"
+ elsif category == "ERROR" then
+ puts "Error: #{contents}"
+ else
+ next
+ end
end
if not result then
require "Version.rb"
require "Builder.rb"
require "RemoteBuilder.rb"
-require "JobLog.rb"
require "mail.rb"
require "utils.rb"
require "ReverseBuildChecker.rb"
end
- def is_connected?
- return @log.is_connected?
- end
-
-
# return the job is asyncronous job
def is_asynchronous_job?
- if not @log.has_second_out? then
- return true
- else
- return false
- end
+ return true
end
$LOAD_PATH.unshift File.dirname(__FILE__)
$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common"
require "utils.rb"
+require "JobLog.rb"
class CommonJob
# create logger
public
- def create_logger( second_out, verbose = false )
- @log = JobLog.new( self, second_out, verbose )
+ def create_logger( verbose = false )
+ @log = JobLog.new( self, verbose )
return @log
end
# create logger
if @log.nil? then
- @log = JobLog.new(self, nil )
+ @log = JobLog.new(self)
end
@log.info( "Initializing job...", Log::LV_USER)
class JobLog < Log
- def initialize(job, stream_out, verbose = false)
+ def initialize(job, verbose = false)
log_level = (verbose) ? Log::LV_NORMAL : Log::LV_USER
if job.nil? then
super(nil)
super("#{job.server.path}/jobs/#{job.id}/log",log_level)
end
@parent_job=job
- @second_out = stream_out
end
- def set_second_out( out )
- @second_out = out
- end
-
+ def JobLog.parse_log(line)
+ line = line.sub(/^[a-zA-Z], \[.*\][ \t]*/,"")
+ linetok = line.split(" -- : ")
+ if linetok.count != 2 then return "INFO", 1, "" end
+ category = linetok[0]
+ line = linetok[1]
+ level = line[1..1].to_i
+ contents = line[4..-1]
- def close
- # close communication
- if not @second_out.nil? then
- begin
- if not @second_out.closed? then
- BuildCommServer.send_end(@second_out)
- end
- rescue
- end
- BuildCommServer.disconnect(@second_out)
- end
-
- @second_out = nil
+ return category, level, contents
end
-
-
- def is_connected?
- if @second_out.nil? or @second_out.closed? then
- return false
- else
- return true
- end
- end
-
-
- def has_second_out?
- if @second_out.nil? then
- return false
- else
- return true
- end
- end
-
-
- protected
-
- # overide
- def output_extra(msg)
- begin
- if not @second_out.nil? then
- BuildCommServer.send( @second_out, msg )
- end
- rescue
- # close second_out
- @second_out.close
- @second_out = nil
-
- error "Connection closed by remote client"
-
- # cancel parent job
- if not @parent_job.nil? and @parent_job.event == "NONE" then
- @parent_job.event = "CANCEL"
- end
- end
- end
-
end
if job.status == "JUST_CREATED" then
initialize_job( job )
end
-
- # check the connection if job is not asynchronous job
- if ( job.status == "WAITING" or job.status == "REMOTE_WORKING" ) and #or job.status == "PENDING") and
- not job.is_asynchronous_job? and
- not job.is_connected? then
-
- job.status = "ERROR"
- save_job_status(job)
- dispose_job( job )
- @server.log.info "Job \"#{job.id}\" is disconnected by user. Removed!"
- end
end
# reverse build job -> internal job -> normal job
end
+ def set_force_rebuild(value)
+ @sub_jobs.each do |sub|
+ sub.set_force_rebuild(value)
+ end
+ end
+
#
def init
@job_root = "#{@server.path}/jobs/#{@id}"
# create logger
if @log.nil? then
- @log = JobLog.new(self, nil )
+ @log = JobLog.new(self)
end
@log.info( "Initializing job...", Log::LV_USER)
end
- def is_connected?
- return true
- end
-
-
# return the job is asyncronous job
def is_asynchronous_job?
return false
# add job
@server.jobmgr.commit_job(new_job)
# create logger, this step must be done after 'commit'
- new_job.create_logger( nil )
+ new_job.create_logger()
@server.jobmgr.add_job( new_job )
registered_jobs.push new_job
end
require "client.rb"
require "PackageManifest.rb"
require "Version.rb"
-require "JobLog.rb"
require "mail.rb"
require "utils.rb"
require "ReverseBuildChecker.rb"
require "CommonJob.rb"
+require "JobLog.rb"
class RegisterPackageJob < CommonJob
# create logger
if @log.nil? then
- @log = JobLog.new(self, nil )
+ @log = JobLog.new(self)
end
@log.info( "Initializing job...", Log::LV_USER)
end
- def is_connected?
- return true
- end
-
-
# return the job is asyncronous job
def is_asynchronous_job?
return false
end
# write log first
- line = line.sub(/^[a-zA-Z], \[.*\][ \t]*/,"")
- @log.output( line.strip, Log::LV_USER)
+ category, level, contents = JobLog.parse_log(line)
+ if category == "INFO" then
+ @log.info( contents, level )
+ elsif category == "WARN" then
+ @log.warn( contents, level )
+ elsif category == "ERROR" then
+ @log.error( contents, level )
+ else
+ next
+ end
# gather result files if not reverse build
if not is_rev_build and line =~ /Creating package file \.\.\. (.*)/ then
$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/pkg_server"
require "utils.rb"
require "client.rb"
-require "JobLog.rb"
require "PackageManifest.rb"
class ReverseBuildChecker
=end
$LOAD_PATH.unshift File.dirname(__FILE__)
-require "JobLog.rb"
require "BuildComm.rb"
require "BuildServerException.rb"
@parent_server.jobmgr.commit_job(new_job)
# create logger and disconnect client
- new_job.create_logger( nil, false)
+ logger = new_job.create_logger(false)
BuildCommServer.send(req, "=JOB_START,#{new_job.id}")
- BuildCommServer.send(req,"Info: Added new job \"#{new_job.id}\" for #{new_job.os}!")
+ logger.info("Added new job \"#{new_job.id}\" for #{new_job.os}!", Log::LV_USER)
if not @parent_server.job_log_url.empty? then
- BuildCommServer.send(req,"Info: * Log URL : #{@parent_server.job_log_url}/#{new_job.id}/log")
+ logger.info(" * Log URL : #{@parent_server.job_log_url}/#{new_job.id}/log", Log::LV_USER)
end
if async then
+ BuildCommServer.send(req,"Info: Added new job \"#{new_job.id}\" for #{new_job.os}!")
BuildCommServer.send(req,"Info: Above job(s) will be processed asynchronously!")
end
BuildCommServer.send_end(req)
@parent_server.jobmgr.commit_job(new_job)
# set logger
- new_job.create_logger( req )
+ new_job.create_logger()
+
+ BuildCommServer.send_end(req)
+ BuildCommServer.disconnect(req)
# add to job
@parent_server.jobmgr.add_job( new_job )
check_distribution(dist_name, req)
new_job = @parent_server.jobmgr.create_new_register_job( file_path, dist_name )
- new_job.create_logger( req )
+ new_job.create_logger()
+
+ BuildCommServer.send_end(req)
+ BuildCommServer.disconnect(req)
# add
@parent_server.jobmgr.add_job( new_job )
@parent_server.jobmgr.commit_job(new_job)
# create logger and set
- logger = new_job.create_logger(req)
+ logger = new_job.create_logger()
# notify that job has been received
logger.info( "Added new job \"#{new_job.id}\" for #{new_job.os}!", Log::LV_USER)
logger.info( " * Log URL : #{@parent_server.job_log_url}/#{new_job.id}/log", Log::LV_USER)
end
+ BuildCommServer.send_end(req)
+ BuildCommServer.disconnect(req)
+
# add
@parent_server.jobmgr.add_job( new_job )
else
elsif @parent_server.supported_os_list.include?(os) then
result.push os
else
- msgs = "#{os}\n\tSupported OS list.\n"
- @parent_server.supported_os_list.each do |os_name|
- msgs += "\t * #{os_name}\n"
- end
+ msgs = "#{os}... Use a name in (" +
+ @parent_server.supported_os_list.join("|") + ")"
raise BuildServerException.new("ERR003"),msgs
end
end
# execute and write log
IO.popen("#{cmd} 2>&1") do |io|
io.each do |line|
- log.info line
+ log.info "{1} #{line}"
end
end
def initialize(path, lv=LV_USER)
@cnt = 0
@path = path
+ @level = lv
+ @closed = false
if @path.nil? then
@logger = Logger.new(STDOUT)
else
@logger = Logger.new(path, "monthly")
end
- # if log level is bigger/equal to second out level
- # , we will send the log to second-out
- @second_out_level = lv
- @second_out = nil
+
# diable logger format
@default_formatter = @logger.formatter
@no_prefix_formatter = proc do |severity, datetime, progname, msg|
def info(msg, lv=LV_NORMAL)
- if @path.nil? and not @second_out.nil? then puts "Info: #{msg}"
- else @logger.info msg end
- if not @second_out.nil? and lv >= @second_out_level then
- output_extra "Info: " + msg
- end
+ if @path.nil? then puts "Info: #{msg}" else @logger.info "{#{lv}} #{msg}" end
+ output_extra("Info: " + msg, lv)
@cnt = @cnt + 1
end
def warn(msg, lv=LV_NORMAL)
- if @path.nil? and not @second_out.nil? then puts "Warn: #{msg}"
- else @logger.warn msg end
- if not @second_out.nil? and lv >= @second_out_level then
- output_extra "Warn: " + msg
- end
+ if @path.nil? then puts "Warn: #{msg}" else @logger.warn "{#{lv}} #{msg}" end
+ output_extra("Warn: " + msg, lv)
@cnt = @cnt + 1
end
def error(msg, lv=LV_NORMAL)
- if @path.nil? and not @second_out.nil? then puts "Error: #{msg}"
- else @logger.error msg end
- if not @second_out.nil? and lv >= @second_out_level then
- output_extra "Error: " + msg
- end
+ if @path.nil? then puts "Error: #{msg}" else @logger.error "{#{lv}} #{msg}" end
+ output_extra("Error: " + msg, lv)
@cnt = @cnt + 1
end
def output(msg, lv=LV_NORMAL)
- if @path.nil? and not @second_out.nil? then puts msg
- else @logger.info msg end
- if not @second_out.nil? and lv >= @second_out_level then
- output_extra msg
- end
+ if @path.nil? then puts msg else @logger.info "{#{lv}} #{msg}" end
+ output_extra(msg, lv)
@cnt = @cnt + 1
end
def close
- @second_out= nil
+ @closed = true
end
- def is_verbose
- return @second_out_level.eql? Log::LV_NORMAL
- end
+ def is_closed?
+ return @closed
+ end
protected
- def output_extra(msg)
+ def output_extra(msg, lv)
#do nothing
end
end
end
end
+
class StandardOutLog < Log
def initialize(path)
super(path)
- @second_out = $stdout
end
protected
- def output_extra(msg)
- @second_out.puts msg
+ def output_extra(msg, lv)
+ if lv >= @level then
+ $stdout.puts msg
+ end
end
end
$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/common"
$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__))+"/build_server"
require "BuildComm"
-require "packageServerLog"
require "packageServerConfig"
require "distribution"
require "SocketRegisterListener"
require "utils"
require "mail"
require "DistSync"
+require "log"
class PackageServer
attr_accessor :id, :location, :log, :integrity
if not File.exist?( SERVER_ROOT )
FileUtils.mkdir_p( SERVER_ROOT )
end
- @log = PackageServerLog.new( @log_file_path )
+ @log = StandardOutLog.new( @log_file_path )
server_information_initialize()
end
end
def self.list_id
- @@log = PackageServerLog.new("#{SERVER_ROOT}/.log")
+ @@log = StandardOutLog.new("#{SERVER_ROOT}/.log")
d = Dir.new( SERVER_ROOT )
s = d.select {|f| not f.start_with?(".") }
end
def self.list_dist( id )
- @@log = PackageServerLog.new( "#{SERVER_ROOT}/.log" )
+ @@log = StandardOutLog.new( "#{SERVER_ROOT}/.log" )
@@log.output( "=== ID [#{id}]'s distribution list ===", Log::LV_USER)
+++ /dev/null
-=begin
-
- packageServerLog.rb
-
-Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-
-Contact:
-Taejun Ha <taejun.ha@samsung.com>
-Jiil Hyoun <jiil.hyoun@samsung.com>
-Donghyuk Yang <donghyuk.yang@samsung.com>
-DongHee Yang <donghee.yang@samsung.com>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-Contributors:
-- S-Core Co., Ltd
-=end
-
-$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__)) + "/common"
-require "log"
-require "logger"
-
-class PackageServerLog < Log
-
- def initialize(path)
- super(path)
- @second_out = $stdout
- end
-
- protected
- def output_extra(msg)
- @second_out.puts msg
- end
-
-
-end
register Register the package to the build-server.
Subcommand usage:
-build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>] [-U user-email] [-V]
+build-cli build -N <project name> -d <server address> [-o <os>] [-w <password>] [--async] [-D <distribution name>] [-U user-email]
build-cli query -d <server address>
build-cli query-system -d <server address>
build-cli query-project -d <server address>
build-cli query-job -d <server address>
-build-cli query-log -d <server address> -j <job number>
-build-cli cancel -j <job number> -d <server address> [-w <password>]
+build-cli query-log -d <server address> -j <job number> [--output <output file path>]
+build-cli cancel -j <job number> -d <server address> [-w <password>] [-U user-email]
build-cli register -P <package file> -d <server address> [-t <ftp server url>] [-w <password>] [-D <distribution name>] [-U user-email]
Options:
-D, --dist <distribution name> distribution name
-t, --ftp <ftp server url> ftp server url: ftp://dibsftp:dibsftp@127.0.0.1
-U, --user <user email> user email infomation
+--output <output_path> output file path
-V, --verbose verbose mode
-h, --help display help
-v, --version display version
../../build-cli build -N testa -d 127.0.0.1:2223 -o wrong_os_name
#POST-EXEC
#EXPECT
-Error: Unsupported OS name used!: wrong_os_name
-Supported OS list.
-* ubuntu-32
-* windows-32
+Error: Unsupported OS name used!: wrong_os_name... Use a name in (ubuntu-32|windows-32)
cd git01;tar xf b_v4.tar.gz
cd git01;tar xf c_v4.tar.gz
#EXEC
-../../build-svr fullbuild -n testserver3
+../../build-cli build -N testa,testb,testc,testa1,testd -o all --rebuild -d 127.0.0.1:2223 -w ,,1111,,
#POST-EXEC
#EXPECT
+Info: Added new job
Info: Initializing job...
Info: Invoking a thread for MULTI-BUILD Job
Info: New Job
Info: Job is completed!
Info: Job is FINISHED successfully!
Info: Updating the source info for project "UNNAMED
-Info: Receiving log file from remote server...
Info: Receiving file from remote server : a_0.0.1_ubuntu-32.zip
Info: Checking reverse build dependency ...
Info: Uploading ...
Info: Job is completed!
Info: Job is FINISHED successfully!
Info: Updating the source info for project "UNNAMED
-Info: Receiving log file from remote server...
Info: Receiving file from remote server : b_0.0.1_ubuntu-32.zip
Info: Checking reverse build dependency ...
Info: Uploading ...