@job_id_mutex = Mutex.new
end
+ #name send_mail
+ #return "YES" when send_mail setted
+ #return "NO" (default or DB conncetion error)
def send_mail
result = nil
- get_db_connection() do |db|
- result = db.select_one("SELECT value FROM server_configs WHERE property = 'send_mail'")[0]
+ begin
+ get_db_connection() do |db|
+ result = db.select_one("SELECT value FROM server_configs WHERE property = 'send_mail'")[0]
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
return (result.nil?) ? "NO" : result
end
def send_mail=(mail)
- get_db_connection() do |db|
- db.do "UPDATE server_configs SET value = '#{mail.strip}' WHERE property = 'send_mail'"
+ begin
+ get_db_connection() do |db|
+ db.do "UPDATE server_configs SET value = '#{mail.strip}' WHERE property = 'send_mail'"
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
end
+ #name keep_time
+ #return keep_time
+ #return 86400 (default or DB conncetion error)
def keep_time
result = nil
- get_db_connection() do |db|
- result = db.select_one("SELECT value FROM server_configs WHERE property = 'keep_time'")[0]
+ begin
+ get_db_connection() do |db|
+ result = db.select_one("SELECT value FROM server_configs WHERE property = 'keep_time'")[0]
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
return (result.nil?) ? 86400 : result.to_i
end
def keep_time=(second)
- get_db_connection() do |db|
- db.do "UPDATE server_configs SET value = '#{second}' WHERE property = 'keep_time'"
+ begin
+ get_db_connection() do |db|
+ db.do "UPDATE server_configs SET value = '#{second}' WHERE property = 'keep_time'"
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
end
+ #name pkg_sync_period
+ #return pkg_sync_period
+ #return 600 (default or DB conncetion error)
def pkg_sync_period
result = nil
- get_db_connection() do |db|
- result = db.select_one("SELECT value FROM server_configs WHERE property = 'pkg_sync_period'")[0]
+ begin
+ get_db_connection() do |db|
+ result = db.select_one("SELECT value FROM server_configs WHERE property = 'pkg_sync_period'")[0]
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
return (result.nil?) ? 600 : result.to_i
end
def pkg_sync_period=(second)
- get_db_connection() do |db|
- db.do "UPDATE server_configs SET value = '#{second}' WHERE property = 'pkg_sync_period'"
+ begin
+ get_db_connection() do |db|
+ db.do "UPDATE server_configs SET value = '#{second}' WHERE property = 'pkg_sync_period'"
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
end
+ #name changelog_check
+ #return chengelog_check flag
+ #return false (default or DB conncetion error)
def changelog_check
result = nil
- get_db_connection() do |db|
- result = db.select_one("SELECT value FROM server_configs WHERE property = 'changelog_check'")[0]
+ begin
+ get_db_connection() do |db|
+ result = db.select_one("SELECT value FROM server_configs WHERE property = 'changelog_check'")[0]
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
return (result.nil?) ? false : result =~ /true/i
end
def changelog_check=(check)
t = check =~ /true/i
- get_db_connection() do |db|
- db.do "UPDATE server_configs SET value = '#{t.to_s}' WHERE property = 'changelog_check'"
+ begin
+ get_db_connection() do |db|
+ db.do "UPDATE server_configs SET value = '#{t.to_s}' WHERE property = 'changelog_check'"
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
end
+ #name job_log_url
+ #return job_log_url
+ #return "" (default or DB conncetion error)
def job_log_url
result = nil
- get_db_connection() do |db|
- result = db.select_one("SELECT value FROM server_configs WHERE property = 'job_log_url'")[0]
+ begin
+ get_db_connection() do |db|
+ result = db.select_one("SELECT value FROM server_configs WHERE property = 'job_log_url'")[0]
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
return (result.nil?) ? "" : result
end
def job_log_url=(url)
- get_db_connection() do |db|
- db.do "UPDATE server_configs SET value = '#{url.strip}' WHERE property = 'job_log_url'"
+ begin
+ get_db_connection() do |db|
+ db.do "UPDATE server_configs SET value = '#{url.strip}' WHERE property = 'job_log_url'"
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
end
def port=(svr_port)
@running_port = svr_port
if has_db? then
- get_db_connection() do |db|
- db.do "UPDATE server_configs SET value = '#{svr_port}' WHERE property = 'port'"
+ begin
+ get_db_connection() do |db|
+ db.do "UPDATE server_configs SET value = '#{svr_port}' WHERE property = 'port'"
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
end
end
def save_id_to_db(id)
- get_db_connection() do |db|
- db.do "UPDATE server_configs SET value = '#{id.strip}' WHERE property = 'id'"
+ begin
+ get_db_connection() do |db|
+ db.do "UPDATE server_configs SET value = '#{id.strip}' WHERE property = 'id'"
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
end
def save_path_to_db(path)
- get_db_connection() do |db|
- db.do "UPDATE server_configs SET value = '#{path.strip}' WHERE property = 'path'"
+ begin
+ get_db_connection() do |db|
+ db.do "UPDATE server_configs SET value = '#{path.strip}' WHERE property = 'path'"
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
end
end
+ # name get_remote_servers
+ # return RemoteBuildServer array
+ # return [] (default or DB conncetion error)
def get_remote_servers()
- get_db_connection() do |db|
- return RemoteBuildServer.load_all(db, self)
+ result = []
+ begin
+ get_db_connection() do |db|
+ result = RemoteBuildServer.load_all(db, self)
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
- return []
+ return result
end
# add new remote friend server
+ # name add_remote_server
+ # return true when remote server add success
+ # return false when remote server already exist or build server is running or DB conncetion error
def add_remote_server( ip, port )
+ result = false
if @status == "RUNNING" then return false end
newsvr = nil
- get_db_connection() do |db|
- rs = RemoteBuildServer.load(ip, port, db, self)
- if not rs.nil? then return false end
- newsvr = RemoteBuildServer.new(ip, port, "", self)
- newsvr.save(db)
+
+ begin
+ get_db_connection() do |db|
+ rs = RemoteBuildServer.load(ip, port, db, self)
+ if rs.nil? then
+ newsvr = RemoteBuildServer.new(ip, port, "", self)
+ newsvr.save(db)
+ @remote_servers.push newsvr
+ result = true
+ end
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
- @remote_servers.push newsvr
- return true
+ return result
end
# remove remote friend server
+ # name remove_remote_server
+ # return true when remote server remove success
+ # return false when remote server not exist or build server is running or DB connection error
def remove_remote_server( ip, port )
+ result = false
if @status == "RUNNING" then return false end
- get_db_connection() do |db|
- rs = RemoteBuildServer.load(ip, port, db)
- if rs.nil? then return false end
- rs.unload(db)
+ begin
+ get_db_connection() do |db|
+ rs = RemoteBuildServer.load(ip, port, db)
+ if not rs.nil? then
+ rs.unload(db)
+ result = true
+ end
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
- return true
+ return result
end
+ # name get_sync_package_servers
+ # return array of {pkgsvr_url => <package server url>, name => <distribution name>}
+ # return [] when package server not exist or DB error occurred
def get_sync_package_servers()
result = []
- get_db_connection() do |db|
- db.select_all("SELECT sync_pkg_servers.pkgsvr_url, distributions.name FROM sync_pkg_servers,distributions WHERE sync_pkg_servers.distribution_id = distributions.id") do |row |
- result.push [row['pkgsvr_url'], row['name']]
+ begin
+ get_db_connection() do |db|
+ db.select_all("SELECT sync_pkg_servers.pkgsvr_url, distributions.name FROM sync_pkg_servers,distributions WHERE sync_pkg_servers.distribution_id = distributions.id") do |row |
+ result.push [row['pkgsvr_url'], row['name']]
+ end
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
end
end
# add new remote pkg server
+ # name add_sync_package_server
+ # return true when add sync package server successed
+ # return false when sync package server already exist or distribution name not matched or DB conncetion error
def add_sync_package_server( url, dist )
- get_db_connection() do |db|
- row = db.select_one("SELECT distributions.id FROM sync_pkg_servers,distributions WHERE sync_pkg_servers.pkgsvr_url='#{url}' and distributions.name='#{dist}' and sync_pkg_servers.distribution_id = distributions.id")
- if not row.nil? then return false end
- row = db.select_one("SELECT id FROM distributions WHERE name='#{dist}'")
- dist_id = row['id']
- db.do "INSERT INTO sync_pkg_servers (pkgsvr_url,period,distribution_id) VALUES('#{url}',600,#{dist_id})"
+ result = false
+ begin
+ get_db_connection() do |db|
+ row = db.select_one("SELECT distributions.id FROM sync_pkg_servers,distributions WHERE sync_pkg_servers.pkgsvr_url='#{url}' and distributions.name='#{dist}' and sync_pkg_servers.distribution_id = distributions.id")
+ if not row.nil? then return false end
+ row = db.select_one("SELECT id FROM distributions WHERE name='#{dist}'")
+ dist_id = row['id']
+ db.do "INSERT INTO sync_pkg_servers (pkgsvr_url,period,distribution_id) VALUES('#{url}',600,#{dist_id})"
+ end
+ result = true
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
- return true
+ return result
end
# remove remote pkg server
+ # name remove_sync_package_server
+ # return true when remove sync package server successed
+ # return false when sync package server not exist when DB conncetion error
def remove_sync_package_server( url, dist )
- get_db_connection() do |db|
- row = db.select_one("SELECT distributions.id FROM sync_pkg_servers,distributions WHERE sync_pkg_servers.pkgsvr_url='#{url}' and distributions.name='#{dist}' and sync_pkg_servers.distribution_id = distributions.id")
- if row.nil? then return false end
- dist_id = row['id']
- db.do("DELETE FROM sync_pkg_servers WHERE pkgsvr_url='#{url}' and distribution_id=#{dist_id}")
+ result = false
+ begin
+ get_db_connection() do |db|
+ row = db.select_one("SELECT distributions.id FROM sync_pkg_servers,distributions WHERE sync_pkg_servers.pkgsvr_url='#{url}' and distributions.name='#{dist}' and sync_pkg_servers.distribution_id = distributions.id")
+ if row.nil? then return false end
+ dist_id = row['id']
+ db.do("DELETE FROM sync_pkg_servers WHERE pkgsvr_url='#{url}' and distribution_id=#{dist_id}")
+ end
+ result = true
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
- return true
+ return result
end
+ # name supported_os_list
+ # return array of os name [<os name>, ... ]
+ # return [] when DB error occurred
def supported_os_list
result = []
- get_db_connection() do |db|
- db.select_all("SELECT * FROM supported_os") do |row |
- result.push row['name']
+ begin
+ get_db_connection() do |db|
+ db.select_all("SELECT * FROM supported_os") do |row |
+ result.push row['name']
+ end
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
end
end
# add new target OS.
- # If already exist, return false , otherwise true
+ # name add_supported_os
+ # return true when add supported os successed
+ # return false when supported os already exist or DB connection error
def add_supported_os( os_name )
+ result = false
os_category = Utils.get_os_category( os_name )
if os_category.nil? then return false end
- get_db_connection() do |db|
- row = db.select_one("SELECT * FROM supported_os WHERE name='#{os_name}'")
- if not row.nil? then return false end
- db.do "INSERT INTO supported_os(os_category_id, name) SELECT os_category.id, '#{os_name}' FROM os_category WHERE os_category.name='#{os_category}'"
+ begin
+ get_db_connection() do |db|
+ row = db.select_one("SELECT * FROM supported_os WHERE name='#{os_name}'")
+ if not row.nil? then return false end
+ db.do "INSERT INTO supported_os(os_category_id, name) SELECT os_category.id, '#{os_name}' FROM os_category WHERE os_category.name='#{os_category}'"
+ end
+ result = true
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
- return true
-
+ return result
end
# remove target OS.
+ #name remove_supported_os( os_name )
+ #return true when supported_os removed
+ #return false when supported_os not exist or DB connection error
def remove_supported_os( os_name )
- get_db_connection() do |db|
- row = db.select_one("SELECT * FROM supported_os WHERE name='#{os_name}'")
- if row.nil? then return false end
- db.do("DELETE FROM supported_os WHERE name='#{os_name}'")
+ result = false
+ begin
+ get_db_connection() do |db|
+ row = db.select_one("SELECT * FROM supported_os WHERE name='#{os_name}'")
+ if row.nil? then return false end
+ db.do("DELETE FROM supported_os WHERE name='#{os_name}'")
+ end
+ result = true
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
- return true
+ return result
end
end
db.do("UPDATE server_configs SET value = '#{@db_version}' WHERE property = 'db_version'")
end
- rescue DBI::DatabaseError => e
+ rescue => e
puts e.errstr
result = false
ensure
def create_db()
gen_db()
- result = get_db_connection() do |db|
- inc = db_inc
- post_fix = db_post_fix
- now = db_now
-
- # remove table
- db.tables.each do |table|
- db.do "DROP TABLE #{table}"
- end
-
- # create table
- db.do "CREATE TABLE server_configs ( id INTEGER PRIMARY KEY #{inc}, property VARCHAR(64) NOT NULL, value VARCHAR(256) )#{post_fix}"
- db.do "INSERT INTO server_configs (property,value) VALUES ('id','#{@id}')"
- db.do "INSERT INTO server_configs (property,value) VALUES ('path','#{@path}')"
- db.do "INSERT INTO server_configs (property,value) VALUES ('db_version','#{@db_version}')"
- db.do "INSERT INTO server_configs (property,value) VALUES ('port','2222')"
- db.do "INSERT INTO server_configs (property,value) VALUES ('max_working_jobs','2')"
- db.do "INSERT INTO server_configs (property,value) VALUES ('max_jobs','4')"
- db.do "INSERT INTO server_configs (property,value) VALUES ('send_mail','NO')"
- db.do "INSERT INTO server_configs (property,value) VALUES ('keep_time','86400')"
- db.do "INSERT INTO server_configs (property,value) VALUES ('pkg_sync_period','600')"
- db.do "INSERT INTO server_configs (property,value) VALUES ('changelog_check','false')"
- db.do "INSERT INTO server_configs (property,value) VALUES ('job_log_url','')"
- db.do "CREATE TABLE os_category ( id INTEGER PRIMARY KEY #{inc}, name VARCHAR(32) NOT NULL UNIQUE ) #{post_fix}"
- db.do "INSERT INTO os_category (name) VALUES ( 'linux' )"
- db.do "INSERT INTO os_category (name) VALUES ( 'windows' )"
- db.do "INSERT INTO os_category (name) VALUES ( 'macos' )"
-
- PackageDistribution.create_table(db, inc, post_fix)
-
- # sync package server
- db.do "CREATE TABLE sync_pkg_servers (
- id INTEGER PRIMARY KEY #{inc},
- distribution_id INTEGER NOT NULL,
- pkgsvr_url VARCHAR(256),
- period INTEGER,
- description VARCHAR(255),
- CONSTRAINT fk_sync_pkg_servers_distributions1 FOREIGN KEY ( distribution_id ) REFERENCES distributions ( id ) ) #{post_fix}"
-
- db.do "CREATE TABLE supported_os (
- id INTEGER PRIMARY KEY #{inc},
- os_category_id INTEGER NOT NULL,
- name VARCHAR(32) NOT NULL UNIQUE,
- CONSTRAINT fk_supported_os_os_category1 FOREIGN KEY ( os_category_id ) REFERENCES os_category ( id ) ) #{post_fix}"
-
- RemoteBuildServer.create_table(db, inc, post_fix)
-
- # USERS/GROUPS
- # users
- db.do "CREATE TABLE users ( id INTEGER PRIMARY KEY #{inc}, name VARCHAR(32) NOT NULL UNIQUE, email VARCHAR(256), password_hash VARCHAR(256), password_salt VARCHAR(256) ) #{post_fix}"
- # groups
- db.do "CREATE TABLE groups ( id INTEGER PRIMARY KEY #{inc}, name VARCHAR(32) NOT NULL UNIQUE, admin VARCHAR(32) NOT NULL DEFAULT 'FALSE', description VARCHAR(256) )#{post_fix}"
- # user groups (users -- groups)
- db.do "CREATE TABLE user_groups ( user_id INTEGER NOT NULL, group_id INTEGER NOT NULL, status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE', PRIMARY KEY ( user_id, group_id ),
- CONSTRAINT fk_users_has_groups_users1 FOREIGN KEY ( user_id ) REFERENCES users ( id ),
- CONSTRAINT fk_users_has_groups_groups1 FOREIGN KEY ( group_id ) REFERENCES groups ( id )) #{post_fix}"
-
- db.do "INSERT INTO users (name,email,password_hash,password_salt) VALUES ('administrators','admin@user','$2a$10$H.w3ssI9KfuvNEXXp1qxD.b3Wm8alJG.HXviUofe4nErDn.TKUAka','$2a$10$H.w3ssI9KfuvNEXXp1qxD.')"
- db.do "INSERT INTO users (name,email,password_hash,password_salt) VALUES ('sync-mananger','sync-manager@user','$2a$10$H.w3ssI9KfuvNEXXp1qxD.b3Wm8alJG.HXviUofe4nErDn.TKUAka','$2a$10$H.w3ssI9KfuvNEXXp1qxD.')"
- db.do "INSERT INTO groups (name, admin, description) VALUES ('admin','TRUE','')"
- db.do "INSERT INTO user_groups (user_id, group_id) SELECT users.id,groups.id FROM users,groups WHERE users.email = 'admin@user' and groups.name = 'admin'"
- db.do "INSERT INTO user_groups (user_id, group_id) SELECT users.id,groups.id FROM users,groups WHERE users.email = 'sync-manager@user' and groups.name = 'admin'"
-
- # PROJECTS
- CommonProject.create_table(db, inc, post_fix)
- GitBuildProject.create_table(db, post_fix)
- BinaryUploadProject.create_table(db, post_fix)
- db.do "CREATE TABLE group_project_accesses(
- group_id INTEGER NOT NULL,
- project_id INTEGER NOT NULL,
- build VARCHAR(32) NOT NULL DEFAULT 'TRUE',
- PRIMARY KEY ( group_id,project_id ),
- CONSTRAINT fk_groups_has_projects_groups1 FOREIGN KEY ( group_id ) REFERENCES groups ( id ),
- CONSTRAINT fk_groups_has_projects_projects1 FOREIGN KEY ( project_id ) REFERENCES projects ( id ) )#{post_fix}"
-
- # JOBS
- CommonJob.create_table(db, inc, post_fix)
+ begin
+ get_db_connection() do |db|
+ inc = db_inc
+ post_fix = db_post_fix
+ now = db_now
+
+ # remove table
+ db.tables.each do |table|
+ db.do "DROP TABLE #{table}"
+ end
+
+ # create table
+ db.do "CREATE TABLE server_configs ( id INTEGER PRIMARY KEY #{inc}, property VARCHAR(64) NOT NULL, value VARCHAR(256) )#{post_fix}"
+ db.do "INSERT INTO server_configs (property,value) VALUES ('id','#{@id}')"
+ db.do "INSERT INTO server_configs (property,value) VALUES ('path','#{@path}')"
+ db.do "INSERT INTO server_configs (property,value) VALUES ('db_version','#{@db_version}')"
+ db.do "INSERT INTO server_configs (property,value) VALUES ('port','2222')"
+ db.do "INSERT INTO server_configs (property,value) VALUES ('max_working_jobs','2')"
+ db.do "INSERT INTO server_configs (property,value) VALUES ('max_jobs','4')"
+ db.do "INSERT INTO server_configs (property,value) VALUES ('send_mail','NO')"
+ db.do "INSERT INTO server_configs (property,value) VALUES ('keep_time','86400')"
+ db.do "INSERT INTO server_configs (property,value) VALUES ('pkg_sync_period','600')"
+ db.do "INSERT INTO server_configs (property,value) VALUES ('changelog_check','false')"
+ db.do "INSERT INTO server_configs (property,value) VALUES ('job_log_url','')"
+ db.do "CREATE TABLE os_category ( id INTEGER PRIMARY KEY #{inc}, name VARCHAR(32) NOT NULL UNIQUE ) #{post_fix}"
+ db.do "INSERT INTO os_category (name) VALUES ( 'linux' )"
+ db.do "INSERT INTO os_category (name) VALUES ( 'windows' )"
+ db.do "INSERT INTO os_category (name) VALUES ( 'macos' )"
+
+ PackageDistribution.create_table(db, inc, post_fix)
+
+ # sync package server
+ db.do "CREATE TABLE sync_pkg_servers (
+ id INTEGER PRIMARY KEY #{inc},
+ distribution_id INTEGER NOT NULL,
+ pkgsvr_url VARCHAR(256),
+ period INTEGER,
+ description VARCHAR(255),
+ CONSTRAINT fk_sync_pkg_servers_distributions1 FOREIGN KEY ( distribution_id ) REFERENCES distributions ( id ) ) #{post_fix}"
+
+ db.do "CREATE TABLE supported_os (
+ id INTEGER PRIMARY KEY #{inc},
+ os_category_id INTEGER NOT NULL,
+ name VARCHAR(32) NOT NULL UNIQUE,
+ CONSTRAINT fk_supported_os_os_category1 FOREIGN KEY ( os_category_id ) REFERENCES os_category ( id ) ) #{post_fix}"
+
+ RemoteBuildServer.create_table(db, inc, post_fix)
+
+ # USERS/GROUPS
+ # users
+ db.do "CREATE TABLE users ( id INTEGER PRIMARY KEY #{inc}, name VARCHAR(32) NOT NULL UNIQUE, email VARCHAR(256), password_hash VARCHAR(256), password_salt VARCHAR(256) ) #{post_fix}"
+ # groups
+ db.do "CREATE TABLE groups ( id INTEGER PRIMARY KEY #{inc}, name VARCHAR(32) NOT NULL UNIQUE, admin VARCHAR(32) NOT NULL DEFAULT 'FALSE', description VARCHAR(256) )#{post_fix}"
+ # user groups (users -- groups)
+ db.do "CREATE TABLE user_groups ( user_id INTEGER NOT NULL, group_id INTEGER NOT NULL, status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE', PRIMARY KEY ( user_id, group_id ),
+ CONSTRAINT fk_users_has_groups_users1 FOREIGN KEY ( user_id ) REFERENCES users ( id ),
+ CONSTRAINT fk_users_has_groups_groups1 FOREIGN KEY ( group_id ) REFERENCES groups ( id )) #{post_fix}"
+
+ db.do "INSERT INTO users (name,email,password_hash,password_salt) VALUES ('administrators','admin@user','$2a$10$H.w3ssI9KfuvNEXXp1qxD.b3Wm8alJG.HXviUofe4nErDn.TKUAka','$2a$10$H.w3ssI9KfuvNEXXp1qxD.')"
+ db.do "INSERT INTO users (name,email,password_hash,password_salt) VALUES ('sync-mananger','sync-manager@user','$2a$10$H.w3ssI9KfuvNEXXp1qxD.b3Wm8alJG.HXviUofe4nErDn.TKUAka','$2a$10$H.w3ssI9KfuvNEXXp1qxD.')"
+ db.do "INSERT INTO groups (name, admin, description) VALUES ('admin','TRUE','')"
+ db.do "INSERT INTO user_groups (user_id, group_id) SELECT users.id,groups.id FROM users,groups WHERE users.email = 'admin@user' and groups.name = 'admin'"
+ db.do "INSERT INTO user_groups (user_id, group_id) SELECT users.id,groups.id FROM users,groups WHERE users.email = 'sync-manager@user' and groups.name = 'admin'"
+
+ # PROJECTS
+ CommonProject.create_table(db, inc, post_fix)
+ GitBuildProject.create_table(db, post_fix)
+ BinaryUploadProject.create_table(db, post_fix)
+ db.do "CREATE TABLE group_project_accesses(
+ group_id INTEGER NOT NULL,
+ project_id INTEGER NOT NULL,
+ build VARCHAR(32) NOT NULL DEFAULT 'TRUE',
+ PRIMARY KEY ( group_id,project_id ),
+ CONSTRAINT fk_groups_has_projects_groups1 FOREIGN KEY ( group_id ) REFERENCES groups ( id ),
+ CONSTRAINT fk_groups_has_projects_projects1 FOREIGN KEY ( project_id ) REFERENCES projects ( id ) )#{post_fix}"
+
+ # JOBS
+ CommonJob.create_table(db, inc, post_fix)
+ end
+ return true
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
- return result
+ return false
end
return true
rescue DBI::DatabaseError => e
- @log.error "DB loading failed!" if not @log.nil?
- @log.error e.errstr if not @log.nil?
- @log.error e.backtrace.inspect if not @log.nil?
-
+ raise BuildServerException.new("ERR950"), e.errstr
+ rescue DBI::InterfaceError => e
+ raise BuildServerException.new("ERR950"), e.errstr
rescue => e
@log.error e.errstr if not @log.nil?
@log.error e.backtrace.inspect if not @log.nil?
return false
end
-
+ # name check_user_id_from_email( user_email )
+ # return id string
+ # return -1 when id of email is not exist or DB conncetion error
def check_user_id_from_email(user_email)
- get_db_connection() do |db|
- row = db.select_one("SELECT * FROM users WHERE email='#{user_email}'")
- if not row.nil? then
- return row['id']
- else
- return -1
+ result = -1
+ begin
+ get_db_connection() do |db|
+ row = db.select_one("SELECT * FROM users WHERE email='#{user_email}'")
+ if not row.nil? then
+ result = row['id']
+ end
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
end
end
- return -1
+ return result
end
+ # name get_email_using_user_id( user_id )
+ # return email string
+ # return -1 when email of id is not exist or DB connection error
def get_email_using_user_id(user_id)
- get_db_connection() do |db|
- row = db.select_one("SELECT * FROM users WHERE id='#{user_id}'")
- if not row.nil? then
- return row['email']
- else
- return -1
+ result = -1
+ begin
+ get_db_connection() do |db|
+ row = db.select_one("SELECT * FROM users WHERE id='#{user_id}'")
+ if not row.nil? then
+ result = row['email']
+ end
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
end
end
- return -1
+ return result
end
+ #name check_user_password( user_id , passwd )
+ #return 1 when passwd matched
+ #return -1 when passwd unmatched or DB conncetion error
def check_user_password(user_id, passwd)
- get_db_connection() do |db|
- row = db.select_one("SELECT * FROM users WHERE id='#{user_id}'")
- if not row.nil? then
- if row['password_hash'].eql? passwd
- # if passwd is encript and that value equal password_hash then return true
- return 1
- else
- return row['password_hash'] == BCrypt::Engine.hash_secret(passwd, row['password_salt'])
- end
- else
- return -1
+ row = nil
+ begin
+ get_db_connection() do |db|
+ row = db.select_one("SELECT * FROM users WHERE id='#{user_id}'")
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
end
end
- return -1
+ if not row.nil? then
+ if row['password_hash'].eql? passwd
+ # if passwd is encript and that value equal password_hash then return true
+ return 1
+ else
+ return row['password_hash'] == BCrypt::Engine.hash_secret(passwd, row['password_salt'])
+ end
+ else
+ return -1
+ end
end
end
if job.nil? then
- get_db_connection() do |db|
- job_status = db.select_one("SELECT status FROM jobs WHERE id = #{job_number}")[0]
+ begin
+ get_db_connection() do |db|
+ job_status = db.select_one("SELECT status FROM jobs WHERE id = #{job_number}")[0]
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
end
BuildCommServer.send(conn, "=JOB_STATUS,#{job_status}")
end
return @latest_job_id
end
end
-
- #If the 'run' file is already locked, server is already running.
- #in this case return false
- private
- def lockServer
- return FileUtil.exclusiveLock(@run_file_path)
- end
-
- private
- def printErrorMessage(errMsg)
- @log.info "Server creation failed"
- @log.error errMsg
-
- puts "Server creation failed"
- puts errMsg
- end
+
+ #If the 'run' file is already locked, server is already running.
+ #in this case return false
+ private
+ def lockServer
+ return FileUtil.exclusiveLock(@run_file_path)
+ end
+
+ private
+ def printErrorMessage(errMsg)
+ @log.info "Server creation failed"
+ @log.error errMsg
+
+ puts "Server creation failed"
+ puts errMsg
+ end
# get latest id from DB
+ # name get_latest_job_id_from_db
+ # return max id string
+ # return 0 when job id is not exist or DB connection error
private
def get_latest_job_id_from_db()
job_id = nil
- get_db_connection() do |db|
- row = db.select_one("SELECT MAX(id) as id FROM jobs")
- job_id = row['id']
- end
+ begin
+ get_db_connection() do |db|
+ row = db.select_one("SELECT MAX(id) as id FROM jobs")
+ job_id = row['id']
+ end
+ rescue BuildServerException => e
+ if not @log.nil? then
+ @log.error e.message
+ end
+ rescue => e
+ if not @log.nil? then
+ @log.error e.errstr
+ end
+ end
if not job_id.nil? then
return job_id.to_s
end
migrate_db(server)
+ supported_os_list = server.supported_os_list
# get supported os for project.
# if not specified, all supported os of the server will be used
if os_string.nil? or os_string.empty? then
- os_list = server.supported_os_list
+ os_list = supported_os_list
else
os_list = os_string.strip.split(",")
# check OS name
os_list.each do |os|
- if not server.supported_os_list.include? os then
+ if not supported_os_list.include? os then
puts "Unsupported OS name \"#{os}\" is used!"
puts "Check the following supported OS list:"
- server.supported_os_list.each do |s_os|
+ supported_os_list.each do |s_os|
puts " * #{s_os}"
end
end
migrate_db(server)
+ supported_os_list = server.supported_os_list
# get supported os for project.
# if not specified, all supported os of the server will be used
if os_string.nil? or os_string == "default" then
- os_list = server.supported_os_list
+ os_list = supported_os_list
else
os_list = os_string.strip.split(",")
# check OS name
os_list.each do |os|
- if not server.supported_os_list.include? os then
+ if not supported_os_list.include? os then
puts "Unsupported OS name \"#{os}\" is used!"
puts "Check the following supported OS list:"
- server.supported_os_list.each do |s_os|
+ supported_os_list.each do |s_os|
puts " * #{s_os}"
end
"ERR205" => "Job stopped by failure of its sub job!",
"ERR900" => "Cancel event received!",
- "ERR901" => "Job already upload status. Cancel failed!"
+ "ERR901" => "Job already upload status. Cancel failed!",
+
+ "ERR950" => "DB connection failed!!!"
}
def initialize(code)
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)
+ begin
+ @server.get_db_connection() do |db|
+ db.do "INSERT INTO job_timestamps(job_id,stamp_name,stamp_time)
VALUES (#{@id},'#{name}',#{now})"
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
+
end
end
@source_info[ver] = info
# save to db
- @server.get_db_connection() do |db|
- save_source_info_internal(ver, info, db)
+ begin
+ @server.get_db_connection() do |db|
+ save_source_info_internal(ver, info, db)
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
end
@package_info[ver].push [pkg_name, pkg_os]
# save to db
- @server.get_db_connection() do |db|
- save_package_info_internal(ver, pkg_name, pkg_os, db)
+ begin
+ @server.get_db_connection() do |db|
+ save_package_info_internal(ver, pkg_name, pkg_os, db)
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
end
# get distribution
+ #name get_distribution(name)
+ #return PackageDistribution
+ #return nil when package distribution not exit or DB connection error
def get_distribution(name)
# conntect DB
- @server.get_db_connection() do |db|
- return get_distribution_internal(name, db)
+ result = nil
+ begin
+ @server.get_db_connection() do |db|
+ result = get_distribution_internal(name, db)
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
- return nil
+ return result
end
# add
+ #name add_distribution(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password)
+ #return true when add distribution successed
+ #return false when distribution already exist or DB connection error
def add_distribution(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password)
- @server.get_db_connection() do |db|
- if not get_distribution_internal(name, db).nil? then
- @server.log.info "The distribution \"#{name}\" already exists on server"
- @server.log.error "Adding distribution failed!"
- return false
- end
- new_dist = PackageDistribution.new(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password, "OPEN")
- new_dist.save(db)
+ result = false
+ begin
+ @server.get_db_connection() do |db|
+ if not get_distribution_internal(name, db).nil? then
+ @server.log.info "The distribution \"#{name}\" already exists on server"
+ @server.log.error "Adding distribution failed!"
+ else
+ new_dist = PackageDistribution.new(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password, "OPEN")
+ new_dist.save(db)
+ result = true
+ @server.log.info "Added a new distribution \"#{name}\""
+ end
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
- @server.log.info "Added a new distribution \"#{name}\""
- return true
+ return result
end
# remove
+ #name remove_distribution(name)
+ #return ture when remove distribution successed
+ #return false when distribution not exist or DB connection error or DB conncetion error
def remove_distribution(name)
-
- result = @server.get_db_connection() do |db|
- dist = get_distribution_internal(name, db)
- if dist.nil? then
- @server.log.error "The distribution \"#{name}\" does not exists on server"
- @server.log.error "Removing distribution failed!"
- return false
+ result = false
+ begin
+ @server.get_db_connection() do |db|
+ dist = get_distribution_internal(name, db)
+ if dist.nil? then
+ @server.log.error "The distribution \"#{name}\" does not exists on server"
+ @server.log.error "Removing distribution failed!"
+ else
+ dist.unload(db)
+ result = true
+ @server.log.info "Removed the distribution \"#{name}\""
+ end
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
end
- dist.unload(db)
end
- @server.log.info "Removed the distribution \"#{name}\""
return result
end
+ #name get_first_distribution()
+ #return PackageDistribution
+ #return nil when no distribution exist or DB connection error
def get_first_distribution()
- @server.get_db_connection() do |db|
- return PackageDistribution.load_first(db)
+ result = nil
+ begin
+ @server.get_db_connection() do |db|
+ result = PackageDistribution.load_first(db)
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
- return nil
+ return result
end
+ #name get_all_distributions()
+ #return PackageDistribution list
+ #return [] when no PackageDistribution exist or DB connection error
def get_all_distributions()
- @server.get_db_connection() do |db|
- return PackageDistribution.load_all(db)
+ result = []
+ begin
+ @server.get_db_connection() do |db|
+ result = PackageDistribution.load_all(db)
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
- return []
+ return result
end
+ #name set_distribution_lock(name, value=true)
+ #return true when distribution lock setted
+ #return false when distribution lock not exist or DB connection error
def set_distribution_lock(name, value=true)
- result = @server.get_db_connection() do |db|
- # check already exist
- dist = get_distribution_internal(name, db)
- if dist.nil? then return false end
-
- dist.status = (value)? "CLOSE" : "OPEN"
- dist.save(db)
- end
- if result then
+ result = false
+ begin
+ @server.get_db_connection() do |db|
+ # check already exist
+ dist = get_distribution_internal(name, db)
+ if dist.nil? then return false end
+
+ dist.status = (value)? "CLOSE" : "OPEN"
+ dist.save(db)
+ end
if value then
@server.log.info "The distribution \"#{name}\" is locked!"
else
@server.log.info "The distribution \"#{name}\" is unlocked!"
end
+ result = true
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
-
+
return result
end
end
def cancel_broken_status
- @server.get_db_connection() do |db|
- db.do "UPDATE jobs SET status = 'CANCELED' WHERE status != 'FINISHED' and status != 'ERROR' and status != 'CANCELED'"
+ begin
+ @server.get_db_connection() do |db|
+ db.do "UPDATE jobs SET status = 'CANCELED' WHERE status != 'FINISHED' and status != 'ERROR' and status != 'CANCELED'"
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
end
def max_working_jobs
+ result = nil
if @server.has_db? then
result = nil
- @server.get_db_connection() do |db|
- result = db.select_one("SELECT value FROM server_configs WHERE property = 'max_working_jobs'")[0]
+ begin
+ @server.get_db_connection() do |db|
+ result = db.select_one("SELECT value FROM server_configs WHERE property = 'max_working_jobs'")[0]
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
@max_build_jobs = result.to_i if not result.nil?
end
end
if @server.has_db? then
- @server.get_db_connection() do |db|
- db.do "UPDATE server_configs SET value = '#{@max_build_jobs}' WHERE property = 'max_working_jobs'"
- db.do "UPDATE server_configs SET value = '#{@max_jobs}' WHERE property = 'max_jobs'"
+ begin
+ @server.get_db_connection() do |db|
+ db.do "UPDATE server_configs SET value = '#{@max_build_jobs}' WHERE property = 'max_working_jobs'"
+ db.do "UPDATE server_configs SET value = '#{@max_jobs}' WHERE property = 'max_jobs'"
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
end
end
def get_max_jobs()
if @server.has_db? then
result = nil
- @server.get_db_connection() do |db|
- result = db.select_one("SELECT value FROM server_configs WHERE property = 'max_jobs'")[0]
+ begin
+ @server.get_db_connection() do |db|
+ result = db.select_one("SELECT value FROM server_configs WHERE property = 'max_jobs'")[0]
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
@max_jobs = result.to_i if not result.nil?
end
end
if @server.has_db? then
- @server.get_db_connection() do |db|
- db.do "UPDATE server_configs SET value = '#{@max_jobs}' WHERE property = 'max_jobs'"
+ begin
+ @server.get_db_connection() do |db|
+ db.do "UPDATE server_configs SET value = '#{@max_jobs}' WHERE property = 'max_jobs'"
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
end
end
end
+ #name is_user_accessable(job,user_id)
+ #return true when all including job is accessable
+ #return false when denyed or DB connection error
def is_user_accessable(job,user_id)
if job.type == "MULTIBUILD" then
job.get_sub_jobs().each do |subjob|
end
else
result = nil
- @server.get_db_connection() do |db|
- result = db.select_one "SELECT user_groups.group_id FROM user_groups,group_project_accesses
+ begin
+ @server.get_db_connection() do |db|
+ result = db.select_one "SELECT user_groups.group_id FROM user_groups,group_project_accesses
WHERE user_groups.group_id = group_project_accesses.group_id and
group_project_accesses.project_id = #{job.get_project.get_project_id} and
user_groups.user_id = #{user_id}"
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
return (not result.nil?)
end
def set_remote(job, rserver)
job.set_remote_job(rserver)
- @server.get_db_connection() do |db|
- db.do "UPDATE jobs SET remote_build_server_id = '#{rserver.id}' WHERE id = '#{job.id}'"
+ begin
+ @server.get_db_connection() do |db|
+ db.do "UPDATE jobs SET remote_build_server_id = '#{rserver.id}' WHERE id = '#{job.id}'"
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
end
end
+ #name save_job_status(job)
+ #return true when save successed or transferred
+ #return false when DB error occurred
def save_job_status(job)
# if transferred job, no need to save
if job.is_transferred? then return true end
- result = @server.get_db_connection() do |db|
- job.save(db)
- job.sub_jobs.each do |j|
- j.save(db)
+ result = false
+ begin
+ @server.get_db_connection() do |db|
+ job.save(db)
+ job.sub_jobs.each do |j|
+ j.save(db)
+ end
+ end
+ result = true
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
end
end
if job.id == job_id then
return job
end
- job.sub_jobs.each do |job|
- if job.id == job_id then
- return job
+ job.sub_jobs.each do |sjob|
+ if sjob.id == job_id then
+ return sjob
end
end
end
# set up pkgsvr_client
first_project = @sub_jobs[0].get_project()
- @pkgsvr_url = @server.distmgr.get_distribution(first_project.dist_name).pkgsvr_url
- @pkgsvr_ip = @server.distmgr.get_distribution(first_project.dist_name).pkgsvr_ip
- @pkgsvr_port = @server.distmgr.get_distribution(first_project.dist_name).pkgsvr_port
- @pkgsvr_password = @server.distmgr.get_distribution(first_project.dist_name).pkgsvr_password
+ dist = @server.distmgr.get_distribution(first_project.dist_name)
+ @pkgsvr_url = dist.pkgsvr_url
+ @pkgsvr_ip = dist.pkgsvr_ip
+ @pkgsvr_port = dist.pkgsvr_port
+ @pkgsvr_password = dist.pkgsvr_password
@pkgsvr_client = Client.create(@pkgsvr_url, @job_working_dir, @log)
if @pkgsvr_client.nil? then
raise BuildServerException.new("ERR023")
# get_project of the name
+ # return GitBuildProject or BinaryUploadProject
+ # return nil when project not exist or DB connection error
def get_project(name, dist_name)
+ begin
@server.get_db_connection() do |db|
return get_project_internal(name, dist_name, db)
end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
+ end
return nil
end
+ #name get_all_projects_summary
+ #return project hash list
+ #return [] when project not exists or DB connection error
def get_all_projects_summary()
- @server.get_db_connection() do |db|
- return CommonProject.get_all_project_rows(db)
+ result = []
+ begin
+ @server.get_db_connection() do |db|
+ result = CommonProject.get_all_project_rows(db)
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
- return []
+ return result
end
+ #name get_all_project
+ #return project list
+ #return [] when DB error occurred
def get_all_projects()
result = []
-
- @server.get_db_connection() do |db|
- rows = CommonProject.get_all_project_rows(db)
- rows.each do |row|
- if row['ptype'] == "GIT" then
- prj = GitBuildProject.load(row['name'], row['dist_name'], @server, db)
- else
- prj = BinaryUploadProject.load(row['name'], row['dist_name'], @server, db)
+ begin
+ @server.get_db_connection() do |db|
+ rows = CommonProject.get_all_project_rows(db)
+ rows.each do |row|
+ if row['ptype'] == "GIT" then
+ prj = GitBuildProject.load(row['name'], row['dist_name'], @server, db)
+ else
+ prj = BinaryUploadProject.load(row['name'], row['dist_name'], @server, db)
+ end
+ if not prj.nil? then result.push prj end
end
- if not prj.nil? then result.push prj end
end
- return result
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
return result
end
+ # name add_git_project( name, repos, branch, os_list, dist_name)
+ # return true when add git project successed
+ # return false when git project already exist or DB connection error
def add_git_project(name, repos, branch, os_list, dist_name)
new_prj = nil
- result = @server.get_db_connection() do |db|
- prj = get_project_internal(name, dist_name, db)
- if not prj.nil? then
- @server.log.error "Adding project failed!: the project \"#{name}\"(#{dist_name}) already exists"
- return false
+ result = false
+ begin
+ @server.get_db_connection() do |db|
+ prj = get_project_internal(name, dist_name, db)
+ if prj.nil? then
+ # create new object
+ new_prj = GitBuildProject.new(name, @server, os_list, dist_name, repos, branch)
+
+ # save to db
+ new_prj.save(db)
+ result = true
+
+ # authorize admin to access
+ @server.qualify_admin_to_access(new_prj.get_project_id())
+ @server.log.info "Added new GIT project \"#{name}\"(#{dist_name})"
+ else
+ @server.log.error "Adding project failed!: the project \"#{name}\"(#{dist_name}) already exists"
+ end
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
end
-
- # create new object
- new_prj = GitBuildProject.new(name, @server, os_list, dist_name, repos, branch)
-
- # save to db
- new_prj.save(db)
- end
-
- if result then
- # authorize admin to access
- @server.qualify_admin_to_access(new_prj.get_project_id())
- @server.log.info "Added new GIT project \"#{name}\"(#{dist_name})"
end
return result
end
+ #name add_binary_project(name, pkg_name, os_list, dist_name)
+ #return true when add binary project successed
+ #return false when project already exist ro DB connection error
def add_binary_project(name, pkg_name, os_list, dist_name)
new_prj = nil
- result = @server.get_db_connection() do |db|
- prj = get_project_internal(name, dist_name, db)
- if not prj.nil? then
- @server.log.error "Adding project failed!: the project \"#{name}\"(#{dist_name}) already exists"
- return false
+ result = false
+ begin
+ result = @server.get_db_connection() do |db|
+ prj = get_project_internal(name, dist_name, db)
+ if prj.nil? then
+ # create new object
+ new_prj = BinaryUploadProject.new(name, @server, os_list, dist_name, pkg_name)
+
+ # save to db
+ new_prj.save(db)
+
+ # init
+ new_prj.init()
+
+ # authorize admin to access
+ @server.qualify_admin_to_access(new_prj.get_project_id())
+ @server.log.info "Added new BINARY project \"#{name}\"(#{dist_name})"
+ result = true
+ else
+ @server.log.error "Adding project failed!: the project \"#{name}\"(#{dist_name}) already exists"
+ end
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
end
-
- # create new object
- new_prj = BinaryUploadProject.new(name, @server, os_list, dist_name, pkg_name)
-
- # save to db
- new_prj.save(db)
-
- # init
- new_prj.init()
- end
-
- if result then
- # authorize admin to access
- @server.qualify_admin_to_access(new_prj.get_project_id())
- @server.log.info "Added new BINARY project \"#{name}\"(#{dist_name})"
end
return result
end
+ #name remove_project( name, dist_name )
+ #return true when add binary project successed
+ #return false when project not exist or DB connection error
def remove_project( name, dist_name )
+ result = false
+ begin
+ @server.get_db_connection() do |db|
+ prj = get_project_internal(name, dist_name, db)
+ if prj.nil? then
+ @server.log.error "The project \"#{name}\"(#{dist_name}) does not exists on server"
+ @server.log.error "Removing project failed!"
+ else
+ # unload from DB
+ prj.unload(db)
- result = @server.get_db_connection() do |db|
- prj = get_project_internal(name, dist_name, db)
- if prj.nil? then
- @server.log.error "The project \"#{name}\"(#{dist_name}) does not exists on server"
- @server.log.error "Removing project failed!"
- return false
- end
- # unload from DB
- prj.unload(db)
+ # remove project directory
+ FileUtils.rm_rf prj.path
- # remove project directory
- FileUtils.rm_rf prj.path
+ @server.log.info "Removed the project \"#{name}\"(#{dist_name})"
+ result = true
+ end
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
- if result then
- @server.log.info "Removed the project \"#{name}\"(#{dist_name})"
- end
return result
end
public
+ #name get_project_accessable(project_name, dist_name, user_id)
+ #return true when project accessable
+ #return false when project not accessable or DB connection error
def get_project_accessable(project_name, dist_name, user_id)
prj = get_project(project_name, dist_name)
- result = nil
- @server.get_db_connection() do |db|
- result = db.select_one "SELECT user_groups.group_id FROM user_groups,group_project_accesses
+ result = false
+ begin
+ data = nil
+ @server.get_db_connection() do |db|
+ data = db.select_one "SELECT user_groups.group_id FROM user_groups,group_project_accesses
WHERE user_groups.user_id = #{user_id} and
user_groups.group_id = group_project_accesses.group_id and
group_project_accesses.project_id = #{prj.get_project_id} and
group_project_accesses.build = 'TRUE'"
+ end
+ result = (not data.nil?)
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
- return (not result.nil?)
+ return result
end
+ #name get_project_pkg_name_accessable(pkg_name, dist_name, user_id)
+ #return true when project accessable
+ #return false when project not accessable or DB connection error
def get_project_pkg_name_accessable(pkg_name, dist_name, user_id)
- result = nil
+ result = false
prj = get_project_from_package_name(pkg_name, dist_name)
- @server.get_db_connection() do |db|
- result = db.select_one "SELECT user_groups.group_id FROM user_groups,group_project_accesses
+ begin
+ data = nil
+ @server.get_db_connection() do |db|
+ data = db.select_one "SELECT user_groups.group_id FROM user_groups,group_project_accesses
WHERE user_groups.user_id = #{user_id} and
user_groups.group_id = group_project_accesses.group_id and
group_project_accesses.project_id = #{prj.get_project_id} and
group_project_accesses.build = 'TRUE'"
+ end
+ result = (not data.nil?)
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
- return (not result.nil?)
+ return result
end
# create new job for project
end
+ #name get_project_from_package_name(pkg_name, dist_name)
+ #result project
+ #result nil when project not exist or DB connection error
def get_project_from_package_name(pkg_name, dist_name)
- @server.get_db_connection() do |db|
- return get_project_from_pkg_name_internal(pkg_name,dist_name,db)
+ result = nil
+ begin
+ @server.get_db_connection() do |db|
+ result = get_project_from_pkg_name_internal(pkg_name,dist_name,db)
+ end
+ rescue BuildServerException => e
+ if not @server.log.nil? then
+ @server.log.error e.message
+ end
+ rescue => e
+ if not @server.log.nil? then
+ @server.log.error e.errstr
+ end
end
- return nil
+
+ return result
end
@host_os = Utils::HOST_OS
if not project.nil? then
- @pkgsvr_url = @server.distmgr.get_distribution(project.dist_name).pkgsvr_url
- @pkgsvr_ip = @server.distmgr.get_distribution(project.dist_name).pkgsvr_ip
- @pkgsvr_port = @server.distmgr.get_distribution(project.dist_name).pkgsvr_port
- @pkgsvr_password = @server.distmgr.get_distribution(project.dist_name).pkgsvr_password
+ dist = @server.distmgr.get_distribution(project.dist_name)
else
- @pkgsvr_url = @server.distmgr.get_distribution(dist_name).pkgsvr_url
- @pkgsvr_ip = @server.distmgr.get_distribution(dist_name).pkgsvr_ip
- @pkgsvr_port = @server.distmgr.get_distribution(dist_name).pkgsvr_port
- @pkgsvr_password = @server.distmgr.get_distribution(dist_name).pkgsvr_password
+ dist = @server.distmgr.get_distribution(dist_name)
end
+ @pkgsvr_url = dist.pkgsvr_url
+ @pkgsvr_ip = dist.pkgsvr_ip
+ @pkgsvr_port = dist.pkgsvr_port
+ @pkgsvr_password = dist.pkgsvr_password
@local_path=local_path
@file_path = nil
def update_db()
- @parent.get_db_connection() do |db|
- working_job_count = @working_jobs.count
- waiting_job_count = @waiting_jobs.count
-
- db.do "UPDATE remote_build_servers SET
+ working_job_count = @working_jobs.count
+ waiting_job_count = @waiting_jobs.count
+ begin
+ @parent.get_db_connection() do |db|
+ db.do "UPDATE remote_build_servers SET
status = '#{@status}',
supported_os_id = (SELECT supported_os.id FROM supported_os WHERE supported_os.name = '#{@host_os}'),
max_job_count = #{@max_working_jobs},
working_job_count = #{working_job_count},
waiting_job_count = #{waiting_job_count} WHERE id = #{@id}"
+ end
+ rescue BuildServerException => e
+ if not @parent.log.nil? then
+ @parent.log.error e.message
+ end
+ rescue => e
+ if not @parent.log.nil? then
+ @parent.log.error e.errstr
+ end
end
end
case job.type
when "BUILD"
- #if status == "PENDING" then
- # if job.pending_ancestor.nil? then
- # ids = "/"
- # else
- # ids = job.pending_ancestor.id
- # end
- # BuildCommServer.send(req,"#{status}:#{ids},#{job.id},#{job.get_project().name},#{job.os} #{job.progress},#{job.get_distribution_name}")
- #else
- # BuildCommServer.send(req,"#{status},#{job.id},#{job.get_project().name},#{job.os} #{job.progress},#{job.get_distribution_name}")
- #end
BuildCommServer.send(req,"#{status},#{job.id},#{job.get_project().name},#{job.os} #{job.progress},#{job.get_distribution_name}")
when "REGISTER"
if job.pkg_type == "BINARY" and not job.get_project().nil? then
def check_supported_os(os_list, req)
# check if supported os list contain at least one OS
- if @parent_server.supported_os_list.empty? then
+ host_supported_os_list = @parent_server.supported_os_list
+ if host_supported_os_list.empty? then
raise BuildServerException.new("ERR007"), ""
end
result = []
os_list.each do |os|
if os == "all" or os == "*" then
- result = result + @parent_server.supported_os_list
+ result = result + host_supported_os_list
elsif os == "default" then
- os = @parent_server.supported_os_list[0]
+ os = host_supported_os_list[0]
result.push os
@log.info "The default OS \"#{os}\" is used as target OS"
elsif os.include? "*" then
reg_os = os.gsub("*","[a-zA-Z0-9.]*")
- @parent_server.supported_os_list.each do |svr_os|
+ host_supported_os_list.each do |svr_os|
matches = svr_os.match("#{reg_os}")
if not matches.nil? and matches.size == 1 and
matches[0] == svr_os then
result.push svr_os
end
end
- elsif @parent_server.supported_os_list.include?(os) then
+ elsif host_supported_os_list.include?(os) then
result.push os
else
msgs = "#{os}... Use a name in (" +
- @parent_server.supported_os_list.join("|") + ")"
+ host_supported_os_list.join("|") + ")"
raise BuildServerException.new("ERR003"),msgs
end
end
mkdir buildsvr01
cd buildsvr01
${RUBY} ../dibs1/build-svr create -n testserver3
-${RUBY} ../dibs1/build-svr migrate -n testserver3
+echo "DROP DATABASE testserver3;" > a
+mysql -u root -p --password=$DB_PASSWD -h localhost < a
+${RUBY} ../dibs1/build-svr migrate -n testserver3 --dsn Mysql:testserver3:localhost --dbuser root --dbpassword $DB_PASSWD
cd ..
${RUBY} dibs1/build-svr add-dist -n testserver3 -D unstable -u $CURDIR/pkgsvr01/unstable -d 127.0.0.1:3333
mkdir buildsvr02
cd buildsvr02
${RUBY} ../dibs2/build-svr create -n testserver4
-${RUBY} ../dibs2/build-svr migrate -n testserver4
+echo "DROP DATABASE testserver4;" > a
+mysql -u root -p --password=$DB_PASSWD -h localhost < a
+${RUBY} ../dibs2/build-svr migrate -n testserver4 --dsn Mysql:testserverr4:localhost --dbuser root --dbpassword $DB_PASSWD
cd ..
${RUBY} dibs2/build-svr add-dist -n testserver4 -D unstable -u `pwd`/pkgsvr01/unstable -d 127.0.0.1:3333