Dirty logging to DB
This commit is contained in:
parent
f7964df0b6
commit
802fe508ea
|
@ -7,9 +7,5 @@ module Rake
|
||||||
original_execute(args)
|
original_execute(args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def stats
|
|
||||||
RakeControl::Statistics.new(name)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,18 +4,12 @@ require File.expand_path('../rake/task', __FILE__)
|
||||||
|
|
||||||
require 'rake_control/config'
|
require 'rake_control/config'
|
||||||
require 'rake_control/statistics'
|
require 'rake_control/statistics'
|
||||||
|
require 'rake_control/storage'
|
||||||
require 'rake_control/version'
|
require 'rake_control/version'
|
||||||
require 'rake_control/wrapper'
|
require 'rake_control/wrapper'
|
||||||
|
|
||||||
module RakeControl
|
module RakeControl
|
||||||
def config
|
include Config::Helper
|
||||||
@config ||= Config.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def configure
|
|
||||||
yield config if block_given?
|
|
||||||
config.apply
|
|
||||||
end
|
|
||||||
|
|
||||||
def wrap(name, description, &block)
|
def wrap(name, description, &block)
|
||||||
Wrapper.new(name, description, block).execute
|
Wrapper.new(name, description, block).execute
|
||||||
|
|
|
@ -1,27 +1,20 @@
|
||||||
module RakeControl
|
module RakeControl
|
||||||
class Config
|
class Config
|
||||||
attr_accessor :storage
|
attr_accessor :storage, # Storage backend (ActiveRecord, Mongoid, MongoMapper)
|
||||||
|
:ignored_tasks # Do not log this tasks (eg. environment task)
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
@storage = :active_record
|
@storage = :active_record
|
||||||
|
@ignored_tasks = [:environment]
|
||||||
end
|
end
|
||||||
|
|
||||||
def apply
|
module Helper
|
||||||
setup_storage_model
|
def config
|
||||||
|
@config ||= Config.new
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
def configure
|
||||||
|
yield config if block_given?
|
||||||
def setup_storage_model
|
|
||||||
case storage
|
|
||||||
when :active_record, :activerecord
|
|
||||||
require 'rake_control/storage/active_record/rake_control_run'
|
|
||||||
when :mongoid
|
|
||||||
require 'rake_control/storage/mongoid/rake_control_run'
|
|
||||||
when :mongo_mapper, :mongomapper
|
|
||||||
require 'rake_control/storage/mongo_mapper/rake_control_run'
|
|
||||||
else
|
|
||||||
raise Exception.new("Unknown storage: #{storage}")
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,23 +1,25 @@
|
||||||
module RakeControl
|
module RakeControl
|
||||||
class Statistics
|
class Statistics
|
||||||
attr_reader :name
|
attr_reader :name, :success, :execution_time
|
||||||
|
|
||||||
def initialize(name)
|
def initialize(params)
|
||||||
@name = name
|
@name = params[:name]
|
||||||
|
@success = params[:success]
|
||||||
|
@execution_time = params[:execution_time]
|
||||||
end
|
end
|
||||||
|
|
||||||
def last
|
def save
|
||||||
relation.last
|
if defined?(Rails) && Rails.respond_to?(:application) && Rails.application.present?
|
||||||
|
conf = Rails.configuration.database_configuration[Rails.env]
|
||||||
|
ActiveRecord::Base.establish_connection(conf)
|
||||||
|
Storage.run.create(name: name, success: success, execution_time: execution_time)
|
||||||
|
else
|
||||||
|
puts
|
||||||
|
puts "------------------------------------------------------------"
|
||||||
|
puts "Rails environment is not loaded. Sending output to STDOUT"
|
||||||
|
puts "Task #{name} #{success ? 'finished successfully' : 'failed'}"
|
||||||
|
puts "Execution time: #{execution_time.round(4)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def log
|
|
||||||
relation.all
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def relation
|
|
||||||
Run.where(name: name)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
module RakeControl
|
||||||
|
module Storage
|
||||||
|
def run
|
||||||
|
case RakeControl.config.storage
|
||||||
|
when :active_record, :activerecord
|
||||||
|
require 'rake_control/storage/active_record/run'
|
||||||
|
RakeControl::Storage::ActiveRecord::Run
|
||||||
|
when :mongoid
|
||||||
|
require 'rake_control/storage/mongoid/run'
|
||||||
|
RakeControl::Storage::Mongoid::Run
|
||||||
|
when :mongo_mapper, :mongomapper
|
||||||
|
require 'rake_control/storage/mongo_mapper/run'
|
||||||
|
RakeControl::Storage::MongoMapper::Run
|
||||||
|
else
|
||||||
|
raise Exception.new("Unknown storage: #{storage}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
extend self
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,5 +0,0 @@
|
||||||
module RakeControl
|
|
||||||
class Run < ActiveRecord::Base
|
|
||||||
attr_accessible :name, :success, :execution_time
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
module RakeControl
|
||||||
|
module Storage
|
||||||
|
module ActiveRecord
|
||||||
|
class Run < ::ActiveRecord::Base
|
||||||
|
self.table_name = 'rake_control_runs'
|
||||||
|
attr_accessible :name, :success, :execution_time
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,9 +0,0 @@
|
||||||
module RakeControl
|
|
||||||
class Run
|
|
||||||
include MongoMapper::Document
|
|
||||||
|
|
||||||
key :name, String
|
|
||||||
key :success, Boolean
|
|
||||||
key :execution_time, Float
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
module RakeControl
|
||||||
|
module Storage
|
||||||
|
module MongoMapper
|
||||||
|
class Run
|
||||||
|
include ::MongoMapper::Document
|
||||||
|
|
||||||
|
key :name, String
|
||||||
|
key :success, Boolean
|
||||||
|
key :execution_time, Float
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,9 +0,0 @@
|
||||||
module RakeControl
|
|
||||||
class Run
|
|
||||||
include Mongoid::Document
|
|
||||||
|
|
||||||
field :name, type: String
|
|
||||||
field :success, type: Boolean
|
|
||||||
field :execution_time, type: Float
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
module RakeControl
|
||||||
|
module Storage
|
||||||
|
module Mongoid
|
||||||
|
class Run
|
||||||
|
include ::Mongoid::Document
|
||||||
|
|
||||||
|
field :name, type: String
|
||||||
|
field :success, type: Boolean
|
||||||
|
field :execution_time, type: Float
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -10,6 +10,8 @@ module RakeControl
|
||||||
end
|
end
|
||||||
|
|
||||||
def execute
|
def execute
|
||||||
|
return block.call if ignored?
|
||||||
|
|
||||||
result = measure_time do
|
result = measure_time do
|
||||||
intercept_exceptions do
|
intercept_exceptions do
|
||||||
block.call
|
block.call
|
||||||
|
@ -39,10 +41,12 @@ module RakeControl
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def ignored?
|
||||||
|
RakeControl.config.ignored_tasks.include?(name.to_sym)
|
||||||
|
end
|
||||||
|
|
||||||
def save_statistics
|
def save_statistics
|
||||||
Run.create(name: name, success: success, execution_time: execution_time) if defined?(Run)
|
Statistics.new(name: name, success: success, execution_time: execution_time).save
|
||||||
puts "Task #{name} #{success ? 'finished successfully' : 'failed'}"
|
|
||||||
puts "Execution time: #{execution_time.round(4)}"
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,3 +5,4 @@ spec/dummy/db/*.sqlite3
|
||||||
spec/dummy/log/*.log
|
spec/dummy/log/*.log
|
||||||
spec/dummy/tmp/
|
spec/dummy/tmp/
|
||||||
spec/dummy/.sass-cache
|
spec/dummy/.sass-cache
|
||||||
|
vendor
|
||||||
|
|
|
@ -3,4 +3,4 @@ source 'http://rubygems.org'
|
||||||
gemspec
|
gemspec
|
||||||
|
|
||||||
gem 'jquery-rails'
|
gem 'jquery-rails'
|
||||||
gem 'rake_control', :path => '..'
|
gem 'rake_control', path: '..'
|
||||||
|
|
|
@ -15,9 +15,9 @@ Gem::Specification.new do |s|
|
||||||
|
|
||||||
s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.rdoc"]
|
s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.rdoc"]
|
||||||
|
|
||||||
s.add_dependency "rails", "~> 3.2.13"
|
s.add_dependency 'rails', '>= 3.2'
|
||||||
# s.add_dependency "jquery-rails"
|
s.add_development_dependency 'rake_control'
|
||||||
|
|
||||||
s.add_development_dependency "sqlite3"
|
s.add_development_dependency 'sqlite3'
|
||||||
s.add_development_dependency "rake_control"
|
s.add_development_dependency 'awesome_print'
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
RakeControl.configure do |c|
|
||||||
|
c.storage = :active_record
|
||||||
|
c.ignored_tasks = [:environment]
|
||||||
|
end
|
|
@ -0,0 +1,14 @@
|
||||||
|
class CreateRakeControlRuns < ActiveRecord::Migration
|
||||||
|
def up
|
||||||
|
create_table :rake_control_runs do |t|
|
||||||
|
t.string :name
|
||||||
|
t.boolean :success
|
||||||
|
t.float :execution_time
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
drop_table :rake_control_runs
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,24 @@
|
||||||
|
# encoding: UTF-8
|
||||||
|
# This file is auto-generated from the current state of the database. Instead
|
||||||
|
# of editing this file, please use the migrations feature of Active Record to
|
||||||
|
# incrementally modify your database, and then regenerate this schema definition.
|
||||||
|
#
|
||||||
|
# Note that this schema.rb definition is the authoritative source for your
|
||||||
|
# database schema. If you need to create the application database on another
|
||||||
|
# system, you should be using db:schema:load, not running all the migrations
|
||||||
|
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
||||||
|
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
||||||
|
#
|
||||||
|
# It's strongly recommended to check this file into your version control system.
|
||||||
|
|
||||||
|
ActiveRecord::Schema.define(:version => 20130606131532) do
|
||||||
|
|
||||||
|
create_table "rake_control_runs", :force => true do |t|
|
||||||
|
t.string "name"
|
||||||
|
t.boolean "success"
|
||||||
|
t.float "execution_time"
|
||||||
|
t.datetime "created_at", :null => false
|
||||||
|
t.datetime "updated_at", :null => false
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in New Issue