Module: Notable

Defined in:
lib/notable.rb,
lib/notable/engine.rb,
lib/notable/version.rb,
app/models/notable/job.rb,
lib/notable/middleware.rb,
app/models/notable/request.rb,
lib/notable/job_extensions.rb,
lib/notable/debug_exceptions.rb,
lib/notable/validation_errors.rb,
lib/notable/unverified_request.rb,
lib/generators/notable/jobs_generator.rb,
lib/generators/notable/requests_generator.rb

Defined Under Namespace

Modules: DebugExceptions, Generators, JobExtensions, UnverifiedRequest, ValidationErrors Classes: Engine, Job, Middleware, Request

Constant Summary collapse

VERSION =
"0.2.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.enabledObject

Returns the value of attribute enabled.



20
21
22
# File 'lib/notable.rb', line 20

def enabled
  @enabled
end

.jobs_enabledObject

Returns the value of attribute jobs_enabled.



22
23
24
# File 'lib/notable.rb', line 22

def jobs_enabled
  @jobs_enabled
end

.requests_enabledObject

Returns the value of attribute requests_enabled.



21
22
23
# File 'lib/notable.rb', line 21

def requests_enabled
  @requests_enabled
end

.slow_job_thresholdObject

Returns the value of attribute slow_job_threshold.



31
32
33
# File 'lib/notable.rb', line 31

def slow_job_threshold
  @slow_job_threshold
end

.slow_request_thresholdObject

Returns the value of attribute slow_request_threshold.



27
28
29
# File 'lib/notable.rb', line 27

def slow_request_threshold
  @slow_request_threshold
end

.track_job_methodObject

jobs



30
31
32
# File 'lib/notable.rb', line 30

def track_job_method
  @track_job_method
end

.track_request_methodObject

requests



25
26
27
# File 'lib/notable.rb', line 25

def track_request_method
  @track_request_method
end

.user_methodObject

Returns the value of attribute user_method.



26
27
28
# File 'lib/notable.rb', line 26

def user_method
  @user_method
end

Class Method Details

.clear_notesObject



66
67
68
# File 'lib/notable.rb', line 66

def self.clear_notes
  RequestStore.store.delete(:notable_notes)
end

.jobs_enabled?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/notable.rb', line 41

def self.jobs_enabled?
  enabled && jobs_enabled
end

.notesObject



62
63
64
# File 'lib/notable.rb', line 62

def self.notes
  RequestStore.store[:notable_notes].to_a
end

.requests_enabled?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/notable.rb', line 37

def self.requests_enabled?
  enabled && requests_enabled
end

.track(note_type, note = nil) ⇒ Object



54
55
56
# File 'lib/notable.rb', line 54

def self.track(note_type, note = nil)
  (RequestStore.store[:notable_notes] ||= []) << {note_type: note_type, note: note}
end

.track_error(e) ⇒ Object



58
59
60
# File 'lib/notable.rb', line 58

def self.track_error(e)
  track "Error", "#{e.class.name}: #{e.message}"
end

.track_job(job, job_id, queue, created_at) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/notable.rb', line 70

def self.track_job(job, job_id, queue, created_at)
  exception = nil
  notes = nil
  start_time = Time.now
  queued_time = created_at ? start_time - created_at : nil
  begin
    yield
  rescue Exception => e
    exception = e
    track_error(e)
  ensure
    notes = Notable.notes
    Notable.clear_notes
  end
  runtime = Time.now - start_time

  Safely.safely do
    notes << {note_type: "Slow Job"} if runtime > Notable.slow_job_threshold

    notes.each do |note|
      data = {
        note_type: note[:note_type],
        note: note[:note],
        job: job,
        job_id: job_id,
        queue: queue,
        runtime: runtime,
        queued_time: queued_time
      }

      Notable.track_job_method.call(data)
    end
  end

  raise exception if exception
end