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 "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)
|
||||
|
||||
72
app.rb
72
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 = "Кто-то потерялся"
|
||||
|
||||
@@ -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
|
||||
|
||||
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>
|
||||
</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>
|
||||
|
||||
Reference in New Issue
Block a user