openSUSE/open-build-service

View on GitHub
src/api/app/controllers/webui/projects/pulse_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
F
39%
module Webui
  module Projects
    class PulseController < WebuiController
      before_action :lockout_spiders, only: [:show]
      before_action :set_project
      before_action :set_range
      before_action :set_pulse

      def show
        @pulse = @project.project_log_entries.page(params[:page])
      end

      private

      def set_range
        @range = params[:range] == 'month' ? 'month' : 'week'
      end

      def set_pulse
        range = case @range
                when 'month'
                  1.month.ago..Date.tomorrow
                else
                  1.week.ago..Date.tomorrow
                end

        pulse = @project.project_log_entries.where(datetime: range).order(datetime: :asc)
        @builds = pulse.where(event_type: %i[build_fail build_success]).where(datetime: 24.hours.ago..Time.zone.now)
        @new_packages = pulse.where(event_type: :create_package)
        @deleted_packages = pulse.where(event_type: :delete_package)
        @branches = pulse.where(event_type: :branch_command)
        @commits = pulse.where(event_type: :commit)
        @updates = pulse.where(event_type: :version_change)
        @comments = pulse.where(event_type: %i[comment_for_package comment_for_project])
        @project_changes = pulse.where(event_type: %i[update_project update_project_config])

        @requests = @project.target_of_bs_requests.where(updated_at: range).order(updated_at: :desc)
        # group by state, sort by value...
        @requests_by_state = @requests.group(:state).count.sort_by { |_, v| -v }.to_h
        # transpose to percentages
        @requests_by_percentage = @requests_by_state.each_with_object({}) { |(k, v), hash| hash[k] = (v * 100.0 / @requests_by_state.values.sum).round.to_s } if @requests_by_state.any?
      end
    end
  end
end