From 84cbc35c6187572aee7e8b9b04ead35b9a1f1390 Mon Sep 17 00:00:00 2001 From: dibs Date: Tue, 13 Nov 2012 15:59:32 +0900 Subject: [PATCH] [Title] modify dibs web server --- dibs-web/Gemfile | 45 ++++++ dibs-web/app/controllers/jobs_controller.rb | 15 +- .../app/controllers/projects_controller.rb | 47 +++++-- dibs-web/app/controllers/utils.rb | 23 +++- dibs-web/public/index.html | 26 ++-- dibs-web/public/javascripts/admin-group.js | 67 +++++++-- dibs-web/public/javascripts/admin-project.js | 33 ++--- dibs-web/public/javascripts/jobs.js | 2 +- dibs-web/public/javascripts/main.js | 28 ++++ dibs-web/public/javascripts/projects.js | 64 +++++++-- dibs-web/public/javascripts/session.js | 7 +- dibs-web/public/upload.html | 130 +++++++++--------- 12 files changed, 339 insertions(+), 148 deletions(-) create mode 100644 dibs-web/Gemfile diff --git a/dibs-web/Gemfile b/dibs-web/Gemfile new file mode 100644 index 0000000..e8419ca --- /dev/null +++ b/dibs-web/Gemfile @@ -0,0 +1,45 @@ +source 'https://rubygems.org' + +gem 'rails', '3.2.8' + +# Bundle edge Rails instead: +# gem 'rails', :git => 'git://github.com/rails/rails.git' + +gem 'sqlite3' + +gem 'json' + +# Gems used only for assets and not required +# in production environments by default. +group :assets do + gem 'sass-rails', '~> 3.2.3' + gem 'coffee-rails', '~> 3.2.1' + + # See https://github.com/sstephenson/execjs#readme for more supported runtimes + # gem 'therubyracer', :platforms => :ruby + + gem 'uglifier', '>= 1.0.3' +end + +gem 'jquery-rails' + +# user +gem 'builder' + +# For encrypt password +gem "bcrypt-ruby", :require => "bcrypt" + +# To use ActiveModel has_secure_password +# gem 'bcrypt-ruby', '~> 3.0.0' + +# To use Jbuilder templates for JSON +# gem 'jbuilder' + +# Use unicorn as the app server +# gem 'unicorn' + +# Deploy with Capistrano +# gem 'capistrano' + +# To use debugger +# gem 'ruby-debug' diff --git a/dibs-web/app/controllers/jobs_controller.rb b/dibs-web/app/controllers/jobs_controller.rb index 0ed309d..ab726bd 100644 --- a/dibs-web/app/controllers/jobs_controller.rb +++ b/dibs-web/app/controllers/jobs_controller.rb @@ -135,6 +135,19 @@ puts request_page_number doc.UserName(job.user_name) doc.LogLink("/jobs/log/#{job.id}") } + child_cnt = Job.count(:conditions => ["parent_id = ?", job.id]) + if (job.job_attribute == "MULTI" and child_cnt == 0) + doc.Job { + doc.Id(job.id) + doc.Distribution(job.distribution) + doc.ProjectName(job.project_name) + doc.JobAttribute(job.job_type) + doc.Os("MULTI") + doc.Status(job.status) + doc.UserName(job.user_name) + doc.LogLink("/jobs/log/#{job.id}") + } + end } doc.PageList{ @@ -168,7 +181,7 @@ puts request_page_number line = params[:line].to_i file_name = "log" - directory = "~/sdk-build/test/build-server.basic1/buildsvr01/jobs/#{id}" + directory = "~/sdk-build/test/build-server.multi-svr1/buildsvr01/jobs/#{id}" # create the file path path = File.join(directory, file_name) diff --git a/dibs-web/app/controllers/projects_controller.rb b/dibs-web/app/controllers/projects_controller.rb index 74c6eea..f963ca8 100644 --- a/dibs-web/app/controllers/projects_controller.rb +++ b/dibs-web/app/controllers/projects_controller.rb @@ -58,11 +58,11 @@ class ProjectsController < ApplicationController if (project_list.length > 1) or (not (project_list[0].nil? or project_list[0].empty?)) # execute build command - ret = Utils.sbi_build_command(build_type, dist_name, project_list, os_list, password_list) + ret = Utils.sbi_build_command(build_type, dist_name, project_list, os_list, password_list,get_user_id) - render :text => "Success", :content_type => "text/json" + render :json => { :success => "OK!" } else - render :text => "Can't build project", :content_type => "text/xml" + render :text => "Can't build project", :status => 406 end end @@ -94,9 +94,22 @@ class ProjectsController < ApplicationController projects.each do |project| if project.ptype.eql? "BINARY" - doc.BinaryProject { - doc.projectName(project.name) - } + bin = ProjectBin.find(:first, :conditions => ["prj_id = ?", project.id]) + if project_access_list.include? project.id + doc.BinaryProject { + doc.ProjectName(project.name) + if not bin.nil? then + doc.PackageName(bin.pkg_name) + end + } + else + doc.OtherProject { + doc.ProjectName(project.name) + if not bin.nil? then + doc.PackageName(bin.pkg_name) + end + } + end else prjOsList = "" prjOsLists = ProjectOs.find(:all, :conditions => ["prj_id = ?", project.id]) @@ -111,13 +124,13 @@ class ProjectsController < ApplicationController if project_access_list.include? project.id doc.Project { - doc.projectName(project.name) - doc.osList(prjOsList) + doc.ProjectName(project.name) + doc.OsList(prjOsList) } else doc.OtherProject { - doc.projectName(project.name) - doc.osList(prjOsList) + doc.ProjectName(project.name) + doc.OsList(prjOsList) } end end @@ -159,14 +172,22 @@ class ProjectsController < ApplicationController end def binaryFileUpload - uploaded_io = params[:datafile] -puts uploaded_io + distribution = params[:distribution] + project = params[:project] + uploaded_io = params[:file] file_path = Rails.root.join('public', 'data', uploaded_io.original_filename) File.open(file_path, 'wb') do |file| file.write(uploaded_io.read) end - ret = Utils.sbi_register_command(build_type, dist_name, project_list, os_list, password_list) + + project = Project.find(:first, :conditions => ["name = ? AND dist_name =?", project, distribution]) + if project.nil? + render :nothing => true + return + end + + ret = Utils.sbi_register_command(distribution, file_path, project.password, get_user_id) render :nothing => true return diff --git a/dibs-web/app/controllers/utils.rb b/dibs-web/app/controllers/utils.rb index 96d4348..4b478c6 100644 --- a/dibs-web/app/controllers/utils.rb +++ b/dibs-web/app/controllers/utils.rb @@ -51,15 +51,19 @@ class Utils return server end - def Utils.sbi_build_command(sub_cmd, distribution, project_list, os_list, password_list) + def Utils.sbi_build_command(sub_cmd, distribution, project_list, os_list, password_list, email) options = "-d #{BUILD_SERVER_ADDRESS} --async " - options = options + "-N #{project_list.join(",")} -D #{distribution} " + options = options + " -N #{project_list.join(",")} -D #{distribution} " if (os_list.length > 1) or (not os_list[0].nil?) - options = options + "-o #{os_list.join(",")} " + options = options + " -o #{os_list.join(",")} " end if (password_list.length > 1) or (not (password_list[0].nil? or password_list[0].empty?)) - options = options + "-w #{password_list.join(",")} " + options = options + " -w #{password_list.join(",")} " end + if not email.nil? + options = options + " -U #{email} " + end + cmd = "#{DIBS_PATH}/build-cli #{sub_cmd} #{options}" puts "Build command" puts "[[[#{cmd}]]]" @@ -67,13 +71,18 @@ puts "[[[#{cmd}]]]" return execute_shell_return(cmd) end - def Utils.sbi_register_command(distribution, file_path, password) + def Utils.sbi_register_command(distribution, file_path, password, email) options = "-P #{file_path} -d #{BUILD_SERVER_ADDRESS} -D #{distribution}" - if (password_list.length > 1) or (not (password_list[0].nil? or password_list[0].empty?)) - options = options + "-w #{password_list.join(",")}" + if (not password.nil?) + options = options + " -w #{password}" + end + if not email.nil? + options = options + " -U #{email} " end cmd = "#{DIBS_PATH}/build-cli register #{options}" +puts "Register command" +puts "[[[#{cmd}]]]" return execute_shell_return(cmd) end diff --git a/dibs-web/public/index.html b/dibs-web/public/index.html index ada83bd..dbc4c13 100644 --- a/dibs-web/public/index.html +++ b/dibs-web/public/index.html @@ -37,11 +37,10 @@
-

