Managing loaner chromebooks for students and teachers in the HUUSD school district.
at main 74 lines 2.2 kB view raw
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