diff --git a/app/services/reporting_events/metric_registry.rb b/app/services/reporting_events/metric_registry.rb index 363ebf69b..c0ed93b9b 100644 --- a/app/services/reporting_events/metric_registry.rb +++ b/app/services/reporting_events/metric_registry.rb @@ -18,6 +18,15 @@ module ReportingEvents::MetricRegistry }.freeze REPORT_METRICS = { + conversations_count: { + aggregate: :count + }.freeze, + incoming_messages_count: { + aggregate: :count + }.freeze, + outgoing_messages_count: { + aggregate: :count + }.freeze, avg_first_response_time: { raw_event_name: :first_response, rollup_metric: :first_response, @@ -65,6 +74,14 @@ module ReportingEvents::MetricRegistry REPORT_METRICS[metric.to_sym] end + def supported_metric?(metric) + report_metric(metric).present? + end + + def aggregate_for(metric) + report_metric(metric)&.dig(:aggregate) + end + def rollup_supported_metric?(metric) rollup_metric_for(metric).present? end diff --git a/spec/services/reporting_events/metric_registry_spec.rb b/spec/services/reporting_events/metric_registry_spec.rb index 9014be0d1..3a4b8d0c1 100644 --- a/spec/services/reporting_events/metric_registry_spec.rb +++ b/spec/services/reporting_events/metric_registry_spec.rb @@ -75,6 +75,12 @@ RSpec.describe ReportingEvents::MetricRegistry do end describe '.report_metric' do + it 'returns the definition for raw-only count metrics' do + expect(described_class.report_metric(:conversations_count)).to eq( + aggregate: :count + ) + end + it 'returns the definition for avg_resolution_time' do expect(described_class.report_metric(:avg_resolution_time)).to eq( raw_event_name: :conversation_resolved, @@ -93,7 +99,23 @@ RSpec.describe ReportingEvents::MetricRegistry do end it 'returns nil for unsupported metrics' do - expect(described_class.report_metric(:conversations_count)).to be_nil + expect(described_class.report_metric(:unknown_metric)).to be_nil + end + end + + describe '.supported_metric?' do + it 'returns true for supported raw-only metrics' do + expect(described_class.supported_metric?(:conversations_count)).to be(true) + end + + it 'returns false for unsupported metrics' do + expect(described_class.supported_metric?(:unknown_metric)).to be(false) + end + end + + describe '.aggregate_for' do + it 'returns the aggregate type for a supported metric' do + expect(described_class.aggregate_for(:avg_first_response_time)).to eq(:average) end end