From 328067fb82c2f97e158cd8bb549bb85f4abbba70 Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Tue, 20 Feb 2018 16:36:20 +0100 Subject: [PATCH] [frontend] Introduces ProjectLogEntry view If you just want to check what happened project wide in the last couple of hours to find the cause of some problem. There is already the RSS feed for this but it's harder to skim than a nice *cough* web view. --- .../webui/application/project.scss | 4 ++++ .../controllers/webui/project_controller.rb | 6 +++++- src/api/app/helpers/webui/webui_helper.rb | 2 +- src/api/app/models/project_log_entry.rb | 2 ++ .../app/views/webui/project/_tabs.html.erb | 1 + .../app/views/webui/project/pulse.html.haml | 19 +++++++++++++++++++ src/api/config/routes.rb | 1 + ...80214132015_project_log_entry_user_name.rb | 4 ++-- 8 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 src/api/app/views/webui/project/pulse.html.haml diff --git a/src/api/app/assets/stylesheets/webui/application/project.scss b/src/api/app/assets/stylesheets/webui/application/project.scss index a201ce83fc7..dfa20b4dc17 100644 --- a/src/api/app/assets/stylesheets/webui/application/project.scss +++ b/src/api/app/assets/stylesheets/webui/application/project.scss @@ -99,3 +99,7 @@ table.buildstatus { th.buildstatus img { margin-bottom: -3px; } + +nav.pagination { + text-align: center; +} diff --git a/src/api/app/controllers/webui/project_controller.rb b/src/api/app/controllers/webui/project_controller.rb index 7a6b1d966b5..bc600b81fe6 100644 --- a/src/api/app/controllers/webui/project_controller.rb +++ b/src/api/app/controllers/webui/project_controller.rb @@ -19,7 +19,7 @@ class Webui::ProjectController < Webui::WebuiController :status, :maintained_projects, :add_maintained_project_dialog, :add_maintained_project, :remove_maintained_project, :maintenance_incidents, :unlock_dialog, :unlock, :save_person, :save_group, :remove_role, - :move_path, :save_prjconf, :clear_failed_comment] + :move_path, :save_prjconf, :clear_failed_comment, :pulse] # TODO: check if get_by_name or set_by_name is used for save_prjconf before_action :set_project_by_name, only: [:save_meta, :save_prjconf] @@ -92,6 +92,10 @@ def subprojects @siblings = @project.siblingprojects end + def pulse + @pulse = @project.project_log_entries.page(params[:page]) + end + def new @project = Project.new @project.name = params[:name] if params[:name] diff --git a/src/api/app/helpers/webui/webui_helper.rb b/src/api/app/helpers/webui/webui_helper.rb index bc9b4a645e7..1088413ad9c 100644 --- a/src/api/app/helpers/webui/webui_helper.rb +++ b/src/api/app/helpers/webui/webui_helper.rb @@ -188,7 +188,7 @@ def description_wrapper(description) end def is_advanced_tab? - action_name.in?(['prjconf', 'index', 'meta', 'status']) + action_name.in?(['prjconf', 'index', 'meta', 'status', 'pulse']) end def sprite_tag(icon, opts = {}) diff --git a/src/api/app/models/project_log_entry.rb b/src/api/app/models/project_log_entry.rb index 0ea73d16e24..f977f57b57f 100644 --- a/src/api/app/models/project_log_entry.rb +++ b/src/api/app/models/project_log_entry.rb @@ -67,6 +67,8 @@ def additional_info def self.username_from(payload) USERNAME_KEYS.each do |key| username = payload[key] + # FIXME: Why is commenter `id`` when everything else is `login`? + username = User.find_by(id: payload[key]).try(:login) if key == 'commenter' return username unless username.blank? || username == 'unknown' end return diff --git a/src/api/app/views/webui/project/_tabs.html.erb b/src/api/app/views/webui/project/_tabs.html.erb index 4ce03fa3ec6..3d5ca68aa06 100644 --- a/src/api/app/views/webui/project/_tabs.html.erb +++ b/src/api/app/views/webui/project/_tabs.html.erb @@ -38,6 +38,7 @@ <%= tab 'attribute', 'Attributes', :controller => :attribute, :project => @project, :action => 'index' %> <%= tab 'meta', "Meta", :controller => :project, :action => :meta %> <%= tab 'status', 'Status', :controller => :project, :action => :status unless @project.defines_remote_instance? || @is_maintenance_project %> + <%= tab 'pulse', 'Pulse', :controller => :project, :action => :pulse %> <% end -%> diff --git a/src/api/app/views/webui/project/pulse.html.haml b/src/api/app/views/webui/project/pulse.html.haml new file mode 100644 index 00000000000..1b7b4f8d9c6 --- /dev/null +++ b/src/api/app/views/webui/project/pulse.html.haml @@ -0,0 +1,19 @@ +- @pagetitle = "Pulse of #{@project}" +- project_bread_crumb 'Pulse' + + += render partial: 'webui/project/tabs' +%h3 Pulse of #{@project} +- @pulse.each do |log_entry| + %p + • + = log_entry.event_type.camelcase.prepend('Event::').constantize.description + - if log_entry.package_name + (#{link_to(log_entry.package_name, package_show_path(@project.name, log_entry.package_name))}) + - if log_entry.user_name + by #{link_to(log_entry.user_name, user_show_path(log_entry.user_name))} + - if log_entry.bs_request + via request #{link_to("##{log_entry.bs_request.number}", request_show_path(log_entry.bs_request.number))} + = fuzzy_time(log_entry.datetime) + += paginate @pulse diff --git a/src/api/config/routes.rb b/src/api/config/routes.rb index e265cdb8999..d93d8c0d21c 100644 --- a/src/api/config/routes.rb +++ b/src/api/config/routes.rb @@ -283,6 +283,7 @@ def self.public_or_about_path?(request) post 'project/remove_maintained_project/:project' => :remove_maintained_project, constraints: cons get 'project/maintenance_incidents/:project' => :maintenance_incidents, constraints: cons get 'project/list_incidents/:project' => :list_incidents, constraints: cons + get 'project/pulse/:project' => :pulse, constraints: cons get 'project/unlock_dialog' => :unlock_dialog post 'project/unlock' => :unlock end diff --git a/src/api/db/data/20180214132015_project_log_entry_user_name.rb b/src/api/db/data/20180214132015_project_log_entry_user_name.rb index 52325a02321..036678431a3 100644 --- a/src/api/db/data/20180214132015_project_log_entry_user_name.rb +++ b/src/api/db/data/20180214132015_project_log_entry_user_name.rb @@ -2,7 +2,7 @@ class ProjectLogEntryUserName < ActiveRecord::Migration[5.1] def up ProjectLogEntry.where('event_type like "%comment_for%"').in_batches do |log_entry| user = User.find_by(id: log_entry.user_name).try(:login) - user ||= '_nobody_' + user ||= User::NOBODY_LOGIN # rubocop:disable Rails/SkipsModelValidations log_entry.update_attribute(user_name: user) # rubocop:enable Rails/SkipsModelValidations @@ -12,7 +12,7 @@ def up def down ProjectLogEntry.where('event_type like "%comment_for%"').in_batches do |log_entry| user = User.find_by(id: log_entry.user_name).try(:id) - user ||= User.find_nobody!.try(:id) + user ||= User.find_nobody!.try(:id) # rubocop:disable Rails/SkipsModelValidations log_entry.update_attribute(user_name: user) # rubocop:enable Rails/SkipsModelValidations