diff --git a/Gemfile b/Gemfile index 8018e4e..c04c53e 100644 --- a/Gemfile +++ b/Gemfile @@ -34,3 +34,5 @@ gem "rugged", "~> 1.9" gem "sequel", "~> 5.89" gem "ffi", "~> 1.17" + +gem "ptools", "~> 1.5" diff --git a/Gemfile.lock b/Gemfile.lock index cfa9f60..90f9d74 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -103,6 +103,7 @@ GEM mustermann (3.0.3) ruby2_keywords (~> 0.0.1) nio4r (2.7.4) + ptools (1.5.0) public_suffix (6.0.1) puma (6.6.0) nio4r (~> 2.0) @@ -174,6 +175,7 @@ DEPENDENCIES ffi (~> 1.17) inifile (~> 3.0) json (~> 1.8) + ptools (~> 1.5) puma (~> 6.6) rackup (~> 2.2) rugged (~> 1.9) diff --git a/app.rb b/app.rb index 0b325c0..2ff660f 100644 --- a/app.rb +++ b/app.rb @@ -9,6 +9,7 @@ Gem.paths = { require "rubygems" require "sinatra" require "puma" +require "ptools" require_relative "classes/config" require_relative "classes/gitinfo" @@ -46,6 +47,7 @@ get "/" do @repos_number = repo_data.length @rcp_number = db.get_recips.length @prj_number = prj.get_projects.length + @rpm_number = db.get_rpms.length erb :index end end @@ -510,7 +512,11 @@ get "/prjgitf/:id/:git_id" do end end else - @file_content = File.readlines(f_path) + if File.binary?(f_path) + @file_content = ["Двоичный файл"] + else + @file_content = File.readlines(f_path) + end @files_list = Dir[File.join(File.dirname(f_path), "*")].map do |item| if File.directory?(item) { :file => item.delete_prefix(proj_path + "/"), :isdir => true } @@ -873,6 +879,70 @@ get "/rpminfo/:rpm_id" do end end +get "/builds" do + @page_name = "Список всех сборок" + builds_lst = db.get_builds + if params["p"].nil? + @page = 1 + else + @page = params["p"].to_i + if @page < 1 + @page = 1 + else + @page = @page + 1 + end + end + if builds_lst.nil? + builds_lst = [] + end + items_per_page = cfg.get_items_per_page + @builds_list = builds_lst[(@page - 1) * items_per_page, items_per_page] + @max_pages = builds_lst.length / items_per_page + if (@max_pages * items_per_page) != builds_lst.length + @max_pages = @max_pages + 1 + end + erb :buildslist +end + +get "/buildinfof/:build_id" do + build_info = db.get_build_info(params["build_id"]) + if build_info.nil? + print_error_page(503, "Сборки не сущестует") + else + if build_info[:result] == 0 + redirect url("/buildinfo/#{params["build_id"].to_i}") + else + result_path = build_info[:logpath] + if File.exist?(result_path) + @logs_list = get_log_paths_success(result_path) + @process_log = File.join(result_path, "process.log") + @rpm_list = db.get_rpms_for_build(params["build_id"]) + unless params["file"].nil? + file_name = params["file"] + else + file_name = @process_log + end + unless File.exist?(file_name) + print_error_page(503, "Запрашиваемый файл отсутствует") + else + @file_content = [] + File.readlines(file_name).last(100).each do |line| + @file_content << line + end + @file_disp = File.basename(file_name) + @file_disp_raw = file_name + @build_id = params["build_id"] + @repo = db.get_repo_info_by_id(build_info[:repo_id]) + @proj = db.proj(build_info[:proj_id]) + erb :buildinfo + end + else + print_error_page(503, "Для данной сборки уже не существует результатов") + end + end + end +end + not_found do status 404 @page_name = "Кто-то потерялся" diff --git a/classes/db.rb b/classes/db.rb index 8194132..bd2f1fc 100644 --- a/classes/db.rb +++ b/classes/db.rb @@ -61,7 +61,6 @@ class DBase end def get_recips() - result = [] Recips.order(:id).map do |item| { :fname => item[:filepath], :descr => item[:descr], :id => item[:id] } end @@ -306,4 +305,25 @@ class DBase nil end end + + def get_builds() + $DDB["select t1.id as buildid, t1.create_at as createat, t1.result as state, t2.reponame as reponame, t2.id as gitid, t3.id as projid, t3.projname as prjname, count(*) as pkgcnt from buildtask as t1 join repos as t2 on t1.repo_id = t2.id join projects as t3 on t1.proj_id = t3.id join build_rpm as t4 on t4.build_id = t1.id group by buildid, createat, state, reponame, projid, prjname, gitid order by t1.id"].all + end + + def get_build_info(build_id) + BuildTask[build_id.to_i] + end + + def get_rpms_for_build(build_id) + bld_info = BuildRpms.where(build_id: build_id.to_i) + bld_info.map do |item| + result = Rpms[item[:rpm_id]] + result[:fname] = File.basename(result[:savepath]) + result + end + end + + def get_rpms() + Rpms.order(:id).all + end end diff --git a/classes/utilities.rb b/classes/utilities.rb index c6b016f..868e02b 100644 --- a/classes/utilities.rb +++ b/classes/utilities.rb @@ -46,3 +46,7 @@ end def get_rpm_paths(directory) Dir.glob(File.join(directory, "**", "*")).reject { |f| File.directory?(f) }.select { |f| File.extname(f) == ".rpm" }.map { |f| f.delete_prefix(directory + "/") } end + +def get_log_paths_success(directory) + Dir.glob(File.join(directory, "**", "*")).reject { |f| File.directory?(f) }.select { |f| File.extname(f) == ".log" }.reject { |f| File.basename(f) == "process.log" } +end diff --git a/views/buildinfo.erb b/views/buildinfo.erb new file mode 100644 index 0000000..29379a8 --- /dev/null +++ b/views/buildinfo.erb @@ -0,0 +1,37 @@ +<%= erb :header %> +
Номер сборки | +Проект | +git репозиторий | +Дата сборки | +Число собранных пакетов | +Состояние | +Перейти к сборке | +
---|---|---|---|---|---|---|
<%= item[:buildid] %> | +<%= item[:prjname] %> | +<%= item[:reponame] %> | +<%= item[:createat] %> | +<%= item[:pkgcnt] %> | ++ <%= st %> + | +Детальнее | +
Пакетов