Added build info

master
alexey 3 weeks ago
parent f04f926bd8
commit e6c5742ea4

@ -34,3 +34,5 @@ gem "rugged", "~> 1.9"
gem "sequel", "~> 5.89"
gem "ffi", "~> 1.17"
gem "ptools", "~> 1.5"

@ -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)

@ -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 = "Кто-то потерялся"

@ -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

@ -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

@ -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 %>

@ -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>
</svg></div>
<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>
</div>
</div>

Loading…
Cancel
Save