Added build info
This commit is contained in:
2
Gemfile
2
Gemfile
@@ -34,3 +34,5 @@ gem "rugged", "~> 1.9"
|
|||||||
gem "sequel", "~> 5.89"
|
gem "sequel", "~> 5.89"
|
||||||
|
|
||||||
gem "ffi", "~> 1.17"
|
gem "ffi", "~> 1.17"
|
||||||
|
|
||||||
|
gem "ptools", "~> 1.5"
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ GEM
|
|||||||
mustermann (3.0.3)
|
mustermann (3.0.3)
|
||||||
ruby2_keywords (~> 0.0.1)
|
ruby2_keywords (~> 0.0.1)
|
||||||
nio4r (2.7.4)
|
nio4r (2.7.4)
|
||||||
|
ptools (1.5.0)
|
||||||
public_suffix (6.0.1)
|
public_suffix (6.0.1)
|
||||||
puma (6.6.0)
|
puma (6.6.0)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
@@ -174,6 +175,7 @@ DEPENDENCIES
|
|||||||
ffi (~> 1.17)
|
ffi (~> 1.17)
|
||||||
inifile (~> 3.0)
|
inifile (~> 3.0)
|
||||||
json (~> 1.8)
|
json (~> 1.8)
|
||||||
|
ptools (~> 1.5)
|
||||||
puma (~> 6.6)
|
puma (~> 6.6)
|
||||||
rackup (~> 2.2)
|
rackup (~> 2.2)
|
||||||
rugged (~> 1.9)
|
rugged (~> 1.9)
|
||||||
|
|||||||
70
app.rb
70
app.rb
@@ -9,6 +9,7 @@ Gem.paths = {
|
|||||||
require "rubygems"
|
require "rubygems"
|
||||||
require "sinatra"
|
require "sinatra"
|
||||||
require "puma"
|
require "puma"
|
||||||
|
require "ptools"
|
||||||
|
|
||||||
require_relative "classes/config"
|
require_relative "classes/config"
|
||||||
require_relative "classes/gitinfo"
|
require_relative "classes/gitinfo"
|
||||||
@@ -46,6 +47,7 @@ get "/" do
|
|||||||
@repos_number = repo_data.length
|
@repos_number = repo_data.length
|
||||||
@rcp_number = db.get_recips.length
|
@rcp_number = db.get_recips.length
|
||||||
@prj_number = prj.get_projects.length
|
@prj_number = prj.get_projects.length
|
||||||
|
@rpm_number = db.get_rpms.length
|
||||||
erb :index
|
erb :index
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -509,8 +511,12 @@ get "/prjgitf/:id/:git_id" do
|
|||||||
{ :file => item.delete_prefix(proj_path + "/"), :isdir => false }
|
{ :file => item.delete_prefix(proj_path + "/"), :isdir => false }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
if File.binary?(f_path)
|
||||||
|
@file_content = ["Двоичный файл"]
|
||||||
else
|
else
|
||||||
@file_content = File.readlines(f_path)
|
@file_content = File.readlines(f_path)
|
||||||
|
end
|
||||||
@files_list = Dir[File.join(File.dirname(f_path), "*")].map do |item|
|
@files_list = Dir[File.join(File.dirname(f_path), "*")].map do |item|
|
||||||
if File.directory?(item)
|
if File.directory?(item)
|
||||||
{ :file => item.delete_prefix(proj_path + "/"), :isdir => true }
|
{ :file => item.delete_prefix(proj_path + "/"), :isdir => true }
|
||||||
@@ -873,6 +879,70 @@ get "/rpminfo/:rpm_id" do
|
|||||||
end
|
end
|
||||||
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
|
not_found do
|
||||||
status 404
|
status 404
|
||||||
@page_name = "Кто-то потерялся"
|
@page_name = "Кто-то потерялся"
|
||||||
|
|||||||
@@ -61,7 +61,6 @@ class DBase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def get_recips()
|
def get_recips()
|
||||||
result = []
|
|
||||||
Recips.order(:id).map do |item|
|
Recips.order(:id).map do |item|
|
||||||
{ :fname => item[:filepath], :descr => item[:descr], :id => item[:id] }
|
{ :fname => item[:filepath], :descr => item[:descr], :id => item[:id] }
|
||||||
end
|
end
|
||||||
@@ -306,4 +305,25 @@ class DBase
|
|||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|||||||
@@ -46,3 +46,7 @@ end
|
|||||||
def get_rpm_paths(directory)
|
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 + "/") }
|
Dir.glob(File.join(directory, "**", "*")).reject { |f| File.directory?(f) }.select { |f| File.extname(f) == ".rpm" }.map { |f| f.delete_prefix(directory + "/") }
|
||||||
end
|
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
|
||||||
|
|||||||
37
views/buildinfo.erb
Normal file
37
views/buildinfo.erb
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
<%= erb :header %>
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">
|
||||||
|
<h3 class="bg-secondary-subtle text-center border-bottom border-primary-subtle rounded-1 pb-1 mb-2">
|
||||||
|
<a href="/prjedit/<%= ERB::Util.url_encode(@proj[:id]) %>"><%= @proj[:projname] %></a>
|
||||||
|
</h3>
|
||||||
|
<div class="pb-2">git репозиторий <a href="/prjgitf/<%= ERB::Util.url_encode(@proj[:id]) %>/<%= ERB::Util.url_encode(@repo[:id]) %>"><%= @repo[:reponame] %></a></div>
|
||||||
|
<div class="list-group">
|
||||||
|
<a href="/buildinfof/<%= ERB::Util.url_encode(@build_id) %>" class="list-group-item list-group-item-action list-group-item-dark icon-link"><i
|
||||||
|
class="bi bi-file-earmark"></i><span class="ms-2">process.log</span></a>
|
||||||
|
<% @logs_list.each do |item| %>
|
||||||
|
<a href="/buildinfof/<%= ERB::Util.url_encode(@build_id) %>?file=<%= ERB::Util.url_encode(item) %>" class="list-group-item list-group-item-action list-group-item-dark icon-link"><i
|
||||||
|
class="bi bi-file-earmark"></i><span class="ms-2"><%= File.basename(item) %></span></a>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
<div class="pb-2 pt-2 fw-bold">Собранные пакеты</div>
|
||||||
|
<div class="list-group">
|
||||||
|
<% @rpm_list.each do |item| %>
|
||||||
|
<a href="/rpminfo/<%= item[:id] %>" class="list-group-item list-group-item-action list-group-item-info icon-link"><i
|
||||||
|
class="bi bi-file"></i><span class="ms-2"><%= item[:fname] %></span></a>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-8">
|
||||||
|
<div class="hstack gap-3">
|
||||||
|
<div class="p-2">Содержимое отчета <%= @file_disp %> <a href="/buildinfofraw/?file=<%= ERB::Util.url_encode(@file_disp_raw) %>"><i class="bi bi-filetype-raw"></i></a></div>
|
||||||
|
</div>
|
||||||
|
<div class="border rounded-3 p-2 overflow-x-scroll">
|
||||||
|
<% @file_content.each do |item| %>
|
||||||
|
<p class="p-0 m-0 fw-light"><%= item %></p>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<%= erb :footer %>
|
||||||
63
views/buildslist.erb
Normal file
63
views/buildslist.erb
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<%= erb :header %>
|
||||||
|
<div class="container">
|
||||||
|
<table class="table table-striped table-hover">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">Номер сборки</th>
|
||||||
|
<th scope="col" class="text-center">Проект</th>
|
||||||
|
<th scope="col" class="text-center">git репозиторий</th>
|
||||||
|
<th scope="col" class="text-center">Дата сборки</th>
|
||||||
|
<th scope="col" class="text-center">Число собранных пакетов</th>
|
||||||
|
<th scope="col" class="text-center">Состояние</th>
|
||||||
|
<th scope="col" class="text-center">Перейти к сборке</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% @builds_list.each do |item| %>
|
||||||
|
<%
|
||||||
|
case item[:state]
|
||||||
|
when 0
|
||||||
|
st = "Идет сборка"
|
||||||
|
cl = "text-bg-secondary"
|
||||||
|
when 1
|
||||||
|
st = "Ошибка сборки"
|
||||||
|
cl = "text-bg-danger"
|
||||||
|
when 2
|
||||||
|
st = "Сборка успешно завершена"
|
||||||
|
cl = "text-bg-success"
|
||||||
|
else
|
||||||
|
st = "Неизвестно"
|
||||||
|
cl = "text-bg-light"
|
||||||
|
end
|
||||||
|
%>
|
||||||
|
<tr>
|
||||||
|
<td scope="row"><%= item[:buildid] %></td>
|
||||||
|
<td class="text-center"><a href="/prjedit/<%= ERB::Util.url_encode(item[:projid]) %>"><%= item[:prjname] %></a></td>
|
||||||
|
<td class="text-center"><a href="/prjgitf/<%= ERB::Util.url_encode(item[:projid]) %>/<%= ERB::Util.url_encode(item[:gitid]) %>"><%= item[:reponame] %></a></td>
|
||||||
|
<td class="text-center"><%= item[:createat] %></td>
|
||||||
|
<td class="text-center"><%= item[:pkgcnt] %></td>
|
||||||
|
<td class="text-center <%= cl %>">
|
||||||
|
<%= st %>
|
||||||
|
</td>
|
||||||
|
<td class="text-center"><a href="/buildinfof/<%= ERB::Util.url_encode(item[:buildid]) %>">Детальнее</a></td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
<nav aria-label="Навигация по доступным сборкам">
|
||||||
|
<ul class="pagination pagination-sm justify-content-center">
|
||||||
|
<% @max_pages.times.each do |item| %>
|
||||||
|
<% if (item+1) == @page %>
|
||||||
|
<li class="page-item active" aria-current="page">
|
||||||
|
<span class="page-link"><%= item+1 %></span>
|
||||||
|
</li>
|
||||||
|
<% else %>
|
||||||
|
<li class="page-item"><a class="page-link" href="/gitpackages/<%= ERB::Util.url_encode(@git_id) %>/?p=<%= item+1 %>"><%= item+1 %></a></li>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
<%= erb :footer %>
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
<path d="M8.186 1.113a.5.5 0 0 0-.372 0L1.846 3.5 8 5.961 14.154 3.5 8.186 1.113zM15 4.239l-6.5 2.6v7.922l6.5-2.6V4.24zM7.5 14.762V6.838L1 4.239v7.923l6.5 2.6zM7.443.184a1.5 1.5 0 0 1 1.114 0l7.129 2.852A.5.5 0 0 1 16 3.5v8.662a1 1 0 0 1-.629.928l-7.185 2.874a.5.5 0 0 1-.372 0L.63 13.09a1 1 0 0 1-.63-.928V3.5a.5.5 0 0 1 .314-.464L7.443.184z"></path>
|
<path d="M8.186 1.113a.5.5 0 0 0-.372 0L1.846 3.5 8 5.961 14.154 3.5 8.186 1.113zM15 4.239l-6.5 2.6v7.922l6.5-2.6V4.24zM7.5 14.762V6.838L1 4.239v7.923l6.5 2.6zM7.443.184a1.5 1.5 0 0 1 1.114 0l7.129 2.852A.5.5 0 0 1 16 3.5v8.662a1 1 0 0 1-.629.928l-7.185 2.874a.5.5 0 0 1-.372 0L.63 13.09a1 1 0 0 1-.63-.928V3.5a.5.5 0 0 1 .314-.464L7.443.184z"></path>
|
||||||
</svg></div>
|
</svg></div>
|
||||||
<div class="px-3">
|
<div class="px-3">
|
||||||
<h2 class="fw-bold mb-0">218</h2>
|
<h2 class="fw-bold mb-0"><%= @rpm_number %></h2>
|
||||||
<p class="mb-0">Пакетов</p>
|
<p class="mb-0">Пакетов</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user