Added mac logs, improved mac editing/viewing

This commit is contained in:
Will Bradley 2013-02-01 00:06:13 -07:00
parent 04764af983
commit f3498ddcac
14 changed files with 98 additions and 27 deletions

View File

@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

View File

@ -0,0 +1,3 @@
// Place all the styles related to the MacLogs controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@ -0,0 +1,7 @@
class MacLogsController < ApplicationController
def index
@mac_logs = MacLog.desc.limit(1000)
end
end

View File

@ -8,7 +8,8 @@ def index
@active_macs = Mac.where(:active => true, :hidden => false) @active_macs = Mac.where(:active => true, :hidden => false)
@active_macs += Mac.where(:active => true, :hidden => nil) @active_macs += Mac.where(:active => true, :hidden => nil)
@hidden_macs = Mac.where(:active => true, :hidden => true) @hidden_macs = Mac.where(:active => true, :hidden => true)
@inactive_macs = Mac.where(:active => false)
@all_macs = Mac.find(:all, :order => "LOWER(mac)")
end end
# GET /macs/1 # GET /macs/1
@ -45,8 +46,7 @@ end
def create def create
@mac = Mac.new(params[:mac]) @mac = Mac.new(params[:mac])
@mac.user_id = params[:user_id] @mac.user_id = params[:user_id]
@users = User.all.sort_by(&:name)
Rails.logger.info @macs.inspect
respond_to do |format| respond_to do |format|
if @mac.save if @mac.save
@ -64,11 +64,11 @@ end
def update def update
#Log who updated this #Log who updated this
@mac = Mac.find(params[:id]) @mac = Mac.find(params[:id])
@users = User.all.sort_by(&:name)
respond_to do |format| respond_to do |format|
if @mac.update_attributes(params[:mac]) if @mac.update_attributes(params[:mac])
Rails.logger.info @mac.inspect format.html { redirect_to macs_path, :notice => 'Mac was successfully updated.' }
format.html { redirect_to macs_path, :notice => 'User certification was successfully updated.' }
format.json { head :no_content } format.json { head :no_content }
else else
format.html { render :action => "edit" } format.html { render :action => "edit" }
@ -153,8 +153,7 @@ Rails.logger.info "starting scan..."
# Scan the existing macs and update each record as necessary # Scan the existing macs and update each record as necessary
Mac.find(:all).each { |entry| Mac.find(:all).each { |entry|
Rails.logger.info "Existing MAC: "+entry.inspect mac = entry.mac.downcase
mac = entry.mac
ip = entry.ip ip = entry.ip
if macs.has_key?(mac) if macs.has_key?(mac)
if ! entry.active || ! entry.since if ! entry.active || ! entry.since
@ -185,7 +184,7 @@ Rails.logger.info "starting scan..."
macs.each { |mac, ip| macs.each { |mac, ip|
Rails.logger.info "Activating new entry #{mac} at #{ip}" if options[:verbose] Rails.logger.info "Activating new entry #{mac} at #{ip}" if options[:verbose]
Mac.new(:mac => mac, :ip => ip, :active => 1, :since => Time.now, :refreshed => Time.now).save Mac.new(:mac => mac, :ip => ip, :active => 1, :since => Time.now, :refreshed => Time.now).save
MacLog.new(:mac => mac, :ip => ip, :action => "activate").save Rails.logger.info MacLog.new(:mac => mac, :ip => ip, :action => "activate").save
} }
@log = MacLog.all @log = MacLog.all
@ -193,4 +192,19 @@ Rails.logger.info "starting scan..."
end #def scan end #def scan
def import
require 'csv'
csv_text = File.read('mac_log.csv')
csv = CSV.parse(csv_text)
@output = []
csv.each do |row|
@output += [row[1], Mac.create({:mac => row[0], :note => row[1], :hidden => row[2]}) ]
end
end
end end

View File

@ -0,0 +1,2 @@
module MacLogsHelper
end

View File

@ -1,4 +1,6 @@
class Mac < ActiveRecord::Base class Mac < ActiveRecord::Base
belongs_to :user belongs_to :user
attr_accessible :active, :ip, :mac, :refreshed, :since, :hidden, :note, :user_id attr_accessible :active, :ip, :mac, :refreshed, :since, :hidden, :note, :user_id
validates_uniqueness_of :mac, :case_sensitive => false
end end

View File

@ -1,3 +1,5 @@
class MacLog < ActiveRecord::Base class MacLog < ActiveRecord::Base
attr_accessible :action, :ip, :mac attr_accessible :action, :ip, :mac
scope :desc, order("mac_logs.created_at DESC")
end end

View File

@ -0,0 +1,10 @@
<table>
<% @mac_logs.each do |mac_log| %>
<tr>
<td><%= mac_log.mac %></td>
<td><%= mac_log.ip %></td>
<td><%= mac_log.action %></td>
<td><%= mac_log.created_at %></td>
</tr>
<% end %>
</table>

View File

@ -0,0 +1 @@
<%= @output %>

View File

@ -1,29 +1,42 @@
<h2>What machines are on our network?</h2> <h2>What machines are on our network?</h2>
<%= link_to "New Mac", new_mac_path %>
<ul>
<% @active_macs.each do |mac| %> <% @active_macs.each do |mac| %>
<li>
<%= mac.user.name unless mac.user.blank? %> <%= mac.user.name unless mac.user.blank? %>
<%= mac.mac if mac.user.blank? %> <!-- <%= mac.mac if mac.user.blank? && mac.note.blank? %>
<%= mac.since %>, <%= mac.note if mac.user.blank? %> -
<%= mac.refreshed %>, <%= ((Time.now - mac.since) / 1.hour).round(1).to_s+" hours" %> |
<%= mac.active %>--> |
<%= link_to 'Edit', edit_mac_path(mac) %> <br/> <%= link_to 'Edit', edit_mac_path(mac) %> <br/>
</li>
<% end %> <% end %>
<hr> </ul>
<ul style="display: none;">
<% @hidden_macs.each do |mac| %> <% @hidden_macs.each do |mac| %>
<li>
<%= mac.user.name unless mac.user.blank? %>
<%= mac.mac if mac.user.blank? && mac.note.blank? %>
<%= mac.note if mac.user.blank? %> -
<%= ((Time.now - mac.since) / 1.hour).round(1).to_s+" hours" %> |
<%= link_to 'Edit', edit_mac_path(mac) %> <br/>
</li>
<% end %>
</ul>
<!--
<% @all_macs.each do |mac| %>
<%= '<span class="hidden">' if mac.hidden? %>
<%= mac.mac.downcase %>
(<%= mac.note %>)
<%= mac.user.name unless mac.user.blank? %> <%= mac.user.name unless mac.user.blank? %>
<%= mac.mac if mac.user.blank? %>
(<%= mac.note %>) <!--
<%= mac.since %>, <%= mac.since %>,
<%= mac.refreshed %>, <%= mac.refreshed %>,
<%= mac.active %>--> | <%= mac.active %> |
<%= link_to 'Edit', edit_mac_path(mac) %> <br/>
<% end %>
<hr>
<% @inactive_macs.each do |mac| %>
<%= mac.user.name unless mac.user.blank? %>
<%= mac.mac if mac.user.blank? %>
(<%= mac.note %>) <!--
<%= mac.since %>,
<%= mac.refreshed %>,
<%= mac.active %>--> |
<%= link_to 'Edit', edit_mac_path(mac) %> <br/> <%= link_to 'Edit', edit_mac_path(mac) %> <br/>
<%= '</span>' if mac.hidden? %>
<% end %> <% end %>
-->

View File

@ -22,4 +22,4 @@ production:
adapter: sqlite3 adapter: sqlite3
database: db/production.sqlite3 database: db/production.sqlite3
pool: 5 pool: 5
timeout: 5000 timeout: 300000

View File

@ -28,8 +28,11 @@ Dooraccess::Application.routes.draw do
match 'door_logs/auto_download' => 'door_logs#auto_download', :as => :auto_download match 'door_logs/auto_download' => 'door_logs#auto_download', :as => :auto_download
match 'macs/scan' => 'macs#scan' match 'macs/scan' => 'macs#scan'
match 'macs/import' => 'macs#import'
resources :macs resources :macs
resources :mac_logs
root :to => "home#index" root :to => "home#index"
# The priority is based upon order of creation: # The priority is based upon order of creation:

View File

@ -0,0 +1,7 @@
require 'test_helper'
class MacLogsControllerTest < ActionController::TestCase
# test "the truth" do
# assert true
# end
end

View File

@ -0,0 +1,4 @@
require 'test_helper'
class MacLogsHelperTest < ActionView::TestCase
end