Module: LlmCostTracker::Ledger::Rollups
- Defined in:
- lib/llm_cost_tracker/ledger/rollups.rb
Class Method Summary collapse
- .decrement!(records) ⇒ Object
- .increment!(events) ⇒ Object
- .increment_safely!(events) ⇒ Object
- .rebuild! ⇒ Object
Class Method Details
.decrement!(records) ⇒ Object
43 44 45 46 47 48 |
# File 'lib/llm_cost_tracker/ledger/rollups.rb', line 43 def decrement!(records) buckets = bucket_totals(records) return if buckets.empty? LlmCostTracker::CallRollup.decrement(buckets) end |
.increment!(events) ⇒ Object
11 12 13 14 15 16 |
# File 'lib/llm_cost_tracker/ledger/rollups.rb', line 11 def increment!(events) events = Array(events).select(&:total_cost) return if events.empty? LlmCostTracker::CallRollup.increment_all(period_rows_for_events(events)) end |
.increment_safely!(events) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/llm_cost_tracker/ledger/rollups.rb', line 23 def increment_safely!(events) attempt = 0 begin attempt += 1 increment!(events) rescue StandardError => e raise if LlmCostTracker::Call.connection.open_transactions.positive? if attempt < ROLLUP_INCREMENT_ATTEMPTS sleep(ROLLUP_INCREMENT_BASE_DELAY_SECONDS * (2**(attempt - 1))) retry end LlmCostTracker::Logging.warn( "Rollup increment failed for #{events.size} events after #{attempt} attempts: " \ "#{e.class}: #{e.}" ) end end |
.rebuild! ⇒ Object
50 51 52 53 54 55 56 57 58 59 |
# File 'lib/llm_cost_tracker/ledger/rollups.rb', line 50 def rebuild! accumulated = accumulate_priced_calls LlmCostTracker::CallRollup.transaction do LlmCostTracker::CallRollup.delete_all rows_from_buckets(accumulated).each_slice(REBUILD_INSERT_SLICE) do |rows| LlmCostTracker::CallRollup.increment_all(rows) end end accumulated.size end |