Timestamp in UTC, abstract storage
This commit is contained in:
@@ -10,12 +10,12 @@ module Burden
|
||||
@ignored_tasks = [/environment/]
|
||||
end
|
||||
|
||||
def trigger_success_callback(name, execution_time)
|
||||
on_success.send(name, execution_time) unless on_success.nil?
|
||||
def trigger_success_callback(name, execution_time, timestamp)
|
||||
on_success.send(name, execution_time, timestamp) unless on_success.nil?
|
||||
end
|
||||
|
||||
def trigger_failure_callback(name, execution_time)
|
||||
on_failure.send(name, execution_time) unless on_failure.nil?
|
||||
def trigger_failure_callback(name, execution_time, timestamp)
|
||||
on_failure.send(name, execution_time, timestamp) unless on_failure.nil?
|
||||
end
|
||||
|
||||
module Helper
|
||||
|
||||
@@ -1,25 +1,41 @@
|
||||
module Burden
|
||||
class Statistics
|
||||
attr_reader :name, :success, :execution_time
|
||||
attr_reader :name, :success, :execution_time, :timestamp
|
||||
|
||||
def initialize(params)
|
||||
@name = params[:name]
|
||||
@success = params[:success]
|
||||
@execution_time = params[:execution_time]
|
||||
@timestamp = params[:timestamp]
|
||||
end
|
||||
|
||||
def save
|
||||
if defined?(Rails) && Rails.respond_to?(:application) && Rails.application.present?
|
||||
# FIXME: Dirty stuff
|
||||
conf = Rails.configuration.database_configuration[Rails.env]
|
||||
ActiveRecord::Base.establish_connection(conf)
|
||||
Storage.run.create(name: name, success: success, execution_time: execution_time)
|
||||
|
||||
begin
|
||||
Storage.run.create(name: name, success: success, execution_time: execution_time, timestamp: timestamp)
|
||||
rescue
|
||||
log_to_stdout(:failed)
|
||||
end
|
||||
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)}"
|
||||
log_to_stdout(:no_rails)
|
||||
end
|
||||
end
|
||||
|
||||
def log_to_stdout(reason = :no_rails)
|
||||
puts
|
||||
puts "------------------------------------------------------------"
|
||||
case reason
|
||||
when :no_rails
|
||||
puts "Rails environment is not loaded. Sending output to STDOUT"
|
||||
when :failed
|
||||
puts "Failed to persist this run. Sending output to STDOUT"
|
||||
end
|
||||
puts "Task #{name} #{success ? 'finished successfully' : 'failed'}"
|
||||
puts "Execution time: #{execution_time.round(4)}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
module Burden
|
||||
module Storage
|
||||
module Abstract
|
||||
class Run
|
||||
attr_accessor :name, :success, :execution_time, :timestamp
|
||||
|
||||
def initialize(attributes = {})
|
||||
@name = attributes[:name]
|
||||
@success = attributes[:success]
|
||||
@execution_time = attributes[:execution_time]
|
||||
@timestamp = attributes[:timestamp]
|
||||
end
|
||||
|
||||
def save
|
||||
raise NotImplementedError.new('Method #save must be overwritten')
|
||||
end
|
||||
|
||||
def summary
|
||||
raise NotImplementedError.new('Method #summary must be overwritten')
|
||||
end
|
||||
|
||||
def history(task_name)
|
||||
raise NotImplementedError.new('Method #history must be overwritten')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -3,9 +3,10 @@ module Burden
|
||||
module ActiveRecord
|
||||
class Run < ::ActiveRecord::Base
|
||||
self.table_name = 'burden_runs'
|
||||
attr_accessible :name, :success, :execution_time
|
||||
attr_accessible :name, :success, :execution_time, :timestamp
|
||||
|
||||
scope :summary, ->{ order('created_at desc').group(:name) }
|
||||
scope :summary, ->{ order('timestamp desc').group(:name) }
|
||||
scope :history, ->(task_name){ where(name: task_name).order('timestamp desc').limit(100) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -8,8 +8,10 @@ module Burden
|
||||
key :name, String
|
||||
key :success, Boolean
|
||||
key :execution_time, Float
|
||||
key :timestamp, Time
|
||||
|
||||
scope :summary, ->{ sort(:created_at.desc).group_by(&:name) }
|
||||
scope :summary, ->{ sort(:timestamp.desc).group_by(&:name) }
|
||||
scope :history, ->(task_name){ where(name: task_name).sort(:timestamp.desc).group_by(&:name) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -8,8 +8,10 @@ module Burden
|
||||
field :name, type: String
|
||||
field :success, type: Boolean
|
||||
field :execution_time, type: Float
|
||||
field :timestamp, type: Time
|
||||
|
||||
scope :summary, ->{ sort(created_at: -1).group_by(&:name) }
|
||||
scope :summary, ->{ sort(timestamp: -1).group_by(&:name) }
|
||||
scope :history, ->(task_name){ where(name: task_name).sort(timestamp: -1).group_by(&:name) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
module Burden
|
||||
class Wrapper
|
||||
attr_reader :name, :description, :block, :success, :exception, :execution_time
|
||||
attr_reader :name, :block, :success, :exception, :execution_time, :timestamp
|
||||
|
||||
def initialize(name, description, block)
|
||||
def initialize(name, block)
|
||||
@name = name
|
||||
@description = description
|
||||
@block = block
|
||||
@success = true
|
||||
@timestamp = Time.now.utc
|
||||
end
|
||||
|
||||
def execute
|
||||
@@ -20,11 +20,11 @@ module Burden
|
||||
save_statistics
|
||||
|
||||
unless success
|
||||
Burden.config.trigger_failure_callback(name, execution_time)
|
||||
Burden.config.trigger_failure_callback(name, execution_time, timestamp)
|
||||
raise(exception)
|
||||
end
|
||||
|
||||
Burden.config.trigger_success_callback(name, execution_time)
|
||||
Burden.config.trigger_success_callback(name, execution_time, timestamp)
|
||||
result
|
||||
end
|
||||
|
||||
@@ -52,7 +52,7 @@ module Burden
|
||||
end
|
||||
|
||||
def save_statistics
|
||||
Statistics.new(name: name, success: success, execution_time: execution_time).save
|
||||
Statistics.new(name: name, success: success, execution_time: execution_time, timestamp: timestamp).save
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -4,7 +4,7 @@ class CreateBurdenRuns < ActiveRecord::Migration
|
||||
t.string :name
|
||||
t.boolean :success
|
||||
t.float :execution_time
|
||||
t.timestamps
|
||||
t.datetime :timestamp
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user