Managing loaner chromebooks for students and teachers in the HUUSD school district.
1class MainController < ApplicationController
2 include Authenticatable
3 require "csv"
4
5 before_action :ensure_authenticated, only: [:overview, :scanner, :import]
6 before_action :ensure_super_admin, only: [:import]
7
8 def scanner
9 StatsD.increment("scanner_viewed")
10 end
11
12 def overview
13 StatsD.measure('overview.load_time') do
14 @loans = Loan.all
15 @loaners = Loaner.all
16 @borrowers = Borrower.all
17 @staff = User.all
18 @pending_loans = Loan.where(status: 'pending')
19 @loaners_out = Loaner.includes(:current_loan).where(status: 'loaned')
20
21 StatsD.increment("overview_viewed")
22 end
23 end
24
25 def temp
26 @borrower = Borrower.find(1)
27 StatsD.increment("temp_action_triggered")
28 StatsD.measure('temp.mail_sending') do
29 BorrowerMailer.notify_repair_ready(@borrower).deliver_now
30 BorrowerMailer.notify_loaner_disabled(@borrower).deliver_now
31 BorrowerMailer.return_reminder(@borrower).deliver_now
32 end
33 # Consider adding an event to log this action in a more descriptive way if needed.
34 end
35
36 def import
37 StatsD.increment("import_viewed")
38 end
39
40 def process_import
41 StatsD.increment("import_attempt")
42 if params[:csv_file].present?
43 csv_file = params[:csv_file].path
44 StatsD.measure('csv_processing_time') do
45 process_csv(csv_file)
46 end
47 StatsD.increment("import_successful")
48 flash[:notice] = 'CSV file imported successfully.'
49 redirect_to overview_path
50 else
51 StatsD.increment("import_failed")
52 flash[:alert] = 'Please select a CSV file to import.'
53 redirect_to import_path
54 end
55 end
56
57 private
58
59 def process_csv(file_path)
60 StatsD.increment("csv_processing_attempt")
61 row_count = 0
62 StatsD.measure('csv_processing_time') do
63 CSV.foreach(file_path, headers: true) do |row|
64 row_count += 1
65
66 # Create a new loaner (this needs to be adjusted based on your actual model attributes)
67 Loaner.create!(asset_tag: row['asset_tag'], serial_number: row['serial_number'], loaner_id: 100)
68 StatsD.increment("csv_row_processed")
69 end
70 end
71 # Optionally set a gauge to reflect the number of rows processed
72 StatsD.gauge('csv_row_count', row_count)
73 end
74end