Managing loaner chromebooks for students and teachers in the HUUSD school district.
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