From ac3d52a66e4d405fd5adc254b4008f3ed1dd5b9d Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Mon, 27 Apr 2015 00:15:55 +0200 Subject: [PATCH] Adding Log model for database-based log messages --- app/models/log.rb | 27 ++++++++++++++++++++++++ db/migrate/20150426141106_create_logs.rb | 13 ++++++++++++ test/fixtures/logs.yml | 12 +++++++++++ test/models/log_test.rb | 9 ++++++++ 4 files changed, 61 insertions(+) create mode 100644 app/models/log.rb create mode 100644 db/migrate/20150426141106_create_logs.rb create mode 100644 test/fixtures/logs.yml create mode 100644 test/models/log_test.rb diff --git a/app/models/log.rb b/app/models/log.rb new file mode 100644 index 0000000..ba6d4a2 --- /dev/null +++ b/app/models/log.rb @@ -0,0 +1,27 @@ +require 'pry' + +class Log < ActiveRecord::Base + validates :message, presence: true + + validates :section, presence: true + validates :section, inclusion: { in: ['importer', 'upload', 'frontend'] } + + validates :level, presence: true + validates :level, inclusion: { in: ['info', 'error'] } + + def self.log(message, section='frontend', level='info') + log = Log.new + + ip_address = request.remote_ip if defined? request + token = session[:token] if defined? session + + log.message = message + log.section = section + log.level = level + log.ip_address = ip_address + log.token = token + logger.error "Could not log to database - validation errors: #{log.errors.to_a}" unless log.valid? + log.save + log + end +end diff --git a/db/migrate/20150426141106_create_logs.rb b/db/migrate/20150426141106_create_logs.rb new file mode 100644 index 0000000..3a35c9a --- /dev/null +++ b/db/migrate/20150426141106_create_logs.rb @@ -0,0 +1,13 @@ +class CreateLogs < ActiveRecord::Migration + def change + create_table :logs do |t| + t.string :message # text message + t.string :level # 'info' or 'warning' + t.string :section # 'importer' or 'upload' + t.string :token # cookie session token to track users (if available) + t.inet :ip_address # IP address of the user (if available) + + t.timestamps null: false + end + end +end diff --git a/test/fixtures/logs.yml b/test/fixtures/logs.yml new file mode 100644 index 0000000..cd242a8 --- /dev/null +++ b/test/fixtures/logs.yml @@ -0,0 +1,12 @@ +# Read about fixtures at +# http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html + +one: + message: Import of DEB archive successful. + level: info + section: importer + +two: + message: Upload of package failed. + level: error + section: upload diff --git a/test/models/log_test.rb b/test/models/log_test.rb new file mode 100644 index 0000000..9cc6362 --- /dev/null +++ b/test/models/log_test.rb @@ -0,0 +1,9 @@ +require "test_helper" + +class LogTest < ActiveSupport::TestCase + + def log + @log ||= Log.new + end + +end