mirror of
https://github.com/discourse/discourse.git
synced 2024-11-26 05:43:44 +08:00
52 lines
1.5 KiB
Ruby
52 lines
1.5 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
class WebHookEventsDailyAggregate < ActiveRecord::Base
|
||
|
belongs_to :web_hook
|
||
|
|
||
|
default_scope { order("created_at DESC") }
|
||
|
before_create :aggregate!
|
||
|
|
||
|
def self.purge_old
|
||
|
where("created_at < ?", SiteSetting.retain_web_hook_events_aggregate_days.days.ago).delete_all
|
||
|
end
|
||
|
|
||
|
def self.by_day(start_date, end_date, web_hook_id = nil)
|
||
|
result = where("date >= ? AND date <= ?", start_date.to_date, end_date.to_date)
|
||
|
result = result.where(web_hook_id: web_hook_id) if web_hook_id
|
||
|
result
|
||
|
end
|
||
|
|
||
|
def aggregate!
|
||
|
events =
|
||
|
WebHookEvent.where(
|
||
|
"created_at >= ? AND created_at < ? AND web_hook_id = ?",
|
||
|
self.date,
|
||
|
self.date + 1.day,
|
||
|
self.web_hook_id,
|
||
|
)
|
||
|
|
||
|
self.mean_duration = events.sum(:duration) / events.count
|
||
|
|
||
|
self.successful_event_count = events.where("status >= 200 AND status <= 299").count
|
||
|
self.failed_event_count = events.where("status < 200 OR status > 299").count
|
||
|
end
|
||
|
end
|
||
|
|
||
|
# == Schema Information
|
||
|
#
|
||
|
# Table name: web_hook_events_daily_aggregates
|
||
|
#
|
||
|
# id :bigint not null, primary key
|
||
|
# web_hook_id :bigint not null
|
||
|
# date :date
|
||
|
# successful_event_count :integer
|
||
|
# failed_event_count :integer
|
||
|
# mean_duration :integer default(0)
|
||
|
# created_at :datetime not null
|
||
|
# updated_at :datetime not null
|
||
|
#
|
||
|
# Indexes
|
||
|
#
|
||
|
# index_web_hook_events_daily_aggregates_on_web_hook_id (web_hook_id)
|
||
|
#
|