From 8cbcc64806afba992865a93177f1383ec0503f41 Mon Sep 17 00:00:00 2001 From: "jiil.hyoun" Date: Fri, 19 Oct 2012 15:36:14 +0900 Subject: [PATCH] [Title] support DB [Type] Feature [Module] Toolchain / [Priority] Major [Jira#] [Redmine#] [Problem] [Cause] [Solution] [TestCase] Change-Id: Id2c71d79f2fa814c57b7a07c3d6ea33ebd928212 --- src/build_server/BuildServer.rb | 33 +++++++++------ src/build_server/BuildServerController.rb | 50 +++++++++++++++++++++++ src/build_server/DistributionManager.rb | 8 ++-- src/build_server/ProjectManager.rb | 13 +++--- 4 files changed, 82 insertions(+), 22 deletions(-) diff --git a/src/build_server/BuildServer.rb b/src/build_server/BuildServer.rb index 45fa76c..b615dc5 100644 --- a/src/build_server/BuildServer.rb +++ b/src/build_server/BuildServer.rb @@ -64,7 +64,7 @@ class BuildServer attr_accessor :remote_pkg_servers attr_accessor :pkg_sync_period attr_accessor :changelog_check - + attr_accessor :db_dsn, :db_user, :db_passwd CONFIG_ROOT = "#{Utils::HOME}/.build_tools/build_server" HOST_OS = Utils::HOST_OS @@ -111,6 +111,11 @@ class BuildServer @pkg_sync_period=600 @upgrade = false @changelog_check = false + + #DB settring + @db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" + @db_user = nil + @db_passwd = nil end @@ -401,19 +406,25 @@ class BuildServer def create_db() result = true # create DB - sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" begin - db = DBI.connect(sqlite_db_file) + #DB open + db = DBI.connect("DBI:#{@db_dsn}", @db_user, @db_passwd) + case @db_dsn + when /^SQLite3:/ then inc="AUTOINCREMENT" + when /^Mysql:/ then inc="AUTO_INCREMENT" + else inc="AUTOINCREMENT" + end + # create table db.do "CREATE TABLE IF NOT EXISTS distributions(name VARCHAR(32) PRIMARY KEY, pkgsvr_url VARCHAR(256), pkgsvr_addr VARCHAR(64))" - db.do "CREATE TABLE IF NOT EXISTS remote_build_servers(id INTEGER PRIMARY KEY AUTOINCREMENT, svr_addr VARCHAR(64))" - db.do "CREATE TABLE IF NOT EXISTS sync_pkg_servers(id INTEGER PRIMARY KEY AUTOINCREMENT, pkgsvr_url VARCHAR(256), period INTEGER, dist_name VARCHAR(32))" + db.do "CREATE TABLE IF NOT EXISTS remote_build_servers(id INTEGER PRIMARY KEY #{inc}, svr_addr VARCHAR(64))" + db.do "CREATE TABLE IF NOT EXISTS sync_pkg_servers(id INTEGER PRIMARY KEY #{inc}, pkgsvr_url VARCHAR(256), period INTEGER, dist_name VARCHAR(32))" db.do "CREATE TABLE IF NOT EXISTS supported_os(name VARCHAR(32) PRIMARY KEY)" - db.do "CREATE TABLE IF NOT EXISTS projects(id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(32), type VARCHAR(32), password VARCHAR(32), dist_name VARCHAR(32))" + db.do "CREATE TABLE IF NOT EXISTS projects(id INTEGER PRIMARY KEY #{inc}, name VARCHAR(32), type VARCHAR(32), password VARCHAR(32), dist_name VARCHAR(32))" db.do "CREATE TABLE IF NOT EXISTS project_os(prj_id INTEGER, os_name VARCHAR(32))" - db.do "CREATE TABLE IF NOT EXISTS users(user_id INTEGER PRIMARY KEY AUTOINCREMENT, email VARCHAR(256), password VARCHAR(256), password_salt VARCHAR(256), user_name VARCHAR(256), group_id VARCHAR(256))" - db.do "CREATE TABLE IF NOT EXISTS groups(group_id INTEGER PRIMARY KEY AUTOINCREMENT, group_name VARCHAR(256))" + db.do "CREATE TABLE IF NOT EXISTS users(user_id INTEGER PRIMARY KEY #{inc}, email VARCHAR(256), password VARCHAR(256), password_salt VARCHAR(256), user_name VARCHAR(256), group_id VARCHAR(256))" + db.do "CREATE TABLE IF NOT EXISTS groups(group_id INTEGER PRIMARY KEY #{inc}, group_name VARCHAR(256))" rescue DBI::DatabaseError => e puts "DB Creation failed!" puts e.errstr @@ -432,10 +443,9 @@ class BuildServer # distribution @distmgr.save_db() - sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" begin # open DB - db = DBI.connect(sqlite_db_file) + db = DBI.connect("DBI:#{@db_dsn}", @db_user ,@db_passwd) # remote_build_servers db.do "DELETE FROM remote_build_servers" @@ -474,10 +484,9 @@ class BuildServer # distribution @distmgr.load_db() - sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" begin # open DB - db = DBI.connect(sqlite_db_file) + db = DBI.connect("DBI:#{@db_dsn}", @db_user, @db_passwd) #db.results_as_hash = true # remote_build_servers diff --git a/src/build_server/BuildServerController.rb b/src/build_server/BuildServerController.rb index 36ce45f..033d247 100644 --- a/src/build_server/BuildServerController.rb +++ b/src/build_server/BuildServerController.rb @@ -717,6 +717,22 @@ class BuildServerController server.ftp_passwd = value when "CHANGELOG_CHECK" server.changelog_check = value + when "DB_DSN" + case value + when /^SQLite3:(.*)/i then + if $1.strip.empty? then db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" + else db_dsn = "SQLite3:#{$1.strip}" + end + when /^Mysql:(.*)/i then + db_dsn = "Mysql:#{$1}" + else + db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" + end + server.db_dsn = db_dsn + when "DB_USER" + server.db_user = value if not value.empty? + when "DB_PASSWORD" + server.db_passwd = value if not value.empty? else puts "Wrong attribute name!" result = false @@ -763,6 +779,12 @@ class BuildServerController puts server.ftp_passwd when "CHANGELOG_CHECK" puts server.changelog_check + when "DB_DSN" + puts server.db_dsn + when "DB_USER" + puts server.db_user + when "DB_PASSWORD" + puts server.db_passwd else puts "Wrong attribute name!" result = false @@ -810,6 +832,10 @@ class BuildServerController end f.puts "PKG_SYNC_PERIOD=#{server.pkg_sync_period}" f.puts "CHANGELOG_CHECK=#{server.changelog_check}" + f.puts "#only supports \"Mysql\" and \"SQLite3\"" + f.puts "DB_DSN=#{server.db_dsn}" + f.puts "DB_USER=#{server.db_user}" + f.puts "DB_PASSWORD=#{server.db_passwd}" end # save to server.db @@ -836,11 +862,15 @@ class BuildServerController ftp_passwd=nil pkg_sync_period=600 changelog_check=false + db_dsn="SQLite3:#{BuildServer::CONFIG_ROOT}/#{id}/server.db" + db_user=nil + db_passwd=nil # read configuration server_dir = "#{BuildServer::CONFIG_ROOT}/#{id}" File.open( "#{server_dir}/server.cfg", "r" ) do |f| f.each_line do |l| + if l.strip.start_with?("#") then next end idx = l.index("=") + 1 length = l.length - idx @@ -870,6 +900,21 @@ class BuildServerController pkg_sync_period = l[idx,length].strip.to_i elsif l.start_with?("CHANGELOG_CHECK=") changelog_check = true if l[idx,length].strip =~ /true/i + elsif l.start_with?("DB_DSN=") + case l[idx,length].strip + when /^SQLite3:(.*)/i then + if $1.strip.empty? then db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" + else db_dsn = "SQLite3:#{$1.strip}" + end + when /^Mysql:(.*)/i then + db_dsn = "Mysql:#{$1}" + else + db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" + end + elsif l.start_with?("DB_USER=") + db_user = l[idx,length].strip if not l[idx,length].strip.empty? + elsif l.start_with?("DB_PASSWORD=") + db_passwd = l[idx,length].strip if not l[idx,length].strip.empty? else next end @@ -914,6 +959,11 @@ class BuildServerController # change log setting obj.changelog_check = changelog_check + # DB settring + obj.db_dsn = db_dsn if not db_dsn.nil? + obj.db_user = db_user + obj.db_passwd = db_passwd + # save config write_server_config( obj ) diff --git a/src/build_server/DistributionManager.rb b/src/build_server/DistributionManager.rb index e3c8e07..70cef6f 100644 --- a/src/build_server/DistributionManager.rb +++ b/src/build_server/DistributionManager.rb @@ -129,10 +129,9 @@ class DistributionManager # save def save_db() result = true - sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" begin # open DB - db = DBI.connect(sqlite_db_file) + db = DBI.connect("DBI:#{@server.db_dsn}", @server.db_user, @server.db_passwd) # distributions db.do "DELETE FROM distributions" @@ -156,17 +155,16 @@ class DistributionManager result = true @distributions = [] - sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" begin # open DB - db = DBI.connect(sqlite_db_file) + db = DBI.connect("DBI:#{@server.db_dsn}", @server.db_user, @server.db_passwd) begin db.do('ALTER TABLE distributions ADD COLUMN status VARCHAR(32) DEFAULT "OPEN"') rescue DBI::DatabaseError => e # do nothing end - + # distributions rs = db.execute "SELECT * FROM distributions" rs.fetch_hash do |row| diff --git a/src/build_server/ProjectManager.rb b/src/build_server/ProjectManager.rb index 99622c8..3f82503 100644 --- a/src/build_server/ProjectManager.rb +++ b/src/build_server/ProjectManager.rb @@ -254,10 +254,9 @@ class ProjectManager # save def save_db() result = true - sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" begin # open # - db = DBI.connect(sqlite_db_file) + db = DBI.connect("DBI:#{@server.db_dsn}", @server.db_user, @server.db_passwd) # delete all rows db.do "DELETE FROM projects" @@ -269,7 +268,12 @@ class ProjectManager db.do "INSERT INTO projects (name,type,password,dist_name) VALUES('#{prj.name}', '#{prj.type}', '#{prj.passwd}', '#{prj.dist_name}')" # OS - prj_id = db.select_one("select last_insert_rowid()")[0] + case @server.db_dsn + when /^SQLite3:/ then prj_id = db.select_one("select last_insert_rowid()")[0] + when /^Mysql:/ then prj_id = db.func(:insert_id) + else prj_id = db.select_one("select last_insert_rowid()")[0] + end + prj.os_list.each do |os| db.do "INSERT INTO project_os VALUES('#{prj_id}','#{os}')" end @@ -292,10 +296,9 @@ class ProjectManager result = true @projects = [] - sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" begin # open DB - db = DBI.connect(sqlite_db_file) + db = DBI.connect("DBI:#{@server.db_dsn}", @server.db_user, @server.db_passwd) # distributions rs = db.execute "SELECT * FROM projects" -- 2.34.1