Class: NurseAndrea::ComponentTelemetry
- Inherits:
-
Object
- Object
- NurseAndrea::ComponentTelemetry
- Defined in:
- lib/nurse_andrea/component_telemetry.rb
Instance Attribute Summary collapse
-
#cache ⇒ Object
readonly
Returns the value of attribute cache.
-
#db ⇒ Object
readonly
Returns the value of attribute db.
-
#jobs ⇒ Object
readonly
Returns the value of attribute jobs.
Instance Method Summary collapse
-
#initialize ⇒ ComponentTelemetry
constructor
A new instance of ComponentTelemetry.
- #record_cache_delete ⇒ Object
- #record_cache_read(hit:) ⇒ Object
- #record_cache_write ⇒ Object
- #record_job_complete(duration_ms:, queue_name: nil) ⇒ Object
- #record_job_enqueue(queue_name: nil) ⇒ Object
- #record_job_fail(queue_name: nil) ⇒ Object
- #record_query(duration_ms:, table: nil) ⇒ Object
- #record_transaction(outcome:) ⇒ Object
- #snapshot_and_reset! ⇒ Object
Constructor Details
#initialize ⇒ ComponentTelemetry
Returns a new instance of ComponentTelemetry.
11 12 13 |
# File 'lib/nurse_andrea/component_telemetry.rb', line 11 def initialize reset! end |
Instance Attribute Details
#cache ⇒ Object (readonly)
Returns the value of attribute cache.
9 10 11 |
# File 'lib/nurse_andrea/component_telemetry.rb', line 9 def cache @cache end |
#db ⇒ Object (readonly)
Returns the value of attribute db.
9 10 11 |
# File 'lib/nurse_andrea/component_telemetry.rb', line 9 def db @db end |
#jobs ⇒ Object (readonly)
Returns the value of attribute jobs.
9 10 11 |
# File 'lib/nurse_andrea/component_telemetry.rb', line 9 def jobs @jobs end |
Instance Method Details
#record_cache_delete ⇒ Object
36 37 38 |
# File 'lib/nurse_andrea/component_telemetry.rb', line 36 def record_cache_delete @cache[:delete_count] += 1 end |
#record_cache_read(hit:) ⇒ Object
27 28 29 30 |
# File 'lib/nurse_andrea/component_telemetry.rb', line 27 def record_cache_read(hit:) @cache[:read_count] += 1 hit ? @cache[:hit_count] += 1 : @cache[:miss_count] += 1 end |
#record_cache_write ⇒ Object
32 33 34 |
# File 'lib/nurse_andrea/component_telemetry.rb', line 32 def record_cache_write @cache[:write_count] += 1 end |
#record_job_complete(duration_ms:, queue_name: nil) ⇒ Object
40 41 42 43 44 |
# File 'lib/nurse_andrea/component_telemetry.rb', line 40 def record_job_complete(duration_ms:, queue_name: nil) @jobs[:complete_count] += 1 @jobs[:total_duration_ms] += duration_ms @jobs[:queue_names].add(queue_name) if queue_name.present? end |
#record_job_enqueue(queue_name: nil) ⇒ Object
46 47 48 49 |
# File 'lib/nurse_andrea/component_telemetry.rb', line 46 def record_job_enqueue(queue_name: nil) @jobs[:enqueue_count] += 1 @jobs[:queue_names].add(queue_name) if queue_name.present? end |
#record_job_fail(queue_name: nil) ⇒ Object
51 52 53 54 |
# File 'lib/nurse_andrea/component_telemetry.rb', line 51 def record_job_fail(queue_name: nil) @jobs[:fail_count] += 1 @jobs[:queue_names].add(queue_name) if queue_name.present? end |
#record_query(duration_ms:, table: nil) ⇒ Object
15 16 17 18 19 20 |
# File 'lib/nurse_andrea/component_telemetry.rb', line 15 def record_query(duration_ms:, table: nil) @db[:query_count] += 1 @db[:total_duration_ms] += duration_ms @db[:slow_query_count] += 1 if duration_ms > 100 @db[:tables_accessed].add(table) if table.present? end |
#record_transaction(outcome:) ⇒ Object
22 23 24 25 |
# File 'lib/nurse_andrea/component_telemetry.rb', line 22 def record_transaction(outcome:) @db[:transaction_count] += 1 @db[:rollback_count] += 1 if outcome.to_s == "rollback" end |
#snapshot_and_reset! ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 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 |
# File 'lib/nurse_andrea/component_telemetry.rb', line 56 def snapshot_and_reset! metrics = [] if @db[:query_count] > 0 metrics << { type: "database", tech: @db[:tech], interval_ms: NurseAndrea.config.hook_interval_ms, query_count: @db[:query_count], slow_query_count: @db[:slow_query_count], total_duration_ms: @db[:total_duration_ms].round(2), tables_accessed: @db[:tables_accessed].to_a, transaction_count: @db[:transaction_count], rollback_count: @db[:rollback_count], error_count: 0 } end if @cache[:read_count] > 0 || @cache[:write_count] > 0 metrics << { type: "cache", tech: @cache[:tech], interval_ms: NurseAndrea.config.hook_interval_ms, read_count: @cache[:read_count], write_count: @cache[:write_count], hit_count: @cache[:hit_count], miss_count: @cache[:miss_count], delete_count: @cache[:delete_count], total_duration_ms: 0, error_count: 0 } end if @jobs[:enqueue_count] > 0 || @jobs[:complete_count] > 0 metrics << { type: "queue", tech: @jobs[:tech], interval_ms: NurseAndrea.config.hook_interval_ms, enqueue_count: @jobs[:enqueue_count], complete_count: @jobs[:complete_count], fail_count: @jobs[:fail_count], total_duration_ms: @jobs[:total_duration_ms].round(2), queue_names: @jobs[:queue_names].to_a, retry_count: 0, error_count: 0 } end reset! metrics end |