Skip to content

Commit

Permalink
Add expression caching
Browse files Browse the repository at this point in the history
  • Loading branch information
nudded committed Oct 21, 2024
1 parent 121c83e commit 9d36ae0
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
3 changes: 3 additions & 0 deletions app/services/billable_metrics/update_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ def call
billable_metric.recurring = params[:recurring] if params.key?(:recurring)
billable_metric.weighted_interval = params[:weighted_interval]&.to_sym if params.key?(:weighted_interval)
billable_metric.expression = params[:expression] if params.key?(:expression)
if params.key?(:expression) || params.key?(:field_name)
Rails.cache.delete("expression/#{organization.id}/#{billable_metric.code}")
end
end

billable_metric.save!
Expand Down
11 changes: 7 additions & 4 deletions app/services/events/create_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,16 @@ def call
attr_reader :organization, :params, :timestamp, :metadata

def pre_ingest(event)
bm = organization.billable_metrics.with_expression.find_by(code: event.code)
return unless bm
field_name, expression = Rails.cache.fetch("expression/#{organization.id}/#{event.code}") do
bm = organization.billable_metrics.with_expression.find_by(code: event.code)
[bm&.field_name, bm&.expression]
end
return if expression.blank?

evaluation_event = Lago::Event.new(event.code, event.timestamp.to_i, event.properties)

value = Lago::ExpressionParser.parse(bm.expression)&.evaluate(evaluation_event)
event.properties[bm.field_name] = value
value = Lago::ExpressionParser.parse(expression).evaluate(evaluation_event)
event.properties[field_name] = value
end

def produce_kafka_event(event)
Expand Down

0 comments on commit 9d36ae0

Please sign in to comment.