Introduction

-

This template is for a master-detail structured application.

+

Welcome to DIBS

    -
  • Left bars to navigate details (master) -
  • Right content pane (detail) +
  • BUILD is menu for general user. +
  • ADMIN is menu for administrator.
@@ -91,13 +90,13 @@
- + - + - + - +
@@ -149,16 +148,7 @@

Binary Project

- -
-
-
- -
-
- +
diff --git a/dibs-web/public/javascripts/admin-group.js b/dibs-web/public/javascripts/admin-group.js index 5687c80..130638f 100644 --- a/dibs-web/public/javascripts/admin-group.js +++ b/dibs-web/public/javascripts/admin-group.js @@ -128,8 +128,14 @@ function modifyGroup() { data: JSON.stringify({ ChangeInfoList: changeInfoList }), contentType: "application/json; charset=utf-8", dataType: "json", - error: function(errMsg) { - alert(errMsg); + error: function(jqXHR) { + switch (jqXHR.status) { + case 401: + expireSession(); + break; + default: + alert(jqXHR); + } } }); } @@ -160,8 +166,14 @@ function addGroup() { data: JSON.stringify({ ChangeInfoList: changeInfoList }), contentType: "application/json; charset=utf-8", dataType: "json", - failure: function(errMsg) { - alert(errMsg); + error: function(jqXHR) { + switch (jqXHR.status) { + case 401: + expireSession(); + break; + default: + alert(jqXHR); + } } }); } @@ -235,14 +247,20 @@ function queryAdminGroup() { type: 'GET', dataType: 'xml', timeout: 1000, - error: function() { - alert('Error loading XML document'); - }, success: function(xml) { var projectList = $(xml).find("Groups").find("AllProject"); var groupList = $(xml).find("Groups").find("Group"); fillGroupTable(projectList, groupList); + }, + error: function(jqXHR) { + switch (jqXHR.status) { + case 401: + expireSession(); + break; + default: + alert(jqXHR); + } } }); } @@ -267,7 +285,14 @@ function removeGroup(index) { data: JSON.stringify({ ChangeInfoList: changeInfoList }), contentType: "application/json; charset=utf-8", dataType: "json", - error: function(errMsg) { + error: function(jqXHR) { + switch (jqXHR.status) { + case 401: + expireSession(); + break; + default: + alert(jqXHR); + } } }); } @@ -288,14 +313,20 @@ function setupModifyGroup() { type: 'GET', dataType: 'xml', timeout: 1000, - error: function() { - alert('Error loading XML document'); - }, success: function(xml) { var fullProjectList = $(xml).find("GroupInfo").find("AllProject"); - var projectIdList = $(xml).find("GroupInfo").find("Group").find("ProjectList").text(); + var projectIdList = $(xml).find("GroupInfo").find("Group").find("ProjectList").text().split(","); generateModifyGroupProjectSelect(fullProjectList, projectIdList); + }, + error: function(jqXHR) { + switch (jqXHR.status) { + case 401: + expireSession(); + break; + default: + alert(jqXHR); + } } }); } @@ -306,13 +337,19 @@ function setupAddGroup() { type: 'GET', dataType: 'xml', timeout: 1000, - error: function() { - alert('Error loading XML document'); - }, success: function(xml) { var fullProjectList = $(xml).find("AllProject").find("Project"); generateAddGroupProjectSelect(fullProjectList); + }, + error: function(jqXHR) { + switch (jqXHR.status) { + case 401: + expireSession(); + break; + default: + alert(jqXHR); + } } }); } diff --git a/dibs-web/public/javascripts/admin-project.js b/dibs-web/public/javascripts/admin-project.js index 7390de0..ccd1dbe 100644 --- a/dibs-web/public/javascripts/admin-project.js +++ b/dibs-web/public/javascripts/admin-project.js @@ -23,9 +23,15 @@ function addDistribution() { success: function() { $.mobile.changePage("#adminProject"); }, - error: function(errMsg) { - alert('errMsg'); - $.mobile.changePage("#adminProject"); + error: function(jqXHR) { + switch (jqXHR.status) { + case 401: + expireSession(); + break; + default: + alert(jqXHR); + $.mobile.changePage("#adminProject"); + } } }); } @@ -256,11 +262,8 @@ function modifyGitProject() { }); } -function removeProject(button) { +function removeProject(projectType, tableIndex, projectName ) { var distName = $("#select-admin-distribution option:selected").val(); - var projectType = button.id.split(':')[1].toUpperCase(); - var tableIndex = button.id.split(':')[2]; - var projectName = button.id.split(':')[3]; var r=confirm("Project ["+projectName+"] is removed!!!"); if (r==false) @@ -367,10 +370,9 @@ function updateProjectInfo(projectList) { button.setAttribute('data-rel','dialog'); button.setAttribute('data-mini','true'); button.setAttribute('onClick','popupModifyProject(\"'+name+'\")'); - button.setAttribute('id',"input:modifyGitProject:"+name); + button.setAttribute('class','binaryProjectTableButton'); button.innerHTML = " " cell.appendChild(button); - $("#input\\:modifyGitProject\\:"+name).button(); cell = row.insertCell(-1); var button = document.createElement('input'); @@ -378,9 +380,9 @@ function updateProjectInfo(projectList) { button.setAttribute('id','button:git:'+projectIdx+':'+name); button.setAttribute('data-mini','true'); button.setAttribute('name',name); - button.setAttribute('onClick','removeProject(this)'); + button.setAttribute('class','binaryProjectTableButton'); + button.setAttribute('onClick','removeProject(\"GIT\",'+binaryProjectIdx+',\"'+name+'\"'+')'); cell.appendChild(button); - $("#button\\:git\\:"+projectIdx+"\\:"+name).button(); projectIdx = projectIdx + 1; } @@ -407,19 +409,17 @@ function updateProjectInfo(projectList) { button.setAttribute('data-mini','true'); button.setAttribute('data-rel','dialog'); button.setAttribute('onClick','popupModifyProject(\"'+name+'\")'); - button.setAttribute('id','input:modifyBinaryProject:'+name); + button.setAttribute('class','binaryProjectTableButton'); cell.appendChild(button); - $("#input\\:modifyBinaryProject\\:"+name).button(); cell = row.insertCell(-1); var button = document.createElement('input'); button.setAttribute('type','button'); - button.setAttribute('id','button:binary:'+binaryProjectIdx+':'+name); + button.setAttribute('class','binaryProjectTableButton'); button.setAttribute('data-mini','true'); button.setAttribute('name',name); - button.setAttribute('onClick','removeProject(this)'); + button.setAttribute('onClick','removeProject(\"BINARY\",'+binaryProjectIdx+',\"'+name+'\"'+')'); cell.appendChild(button); - $("#button\\:binary\\:"+binaryProjectIdx+"\\:"+name).button(); binaryProjectIdx = binaryProjectIdx + 1; } @@ -428,6 +428,7 @@ function updateProjectInfo(projectList) { }); + $(".binaryProjectTableButton").button(); $(".groupProjectList").collapsible(); } diff --git a/dibs-web/public/javascripts/jobs.js b/dibs-web/public/javascripts/jobs.js index 7e7471e..c17ec1b 100644 --- a/dibs-web/public/javascripts/jobs.js +++ b/dibs-web/public/javascripts/jobs.js @@ -10,7 +10,7 @@ function queryJobList(requestUrl) { dataType: 'xml', timeout: 1000, error: function(jqXHR) { - errorProcess(jqXHR.status, ""); + errorProcess(jqXHR.status); }, success: function(xml) { $("#jobtable tr:not(:first)").remove(); diff --git a/dibs-web/public/javascripts/main.js b/dibs-web/public/javascripts/main.js index fe761f5..46785dc 100644 --- a/dibs-web/public/javascripts/main.js +++ b/dibs-web/public/javascripts/main.js @@ -18,6 +18,14 @@ $( document ).bind( "pagechange", function( event, data ){ if($.mobile.activePage.attr('id') == 'index') { } + else if($.mobile.activePage.attr('id') == 'signup') + { + clearFormData('signupForm'); + } + else if($.mobile.activePage.attr('id') == 'login') + { + clearFormData('loginForm'); + } else if($.mobile.activePage.attr('id') == 'projects') { queryDistribution(); @@ -100,6 +108,7 @@ function errorProcess(httpStatus){ break; } } + //$(document).ready(function() { // var hdhtml = $($.mobile.activePage).children('div').eq(0).clone(); // var fthtml = $($.mobile.activePage).children('div').eq(2).clone(); @@ -114,3 +123,22 @@ function errorProcess(httpStatus){ // $('div:jqmData(role="page")').prepend(hdhtml).append(fthtml); // } //}); + +function clearFormData(elementId){ + $("#"+elementId).find(':input').each(function() { + switch(this.type) { + case 'text': + case 'password': + case 'select-multiple': + case 'select-one': + case 'textarea': + $(this).val(''); + break; + case 'checkbox': + case 'radio': + $(this).checked = false; + break; + } + }); +} + diff --git a/dibs-web/public/javascripts/projects.js b/dibs-web/public/javascripts/projects.js index cd270ab..379d455 100644 --- a/dibs-web/public/javascripts/projects.js +++ b/dibs-web/public/javascripts/projects.js @@ -59,8 +59,8 @@ function addTableRow(supportedOs, projectList, otherProjectList) { var index = 2; projectList.each(function(){ - var name = $(this).find("projectName").text(); - var osLists = $(this).find("osList").text(); + var name = $(this).find("ProjectName").text(); + var osLists = $(this).find("OsList").text(); var osList = osLists.split(","); var row = projectTable.insertRow(-1); @@ -107,7 +107,7 @@ function addTableRow(supportedOs, projectList, otherProjectList) { }); otherProjectList.each(function(){ - var name = $(this).find("projectName").text(); + var name = $(this).find("ProjectName").text(); var row = projectTable.insertRow(-1); var cell = row.insertCell(0); @@ -133,29 +133,62 @@ function addTableRow(supportedOs, projectList, otherProjectList) { }); } -function addBinaryTableRow(binaryProjectList) { +function addBinaryTableRow(binaryProjectList, otherProjectList) { var binaryProjectTable = document.getElementById("binaryProjectTable"); var row = binaryProjectTable.insertRow(-1); var thCell = document.createElement('th'); thCell.innerHTML = "Project"; row.appendChild(thCell); thCell = document.createElement('th'); - thCell.innerHTML = "Status"; + thCell.innerHTML = "Package name"; + row.appendChild(thCell); + thCell = document.createElement('th'); + thCell.innerHTML = "Register"; row.appendChild(thCell); /* insert binary project in binary project table */ binaryProjectList.each(function(){ - var name = $(this).find("projectName").text(); + var name = $(this).find("ProjectName").text(); + var packageName = $(this).find("PackageName").text(); + var row = ''+name+''; + row += '' + packageName + '' + row += 'REGISTER'; + row += '' + + $("#binaryProjectTable tr:last").after(row); + }); + + otherProjectList.each(function(){ + var name = $(this).find("ProjectName").text(); + var packageName = $(this).find("PackageName").text(); var row = binaryProjectTable.insertRow(-1); - var cell = row.insertCell(-1); + /* add project name */ + var cell = row.insertCell(0); + cell.setAttribute('style', 'text-align: left'); + cell.setAttribute('bgcolor', '#c0c0c0'); cell.innerHTML = name; - - /* add empty cell for status */ + + /* add package name */ + cell = row.insertCell(-1); + cell.setAttribute('style', 'text-align: left'); + cell.setAttribute('bgcolor', '#c0c0c0'); + cell.innerHTML = packageName; + + /* add empty cell for register */ cell = row.insertCell(-1); - cell.setAttribute('id', "table"+":"+name); + cell.setAttribute('style', 'text-align: left'); + cell.setAttribute('bgcolor', '#c0c0c0'); cell.innerHTML = ""; }); + + $('.binary_project_button').button(); + $('.binary_project_button').popupWindow({ + height:200, + width:400, + top:50, + left:50 + }); } function buildProject(type) { @@ -185,7 +218,8 @@ function buildProject(type) { contentType: "application/json; charset=utf-8", dataType: "json", success: function() { - alert("test"); + alert("Build started! Move to jobs page"); + $.mobile.changePage("#jobs"); }, error: function(jqXHR) { switch (jqXHR.status) { @@ -212,7 +246,8 @@ function queryProjectList() { addTableRow( $(xml).find("ProjectInfo").find("BuildServerInfo").find("supportedOs"), $(xml).find("ProjectInfo").find("Project"), $(xml).find("ProjectInfo").find("OtherProject")); - addBinaryTableRow( $(xml).find("ProjectInfo").find("BinaryProject")); + addBinaryTableRow( $(xml).find("ProjectInfo").find("BinaryProject"), + $(xml).find("ProjectInfo").find("OtherProject")); } }); } @@ -246,3 +281,8 @@ function queryDistribution() { } }); } + +function uploadBinaryName(project_name) { + localStorage.distibutionName = $("#select-distribution option:selected").val(); + localStorage.uploadBinaryProjectName = project_name; +} diff --git a/dibs-web/public/javascripts/session.js b/dibs-web/public/javascripts/session.js index 845829b..2b7ada8 100644 --- a/dibs-web/public/javascripts/session.js +++ b/dibs-web/public/javascripts/session.js @@ -48,10 +48,11 @@ $(function(){ data: formData, timeout: 1000, error: function() { + $inputs.removeAttr("disabled"); alert('Error loading XML document'); }, success: function(xml) { - $inputs.attr("abled", "abled"); + $inputs.removeAttr("disabled"); $(xml).find("LogInInfo").each(function(){ var succ = $(this).find("Success").text(); var email = $(this).find("UserInfo").find("Email").text(); @@ -59,6 +60,8 @@ $(function(){ localStorage.sessionInfoEmail = email; localStorage.sessionInfoName = name; + clearFormData('loginForm'); + console.log(document.cookie); var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { @@ -124,7 +127,7 @@ $(function(){ if(succ == "TRUE") { - $('.clearable').val(""); + clearFormData('signupForm'); $.mobile.changePage("#index"); } else diff --git a/dibs-web/public/upload.html b/dibs-web/public/upload.html index 0846e2b..59c3d7d 100644 --- a/dibs-web/public/upload.html +++ b/dibs-web/public/upload.html @@ -1,66 +1,70 @@ - - - - - -
- -
+ + + + + + +
- + + + + -- 2.34.1