mirror of
https://github.com/discourse/discourse.git
synced 2025-02-12 02:11:44 +08:00
d4d3580761
Previously cached counting made redis calls in main thread and performed the flush in main thread. This could lead to pathological states in extreme heavy load. This refactor reduces load and cleans up the interface
48 lines
986 B
Ruby
48 lines
986 B
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
describe ApplicationRequest do
|
|
before do
|
|
ApplicationRequest.enable
|
|
CachedCounting.reset
|
|
CachedCounting.enable
|
|
end
|
|
|
|
after do
|
|
ApplicationRequest.disable
|
|
CachedCounting.disable
|
|
end
|
|
|
|
def inc(key)
|
|
ApplicationRequest.increment!(key)
|
|
end
|
|
|
|
it "can log app requests" do
|
|
freeze_time
|
|
d1 = Time.now.utc.to_date
|
|
|
|
4.times do
|
|
inc("http_2xx")
|
|
end
|
|
|
|
inc("http_background")
|
|
|
|
freeze_time 1.day.from_now
|
|
d2 = Time.now.utc.to_date
|
|
|
|
inc("page_view_crawler")
|
|
inc("http_2xx")
|
|
|
|
CachedCounting.flush
|
|
|
|
expect(ApplicationRequest.find_by(date: d1, req_type: "http_2xx").count).to eq(4)
|
|
expect(ApplicationRequest.find_by(date: d1, req_type: "http_background").count).to eq(1)
|
|
|
|
expect(ApplicationRequest.find_by(date: d2, req_type: "page_view_crawler").count).to eq(1)
|
|
expect(ApplicationRequest.find_by(date: d2, req_type: "http_2xx").count).to eq(1)
|
|
|
|
end
|
|
|
|
end
|