mirror of
https://github.com/discourse/discourse.git
synced 2024-12-24 02:53:43 +08:00
f3a89620a1
* FEATURE: Add WebHookEventsDailyAggregate Add WebHookEventsDailyAggregate model to store daily aggregates of web hook events. Add AggregateWebHooksEvents job to aggregate web hook events daily. Add spec for WebHookEventsDailyAggregate model. * DEV: Update annotations for web_hook_events_daily_aggregate.rb * DEV: Update app/jobs/scheduled/aggregate_web_hooks_events.rb Co-authored-by: Martin Brennan <martin@discourse.org> * DEV: Address review feedback Solves: - https://github.com/discourse/discourse/pull/27542#discussion_r1646961101 - https://github.com/discourse/discourse/pull/27542#discussion_r1646958890 - https://github.com/discourse/discourse/pull/27542#discussion_r1646976808 - https://github.com/discourse/discourse/pull/27542#discussion_r1646979846 - https://github.com/discourse/discourse/pull/27542#discussion_r1646981036 * A11Y: Add translation to retain_web_hook_events_aggregate_days key * FEATURE: Purge old web hook events daily aggregate Solves: https://github.com/discourse/discourse/pull/27542#discussion_r1646961101 * DEV: Update tests for web_hook_events_daily_aggregate Update WebHookEventsDailyAggregate to not use save! at the end Solves: https://github.com/discourse/discourse/pull/27542#discussion_r1646984601 * PERF: Change job query to use WebHook table instead of WebHookEvent table * DEV: Update tests to use `fab!` * DEV: Address code review feedback. Add idempotency to job Add has_many to WebHook * DEV: add test case for job and change job query * DEV: Change AggregateWebHooksEvents job test name --------- Co-authored-by: Martin Brennan <martin@discourse.org>
22 lines
675 B
Ruby
22 lines
675 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Jobs
|
|
class AggregateWebHooksEvents < ::Jobs::Scheduled
|
|
every 1.day
|
|
|
|
def execute(args = {})
|
|
date = args[:date].present? ? args[:date] : Time.zone.now.to_date
|
|
WebHook
|
|
.joins(
|
|
"LEFT JOIN web_hook_events_daily_aggregates ON web_hooks.id = web_hook_events_daily_aggregates.web_hook_id AND web_hook_events_daily_aggregates.date = '#{date}'",
|
|
)
|
|
.where(active: true)
|
|
.where(web_hook_events_daily_aggregates: { id: nil })
|
|
.distinct
|
|
.each do |web_hook|
|
|
WebHookEventsDailyAggregate.create!(web_hook_id: web_hook.id, date: date)
|
|
end
|
|
end
|
|
end
|
|
end
|