Module: DecisionAgent::Dsl::Operators::RateOperators
- Defined in:
- lib/decision_agent/dsl/operators/rate_operators.rb
Overview
Handles rate calculation operators: rate_per_second, rate_per_minute, rate_per_hour
Class Method Summary collapse
-
.compare_rate_result(actual, expected) ⇒ Object
Compare rate result.
- .handle(op, actual_value, expected_value) ⇒ Object
Class Method Details
.compare_rate_result(actual, expected) ⇒ Object
Compare rate result
59 60 61 |
# File 'lib/decision_agent/dsl/operators/rate_operators.rb', line 59 def self.compare_rate_result(actual, expected) ConditionEvaluator.compare_rate_result(actual, expected) end |
.handle(op, actual_value, expected_value) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/decision_agent/dsl/operators/rate_operators.rb', line 8 def self.handle(op, actual_value, expected_value) case op when "rate_per_second" # Calculates rate per second from array of timestamps return false unless actual_value.is_a?(Array) return false if actual_value.empty? = actual_value.map { |ts| ConditionEvaluator.parse_date(ts) }.compact return false if .size < 2 = .sort time_span = .last - .first return false if time_span <= 0 rate = .size.to_f / time_span compare_rate_result(rate, expected_value) when "rate_per_minute" # Calculates rate per minute from array of timestamps return false unless actual_value.is_a?(Array) return false if actual_value.empty? = actual_value.map { |ts| ConditionEvaluator.parse_date(ts) }.compact return false if .size < 2 = .sort time_span = .last - .first return false if time_span <= 0 rate = (.size.to_f / time_span) * 60.0 compare_rate_result(rate, expected_value) when "rate_per_hour" # Calculates rate per hour from array of timestamps return false unless actual_value.is_a?(Array) return false if actual_value.empty? = actual_value.map { |ts| ConditionEvaluator.parse_date(ts) }.compact return false if .size < 2 = .sort time_span = .last - .first return false if time_span <= 0 rate = (.size.to_f / time_span) * 3600.0 compare_rate_result(rate, expected_value) end # Returns nil if not handled by this module end |