Class: Railswatch::Gems::RakeExt

Inherits:
Object
  • Object
show all
Defined in:
lib/railswatch/gems/rake_ext.rb

Class Method Summary collapse

Class Method Details

.build_rake_record(task, args, started_at, status) ⇒ Object



57
58
59
60
61
62
63
64
65
# File 'lib/railswatch/gems/rake_ext.rb', line 57

def build_rake_record(task, args, started_at, status)
  Railswatch::Models::RakeRecord.new(
    task: resolved_task_name(task, args),
    datetime: started_at.strftime(Railswatch::FORMAT),
    datetimei: started_at.to_i,
    duration: (Railswatch::Utils.time - started_at) * 1000,
    status: status
  )
end

.find_task_name(*args) ⇒ Object



31
32
33
# File 'lib/railswatch/gems/rake_ext.rb', line 31

def find_task_name(*args)
  (ARGV + args).compact
end

.initObject

rubocop:disable Metrics/MethodLength



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/railswatch/gems/rake_ext.rb', line 7

def init # rubocop:disable Metrics/MethodLength
  ::Rake::Task.class_eval do
    next if method_defined?(:invoke_with_railswatch)

    def invoke_with_railswatch(*args)
      now = Railswatch::Utils.time
      status = 'success'
      invoke_without_new_railswatch(*args)
    rescue Exception => e # rubocop:disable Lint/RescueException
      status = 'error'
      raise(e)
    ensure
      Railswatch::Gems::RakeExt.store_invocation(self, args, now, status)
    end

    alias_method :invoke_without_new_railswatch, :invoke
    alias_method :invoke, :invoke_with_railswatch

    def invoke(*args) # rubocop:disable Lint/DuplicateMethods
      invoke_with_railswatch(*args)
    end
  end
end

.monitoring_storage_available?Boolean

Returns:

  • (Boolean)


49
50
51
52
53
54
55
# File 'lib/railswatch/gems/rake_ext.rb', line 49

def monitoring_storage_available?
  Railswatch::Models::RakeRecord.connection.data_source_exists?(
    Railswatch::Models::RakeRecord.table_name
  )
rescue ActiveRecord::NoDatabaseError, ActiveRecord::StatementInvalid
  false
end

.resolved_task_name(task, args) ⇒ Object



44
45
46
47
# File 'lib/railswatch/gems/rake_ext.rb', line 44

def resolved_task_name(task, args)
  task_info = find_task_name(*args)
  task_info.empty? ? [task.name] : task_info
end

.store_invocation(task, args, started_at, status) ⇒ Object



35
36
37
38
39
40
41
42
# File 'lib/railswatch/gems/rake_ext.rb', line 35

def store_invocation(task, args, started_at, status)
  return if Railswatch.skipable_rake_tasks.include?(task.name)
  return unless monitoring_storage_available?

  build_rake_record(task, args, started_at, status).save
ensure
  CurrentRequest.cleanup
end