Managing loaner chromebooks for students and teachers in the HUUSD school district.
at main 133 lines 3.9 kB view raw
1class LoanersController < ApplicationController 2 include Authenticatable 3 4 before_action :set_loaner, only: [:show, :return, :enable, :disable, :repair, :broken] 5 before_action :ensure_authenticated, only: [:show, :list, :return, :enable, :disable, :repair, :broken, :new, :create] 6 before_action :ensure_super_admin, only: [:new, :create] 7 8 def new 9 StatsD.increment("loaner_new_viewed") 10 11 # Measure the time taken to render the 'new' loaner form 12 StatsD.measure('view.render_new_loaner') do 13 @loaner = Loaner.new 14 end 15 end 16 17 def create 18 StatsD.increment("loaner_create_attempt") 19 20 # Measure the time taken to create a new loaner 21 StatsD.measure('loaner.create') do 22 @loaner = Loaner.new(loaner_params) 23 if @loaner.save 24 StatsD.increment("loaner_created") 25 redirect_to @loaner, notice: 'Loaner was successfully created.' 26 else 27 StatsD.increment("loaner_create_failed") 28 render :new 29 end 30 end 31 end 32 33 def list 34 # Measure the time taken to retrieve and display all loaners 35 StatsD.measure('loaners.list_request') do 36 @loaners = Loaner.all 37 StatsD.increment("loaners_list_viewed") 38 end 39 end 40 41 def show 42 StatsD.increment("loaner_page_viewed") 43 # Measure the time taken to find and display the loaner 44 StatsD.measure('loaner.show_request') do 45 @loaner 46 @loans = @loaner.loans.order(loaned_at: :desc) 47 end 48 end 49 50 def return 51 StatsD.increment("loaner_return_attempt") 52 StatsD.measure('loaner.return_action') do 53 if @loaner.present? 54 @loaner.return! 55 StatsD.increment("loaner_returned") 56 redirect_to loaners_path, notice: "Asset checked in successfully." 57 else 58 StatsD.increment("loaner_return_failed") 59 redirect_to loaners_path, alert: "Loaner not found." 60 end 61 end 62 end 63 64 def enable 65 StatsD.increment("loaner_enable_attempt") 66 StatsD.measure('loaner.enable_action') do 67 if @loaner.present? 68 @loaner.enable! 69 StatsD.increment("loaner_enabled") 70 redirect_to loaners_path, notice: "Asset marked as enabled successfully." 71 else 72 StatsD.increment("loaner_enable_failed") 73 redirect_to loaners_path, alert: "Loaner not found." 74 end 75 end 76 end 77 78 def disable 79 StatsD.increment("loaner_disable_attempt") 80 StatsD.measure('loaner.disable_action') do 81 if @loaner.present? 82 @loaner.disable! 83 StatsD.increment("loaner_disabled") 84 redirect_to loaners_path, notice: "Asset marked as disabled successfully." 85 else 86 StatsD.increment("loaner_disable_failed") 87 redirect_to loaners_path, alert: "Loaner not found." 88 end 89 end 90 end 91 92 def broken 93 StatsD.increment("loaner_broken_attempt") 94 StatsD.measure('loaner.broken_action') do 95 if @loaner.present? 96 @loaner.broken! 97 StatsD.increment("loaner_broken") 98 redirect_to loaners_path, notice: "Asset marked as broken successfully." 99 else 100 StatsD.increment("loaner_broken_failed") 101 redirect_to loaners_path, alert: "Loaner not found." 102 end 103 end 104 end 105 106 def repair 107 StatsD.increment("loaner_repair_attempt") 108 StatsD.measure('loaner.repair_action') do 109 if @loaner.present? 110 @loaner.repair! 111 StatsD.increment("loaner_repaired") 112 redirect_to loaners_path, notice: "Asset marked as repaired successfully." 113 else 114 StatsD.increment("loaner_repair_failed") 115 redirect_to loaners_path, alert: "Loaner not found." 116 end 117 end 118 end 119 120 private 121 122 # Use callbacks to share common setup or constraints between actions. 123 def set_loaner 124 StatsD.measure('loaner.find') do 125 @loaner = Loaner.find(params[:id]) 126 end 127 end 128 129 def loaner_params 130 params.require(:loaner).permit(:asset_tag, :serial_number, :status) 131 end 132 133end